<p align="center">
<img src="https://raw.githubusercontent.com/nxtg-ai/forge-orchestrator/HEAD/assets/forge-logo.png" alt="Forge" width="120">
</p>
forge-orchestrator
stage: alpha MCP Registry License: FSL-1.1-ALv2 Version CI GitHub stars crates.io
단계(Stage): 알파(Alpha). Forge 플러그인과 오케스트레이터는 현재 알파 단계에 있습니다. 2026년 10월 15일 (UTC)에 별도의 NXTG.AI 팀(product-oracle)이 클린 설치된 플러그인(v3.14.0)과 오케스트레이터(forge 1.7.0)를 사용하여 사전 등록된 core-job 테스트를 실행했습니다. 이 테스트는 통과했으며, 각 반복 확인은 3회 중 3회(총 7회 실행) 모두 성공했습니다. 증거 자료는 forge-plugin v3.14.0 릴리스에 첨부되어 있습니다. SLA(서비스 수준 협약)는 없으며, 인터페이스는 예고 없이 변경될 수 있습니다.
작업 러너로 Codex CLI와 Antigravity CLI (agy)를 사용하여 공유 리포지토리에서 Claude Code의 오케스트레이션 — 단일 Rust 바이너리, 종속성 없음(zero deps).
단일 도구 내에 다중 에이전트가 작동하는 것은 문제가 없습니다. Claude Code는 20개의 서브 에이전트를 실행하며, 이들은 도구가 내부적으로 오케스트레이션을 관리하기 때문에 정렬 상태를 유지합니다. 문제는 여러 도구(multi-tool)입니다: 공유된 상태가 없는 동일한 리포지토리의 여러 AI 코딩 도구들입니다. 이것이 바로 오케스트레이터가 해결하는 문제입니다. 오늘날, 작업 러너로 Claude Code와 Codex CLI 및 Antigravity CLI (agy)를 사용하는 경우에 그렇습니다. 이 오케스트레이터는 agy를 작업 러너로 실행합니다. Forge는 agy에 대해 다른 어떠한 주장도 하지 않습니다.
이는 개발 워크플로우에 파일 잠금(file locking), 지식 캡처(knowledge capture), 작업 계획(task planning), 드리프트 감지(drift detection) 및 다중 도구 오케스트레이션을 추가합니다. 이 도구들은 단일 상태 디렉토리에서 읽고 쓰기 합니다. 12개의 도구를 지원하는 MCP 서버는 전체 오케스트레이션 상태를 연결된 모든 AI 클라이언트에 노출하며, 작업을 생성하고, 주장(claim)하고, 완료할 수 있습니다.
오케스트레이터(orchestrator)는 제가 동일한 코드베이스에 두 개의 AI 도구를 실행하고 이들이 인간 팀이 실패하는 방식과 똑같이 실패하는 것을 목격했기 때문에 존재합니다. Claude가 모듈을 리팩토링했습니다. Codex는 리팩토링 전 인터페이스를 대상으로 테스트를 업데이트했습니다. 둘 다 저장되었습니다. 하지만 테스트가 실패했습니다. 두 도구 모두 서로의 존재를 알지 못했습니다. 저는 재능 있는 인간 팀들과 이 정확한 시나리오를 23년 동안 지켜보았습니다. 해결책은 항상 같았습니다: 오케스트레이션 인프라(orchestration infrastructure)였습니다.
설치 (Install)
curl -fsSL https://forge.nxtg.ai/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
forge init
설치 프로그램은 최신 버전이 아닌 고정된 릴리스인 Forge v1.7.1을 설치합니다. 이는 forge를 ~/.local/bin에 (변수는 FORGE_INSTALL_DIR로 변경 가능) 배치하고, ~/.profile, ~/.bashrc, 그리고 zsh를 사용하는 경우 ~/.zshenv 파일에 보호된 한 줄을 추가하여 해당 디렉토리를 PATH에 추가합니다. 셸 파일을 그대로 유지하려면 FORGE_NO_MODIFY_PATH=1을 설정하십시오.
만약 claude CLI가 PATH에 있다면, 설치 프로그램은 해당 CLI만을 사용하여 forge의 MCP 도구를 Claude Code에 추가합니다: 이는 nxtg-forge 마켓플레이스 (nxtg-ai/forge-plugin)를 추가하고 새로 고치며, 이미 가지고 있는 경우 nxtg-forge@nxtg-forge를 업데이트하고, 동반 플러그인인 nxtg-forge-orchestrator@nxtg-forge를 설치합니다. 변경 사항마다 한 줄을 출력하며 다른 방식으로 Claude 설정을 변경하지 않습니다. claude가 없거나 단계에 실패하면 실행해야 할 명령어를 출력하고 여전히 0으로 종료됩니다. 건너뛰려면 FORGE_NO_CLAUDE_PLUGIN=1을 설정하십시오.
단일 바이너리. 런타임 종속성 없음.
Codex CLI를 MCP 서버에 연결하기 (Connect Codex CLI to the MCP server)
오케스트레이터의 MCP 서버를 Codex CLI에 등록한 다음, Codex가 이를 나열하는지 확인합니다:
codex mcp add forge -- forge mcp
codex mcp list
이는 다음 내용을 ~/.codex/config.toml에 작성합니다:
[mcp_servers.forge]
command = "forge"
args = ["mcp"]
서버는 시작된 디렉터리의 프로젝트에서 작업합니다. 특정 프로젝트를 고정하려면 등록할 때 바인딩해야 합니다: codex mcp add forge --env FORGE_PROJECT_ROOT=/path/to/project -- forge mcp. codex-cli 0.162.1로 확인한 결과, codex mcp list는 stdio를 통해 forge가 활성화되어 있음을 보여주며, 서버는 tools/list에 대해 12개의 도구를 응답합니다. 이 등록을 통해 Codex 세션 내부에서 호출된 도구 호출은 측정되지 않았습니다.
빠른 데모 (Quick Demo)
제로 상태에서 작업 보드까지 이어지는 네 가지 명령어:
여기서 다음 작업을 수행할 수 있습니다:
forge run — 태스크를 헤드리스(headlessly)로 실행합니다 (자율 모드이며 CI에 매우 유용).
forge dashboard --pty — 대화형 에이전트 패널을 갖춘 TUI 대시보드를 시작합니다.
과거 결과: Stargate Mode (v1.6.1 이전)
94줄 분량의 명세서로부터, 구 버전의 오케스트레이터는 세 가지 AI 코딩 도구를 조정하여 완전한 CLI 툴킷을 구축했습니다. 이 실행은 단종된 Gemini CLI를 구동했으며; v1.6.1 이후로는 어댑터가 대신 Antigravity CLI (agy)를 시작하며, 해당 실행은 재측정되지 않았습니다.
SPEC.md (94 lines) → forge plan --generate → 15 tasks
Claude Code: 6 design tasks → completed
...
세 개의 회사. 세 가지 도구. 하나의 오케스트레이터. 하나의 명령어:
얻게 되는 것 (What You Get)
| 기능 | 설명 |
|---|
| 파일 잠금(File locking) | 태스크가 건드리는 파일을 이름으로 지정합니다. MCP 또는 forge run --task … --agent …을 통한 클레임은 다른 태스크가 해당 파일을 보유하고 있는 동안 거부됩니다. |
| ... | |
주요 명령어 (Key Commands)
forge init
forge plan --generate
forge dashboard
...
아키텍처
오케스트레이터는 Forge의 공유 상태(tasks, 파일 잠금, 지식, 이벤트 로그)를 보유합니다. 플러그인 (L1: Vibe Coder)은 Claude Code 명령어, 스킬 및 훅을 추가하며, 그 가드 훅은 Claude Code 내부에서 실행됩니다. UI (L3: Ship Lord)는 별도의 React 대시보드입니다.
┌──────────────────────────────────────┐
│ forge-orchestrator │
│ (Rust) │
...
통신: .forge/ 파일 시스템 + MCP stdio. 데몬 없음. 데이터베이스 없음. 상태는 파일입니다.
툴 어댑터: Claude Code는 MCP stdio를 사용합니다. Codex CLI와 Antigravity CLI (agy)는 파일 시스템 규칙을 통해 작업을 실행합니다. agy 어댑터는 기존 프로젝트가 계속 작동하도록 작업 파일, 설정 키 및 MCP 인수에 에이전트 ID gemini를 유지합니다. 각 툴은 자체 구성 형식을 읽습니다. Forge 전용 구성 언어는 없습니다.
파일 잠금(File Locking)의 작동 방식
파일 잠금이 존재하는 이유는 제가 팀들이 충돌하는 편집으로 인해 며칠을 잃는 것을 목격했기 때문입니다.
각 작업은 자신이 건드리는 파일을 나열합니다. forge_claim_task MCP 툴 또는 단일 작업용 forge run --task <id> --agent <agent>를 통한 클레임은 먼저 해당 파일들을 .forge/state.json에 기록된 잠금과 비교합니다. 만약 중복되는 부분이 있다면, 클레임은 거부되고 거부 사유는 해당 파일을 보유한 작업 및 에이전트의 이름을 명시합니다. 그렇지 않다면 해당 파일들은 그 작업에 의해 잠긴 것으로 기록됩니다. forge start와 대시보드는 작업을 시작할 때 동일한 방식으로 잠금을 기록하지만, 중복 여부를 먼저 확인하지는 않습니다. 자율적인 forge run ( --task 없음)은 중복을 확인하거나 잠금을 기록하지도 않습니다. 작업이 완료되면 해당 잠금은 해제됩니다.
잠금은 편집(edits)이 아닌 클레임(claims)을 통제합니다: 이는 툴이 파일 쓰기를 하는 것을 막지 못합니다. 잠금에는 시간 제한이 없습니다: 만약 잠금을 설정한 프로세스가 죽으면, 잠금은 상태 파일에 남아 있습니다. 상태 파일은 크로스 프로세스 잠금 없이 읽고 다시 쓰기 때문에, 같은 순간에 이루어진 두 개의 클레임 모두 성공할 수 있습니다.
지식 플라이휠(Knowledge Flywheel)의 작동 방식
지식 플라이휠이 존재하는 이유는 제가 스프린트 사이에 결정이 사라지는 것을 목격했기 때문입니다.
forge_capture_knowledge를 통해 캡처된 결정(Decisions), 패턴(patterns), 학습 내용(learnings) 및 연구 결과는 .forge/knowledge/에 저장되며, 카테고리별로 하나의 디렉터리가 할당되고 자동으로 분류됩니다. MCP 서버에 연결된 모든 도구는 현재 세션뿐만 아니라 나중 세션에서도 forge_get_knowledge를 사용하여 이를 검색할 수 있습니다.
Forge UI
forge-ui는 Forge를 위한 별도의 React 대시보드이며 독립적으로 배포되었습니다. 해당 프로젝트의 README에 현재 단계가 명시되어 있습니다. 소스에서 실행하려면 다음을 수행하십시오:
git clone https://github.com/nxtg-ai/forge-ui && cd forge-ui && npm install && npm run dev
링크
라이선스
소스는 Functional Source License 1.1 (FSL-1.1-ALv2)에 따라 이용 가능합니다. 이 라이선스는 2028년 3월 18일에 Apache License 2.0으로 전환됩니다. 전체 약관은 LICENSE.md를 참조하십시오.