Symphony: Codex 오케스트레이션을 위한 오픈 소스 사양

Symphony: Codex 오케스트레이션을 위한 오픈 소스 사양

개요

Symphony는 이슈 트래커를 제어 평면(control plane)으로 사용하여 코딩 에이전트를 오케스트레이션하는 방법을 정의하는 오픈 소스 사양입니다. 이를 통해 모든 오픈된 작업에 전용 에이전트 워크스페이스를 할당하여 작업이 완료될 때까지 지속적으로 실행할 수 있으며, 개별 Codex 세션에 대한 인간의 감독 필요성을 줄여줍니다.

기술 사양

Symphony 사양은 언어에 구애받지 않는 서비스를 설명하는 단일 SPEC.md 파일입니다. 이 파일은 워크플로 로더, 이슈 트래커 클라이언트, 오케스트레이터, 워크스페이스 매니저, 에이전트 러너 및 선택적 상태 표면(status surface)과 같은 핵심 구성 요소를 개략적으로 설명합니다. 구현 시 안전 불변성(safety invariants)을 준수해야 합니다: 에이전트는 이슈별 워크스페이스 경로 내부에서만 실행되어야 하며, 워크스페이스 키는 [A-Za-z0-9._-]로 정제되어야 하고, 워크스페이스 경로는 구성된 루트 내에 머물러야 합니다.

워크플로 정의 (WORKFLOW.md)

각 저장소는 YAML 프론트 매터(front matter)와 프롬프트 템플릿을 포함하는 WORKFLOW.md 파일을 추가하여 Symphony를 채택합니다. 프론트 매터는 트래커 종류(현재 linear), 폴링 간격, 워크스페이스 루트, 훅(hooks), 에이전트/Codex 설정을 선언합니다. 프롬프트 템플릿은 정규화된 이슈 객체와 선택적인 attempt 변수를 전달받아, 첫 실행, 계속 실행 및 재시도에 대해 서로 다른 지침을 제공할 수 있습니다.

오케스트레이션 메커니즘

Symphony는 정해진 간격으로 트래커를 폴링하고, 전역 및 상태별 동시성 제한 범위 내에서 작업을 할당하며, 인메모리 런타임 상태를 유지합니다. 매 틱(tick)마다 실행 중인 에이전트를 조정하고, 구성 가능한 타임아웃을 통해 정체(stall)를 감지하며, 지수 백오프(exponential backoff)를 사용하여 실패한 시도를 재시도합니다. 성공적인 실행은 트래커가 종료 상태에 도달할 필요 없이 워크플로에 정의된 핸드오프 상태(예: Human Review)에서 종료될 수 있습니다.

구현 및 채택

참조 구현체는 동시성 기본 기능 때문에 Elixir로 작성되었지만, 사양은 에이전트가 어떤 언어로든 Symphony를 구현할 수 있도록 의도적으로 최소한으로 설계되었습니다. OpenAI는 내부적으로 Symphony를 사용했으며, 일부 팀에서 처음 3주 이내에 반영된(landed) pull request가 500% 증가하는 것을 관찰했습니다. 오픈 소스로 공개된 후, 이 저장소는 4월 23일 기준 15K 이상의 GitHub stars를 받았으며, Linear의 창립자는 출시 이후 생성된 워크스페이스가 급증했다고 언급했습니다.

시사점 및 향후 과제

에이전트를 미세 관리되는 세션이 아닌 목표 중심의 작업자로 취급함으로써, Symphony는 병목 현상을 코드 작성에서 에이전트 작업 관리으로 전환합니다. 이제 팀은 저렴하게 추측성 작업(speculative tasks)을 제출하고, 에이전트가 아이디어를 탐색하도록 하며, 인간의 노력은 더 어렵고 탐구적인 문제에 집중할 수 있습니다. OpenAI는 Symphony를 참조 구현체로 위치시키며, 개발자들이 자신의 환경에 맞춤화된 버전을 구축하기 위해 코딩 에이전트를 이 사양과 저장소로 향하도록 권장합니다.

Sources