infra-orchestrator v4 draft review
Agent Orchestrator v4 초안 리뷰
status: 분석 완료. 실행 SSOT는 infra-orchestrator v1.
대상: 2026-10-05 Agent Orchestrator 개발기획서 v4 (prompt-orchestrator초안).
naming SSOT: NAMING_AND_TOPOLOGY — 엔진 slug는infra-orchestrator, prefixauto는 쓰지 않는다.
이 문서는 v4 본문을 복제하지 않는다. 유지할 원칙, 버린 결정, 상태 모델 불일치만 남긴다.
한 줄 평가
Python이 상태·검증·Git을 통제하고 Cursor를 Task마다 일회성 local Agent로만 쓰는 구조는 맞다. V1 범위에 릴리스·MCP·cross-repo·SQLite까지 실리고, 프로젝트 예시가 acct-labs에 묶여 있으며, 열린 결정이 22개라 범용 엔진으로 바로 구현하기엔 과하다.
유지하는 장점
- Python 기본, Cursor는 예외. Git, 테스트, 린트, 타입체크, 범위 검사는 토큰 0.
- Fresh Agent. Implement / Review / Fix가 대화를 넘기지 않는다.
send()1회,dirs금지,cwd는 대상 repo 하나. - 검증 우선. 결정론적 검증을 통과한 코드에만 AI 리뷰.
- lock / ledger 분리. 승인된 Task 정의는 불변, 상태·카운터·증거만 가변.
- Verification Registry. Plan 본문의 셸 명령을 실행하지 않는다.
- 정책 계층. 엔진 defaults + 프로젝트 override, 잠금 키 완화 거부, 목록형 안전 키는 추가만.
- Cost per Verified Task. 최소 토큰이 아니라 검증된 Task당 비용. 사용량 개입은 observe → warn → enforce.
- 사람 승인. Merge와 Production은 게이트 뒤. 엔진 코드는 프로젝트 밖에, 런타임 상태는 git 밖.
단점과 v1 대응
| v4 문제 | 영향 | v1 |
|---|---|---|
V1에 MCP, porch release, cross-repo, SQLite, 상태바가 같이 적힘 | 일정·테스트 폭발 | 로컬 프로파일만. 나머지는 후속 단계 |
| 열린 결정 22개 | 구현이 멈추거나 임의로 갈라짐 | 로컬 기본값 잠금. V0 실측은 usage·도구 이름·setting_sources·model id 네 개 |
| 예시가 acct-labs | 다른 org에 복사하기 어려움 | examples/sandbox-app. 첫 실전 어댑터는 autogen-labs core 설정만 |
| Task 메타가 HTML 주석 | 렌더러·포맷터가 주석을 지우면 컴파일 실패 | YAML 펜스 orchestrator 또는 *.tasks.yaml |
| 상태 다이어그램과 표가 다름 | 재개·테스트 스펙이 둘로 갈림 | 단일 enum (아래) |
| V0 = 구현 코드 없음 | SDK 가정을 문서만으로 닫음 | porch doctor / porch probe-sdk + FakeAgent |
| SDK public beta | usage·allowlist·설정 소스가 비거나 이름이 다를 수 있음 | 실패하면 해당 기능을 끄고 진행 |
| Agent가 프로세스 env를 상속 | 배포 비밀이 로컬 Agent에 들어감 | run 프로세스에는 CURSOR_API_KEY와 최소 PATH만 |
기본 setting_sources=project vs SDK 기본 [] | 사용자 전역 규칙이 섞이거나, 기대한 규칙이 안 붙음 | 기본은 inline Capsule + 관리형 규칙. project 소스는 V0 확인 후 |
| Capsule “약 500 토큰” 같은 추정치 | 설계 상수처럼 읽힘 | 실측 전 상한 가이드일 뿐 |
| Fresh Agent 재탐색 비용 | 긴 세션보다 비쌀 수 있음 | G0에서 Cost per Verified Task가 개선되지 않으면 자동 run을 확대하지 않음 |
repo 이름 prompt-orchestrator | naming pack 위반, 플랫폼 v1의 다른 의미와 충돌 | slug infra-orchestrator. 제품 병렬 생성은 infra-canvas / ai-engine |
상태 모델 불일치 (v4)
v4 §6.1 다이어그램과 §6.4 표가 같은 기계를 가리키지 않는다.
| 출처 | 있는 상태 | 없는 상태 |
|---|---|---|
| §6.1 다이어그램 | TODO, IMPLEMENTING, IMPLEMENTED, VERIFYING, FIXING, REVIEWING, VERIFIED, DONE, HUMAN_REQUIRED | PARTIAL, VERIFY_FAILED, NEEDS_FIX, BLOCKED |
| §6.4 표 | TODO, PARTIAL, IMPLEMENTED, VERIFY_FAILED, NEEDS_FIX, VERIFIED, DONE, BLOCKED/HUMAN_REQUIRED, 실행 중 4종 | 다이어그램의 IMPLEMENTING 경로와 PARTIAL 관계가 없음 |
v1은 정지 상태와 실행 중 표시를 한 스키마로 고정한다. 자세한 집합은 SSOT §5.
열린 결정 정리
v4에서 로컬 기본값으로 닫은 것
- 런타임 local only. cloud /
auto_create_pr/dirs없음.release.create_pr기본disabled, 프로젝트 override로 재개방 금지. - Agent 도구는 caller allowlist만.
tools=None은 빈 목록 (SDK 전체 도구 기본값 사용 금지). - Agent env allowlist (
CURSOR_API_KEY등).GH_TOKEN·배포 비밀 비상속. probe-sdkAgent.prompt는 명시적 sandbox--cwd. 엔진 repo를 cwd/dirs로 쓰지 않음.- Agent당
send()1회. resume 금지. - 셸 도구 없음. Plan 본문 명령 미실행.
- Merge / Production은 사람 승인. MCP로
release미노출. - Plan 메타는 HTML 주석 금지.
- 상태 홈은 XDG (
$XDG_STATE_HOME/infra-orchestrator, 없으면~/.local/state/infra-orchestrator). - CLI 이름
porch. 충돌 시infra-orch. - 통합 리뷰 기본
high_risk_only. git hook 존중,--no-verify금지. - MCP
run미노출 (조회만, V1.5). - R0 문서 변경도 Merge 자동 승인 없음 (V1은 릴리스 자체를 하지 않음).
V0에서만 실측하는 것
- SDK
result.usage/ 스트림 usage가 채워지는지, 서브에이전트 포함 여부. - 도구 allowlist의 실제 이름 (생성 시 오류 나면 표 갱신).
setting_sources=["project"]가 대상 repo 규칙만 로드하는지.- 비교 실험용 고정 model id (
composer-2.5후보).
Enterprise Admin API / OTel, API key 종류(User vs Service Account), ledger 승인 UI, SQLite 전환 기준은 V1 이후로 미룬다.
제품 경계
| 문서 | 의미 |
|---|---|
플랫폼 v1 Phase 2 infra-orchestrator (구 문구) | 스토리보드·생성 파이프라인의 병렬 오케스트레이션 |
| 이 엔진 | Cursor Python SDK로 개발 Task를 로컬에서 순서대로 실행 |
같은 slug를 쓰되 역할은 후자다. 제품 생성 병렬화는 infra-canvas / ai-engine에 남긴다.