auto-issue 헤드리스 워커와 대화형 Claude Code 세션은 동일한 user scope 기계 위에서 돈다. hook pipeline · spawn · teammate · subagent · skill 다섯 축을 user/project scope 레벨에서 실측 비교하면, 분기는 정확히 세 곳에서 난다.
~/.claude의 훅·규칙·스킬·플러그인은 프로세스 종류를 가리지 않는다. 대화형 세션도 헤드리스 워커도 같은 기반을 로드하며, 차이는 전부 그 위층 — project scope의 획득 경로 — 에서 시작된다.
16개 이벤트는 양쪽 모두 존재한다. 다른 것은 발화 빈도와 실패 완화 장치의 위치다 — 대화형은 턴마다 주입이 반복되고, 워커는 단 한 번의 프롬프트에 모든 주입이 실린다.
| 이벤트 | 대화형 세션 | auto-issue 워커 |
|---|---|---|
| SessionStart ×4 | 세션 시작 시 1회 | 디스패치마다 1회 — 매번 fresh 컨텍스트 |
| UserPromptSubmit ×9 | 매 사용자 턴 재발화 — pending 신호·memory 주입이 턴마다 반복 | 정확히 1회 — claude -p 단발 프롬프트에 전부 실림 |
| Stop ×10 | 차단이 사용자에게 표면화 → 대화로 수습 | 런 내부 루프 → attempts cap → dispatcher 산출물 게이트가 최종 방어 |
| Pre/PostCompact | 장수 세션에서 실제 발화 스래싱 실측 | 사실상 미발화 — 초과 시 BIGCTX 모델 스왑 재기동 (완화가 프로세스 외부에) |
| PreToolUse ×13 | exit-2 게이트 + 권한 프롬프트 이중 | exit-2 게이트만 — --dangerously-skip-permissions로 프롬프트 계층 제거 |
통념과 반대다. 지금 이 대화형 세션(hugh-soft)은 project hook 0개로 돌고, bs 워커의 워크트리에는 hooks·settings.json 풀셋이 실재한다. 본 repo에서 이 파일들은 git 미추적이라 워크트리로 전파될 수 없다 — settings.local.json의 존재가 증거다: 부트스트랩이 디스패치 시점에 설치한 것이다. 워커가 project scope 게이트를 더 완전하게 받는다.
대화형의 spawn은 같은 하네스 프로세스 안에서 일어나 부모의 컨텍스트와 대형 주입을 물려받는다. 워커의 spawn은 별도 OS 프로세스라 아무것도 물려받지 않는다 — 대신 환경도, 제어 수단도 완전히 다르다.
대화형의 팀메이트는 주소 지정 가능한 mailbox 실체고, 워커는 팀메이트가 아니다. 그리고 상태 신원(세션 ID·ledger·memory scope)의 격리 수준이 실제 사고 3건의 발생 여부를 정확히 갈랐다.
"말은 통하지만, 상태가 섞인다"
"말은 안 통하지만, 상태가 깨끗하다"
백그라운드 subagent가 세션의 대형 주입을 상속해 Prompt is too long으로 죽고, autocompact 스래싱으로 자원만 소모.
공유 상태 디렉토리에 타 세션·타 프로젝트 경로가 혼입 — 세션 무관 파일 변경이 검증 상태를 오염.
6시간 주기 스케줄러가 공유 경로(.seen.json)를 갱신할 때마다 검증 서명이 stale — 작업 없이도 게이트 재차단.
"목록은 양쪽에 똑같이 주입된다"
"재량이냐, 계약이냐"
user scope 기계는 완전히 동일하다. 갈리는 곳은 세 곳뿐이며, 이 세션이 이틀간 겪은 사고 3건(스폰 실패·ledger 오염·attestation 무효화)은 전부 대화형 쪽 구조의 약점이 발화한 것이다 — 워커 구조에서는 셋 다 설계상 발생하지 않는다. 반대로 대화 중에 과녁이 만들어지는 작업은 동결된 이슈로 표현할 수 없다. 스펙을 문장으로 적을 수 있으면 워커에게, 적을 수 없으면 대화형에.