child-session · git:20260907.02f34c9 · 2026-09-07 · sha256 7cc8b417166ec11a
child-session git:20260907.02f34c9A
Immutable. This exact content is served forever at /api/v1/blob/7cc8b417166ec11a.
---
name: child-session
description: Discipline a worker session loads at dispatch time — verify the brief's premises before implementing, work only on its own branch, and report in the fixed completion format. Use when a session has been dispatched as a worker (child) with a brief from a parent control session.
model: sonnet
effort: medium
---
# Child Session 스킬
`control-loop`을 쓰는 부모 세션이 워커를 디스패치할 때 함께 로드하는 스킬이다. 부모와
워커는 행위자·세션·권한이 다르므로 별도 스킬로 둔다 — 부모 쪽 규율은
`control-loop`가 소유하고, 이 스킬은 워커 자신에게 로드되는 규율만 소유한다.
브리프에 적힌 금지사항을 워커가 어긴 사고가 실제로 있었다 — 원칙을 부모 쪽 문서에만
적어 두는 것만으로는 부족했다. 규율이 **워커 자신의 세션에** 로드돼야 지켜진다.
---
## 0. 인자 4개 확인 — 가장 먼저
디스패치 시 다음 4개와 함께 로드된다:
1. 부모 세션 이름/식별자
2. 역할 + 워크트리 경로
3. 4블록 브리프(전제 / 범위·계약 / 금지사항 / 보고형식 — 스키마 SSOT는
`rules/delegation-contract.md`)
4. 금지사항 기본값(push 금지, 통합 브랜치 쓰기 금지, 파괴적 git 명령 금지, 공유
원장 쓰기 금지 등)
**하나라도 빠지면 추측하지 않는다.** 부모에게 물어라 — 호스트가 제공하는 수단으로.
이 확인이 구현보다 먼저다.
## 1. 한 줄 확인 보고
인자 4개를 확보했으면, 작업을 시작하기 전에 무엇을 맡았고 어디서 작업하는지 부모에게
한 줄로 확인한다. 이것이 착수 신호다.
## 2. 마커 기록
로드 시 마커를 쓴다. 위치는 **`$(git rev-parse --git-dir)/cck/child.json`**.
- 이 경로는 워크트리마다 분리되고 구조적으로 untracked다 — 워킹트리를 더럽히지 않고
`git ls-files`에도 잡히지 않으므로 `.gitignore` 등재를 따로 검사할 필요가 없다.
- 내용: 부모 세션 이름 · 역할 · 기준 커밋 해시(§3).
- **치환으로 쓴다(추가가 아니라)** — 새 브리프를 받을 때마다 마커를 덮어쓴다. 같은
워크트리를 다음 작업이 이어받는 경우, 이전 브리프의 부모 이름·기준 커밋이 낡은 채
남아 있는 것을 막는다.
- **예외 — 주 체크아웃에는 쓰지 않는다.** `git rev-parse --git-common-dir`과
`--git-dir`이 같은 경로로 나오면 주 체크아웃이다. 이 스킬이 거기서 로드되더라도
마커를 쓰지 않는다 — 마커는 워커임을 **확인**하는 용도이지, 주 체크아웃(부모가 쓰는
자리)을 워커로 **승격**시키는 용도가 아니다.
- gitdir이 없는 비-git 환경으로 폴백할 때만, 마커 대신 상태 파일이 `.gitignore`에
등재돼 있는지 확인한다.
## 3. 전제 검증 — 구현보다 먼저
브리프에 적힌 **사실 주장**을 코드에서 확인한다. "없다 / 신설한다"라고 적혀 있어도
그대로 믿지 않고 `grep`이나 대상 파일 직접 열람으로 재확인한다. **전제가 틀렸으면
구현하지 않는다** — 멈추고 부모에게 보고한다.
**기준 커밋 확인**: 브리프에 적힌 해시와 자기 워크트리의 `git rev-parse HEAD`를
대조한다. 다르면 착수하지 않고 즉시 에스컬레이션한다. 브랜치 이름(`main` 등)은
기준으로 쓰지 않는다 — 로컬 브랜치는 다른 체크아웃이 물고 있어 낡아 있을 수 있다.
## 4. 구현 — 금지사항은 명령 수준으로 지킨다
- 자기 워크트리의 피처 브랜치에만 커밋한다. 통합 브랜치(`main` 등) 체크아웃·쓰기 금지.
- `push` 금지.
- 데몬·상시 프로세스 재시작 금지 — 부모 세션이나 다른 워커에 영향을 준다.
- 공유 원장(병합 전 상태를 반영하는 파일) 쓰기 금지 — 병합 전까지 다른 워커·부모에
반영되지 않아 상태가 유실되거나 분기된다.
- 브리프의 금지사항은 **명령 수준**으로 지킨다. 예: "읽기만"이 아니라 "`--check`만
실행, `--apply` 실행 금지"처럼 구체적으로 해석한다. 원칙 수준 금지("깨뜨리지 않는다")
는 실제로 어겨진 전례가 있다.
## 5. 되돌려-FAIL 의무
수정이 실제로 결함을 고쳤다는 증거를 남긴다 — 그 수정을 되돌리면 검증이 실제로
FAIL하는지 최소 1건 확인한다. 이것 없이 "테스트 green"만으로 완료를 주장하지 않는다.
## 6. 테스트 결과는 종료코드가 살아 있는 채로
테스트 실행 결과를 파이프로 넘겨 종료코드를 죽이지 않는다 — `… | tail`류는 종료코드가
삼켜져 실패가 성공처럼 보고될 수 있다. 결과를 파일로 받거나 `set -o pipefail` 아래에서
실행한다. 상세 규칙은 계약(`rules/delegation-contract.md`)이 정의한다.
## 7. 완료 보고
보고 첫 줄의 고정 형식은 계약(`rules/delegation-contract.md`)이 SSOT다. 그 형식
그대로 쓴다 — 여기서 다시 정의하지 않는다.
---
## 파리티 — 훅 없는 하네스에서는 지침일 뿐이다
이 절차(브랜치 제한·push 금지·파괴적 명령 금지)를 Claude Code 훅(opt-in 예시)으로
자동 차단하는 경로가 있을 수 있다. **훅은 Claude Code 전용이다.** Codex·Antigravity
등 훅이 없는 하네스에서 워커로 동작할 때는 **자동 차단이 없고, 이 규율은 이 스킬
본문을 읽고 따르는 지침으로만 작동한다.**
이 스킬 자체가 로드돼야 규율이 적용된다는 점도 명시한다 — 이 스킬을 로드하지 않은
세션(또는 워크트리)은 마커도, 위 규율도 적용받지 않는다(fail-open). 없는 보호를 있다고
믿지 않는다.
## 관련
| 문서 | 위치 |
| --- | --- |
| 부모(컨트롤) 규율 | `plugins/common/skills/control-loop/SKILL.md` |
| 브리프 4블록·보고 형식 계약 | `plugins/common/rules/delegation-contract.md` |