
Open SWE: 내부 코딩 에이전트를 위한 오픈 소스 프레임워크
요약
Open SWE는 Stripe, Ramp, Coinbase와 같은 기업들이 구축한 내부 코딩 에이전트의 공통적인 아키텍처 패턴을 구현한 오픈 소스 프레임워크입니다. Deep Agents와 LangGraph를 기반으로 하며, 격리된 샌드박스, 큐레이션된 도구 세트, 하위 에이전트 오케스트레이션 등 프로덕션 환경에 필수적인 구성 요소를 제공합니다.
핵심 포인트
- 격리된 클라우드 샌드박스를 통해 에이전트 실행의 안전성과 영향 범위 제한을 보장합니다.
- 단순한 도구 축적이 아닌, 신중하게 선택되고 유지 관리되는 큐레이션된 도구 세트가 중요합니다.
- Slack과 같은 기존 워크플로에 통합하여 개발자의 컨텍스트 스위칭 비용을 최소화합니다.
- 복잡한 작업을 전문화된 자식 에이전트에게 위임하는 하위 에이전트 오케스트레이션 구조를 채택합니다.
- 작업 시작 시 Linear, Slack, GitHub 등으로부터 풍부한 컨텍스트를 사전에 확보하여 효율성을 높입니다.
지난 1년 동안, 우리는 여러 엔지니어링 조직이 개발 팀과 함께 작동하는 내부 코딩 에이전트 (internal coding agents)를 구축하는 것을 목격했습니다. Stripe는 Minions를 개발했고, Ramp는 Inspect를 구축했으며, Coinbase는 Cloudbot을 만들었습니다. 이러한 시스템은 엔지니어가 새로운 인터페이스를 채택하도록 요구하는 대신, 기존 워크플로 (Slack, Linear, GitHub를 통해 접근 가능)에 통합됩니다.
이러한 시스템들은 독립적으로 개발되었지만, 격리된 클라우드 샌드박스 (isolated cloud sandboxes), 큐레이션된 도구 세트 (curated toolsets), 서브 에이전트 오케스트레이션 (subagent orchestration), 그리고 개발자 워크플로와의 통합과 같은 유사한 아키텍처 패턴으로 수렴되었습니다. 이러한 수렴은 프로덕션 엔지니어링 환경에서 AI 에이전트를 배포하기 위한 몇 가지 공통된 요구 사항이 있음을 시사합니다.
오늘 우리는 이러한 패턴을 맞춤형 형태로 담아낸 오픈 소스 프레임워크인 Open SWE를 출시합니다. Deep Agents와 LangGraph를 기반으로 구축된 Open SWE는 우리가 이러한 구현 사례 전반에서 관찰한 핵심 아키텍처 구성 요소를 제공합니다. 만약 귀하의 조직이 내부 코딩 에이전트를 탐색하고 있다면, 이것이 시작점이 될 수 있습니다.
프로덕션 배포로부터 얻은 패턴들
Stripe, Ramp, Coinbase는 모두 자신들만의 내부 코딩 에이전트를 구축했습니다. Kishan Dahya는 이러한 코딩 에이전트들이 내린 서로 다른 아키텍처 결정에 대해 훌륭한 글을 작성했습니다. 우리는 아래에 이를 요약하고, Open SWE가 이러한 차원들에서 어떻게 비교되는지 자세히 살펴보겠습니다.
격리된 실행 환경 (Isolated execution environments): 작업은 엄격한 경계 내에서 완전한 권한을 가진 전용 클라우드 샌드박스에서 실행됩니다. 이는 에이전트가 각 작업마다 승인 프롬프트 없이 명령을 실행할 수 있도록 허용하는 동시에, 어떠한 실수가 발생하더라도 그 영향 범위 (blast radius)를 프로덕션 시스템으로부터 격리합니다.
큐레이션된 도구 세트 (Curated toolsets): Stripe의 엔지니어링 팀에 따르면, 그들의 에이전트는 약 500개의 도구에 접근할 수 있지만, 이들은 시간이 지남에 따라 단순히 축적된 것이 아니라 신중하게 선택되고 유지 관리됩니다. 도구의 양보다 도구의 큐레이션이 더 중요하다는 점이 드러납니다.
Slack 우선 호출 (Slack-first invocation): 세 시스템 모두 Slack을 기본 인터페이스로 통합하여, 개발자가 새로운 애플리케이션으로 컨텍스트 스위칭 (Context Switching)을 할 필요 없이 기존의 커뮤니케이션 워크플로 (Workflow) 내에서 작업을 수행할 수 있도록 합니다.
시작 시 풍부한 컨텍스트 제공 (Rich context at startup): 이 에이전트들은 작업을 시작하기 전 Linear 이슈, Slack 스레드 또는 GitHub PR로부터 전체 컨텍스트를 가져오며, 이를 통해 도구 호출 (Tool calls)을 통해 요구사항을 파악해야 하는 오버헤드를 줄입니다.
하위 에이전트 오케스트레이션 (Subagent orchestration): 복잡한 작업은 분해되어 전문화된 자식 에이전트 (Child agents)에게 위임되며, 각 에이전트는 격리된 컨텍스트와 집중된 책임을 가집니다.
이러한 아키텍처 (Architectural) 선택은 여러 프로덕션 배포 환경에서 효과적임이 입증되었으나, 조직은 각자의 환경과 요구사항에 맞춰 특정 구성 요소를 조정해야 할 것입니다.
Open SWE의 아키텍처 (Architecture)
Open SWE는 유사한 아키텍처 패턴의 오픈 소스 구현을 제공합니다. 이 프레임워크가 우리가 관찰한 내용과 어떻게 매칭되는지는 다음과 같습니다:
1. 에이전트 하네스 (Agent Harness): Deep Agents 기반의 구성
기존 에이전트를 포크 (Fork)하거나 처음부터 구축하는 대신, Open SWE는 Deep Agents 프레임워크 위에서 구성됩니다. 이 접근 방식은 Ramp 팀이 OpenCode를 기반으로 Inspect를 구축한 방식과 유사합니다.
구성은 두 가지 장점을 제공합니다:
업그레이드 경로 (Upgrade path): Deep Agents가 개선될 때 (더 나은 컨텍스트 관리, 더 효율적인 계획, 최적화된 토큰 사용 등), 커스텀 설정을 다시 구축할 필요 없이 해당 개선 사항을 통합할 수 있습니다.
포크 없는 커스터마이징 (Customization without forking): 조직 특화된 도구, 프롬프트 (Prompts), 워크플로를 핵심 에이전트 로직의 수정이 아닌 설정 (Configuration)으로서 유지할 수 있습니다.
create_deep_agent(
model="anthropic:claude-opus-4-6",
system_prompt=construct_system_prompt(repo_dir, ...),
tools=[
http_request,
fetch_url,
commit_and_open_pr,
linear_comment,
slack_thread_reply
],
backend=sandbox_backend,
middleware=[
ToolErrorMiddleware(),
check_message_queue_before_model,
...
],
)
Deep Agents는 이러한 패턴을 지원할 수 있는 인프라를 제공합니다: write_todos를 통한 내장된 계획 (planning), 파일 기반의 컨텍스트 관리 (context management), task 도구를 통한 네이티브 서브에이전트 (subagent) 생성, 그리고 결정론적 오케스트레이션 (deterministic orchestration)을 위한 미들웨어 훅 (middleware hooks)이 포함됩니다.
2. Sandbox: 격리된 클라우드 환경
각 작업 (task)은 전체 셸 (shell) 액세스 권한을 가진 원격 Linux 환경인 자체 격리된 클라우드 샌드박스 (sandbox)에서 실행됩니다. 저장소 (repository)가 클론 (clone)되며, 에이전트 (agent)는 완전한 권한을 부여받고, 모든 오류는 해당 환경 내에 격리됩니다.
Open SWE는 별도의 설정 없이도 여러 샌드박스 제공업체를 지원합니다:
사용자 정의 샌드박스 백엔드 (sandbox backend)를 직접 구현할 수도 있습니다.
이는 우리가 관찰한 패턴을 따릅니다: 먼저 격리한 다음, 경계 내부에서 완전한 권한을 부여하는 방식입니다.
주요 동작:
- 각 대화 스레드 (conversation thread)는 지속적인 샌드박스를 할당받으며, 후속 메시지 간에 재사용됩니다.
- 샌드박스는 도달할 수 없게 될 경우 자동으로 재생성됩니다.
- 여러 작업이 병렬로 실행되며, 각 작업은 고유한 샌드박스에서 실행됩니다.
3. Tools: 축적이 아닌 선별된 도구
Open SWE는 집중된 도구 세트 (toolset)를 제공합니다:
여기에 Deep Agents 내장 도구들이 추가됩니다: read_file, write_file, edit_file, ls, glob, grep, write_todos, 그리고 task (서브에이전트 생성).
더 작고 선별된 도구 세트가 테스트, 유지 관리 및 추론 (reasoning)하기에 더 쉬울 수 있습니다. 조직에 필요한 추가 도구(내부 API, 커스텀 배포 시스템, 특화된 테스트 프레임워크 등)가 필요한 경우, 이를 명시적으로 추가할 수 있습니다.
4. Context Engineering: AGENTS.md + 소스 컨텍스트 (Source Context)
Open SWE는 두 가지 소스에서 컨텍스트를 수집합니다:
** AGENTS.md 파일**: 저장소에 AGENTS.md가 포함되어 있다면
루트(root)에 있는 파일인 경우, 샌드박스(sandbox)에서 읽어 들여 시스템 프롬프트(system prompt)에 주입됩니다. 이 파일에는 모든 에이전트 실행이 따라야 하는 관례(conventions), 테스트 요구 사항, 아키텍처 결정 사항 및 팀별 패턴을 인코딩할 수 있습니다.
소스 컨텍스트 (Source context): 전체 Linear 이슈(제목, 설명, 댓글) 또는 Slack 스레드 기록이 조립되어 에이전트가 시작되기 전에 전달됩니다. 이를 통해 추가적인 도구 호출(tool calls) 없이도 작업별 컨텍스트를 제공합니다.
이러한 이중 계층 접근 방식은 저장소 전반의 지식과 작업별 정보 사이의 균형을 맞춥니다.
5. 오케스트레이션 (Orchestration): 하위 에이전트 (Subagents) + 미들웨어 (Middleware)
Open SWE의 오케스트레이션은 두 가지 메커니즘을 결합합니다:
하위 에이전트 (Subagents): Deep Agents 프레임워크는 task 도구를 통해 자식 에이전트(child agents)를 생성하는 것을 지원합니다. 메인 에이전트는 독립적인 하위 작업(subtasks)을 격리된 하위 에이전트에게 위임할 수 있으며, 각 하위 에이전트는 자신만의 미들웨어 스택(middleware stack), 할 일 목록(todo list) 및 파일 작업(file operations)을 가집니다.
미들웨어 (Middleware): 결정론적(Deterministic) 미들웨어 훅(hooks)이 에이전트 루프(agent loop) 주변에서 실행됩니다:
check_message_queue_before_model: 다음 모델 호출(model call) 전에 후속 메시지(실행 도중 도착한 Linear 댓글 또는 Slack 메시지)를 주입합니다. 이를 통해 사용자는 에이전트가 작업하는 동안 추가 입력을 제공할 수 있습니다.
open_pr_if_needed: 에이전트가 이 단계를 완료하지 못한 경우, 커밋을 수행하고 PR(Pull Request)을 생성하는 안전망 역할을 합니다. 이는 중요한 단계가 안정적으로 수행되도록 보장합니다.
ToolErrorMiddleware: 도구 오류(tool errors)를 포착하고 우아하게 처리합니다.
에이전트 방식(agentic, 모델 주도)과 결정론적 방식(deterministic, 미들웨어 주도) 오케스트레이션의 이러한 분리는 신뢰성과 유연성 사이의 균형을 맞추는 데 도움이 될 수 있습니다.
6. 호출 (Invocation): Slack, Linear, 그리고 GitHub
우리는 많은 팀이 주요 호출 인터페이스로 Slack을 선택한다는 점을 관찰했습니다. Open SWE도 유사한 패턴을 따릅니다:
Slack: 어떤 스레드에서든 봇을 언급(mention)하세요. 작업할 저장소를 지정하기 위해 repo:owner/name 구문을 지원합니다. 에이전트는 스레드 내에서 상태 업데이트와 PR 링크로 응답합니다.
Linear: @openswe라고 댓글을 다세요.
어떤 이슈(issue)에서도 사용 가능합니다. 에이전트는 전체 이슈 컨텍스트(context)를 읽고, 확인의 의미로 👀 이모지로 반응하며, 결과를 다시 댓글로 게시합니다.
GitHub: 에이전트가 생성한 PR(Pull Request)의 PR 댓글에서 @openswe를 태그하면, 에이전트가 리뷰 피드백을 처리하고 동일한 브랜치에 수정 사항을 푸시(push)하도록 할 수 있습니다.
각 호출은 결정론적인 스레드 ID(thread ID)를 생성하므로, 동일한 이슈나 스레드에 대한 후속 메시지는 동일하게 실행 중인 에이전트로 전달됩니다.
7. 검증: 프롬프트 기반 + 안전망 (Safety Nets)
에이전트는 커밋(commit)하기 전에 린터(linter), 포맷터(formatter), 테스트를 실행하도록 지시받습니다. open_pr_if_needed 미들웨어(middleware)는 안전장치 역할을 합니다. 만약 에이전트가 PR을 열지 않고 작업을 마친 경우, 미들웨어가 이를 자동으로 처리합니다.
결정론적인 CI 체크, 시각적 검증 또는 리뷰 게이트(review gates)를 추가 미들웨어로 추가함으로써 이 검증 계층을 확장할 수 있습니다.
Deep Agents를 사용하는 이유
Deep Agents는 이 아키텍처를 구성 가능(composable)하고 유지 관리 가능하게 만드는 토대를 제공합니다.
컨텍스트 관리 (Context management): 장시간 실행되는 코딩 작업은 방대한 양의 중간 데이터(파일 내용, 명령 출력, 검색 결과)를 생성할 수 있습니다. Deep Agents는 파일 기반 메모리(file-based memory)를 통해 이를 처리하며, 모든 데이터를 대화 기록에 유지하는 대신 대규모 결과물을 외부로 오프로딩(offloading)합니다. 이는 더 큰 코드베이스에서 작업할 때 컨텍스트 오버플로(context overflow)를 방지하는 데 도움이 됩니다.
계획 프리미티브 (Planning primitives): 내장된 write_todos 도구는 복잡한 작업을 세분화하고, 진행 상황을 추적하며, 새로운 정보가 나타남에 따라 계획을 조정할 수 있는 구조화된 방법을 제공합니다. 우리는 이것이 장기간에 걸친 다단계 작업에서 특히 유용하다는 것을 발견했습니다.
서브 에이전트 격리 (Subagent isolation): 메인 에이전트가 task 도구를 통해 자식 에이전트(child agent)를 생성할 때, 해당 서브 에이전트는 자신만의 격리된 컨텍스트를 갖게 됩니다. 서로 다른 하위 작업들이 서로의 대화 기록을 오염시키지 않으므로, 복잡하고 다면적인 작업에서 더 명확한 추론을 이끌어낼 수 있습니다.
미들웨어 후크 (Middleware hooks): Deep Agents의 미들웨어 시스템을 사용하면 에이전트 루프 (agent loop)의 특정 시점에 결정론적 로직 (deterministic logic)을 주입할 수 있습니다. Open SWE가 메시지 주입 및 자동 PR 생성을 구현하는 방식이 바로 이것이며, 이러한 동작들은 신뢰성 있게 수행되어야 합니다.
업그레이드 경로 (Upgrade path): Deep Agents는 독립적인 라이브러리로 활발히 개발되고 있기 때문에, 컨텍스트 압축 (context compression), 프롬프트 캐싱 (prompt caching), 계획 효율성 (planning efficiency), 그리고 하위 에이전트 오케스트레이션 (subagent orchestration)의 개선 사항들이 사용자의 커스텀 설정을 다시 구축할 필요 없이 Open SWE로 그대로 전달될 수 있습니다.
이러한 구성 가능성 (composability)은 Ramp 팀이 OpenCode를 기반으로 구축할 때 설명했던 것과 유사한 이점을 제공합니다. 즉, 조직 특화적인 레이어 (org-specific layer)에 대한 제어권을 유지하면서도, 지속적으로 관리되고 개선되는 기반의 이점을 누릴 수 있습니다.
조직을 위한 커스터마이징 (Customization for Your Organization)
Open SWE는 완성된 제품이라기보다 커스터마이징 가능한 기반으로 설계되었습니다. 모든 주요 구성 요소는 플러그인 방식으로 교체 가능합니다:
샌드박스 제공자 (Sandbox provider): Modal, Daytona, Runloop 또는 LangSmith 사이에서 전환할 수 있습니다. 내부 인프라 요구 사항이 있는 경우 자체 샌드박스 백엔드를 구현할 수 있습니다.
모델 (Model): 어떤 LLM 제공자든 사용할 수 있습니다. 기본값은 Claude Opus 4이지만, 서로 다른 하위 작업 (subtasks)에 대해 다양한 모델을 구성할 수 있습니다.
도구 (Tools): 내부 API, 배포 시스템, 테스트 프레임워크 또는 모니터링 플랫폼을 위한 도구를 추가할 수 있습니다. 필요하지 않은 도구는 제거하십시오.
트리거 (Triggers): Slack, Linear 및 GitHub 통합 로직을 수정할 수 있습니다. 이메일, 웹훅 (webhooks) 또는 커스텀 UI와 같은 새로운 트리거 접점을 추가할 수 있습니다.
시스템 프롬프트 (System prompt): 기본 프롬프트와 AGENTS.md 파일을 통합하는 로직을 커스터마이징할 수 있습니다. 조직 특화된 지침, 제약 조건 또는 컨벤션 (conventions)을 추가하십시오.
미들웨어 (Middleware): 검증 (validation), 승인 게이트 (approval gates), 로깅 (logging) 또는 안전 점검 (safety checks)을 위한 자체 미들웨어 후크를 추가할 수 있습니다.
커스터마이징 가이드 (Customization Guide)에서는 예제와 함께 이러한 각 확장 지점들을 상세히 안내합니다.
내부 구현과의 비교 (Comparison to Internal Implementations)
공개적으로 사용 가능한 정보를 바탕으로 Open SWE를 Stripe, Ramp, Coinbase의 내부 시스템과 비교하면 다음과 같습니다:
핵심 패턴은 유사합니다. 차이점은 구현 세부 사항, 내부 통합, 그리고 조직별 특화 도구(org-specific tooling)에 있으며, 이는 프레임워크를 서로 다른 환경에 맞게 조정할 때 예상할 수 있는 부분과 정확히 일치합니다.
시작하기
Open SWE는 현재 GitHub에서 사용할 수 있습니다.
설치 가이드 (Installation Guide): GitHub App 생성, LangSmith 설정, Linear/Slack/GitHub 트리거, 그리고 프로덕션 배포 과정을 안내합니다.
커스터마이징 가이드 (Customization Guide): 조직의 요구에 맞춰 샌드박스(sandbox), 모델(model), 도구(tools), 트리거(triggers), 시스템 프롬프트(system prompt), 그리고 미들웨어(middleware)를 교체하는 방법을 보여줍니다.
이 프레임워크는 MIT 라이선스를 따릅니다. 포크(fork)하여 커스터마이징하고 내부적으로 배포할 수 있습니다. 만약 이를 기반으로 흥미로운 것을 구축하신다면, 저희도 꼭 소식을 듣고 싶습니다.
여러 엔지니어링 조직들이 프로덕션 환경에서 내부 코딩 에이전트(coding agents)를 성공적으로 배포했습니다. Open SWE는 유사한 아키텍처 패턴(architectural patterns)에 대한 오픈 소스 구현을 제공하며, 서로 다른 코드베이스(codebases)와 워크플로(workflows)에 맞게 커스터마이징할 수 있도록 설계되었습니다. 다양한 맥락에서 무엇이 효과적인지 여전히 학습 중이지만, 이 프레임워크는 이러한 접근 방식을 탐색하는 팀들에게 시작점을 제공합니다.
Open SWE 시도하기: github.com/langchain-ai/open-swe
Deep Agents에 대해 알아보기: docs.langchain.com/oss/python/deepagents
문서 읽기: Open SWE Documentation
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기