delegate-skills
무엇인가
delegate-skills는 오케스트레이션 에이전트와 코드 편집 CLI 사이에 놓이는 위임 계층이다. 코딩 작업을 별도 구현 CLI에 넘기고, 그 결과 diff를 검토한 뒤 커밋하는 절차를 스킬과 릴레이 스크립트로 고정한다. 여러 구현 CLI를 이름 붙은 레인으로 묶어 관리하는 것이 중심 개념이며, 코드를 직접 생성하는 도구가 아니라 위임과 검토 사이의 경계를 정의하는 쪽에 속한다.
어떻게 동작하나
구성은 구현 CLI별 `*-delegate` 스킬, 실행기 `relay.mjs`, 설정 스키마 `delegate-fleet.v1`로 나뉜다. setup 스킬이 PATH에서 사용 가능한 구현 CLI를 탐색해 fleet을 제안하고, 전체 설정을 보여준 뒤 명시적 승인 이후에만 파일을 쓴다. 설정은 전역 또는 저장소 단위로 적용되고, 디스패치는 `--lane <이름>`으로 하며 명시적 플래그가 레인의 model·effort·variant 다이얼을 덮어쓴다. 릴레이는 구현 CLI를 실행하고 `delegate-relay.result.v1` 형식의 `result.json`을 남긴다. 이 파일에는 status, exitCode, signal(OOM 킬러로 종료된 경우의 힌트 포함), 구현 CLI의 최종 보고, touchedFiles, CLI가 노출하는 경우의 세션 id가 들어간다.
무엇과 다른가
구현 CLI를 직접 호출하는 방식과의 차이는 커밋 권한이 어디에 있는지다. 릴레이는 커밋하지 않는다. 기본적으로 자동 커밋하는 Aider를 거칠 때도 `--no-auto-commits`와 `--no-dirty-commits`가 강제로 전달되며 이는 설정으로 바꿀 수 없다. 릴레이는 Node 내장 모듈만 사용하고 의존성·자체 네트워크 호출·자격증명·텔레메트리를 두지 않는다. 레인에 지정된 구현 CLI와 다른 스킬을 쓰면 조용히 넘어가지 않고 실패한다. 프로젝트 설정은 승인 시점의 내용에 결속되므로, 복제되거나 편집된 프로젝트 레인은 재승인 전까지 닫힌 상태로 실패한다.
어떻게 쓰나
Skills CLI로 패키지, setup 스킬, 개별 구현 스킬을 설치하며 릴리스 태그를 `@vMAJOR.MINOR.PATCH`로 붙여 고정할 수 있다. 설치 후에는 브리프를 작성하고 `relay.mjs`로 디스패치한 뒤 `result.json`을 기다린다. 이어서 diff를 검토하고 프로젝트의 게이트를 직접 다시 실행한 다음 커밋한다. 브리프는 오케스트레이터의 대화 기록을 갖지 않는 구현 CLI로 전달되므로 자기완결적이어야 한다.
전제와 한계
구현 CLI의 headless 제약은 그대로 남는다. Command Code는 `-p` 실행에서 쓰기·편집·셸 도구를 막고 `--yolo`에서 모든 도구를 허용하는 두 상태만 있으며, `--permission-mode auto-accept`나 `--tools-all`은 쓰기 차단을 풀지 않는다. grok은 headless 쓰기를 막을 수 없어 릴레이가 Git 가시 변경에 대한 삼상태 `readOnlyViolation` 신호만 보고한다. ZCode는 CLI가 데스크톱 앱 안에 들어 있어 PATH에 없고 `plan`과 `yolo`만 headless로 동작하며, `build`와 `edit`은 릴레이가 거부한다. `touchedFiles`는 실행 후 `git status` 기반이라 무시된 파일이나 저장소 밖 쓰기를 보여주지 못한다.