1차가 전역 자산(~/.claude의 CLAUDE.md·스킬·에이전트)을 훑었다면, 2차는 실제로 일이 벌어지는 작업장을 열었다. 루프 12곳, 웹앱 하나, 브리지 하나, 팀 4곳이다. 그리고 여기서 1차 때는 보이지 않던 사실이 하나 나왔다. 이 문서들을 읽는 모델이 우리가 생각하던 모델이 아니다.
2차 diff는 2026-09-03 HC 지시로 실물에 전부 적용했다. 34개 파일 가운데 33개는 스냅샷과 실물이 같아 그대로 복사했고, pumui-web의 orchestrator.md 하나는 스냅샷 이후 바뀐 부분이 있어 patch로 얹었다(충돌 0). 적용 전 실물 34개는 ~/Projects/prompt-audit/wave2/backup-20260903/live-before-apply.tgz에 백업했다. pumui-web 프롬프트 2개는 실제 서비스가 도는 서버컴 컨테이너의 /app/prompts/에도 올렸다(체크섬 일치, 컨테이너 안 백업 /app/.prompt-audit-bak-20260903/, 프롬프트는 매 호출 때 파일을 읽어 재시작 불필요). 사후 점검: bridge.sh 문법 검사 통과, vault-retro loop.md의 assignee=claude 0건, 팀 에이전트의 opus-4-8 핀 0건.
1차와 다른 점이 하나 더 있다. 이번에는 문서만 고쳐서는 안 되는 항목이 5건 있다. 발송 채널, 동기화 목적지, cron 표기, loop_report 기록 코드, 모델 핀이 전부 감사 범위 밖 스크립트에 있어서, 문서만 바꾸면 문서와 코드가 갈라진다. 4절에 모아 두었다.
1차는 ~/.claude 아래 전역 자산 53개 파일에서 78건을 찾아 45개 파일에 반영했다. 그때 남긴 숙제가 "실제로 돌아가는 작업장은 아직 안 봤다"였다. 2차는 그 작업장을 열었다. 루프 12곳(corp-card-monthly, life-rec, vault-retro, micrec-postproc, payroll-review, budget-monthly, aivault-dedup, amaranth-daily-check, ea-review, golden-knowledge-sync, invest-dividend-trend, mac-memory-watchdog), pumui-web, hermes claude-lane, 팀 4곳(design, publish, research, edu)이다. 스냅샷 63개 파일 중 사람용 문서와 다른 모델 전용 파일 9개를 제외하고 심사했다.
감사의 출발점은 늘 target model이다. 이번 지침이 정한 명목 대상은 Claude Fable 5.1이었다. 그런데 4명의 에이전트가 각자 실행 경로를 실측해 보니, 자산마다 실제로 그 문서를 읽는 모델이 달랐다.
orchestrator.md·template_analyzer.md는 claude-opus-5가 읽는다. Agent SDK가 opus 별칭으로 호출한다.claude-sonnet-5가 읽는다.--model opus로 핀을 박아 둔 상태다.prompt.md 하나뿐이다.claude-opus-4-8 6명, claude-sonnet-5 12명이다.SOUL.md, hermes-agent 리포)는 Claude가 아예 읽지 않는다. 프로바이더가 openai-codex, 즉 GPT다. 감사 제외가 결론이다.여기서 더 중요한 두 번째 사실이 나온다. 무인 런타임이 작업장 CLAUDE.md를 아예 읽지 않는 곳이 다수다. life-rec는 --setting-sources project,local에 별도 작업 디렉터리로 돌아 작업장 CLAUDE.md가 로드되지 않는다. ea-review는 실행 디렉터리가 ~/Projects/amaranth-sync/review/라 같은 결과다. corp-card-monthly의 Stage A, micrec-postproc, budget-monthly, golden-knowledge-sync, invest-dividend-trend, mac-memory-watchdog은 그보다 더 단순하다. 무인 회차에 LLM 호출 자체가 없다. 순수 파이썬·bash 배치다.
지금까지 우리는 작업장 CLAUDE.md를 고치면 봇 행동이 바뀐다고 가정하고 문서를 써 왔다. 실측 결과 그 가정이 성립하는 곳은 12개 루프 중 2곳(vault-retro, aivault-dedup)뿐이다. ea-review는 prompt.md 하나만 성립하고, 나머지 9곳은 문서를 아무리 고쳐도 무인 회차에서는 아무 일도 일어나지 않는다. 그 문서들은 HC가 세션을 열었을 때만 읽히는 사람 겸 대화형 세션용 문서다.
따라서 2차의 조치는 두 갈래다. 실제로 모델이 읽는 소수의 파일은 내용을 고친다. 모델이 읽지 않는 다수의 파일은 "여기는 모델이 읽지 않는다"는 사실을 문서에 적는다. 후자가 W2-C-04·W2-C-16·W2-B-03의 정체다.
| 구분 | A (opus) | B (opus) | C (opus) | D (opus) | 합계 |
|---|---|---|---|---|---|
| 담당 | pumui-web · hermes | 루프 6곳 | 루프 6곳 · edu-team | design · publish · research | 63파일 스냅샷 |
| 감사 심사 파일 | 4 | 12 | 20 | 18 | 55 |
| High | 4 | 1 | 7 | 8 | 20 |
| Medium | 5 | 6 | 10 | 14 | 35 |
| Low | 3 | 5 | 6 | 5 | 19 |
| finding 합 | 12 | 12 | 23 | 27 | 74 |
심사 파일 합계 55는 메인 세션 확정치다. 에이전트가 각자 센 값의 단순 합은 54이고, 1건 차이는 배정 목록 밖 파일(배포 설정 템플릿)을 심사에 넣느냐 마느냐의 판정 차이에서 온다.
에이전트 C·D는 claude-opus-4-8 핀 6건(팀 서브에이전트 6명)을 High로 올렸고 근거를 "폐기된 모델 ID"라고 적었다. 메인 세션 검수에서 이를 정정했다. Opus 4.8은 현행 서비스 모델이라 소집 실패나 폴백 위험이 없다. 구세대 핀을 claude-opus-5로 올리라는 권고 자체는 유지하되, 심각도는 Medium으로 내려 집계했다. 이 정정으로 High가 26에서 20으로, Medium이 29에서 35로 바뀌었다.
1절에서 다룬 그 발견이다. 명목 대상과 실제 실행 모델이 다르고, 문서가 실행 경로에 도달하지 않는 경우가 다수다. 2차에서 만든 문구 튜닝의 상당수는 Fable 5.1이 아니라 Opus 5 또는 Sonnet 5에서 검증된다는 뜻이기도 하다. 이 사실을 각 작업장 문서에 적어 두는 것이 이번 diff의 큰 줄기 하나다. 해당 finding: W2-A-01~04, W2-B-03·06, W2-C-04·14·16·19, W2-D-01~05.
결과가 나가야 할 창구가 이미 닫혀 있는데 문서는 그 창구를 계속 가리킨다. 세 종류가 나왔다.
cokacdir --sendfile을 5단계 전송 수단으로 지시한다. 이 경로는 status:ok를 돌려주고도 실제로 보내지 않는 침묵 실패가 확인돼 전역 CLAUDE.md에서 사용 금지됐다(W2-C-02).문서가 존재하지 않는 곳을 정본처럼 서술한다.
server1:gpt-sandbox/workspace/는 2026-09-01 철거됐다. loop_report.md가 매일 실패를 적고 있다(W2-C-03).artifact-design을 지시한다. 실제 1차 엔진은 2026-07-14부터 Open Design이고, 같은 팀의 헌장과 디자이너 시스템 프롬프트는 이미 그렇게 적혀 있다(W2-D-06·14).tools/reset-session.sh는 이미 실재한다. HC가 디스코드에서 "리셋"이라고 치면 봇은 절차를 실행하는 대신 "이후 단계"라고 답한다(W2-D-11·12·16).이전 세대 모델의 수다를 막으려고 넣은 캡이 이제는 정보를 자른다. 지시를 문자 그대로 따르는 현행 세대에서 특히 그렇다.
latest_summary이자 HC가 결과를 보는 유일한 창구인데, 텔레그램용 100자 절단은 코드가 이미 따로 한다(W2-A-01).1f는 한 곳만 고치면 패턴이 남는다. 같은 문서의 상한을 전부 함께 걷어내고 목표와 청중으로 다시 써야 한다.
사람이 보지 않는 무인 실행인데, 모델에게 그 사실을 알려주지 않는다.
2026-08-28 사고가 있었다. vault-retro가 만든 개선 제안 카드의 assignee를 claude로 걸면 claude-lane 브리지가 60초 안에 claim해서 승인 없이 자동 실행한다. 수리 때 retro_prompt.md와 CLAUDE.md는 고쳤는데 loop.md를 빠뜨렸다(W2-B-01). 골든셋 채점기준 4번에도 옛 값이 그대로 남아 있다(W2-B-09). 같은 작업장의 CLAUDE.md는 hc 고정을 사고 근거와 함께 못박고 있어서, 지금 이 작업장은 서로 반대되는 두 값을 같은 컨텍스트에 넣고 있다.
여기에 구세대 모델 핀 6건(팀 서브에이전트 6명의 model: claude-opus-4-8)을 더한다. Opus 4.8은 현행 서비스 모델이라 당장 깨지지는 않지만, 팀 헌장이 의도한 최신 모델 배분과 어긋난다. 이관표상 후속은 claude-opus-5다.
| ID | 자산 | 파일:행 | 요지 | 조치 |
|---|---|---|---|---|
| W2-A-01 | hermes | ~/.hermes/claude-lane/bridge.sh:314,316 | Claude에게 가는 프롬프트가 결과 요약을 "한국어 3문장 이내"로 묶는다. 이 요약이 칸반 카드의 유일한 결과 창구인데, 텔레그램용 100자 절단은 코드가 이미 따로 한다. 캡이 얻는 것은 없고 잃는 것만 있다 | rewrite |
| W2-A-02 | hermes | bridge.sh:9,294 | 삭제·권한 우회·설정 수정 금지가 셸 주석과 사람용 README에만 있고, 모델에게 가는 프롬프트에는 없다. 현재는 CLI 권한 프롬프트에만 기대고 있다 | add |
| W2-A-03 | hermes | bridge.sh:313-317 | 60초 틱, 900초 타임아웃으로 도는 무인 파이프라인인데 자율 실행 선언이 없다. 턴이 질문이나 계획으로 끝나면 카드가 빈 요약으로 닫힌다 | add |
| W2-A-04 | hermes | bridge.sh:31 | 롤백 안내 주석이 이전 세대 ID claude-fable-5를 가리킨다. 주석대로 되돌리면 한 세대 내려간다 | rewrite |
| W2-B-01 | vault-retro | ~/loops/vault-retro/loop.md:26-27 | 개선 제안 카드에 assignee=claude가 잔존한다. 같은 작업장 CLAUDE.md는 2026-08-28 무승인 자동 실행 사고를 근거로 hc 고정을 못박는다. 두 값이 같은 컨텍스트에 함께 들어온다 | rewrite |
| W2-C-01 | invest-dividend-trend | ~/loops/invest-dividend-trend/loop.md:16,27 · CLAUDE.md:22 | 완료 요약과 실패 알림을 둘 다 음소거된 디스코드로 보낸다. muted 로그에 이 루프 항목 2건이 실제로 삼켜져 있다. 성공·실패가 모두 침묵 실패한다 | replace |
| W2-C-02 | amaranth-daily-check | ~/loops/amaranth-daily-check/loop.md:24,41 | 전역 금지된 cokacdir --sendfile을 전송 수단으로 지시하고, 자산 줄에 자격증명이 인라인으로 박혀 있다. 대체는 텔레그램 헤르메스 봇 | replace |
| W2-C-03 | golden-knowledge-sync | ~/loops/golden-knowledge-sync/loop.md:6-8 | 동기화 목적지가 2026-09-01 철거된 gpt-sandbox 경로다. 실측으로 디렉터리 부재를 확인했고 loop_report.md가 매일 실패를 적고 있다 | rewrite |
| W2-C-04 | ea-review | ~/loops/ea-review/CLAUDE.md:1-3 | 틀린 지도다. 무인 회차의 실행 디렉터리가 다른 폴더라 이 파일은 읽히지 않는다. 봇 행동을 바꾸려고 여기를 고치면 아무 일도 일어나지 않고, 실제 전달 텍스트는 prompt.md뿐이다 | add |
| W2-C-05 | ea-review | ~/loops/ea-review/prompt.md 7곳 | 숫자 출력 상한이 7곳에 흩어져 있다(60자·3~6줄·0~3개·20~80자·2~3문장). headline의 60자는 코드 폴백 120자와 이미 어긋난다. 상한을 함께 걷어내고 청중·용도 프레이밍으로 다시 썼다 | rewrite |
| W2-C-06 | edu-team | ~/edu-team/CLAUDE.md:69,112 | 부서 신설 때의 "EduVault에 실제로 아무것도 추가하지 않는다" 동결이 상시 헌장에 화석으로 남았다. 팀은 이미 커리큘럼 3종을 만들고 발간까지 마쳤다. 지시를 잘 따르는 모델일수록 이 괄호를 읽고 발간 단계를 스스로 막는다 | remove |
| W2-C-07 | edu-team | CLAUDE.md:93,101 · 교육디렉터.md:80 · edu/SKILL.md:145,157 | "같은 사안 2왕복 초과 금지" 캡이 완주 실패 반려 루프에 걸려 검증을 두 번에 끊는다. 팀의 존재 이유(완주 확인 전 발간 금지)와 충돌한다. 숫자를 없애고 종료 조건으로 다시 썼다 | rewrite |
| W2-D-05 | research-team | ~/research-team/CLAUDE.md:115,119 | 모델 배분표가 구세대 ID를 적고 "지정 안 하면 전원 Opus"라고 하는데 사실은 반대다. 리서처·검수자·에디터 frontmatter가 claude-sonnet-5로 고정돼 있어 옵션 없이 소집하면 전원 Sonnet으로 뜬다 | rewrite |
| W2-D-06 | design-team | ~/design-team/.claude/skills/design/SKILL.md:100 | 제작 엔진이 2026-07-14부터 Open Design인데 스킬 본문만 옛 엔진(artifact-design)을 지시한다. 헌장과 디자이너 시스템 프롬프트는 이미 현행이라 문서끼리 충돌한다 | rewrite |
| W2-D-07 | design-team | design/SKILL.md:117 | 헌장이 "모든 납품의 필수 단계"로 못박은 독자 검수가 실행 절차 문서에는 아예 없다. 절차를 충실히 따르는 모델이라 헌장에만 있는 단계는 그대로 누락된다 | add |
| W2-D-08 | publish-team | ~/publish-team/.claude/agents/디렉터.md:23 | 첫독자가 전용 에이전트 파일까지 있는 정식 단계인데 디렉터의 역할 목록에서 빠졌다. 지휘자가 모르는 단계는 실행되지 않는다 | add |
| W2-D-09 | publish-team | 디렉터.md:35 | 같은 누락이 파이프라인 절에서 반복된다. 두 곳을 다 고쳐야 순서가 확정된다 | add |
| W2-D-10 | publish-team | ~/publish-team/.claude/agents/편집자.md:49 | 헌장이 2026-07-19에 "팀 크레딧은 발간본에 넣지 않는다"로 바뀌었는데 편집자의 발간 템플릿은 옛 크레딧 줄을 그대로 들고 있다. 템플릿이 헌장보다 구체적이라 실제 발간물에 박힌다 | remove |
| W2-D-11 | design-team | ~/design-team/CLAUDE.md:94-96 | "디스코드 봇 연결은 이후 단계다"라는 화석. 봇 LaunchAgent와 tools/reset-session.sh는 이미 실재한다. HC가 "리셋"이라고 치면 봇이 절차 대신 "이후 단계"라고 답한다 | rewrite |
| W2-D-12 | publish-team | ~/publish-team/CLAUDE.md:109-111 | 같은 화석. 이쪽도 봇 plist와 리셋 스크립트가 실재하고, 스크립트 내부에서 재시작까지 실행한다 | rewrite |
2026-09-03 오후 갱신. HC 지시 "남은 결정 6건 중 코드 고치는 것도 다 처리해"로 아래 (a)~(f)는 전부 처리됐다. 처리 결과, 감사 판정 정정 1건, HC가 승인한 2건은 11절에 있다.
| 항목 | 내용 | 시한·비고 |
|---|---|---|
| (a) vault-retro 모델 핀 | ~/loops/vault-retro/retro.sh:105가 --model opus로 고정돼 있다. 이 작업장은 감사 대상 문서가 무인 회차에 실제로 주입되는 두 곳 중 하나라, 2차에서 넣은 문구 튜닝(W2-B-02 포함)이 Fable 5.1이 아니라 opus에서 검증된다. 핀을 유지할지 풀지 결정이 필요하다 |
주 1회 회차. 다음 회차 전 결정이면 충분 |
| (b) budget-monthly 채널 | 월 요약을 디스코드로 보내는 설계다. 전역 규칙은 디스코드 자동 리포트 금지이고 형제 루프 3곳은 모두 텔레그램이다. 문서만 고치면 코드와 갈라지므로 발신 코드까지 함께 바꿔야 한다. budget-monthly의 발신 경로는 ~/Projects/uplus-bill/notify.py, invest-dividend-trend는 notify-wrap.sh다 |
첫 자동 회차 2026-09-09 전에 판단 |
| (c) 코드 동반수정 5건 | 문서만 고쳐서는 완결되지 않는 항목이다. ① 발송 채널 교체(notify-wrap.sh) ② 동기화 목적지 재지정(sync.sh) ③ amaranth-daily-check cron 40 22 31 2 *는 2월 31일이라 영구 발화 불가 ④ invest-dividend-trend의 loop_report append 코드를 런타임 안에 심기 ⑤ aivault-dedup run.sh의 모델 핀. 전부 감사 범위 밖 파일이라 diff에는 없다 |
③은 감사 오독으로 판명. cron 파킹은 2026-07-10 HC 승인 조치이고 실제 점검은 LaunchAgent 순찰이 매일 22:40 수행 중(11절) |
| (d) edu-team AGENTS.md 동조 | ~/edu-team/AGENTS.md는 5행만 다른 CLAUDE.md 미러이고 대상이 Codex(GPT)라 감사에서 제외했다. 다만 W2-C-06·W2-C-07을 CLAUDE.md에만 반영하면 두 파일이 갈라진다. 같은 두 곳을 손으로 옮길지, 미러 구조 자체를 바꿀지 결정이 필요하다 |
diff 적용과 같은 시점 |
| (e) 2차 diff 적용 여부 | 적용 완료(2026-09-03). 남은 결정은 코드가 함께 바뀌어야 하는 (a)~(d)와, 미커밋 상태로 남은 리포 5곳(pumui-web prompts, design-team, publish-team, research-team, edu-team)의 커밋 여부다 | HC 지시 대기 |
| (f) 1차 잔여 2건 | ① 심볼릭 링크로 걸린 스킬 리포 4곳의 SKILL.md 변경이 아직 원 리포에 커밋되지 않았다 ② 1차 C-11(notebooklm 본문 통합)이 미처리로 남아 있다 | 1차 마감 잔여 |
현재 상태: 적용 완료. 아래 절차를 그대로 실행했다(cp 33, patch 1, 실패 0). 되돌리려면 백업 tar를 풀면 된다.
patch -p1 일괄 적용을 권하지 않는가diff의 경로는 스냅샷 기준(orig/…, proposed/…)이고 실물 경로와 1:1이 아니다. 매핑은 이렇다.
| 스냅샷 경로 | 실물 경로 |
|---|---|
hermes/ | ~/.hermes/ |
loops/ | ~/loops/ |
pumui-web/ | ~/Projects/pumui-web/ |
teams/design-team/ | ~/design-team/ |
teams/publish-team/ | ~/publish-team/ |
teams/research-team/ | ~/research-team/ |
teams/edu-team/ | ~/edu-team/ |
# 1) 한 파일씩 무엇이 바뀌는지 눈으로 본다
cd ~/Projects/prompt-audit/wave2
diff -u orig/loops/vault-retro/loop.md proposed/loops/vault-retro/loop.md
# 2) 실물과 스냅샷이 그동안 달라지지 않았는지 확인한다 (중요)
cmp -s orig/loops/vault-retro/loop.md ~/loops/vault-retro/loop.md \
&& echo "스냅샷과 실물이 같다. 적용 가능" \
|| echo "실물이 그사이 바뀌었다. 수동 병합 필요"
# 3) 같을 때만 복사한다
cp proposed/loops/vault-retro/loop.md ~/loops/vault-retro/loop.md
# 4) 자산 하나를 끝낸 뒤 그 자산만 1회 실행해 결과를 본다
2단계를 건너뛰지 않는 편이 좋다. 스냅샷을 뜬 2026-09-03 이후에 실물이 손대졌다면 cp가 그 변경을 조용히 덮는다.
findings/ALL.diff(원본)에는 자격증명 한 줄이 들어 있다. W2-C-02가 amaranth-daily-check 문서에 인라인으로 박혀 있던 라우팅 키를 삭제하는 hunk라, 지워지는 값이 - 줄에 그대로 보인다. 이 파일은 채팅·업로드·공개 배포에 태우지 말고 로컬에서만 쓴다.findings/ALL.masked.diff를 쓴다. 이 보고서의 8절 표도 마스킹본에서 뽑았다.~/loops/ea-review/prompt.md는 1행의 v3 토큰을 review.py가 정규식으로 읽는다. 이번 diff는 1행을 건드리지 않았고 수정본에서 v3 반환을 확인했다. 앞으로도 1행은 손대지 않는다.각 finding에는 사전·사후 probe가 붙어 있다(6절의 각 에이전트 리포트 원문에 표로 있다). 삭제와 수정은 결론이 아니라 가설이라는 뜻이다. 특히 다음 세 가지는 적용만으로는 확인되지 않는다.
status:ok 문자열은 도달 근거가 아니고, 텔레그램에 실제로 도착한 것만 근거다.model: 줄을 지워 부모 세션 상속으로 되돌린다.에이전트 4명 모두 opus로 돌렸다. 아래 표는 각 리포트의 finding 전체이고, Medium과 Low도 포함한다. 심각도는 메인 세션 정정을 반영한 값이다.
실측 요지: 배정 자산 중 명목 target model(Fable 5.1)로 도는 것이 한 건도 없다. pumui-web은 claude-opus-5, hermes claude-lane은 claude-sonnet-5다. 따라서 판정 근거를 Fable 5.1 절이 아니라 이관 문서의 Opus 5·Sonnet 5 절에서 가져왔다. 배정 9개 중 5개는 사람용 문서이거나 GPT 전용이라 제외했다(pumui-web/README.md, claude-lane/README.md, SOUL.md, hermes-agent의 soul.md·system_prompt.py). hermes-agent 리포는 서드파티다.
| ID | 파일:행 | 요지 | 패턴 | 심각도 | 조치 |
|---|---|---|---|---|---|
| W2-A-01 | bridge.sh:314,316 | 결과 요약 "한국어 3문장 이내" 캡. 칸반 latest_summary이자 HC의 유일한 결과 창구인데 텔레그램용 100자 절단은 코드가 따로 한다 | 1f | High | rewrite |
| W2-A-02 | bridge.sh:9,294 | 삭제·권한 우회·설정 수정 금지가 셸 주석과 사람용 README에만 존재. 모델 프롬프트에는 없다 | 4 | High | add |
| W2-A-03 | bridge.sh:313-317 | 무인 파이프라인인데 자율 실행 선언 없음. 코드에 이미 "요약을 남기지 않음" 대체 문구가 있다 | 4 | High | add |
| W2-A-04 | bridge.sh:31 | 롤백 주석이 이전 세대 claude-fable-5를 안내 | 1d | High | rewrite |
| W2-A-05 | orchestrator.md:331-339 | [DOWNLOAD] 줄을 tool result에 묶는 문장이 없다. 서버가 이 줄을 파싱해 다운로드 링크로 바꾸므로 경로가 틀리면 사용자 화면이 바로 깨진다 | 4 | Medium | add |
| W2-A-06 | orchestrator.md:427-431 | "3만 자를 넘길 것 같으면" 및 "답할 여력이 남지 않는다"는 작은 맥락창 시절 화석이자 맥락 부족을 모델에게 알리는 문장. 선택적 읽기 절차 자체는 유지 | 1d | Medium | rewrite |
| W2-A-07 | template_analyzer.md:62-63 | 디스크 파일명은 언제나 original.hwpx이고 진짜 원본 파일명은 트리거 메시지로 들어온다. 현행 문장대로면 모델이 쓸 수 있는 정보를 두고 늘 "draft"로 떨어진다 | 3 | Medium | rewrite |
| W2-A-08 | .env:49 · .env.example:79 | PUMUI_PERSONAL_MODEL 값이 코드 주석의 정반대다. 주석은 "여기에 값을 박으면 개인 토큰 사용자의 모든 턴이 모델 접근 불가로 죽는다"고 적혀 있고 코드 기본값도 빈 값인데 배포 템플릿이 덮어쓴다 | 4 | Medium | flag |
| W2-A-09 | claude_agent.py:774-800 | SDK가 제공하는 effort를 지정하지 않는다. Opus 5 권고는 effort 재실측이고 이것이 주된 비용·지연 레버다. 직원 6명이 공용 토큰을 쓰는 앱이라 실익이 크다. 적정값은 실측 필요 | 4 | Medium | flag |
| W2-A-10 | orchestrator.md:8-9,26-32 | 여는 말 금지 규칙. 지금은 유지가 맞다. Opus 계열은 서술이 늘어나는 방향이라 이 규칙이 권고 형태다. 다만 모델을 Fable 5.1로 옮기면 방향이 뒤집히므로 핀 변경 시 재검토 대상 | 1d(조건부) | Low | flag |
| W2-A-11 | bridge.sh:319 | TIMEOUT_SECS=900은 정확히 15분이고, 이관 문서는 Fable 5.1에서 "15분짜리 단일 요청은 정상"이라고 적는다. 현재 핀(Sonnet 5)에서는 여유가 있으나 상위 티어로 올리면 경계선에 걸린다 | 4 | Low | flag |
| W2-A-12 | claude_agent.py:203-209 | 별칭 핀은 실측 근거(2026-09-01)가 주석에 남은 의도된 결정이라 결함이 아니다. 남는 위험은 SDK·CLI 업그레이드 때 해석이 조용히 달라지는 것뿐이라 재실측 메모만 붙인다 | 4 | Low | flag |
유지 판정으로 남긴 것: orchestrator의 "짧게 말한다. 기본은 2~3문장"(Opus 5에서는 오히려 권고 방향), 실제 사용 사례 기반 금지 목록, 재시도 최대 3회 같은 운영 경계, 아마란스 도구 8개 열거(2026-08-31 실측 사고 근거), 앵커 1회 등장 확인(빌드 도구의 성립 조건). bridge.sh 쪽은 CC_HANDOFF_GUARD=1, 429 감지 범위 축소, .paused와 .paused-until 분리, 인증 실패 누적 정지, resume 무음 실패 감지가 모두 실측 근거가 달린 운영 경화라 유지했다.
실측 요지: 6곳 중 감사 대상 문서가 무인 실행에 실제로 주입되는 곳은 vault-retro 하나이고, 그 하나는 Fable 5.1이 아니라 opus 핀에서 돈다. 나머지 5곳의 문서는 HC가 여는 대화형 세션만 읽는다. corp-card-monthly의 Stage A와 micrec-postproc, budget-monthly는 무인 회차에 LLM 호출 자체가 없다. 12개 파일 전부 HC 작성이다.
| ID | 파일:행 | 요지 | 패턴 | 심각도 | 조치 |
|---|---|---|---|---|---|
| W2-B-01 | vault-retro/loop.md:26-27 | 개선 제안 카드 assignee=claude 잔존. 같은 작업장 CLAUDE.md는 무승인 자동 실행 사고를 근거로 hc 고정을 못박는다. 수리 때 retro_prompt.md와 CLAUDE.md만 고치고 이 파일을 빠뜨렸다 | 1d | High | rewrite |
| W2-B-02 | vault-retro/CLAUDE.md:13 신설 | 무인 회차인데 자율 실행 선언이 없다. 주 1회 무인, 성공 시 무음 설계라 턴이 "이제 카드를 등록하겠습니다"로 끝나면 카드도 안 생기고 아무도 모른다 | 4 | Medium | add |
| W2-B-03 | life-rec/loop.md:8 | 백엔드로 적힌 plist가 존재하지 않고, 같은 파일 6행의 상태값과도 어긋난다. 실제 런타임이 이 작업장 CLAUDE.md를 읽지 않는다는 중요한 사실이 어디에도 없다 | 1d | Medium | rewrite |
| W2-B-04 | budget-monthly/loop.md:8 | 줄 끝에 템플릿 작성자용 선택지 주석이 그대로 남았다. 채워 넣은 뒤 지웠어야 할 흔적이고, 죽은 경로를 아직 선택지처럼 보여준다. 6곳 중 여기에만 있다 | 2 | Medium | remove |
| W2-B-05 | payroll-review/CLAUDE.md:16 | "텔레그램·디스코드 보고는 결론 요약만". 디스코드 자동 발신은 2026-08-17부터 전면 음소거다. 이 루프는 런타임이 없어 문장이 곧 지시라, 개인 급여 결론이 muted 로그로 사라질 수 있다 | 1d | Medium | rewrite |
| W2-B-06 | vault-retro/retro.sh:105 | 무인 주입되는 유일한 작업장인데 실행 모델이 --model opus로 고정이다. 2차 문구 튜닝이 Fable 5.1이 아니라 opus에서 검증된다. 핀 유지 여부는 HC 결정 사안 | 4 | Medium | flag |
| W2-B-07 | budget-monthly/loop.md:13,22,26 · CLAUDE.md:21,25 | 월 요약을 디스코드로 통보하는 서술 5곳. 발신 경로에 음소거 가드가 없어 실제로 나가긴 하지만 전역 규칙과 충돌하고 형제 루프 3곳은 모두 텔레그램이다. 문서만 고치면 코드와 어긋나므로 diff를 내지 않았다 | 1d | Medium | flag |
| W2-B-08 | 5개 작업장 CLAUDE.md | "채점은 작성과 분리된 시각으로 수행한다"는 손 안 댄 템플릿 문장이 5곳에 그대로 있다. micrec은 런타임이 자가채점하고 budget-monthly는 LLM 턴이 아예 없다. 실행 주체 없는 지시는 소음이지만 근본은 템플릿이라 개별 파일만 고치면 다음 루프에서 또 생긴다 | 1c | Low | flag |
| W2-B-09 | vault-retro/golden_set.md 채점기준 4 | W2-B-01과 같은 뿌리. 루프 자신이 loop_report에 "옛 문구가 남아 있음"이라고 적어 두었다. 골든셋은 배정 밖이고 "시험지 임의 변경 금지"라 HC 판단 대기 | 1d | Low | flag |
| W2-B-10 | life-rec/loop.md:15,51 · payroll-review/loop.md:35 | 2026-08-26 기기 명명 개편 전 표기(ssh win). ssh config에 구 별칭이 살아 있어 동작에는 문제가 없다. 표기 통일은 미용 수준 | 1d | Low | flag |
| W2-B-11 | corp-card-monthly/CLAUDE.md:22 · loop.md:69 | 같은 파일 20행이 비밀 노출 금지를 선언하는데 22행과 loop.md:69는 채팅 대상 식별자를 본문에 그대로 적는다. 실질 위험은 낮지만 규칙과 예시가 어긋나면 모델이 어느 쪽을 규칙으로 볼지 흔들린다. 값을 지우기보다 금지 대상을 토큰·비밀번호로 좁히는 편이 낫다 | 1c | Low | flag |
| W2-B-12 | micrec-postproc/loop.md:2-5 | 문서 개정 이력을 모델에게 서술하는 문단이라 형식상 화석 후보다. 그러나 날짜·출처 표기는 HC의 provenance 관례이고 백업본 위치는 실제 롤백에 쓰이므로 삭제 제안하지 않는다. 기록만 남긴다 | 1d | Low | flag |
finding 없음: payroll-review/loop.md는 백엔드 서술("현재 = 온디맨드, 추천 = LaunchAgent, 등록은 HC 승인 대기")이 실측과 정확히 맞아 life-rec 수정안의 본보기로 삼았다. life-rec/CLAUDE.md는 안전게이트 전량이 날짜·사고 근거를 달고 코드와 일치했다. budget-monthly의 "재시도 최대 2회"는 스크립트 내부 상수를 가리키고 loop.md의 "래퍼는 자동 재시도 안 함"과 층위가 달라 모순이 아니다.
실측 요지: 6개 루프 중 살아 있는 모델 호출부는 aivault-dedup 하나(--model opus 핀)이고, ea-review는 prompt.md만 CLI 기본(Fable 5.1)으로 읽힌다. golden-knowledge-sync·invest-dividend-trend·mac-memory-watchdog은 모델 접점이 아예 없고, amaranth-daily-check는 cron이 2월 31일이라 무인 회차가 발화하지 않는다. edu-team은 세션이 CLI 기본, 서브에이전트 6명은 frontmatter 핀이다. AGENTS.md는 Codex 대상이라 감사 제외로 판정했다.
| ID | 파일:행 | 요지 | 패턴 | 심각도 | 조치 |
|---|---|---|---|---|---|
| W2-C-01 | invest-dividend-trend/loop.md:16,27 · CLAUDE.md:22 | 성공·실패 알림이 둘 다 음소거된 디스코드로 나간다. muted 로그에 이 루프 항목 2건이 실제로 삼켜져 있다 | 1d | High | replace |
| W2-C-02 | amaranth-daily-check/loop.md:24,41 | 전역 금지된 cokacdir --sendfile 지시. 겸해서 자산 줄에 박혀 있던 자격증명을 문서에서 걷어냈다 | 1d | High | replace |
| W2-C-03 | golden-knowledge-sync/loop.md:6-8 | push·pull 목적지가 철거된 gpt-sandbox 경로다. 실측으로 디렉터리 부재 확인, loop_report가 매일 실패를 적고 있다 | 1d | High | rewrite |
| W2-C-04 | ea-review/CLAUDE.md:1-3 | 무인 회차의 실행 디렉터리가 달라 이 파일은 읽히지 않는다. 여기를 고쳐도 봇 행동은 안 바뀐다는 사실을 문서에 명시 | 1d | High | add |
| W2-C-05 | ea-review/prompt.md:134,139,149,152,156-157,171,172 | 숫자 출력 상한 7곳. headline 60자는 코드 폴백 120자와 이미 어긋난다. 형식에 민감한 라벨 규약과 JSON 스키마는 그대로 두고 수치만 걷어냈다 | 1f | High | rewrite |
| W2-C-06 | edu-team/CLAUDE.md:69,112 | 세션 한정 동결("EduVault에 아무것도 추가하지 않는다")이 상시 헌장에 화석으로 남았다. 팀은 이미 발간까지 마쳤다 | 1d | High | remove |
| W2-C-07 | edu-team/CLAUDE.md:93,101 · 교육디렉터.md:80 · edu/SKILL.md:145,157 | "2왕복 초과 금지" 캡이 완주 실패 반려 루프에 걸려 있다. 문서 자신이 이유를 "토큰 폭주 방지"라고 적어 이전 세대 가드레일임을 밝힌다. 숫자를 없애고 종료 조건으로 다시 썼다 | 1f | High | rewrite |
| W2-C-08 | 교육디렉터.md:9 · 첫학습자.md:9 | model: claude-opus-4-8. 이관표상 후속은 claude-opus-5다. 나머지 4명의 claude-sonnet-5는 현행 대상이라 그대로 둔다. 메인 세션 검수에서 High에서 Medium으로 정정(Opus 4.8은 현행 서비스 모델이라 실패·폴백 위험 없음) | 4 | Medium | rewrite |
| W2-C-09 | amaranth-daily-check/loop.md:6,8 | 상태가 active로 적혀 있으나 등록 cron이 2월 31일이라 영구히 발화하지 않는다. 마지막 실행 2026-07-09. active 표기가 "돌고 있다"는 오판을 만든다 | 1d | Medium | rewrite |
| W2-C-10 | amaranth-daily-check/loop.md:19 | "200자 이내 한국어 메시지로 요약". 아래 메시지 견본 4개는 형식 고정이라 유지하고 수치만 용도 프레이밍으로 바꿨다 | 1f | Medium | rewrite |
| W2-C-11 | ea-review/loop.md:6-8 | 상태·주기·백엔드 셋 다 현행과 다르다. plist는 파일로 있으나 미로드(온디맨드 전환)이고, 평일·시간 게이트는 plist가 아니라 실행 스크립트에 있다 | 1d | Medium | rewrite |
| W2-C-12 | ea-review/prompt.md:8,14-15 | "v3에서 바뀐 것"이라는 버전 diff 서술과 "어떤 모델이 언제 돌려도 같은 결과가 나와야 하므로"라는 모델 세대 가정. 절차와 checks 기록은 유지하고 이유를 붙여 다시 썼다 | 1d+4 | Medium | rewrite |
| W2-C-13 | ea-review/prompt.md:7 신설 | 무인 배치인데 그 사실이 프롬프트에 없다. 자율 실행 선언, "확인 못 한 것은 멈추지 말고 checks에 남겨라", 다건 완주를 추가 | add | Medium | add |
| W2-C-14 | aivault-dedup/CLAUDE.md:5 신설 | 유일하게 살아 있는 headless 호출부인데 자율 실행 선언이 없다. 5단계가 HITL 정지점이라 "5단계까지 질문 없이 진행하고 거기서 멈춘다"로 범위를 고정했다 | add | Medium | add |
| W2-C-15 | invest-dividend-trend/loop.md:8 | 백엔드를 cokacdir로 적었으나 실제는 LaunchAgent에서 파이썬을 부르고 요약은 agy(Gemini)가 한다. 함께 등록된 cokacdir 잡은 파킹돼 한 번도 발화한 적이 없다 | 1d | Medium | rewrite |
| W2-C-16 | invest-dividend-trend/CLAUDE.md:3-7 · mac-memory-watchdog/CLAUDE.md:3-7 | 무인 회차에 모델이 없는 결정적 배치인데 "에이전트는 이 규칙을 항상 지킨다"와 "회차마다 loop_report에 한 줄 추가"를 지시한다. 실제로 invest 쪽은 산출물이 계속 나오는데 loop_report append는 2026-07-27에서 끊겼다 | 4 | Medium | rewrite |
| W2-C-17 | mac-memory-watchdog/CLAUDE.md:20 · loop.md:22 | 중단 명령이 구형 launchctl unload다. 같은 자산군의 다른 두 루프는 현행 bootout을 쓴다. 서로 어긋나는 중복 | 1d | Medium | rewrite |
| W2-C-18 | mac-memory-watchdog/CLAUDE.md:21 · loop.md:23 | "1일 1회회" 오타가 두 파일에 복제됐다. W2-C-17과 같은 줄 묶음이라 같은 hunk에 실렸다 | 2 | Low | rewrite |
| W2-C-19 | aivault-dedup/loop.md:8 | 러너가 --model opus로 고정돼 있다. 재기준선을 권하지만 run.sh가 감사 범위 밖이고 loop.md의 서술 자체는 사실이라 문서는 고치지 않는다 | 4 | Low | flag |
| W2-C-20 | edu-team/AGENTS.md 전체 | 5행만 다른 CLAUDE.md 미러. Codex 대상이라 감사 제외지만 W2-C-06·07을 CLAUDE.md에만 반영하면 두 파일이 갈라진다 | 2 | Low | flag |
| W2-C-21 | edu/SKILL.md:1-4 | frontmatter가 name·description뿐이다. 1차 횡단 패턴(triggers:·preamble-tier:)은 애초에 없어 해당 없음. when_to_use도 없지만 팀 스킬 4종이 모두 같은 형태라 단독으로 고치면 오히려 갈라진다 | 3 | Low | flag |
| W2-C-22 | edu-team/CLAUDE.md:76 · edu/SKILL.md:32 | "질문은 한 번에 1~2개만"은 형태상 숫자 상한이지만 출력 상한이 아니라 HC 본인의 대화 취향이다. keep 규칙에 따라 유지 | 1f | Low | flag |
| W2-C-23 | 루프 CLAUDE.md 안전게이트 절 | 압박 표기의 중첩. 뒤에 붙은 제약(아마란스 결재 금지, 삭제 금지, 읽기 전용, 429 즉시 중단)은 전부 실제 재발 이력이 있는 업무 제약이라 표현 완화만 flag하고 손대지 않는다 | 1a | Low | flag |
finding 없음: aivault-dedup/loop.md의 상태·백엔드·HITL 정지점은 실측과 일치. invest-dividend-trend/loop.md의 작업 지시 순서는 실제 스크립트와 같다. mac-memory-watchdog/loop.md의 상수 3개는 코드와 일치. edu팀 서브에이전트 4명은 현행 모델 핀에 화석·상한이 없다. 실연프로듀서의 "영상 제작 엔진은 아직 정해지지 않았다(의도적)"와 시도 결과를 산출물에 남기라는 지시는 오히려 현행 권고와 같은 방향이라 유지했다.
실측 요지: 세 팀 모두 settings.json에 model 키가 없어 메인 세션은 CLI 기본(Fable 5.1)이다. 서브에이전트만 frontmatter가 모델을 고정한다. 진입 스킬(/design·/publish·/research)은 전역이 아니라 팀 폴더 로컬에만 있어, 그 폴더에서 세션을 열었을 때만 로드된다. PROGRESS.md 3개는 사람용 진행 기록이고 어느 문서도 참조하지 않아 감사에서 제외했다. 실제로 세 파일 모두 팀원 이름이 개편 전 세대로 남아 있어 갱신 중단이 확인된다.
| ID | 파일:행 | 요지 | 패턴 | 심각도 | 조치 |
|---|---|---|---|---|---|
| W2-D-05 | research-team/CLAUDE.md:115,119 | 모델 배분표가 구세대 ID를 적고 "지정 안 하면 전원 Opus"라고 하는데 실제 frontmatter가 sonnet 고정이라 정반대다. 팀장이 이 문장을 믿고 옵션을 생략하면 의도한 배분이 깨진다 | 1d | High | rewrite |
| W2-D-06 | design/SKILL.md:100 | 제작 엔진이 Open Design으로 바뀐 뒤에도 스킬 본문만 옛 엔진을 지시해 디렉터 지시문과 디자이너 시스템 프롬프트가 충돌한다 | 1d | High | rewrite |
| W2-D-07 | design/SKILL.md:117 | 헌장이 필수로 못박은 독자 검수 단계가 실행 절차에 없어 3단계 다음이 곧바로 납품이다 | 1d | High | add |
| W2-D-08 | publish/디렉터.md:23 | 첫독자 단계가 디렉터 역할 목록에서 빠져 검수자 다음이 곧바로 편집자다 | 1d | High | add |
| W2-D-09 | publish/디렉터.md:35 | 같은 누락이 파이프라인 절에서 반복된다 | 1d | High | add |
| W2-D-10 | publish/편집자.md:49 | 발간 템플릿이 2026-07-19에 폐지된 팀 크레딧 줄을 그대로 들고 있다. 템플릿이 헌장보다 구체적이라 실제 발간물에 박힌다 | 1d | High | remove |
| W2-D-11 | design-team/CLAUDE.md:94-96 | "디스코드 봇 연결은 이후 단계다" 화석. 봇 LaunchAgent와 리셋 스크립트는 이미 실재한다 | 1d | High | rewrite |
| W2-D-12 | publish-team/CLAUDE.md:109-111 | 같은 화석. 리셋 스크립트가 내부에서 재시작까지 실행한다 | 1d | High | rewrite |
| W2-D-01 | design/디자인디렉터.md:9 | model: claude-opus-4-8. 이관표상 후속은 claude-opus-5. Opus 4.8은 현행 서비스 모델이라 소집 실패·폴백은 없고, 구세대 핀이 팀 헌장의 최신 모델 의도와 어긋나는 것이 문제다. 메인 세션 검수에서 High에서 Medium으로 정정 | 1d | Medium | rewrite |
| W2-D-02 | publish/디렉터.md:9 | 같은 구세대 핀. 정정 후 Medium | 1d | Medium | rewrite |
| W2-D-03 | publish/첫독자.md:9 | 같은 구세대 핀. 정정 후 Medium | 1d | Medium | rewrite |
| W2-D-04 | research/팀장.md:9 | 같은 구세대 핀. 정정 후 Medium | 1d | Medium | rewrite |
| W2-D-13 | design/디자인디렉터.md:18-21 | W2-D-07의 짝. 스킬을 거치지 않고 디렉터를 직접 소집하는 경로에서도 독자 검수가 지켜지도록 역할 목록에 단계를 넣는다 | 1d | Medium | add |
| W2-D-14 | design/SKILL.md:147 | 에러 처리의 전제가 한 세대 어긋나 있다. Open Design 실패 시 무엇을 할지가 비어 있다 | 1d | Medium | rewrite |
| W2-D-15 | publish/디렉터.md:3 | 라우팅 description이 팀 구성을 잘못 알려 첫독자가 라우팅 단계에서 사라진다 | 3 | Medium | rewrite |
| W2-D-16 | publish/디렉터.md:41 | 디스코드 화석이 에이전트 본문에도 박혀 있다. "해당 항목"이라는 모호한 참조도 실제 절 제목으로 고정한다 | 1d | Medium | rewrite |
| W2-D-17 | publish/SKILL.md:3,10 | 스킬 description과 목적문이 5인 파이프라인을 4인으로 서술한다. 본문 후반부는 첫독자를 실제로 호출하므로 문서 안에서 자기모순이다 | 3+1d | Medium | rewrite |
| W2-D-18 | publish-team/CLAUDE.md:65 | 공통 원칙의 팀원 열거에서 첫독자만 빠져, 첫독자가 HC에게 직접 말해도 되는 것처럼 읽힐 여지가 있다 | 1d | Medium | rewrite |
| W2-D-19 | publish/작가.md:4-10 | 도구 목록에 Edit이 없다. 작가는 피드백을 받아 장을 부분 수정하는데 매번 Write로 원고 전체를 다시 쓴다. 토큰 낭비이자 유실 위험 | 4 | Medium | add |
| W2-D-20 | publish/작가.md:43,58 | "10개조"라고 두 곳에 적혀 있으나 실제 조문은 11개다. 모델이 마지막 조문을 범위 밖으로 볼 수 있어 개수를 세는 표현을 지운다 | 1d | Medium | rewrite |
| W2-D-21 | research-team/CLAUDE.md:5 | 조직도가 "부서 1호 = 리서치팀"에 머물러 있다. 실제로는 4개 팀이 가동 중이고 같은 문서 뒤쪽 배분표와도 충돌한다 | 1d | Medium | rewrite |
| W2-D-22 | research/리서처.md:49-58 | 서브질문 자가채점(0.0~1.0)과 임계값 밴드는 판단 과제에 얹은 안무다. 행동 규칙만으로 같은 결과가 나오고, 숫자는 검증도 안 되며 모델이 임계값을 맞추려 점수를 조정하게 만든다. 되묻기 1회 제한과 와이드 모드 생략 규칙은 유지 | 1c | Medium | rewrite |
| W2-D-23 | 8개 파일 frontmatter | model: claude-sonnet-5는 이관표상 현행 목적지라 수정 불필요. 참고로만 기록 | keep | Low | flag |
| W2-D-24 | publish/SKILL.md:185 | HC 보고 블록의 크레딧 표기는 발간본이 아니라 내부 보고 텍스트라 헌장 위반은 아니다. 다만 첫독자가 빠져 있어 W2-D-17과 같은 성격의 누락 | 1d | Low | flag |
| W2-D-25 | research/SKILL.md:17 | "quick 30분, standard 1시간, deep 2시간"은 이전 세대 속도를 전제한 시간 추정이다. 출처 개수는 검증 가능한 계약이지만 소요 시간은 근거가 없다. 실측 후 갱신하거나 출처 수만 남기기를 권고 | 1d | Low | flag |
| W2-D-26 | publish/작가.md:44-58 | 문체 규칙의 수치형 임계값은 겉보기엔 형식 규칙이지만 humanize-korean 탐지기가 실제로 채점하는 항목이라 강제된다. keep | keep | Low | flag |
| W2-D-27 | 3개 팀 CLAUDE.md 전반 | 압박 표기의 중첩. HC의 provenance 관례이자 실제 재발 실패 뒤에 붙은 표기라 제약과 날짜 표기는 유지하고 표현 완화만 flag | 1a | Low | flag |
finding 없음: 디자이너·디자인리서처는 제작 엔진 서술과 모델 핀이 모두 현행. publish 검수자와 research 검수자는 사실 보존 계약이 명확하고 화석이 없다. research 에디터는 "합성 단계 병목" 교훈이 Write 대신 Edit를 지시하는 형태라 현행 권고와 이미 일치한다. subserver2.duckdns.org는 회수된 서버의 SSH 경로가 아니라 현행 배포 URL이므로 낡은 지도가 아니다.
2차의 가장 큰 발견을 표로 옮긴 것이다. "이 문서를 읽는가" 열이 핵심이다. 아니오인 문서를 고치는 것은 봇 행동을 바꾸지 못한다.
| 자산 | 이 문서를 읽는 모델·하네스 | 무인 회차가 문서를 읽는가 | 실측 근거 |
|---|---|---|---|
pumui-web orchestrator.md·template_analyzer.md | claude-opus-5 (Agent SDK가 opus 별칭으로 호출) | 예, 시스템 프롬프트로 조립된다 | claude_agent.py의 기본 상수와 .env의 모델 지정. 2026-09-01 실측 주석이 남아 있다 |
hermes claude-lane/bridge.sh가 넘기는 프롬프트 | claude-sonnet-5 (환경변수로 덮어쓰기 가능) | 예, 다섯 줄짜리 프롬프트 문자열 | bridge.sh:32의 기본값과 호출부 --model 플래그 |
hermes SOUL.md · hermes-agent 리포 | target model 아님 (openai-codex 프로바이더, 즉 GPT) | Claude 레인에 도달하지 않음 | bridge.sh에 --append-system-prompt 없음, SOUL 참조 0건. config.yaml의 프로바이더 지정 |
vault-retro CLAUDE.md·loop.md | --model opus 핀 | 예, 작업 디렉터리가 작업장이고 setting-sources 제한 없음(전역 CLAUDE.md도 함께 로드) | retro.sh:105와 LaunchAgent의 ProgramArguments·WorkingDirectory |
aivault-dedup CLAUDE.md·loop.md | --model opus 핀 | 예, 6개 루프 중 유일하게 살아 있는 모델 호출부 | LaunchAgent(매월 1일 09:00) 로드 확인, run.sh의 플래그 |
ea-review prompt.md | CLI 기본 = Fable 5.1 | 예. 12개 루프에서 명목 target model이 실제로 읽는 유일한 프롬프트다 | review.py가 --model 없이 claude -p 호출 |
ea-review CLAUDE.md·loop.md | 무인 회차에서는 아무 모델도 읽지 않음 | 아니오, 실행 디렉터리가 ~/Projects/amaranth-sync/review/ | review.py의 cwd 지정. plist는 파일로 있으나 미로드 |
life-rec CLAUDE.md·loop.md | 런타임 LLM 턴은 분류 haiku, 다이제스트 sonnet | 아니오, setting-sources가 project·local로 제한되고 작업 디렉터리도 다르다 | run.py의 옵션과 작업 디렉터리 실측 |
| amaranth-daily-check | 무인 회차 없음. 세션에서 열 때만 CLI 기본 | 해당 없음 | 등록 cron이 2월 31일이라 발화 불가. 마지막 실행 2026-07-09 |
| golden-knowledge-sync | 모델 접점 없음(순수 bash) | 해당 없음 | sync.sh에 claude 호출 0건 |
| invest-dividend-trend | 요약은 agy(Gemini). claude 호출 0건 | 해당 없음 | LaunchAgent가 파이썬 스크립트를 부른다 |
| mac-memory-watchdog | 모델 접점 없음(bash) | 해당 없음 | 30분 주기 LaunchAgent, claude 호출 0건 |
| corp-card-monthly | Stage A는 LLM 0. Stage B 대화형만 CLI 기본 | 해당 없음 | run.sh에 claude 문자열 0건 |
| micrec-postproc | LLM 호출 없음. 대화형 세션만 CLI 기본 | 해당 없음 | postproc.py는 표준 라이브러리 전용 |
| payroll-review | 온디맨드 세션 = CLI 기본 | 해당 없음(LaunchAgent 미등록) | LaunchAgents 폴더에 해당 plist 부재 |
| budget-monthly | LLM 턴 없음. 스크립트가 안전 규칙을 코드로 내장 | 해당 없음 | LaunchAgent가 파이썬 2본을 부른다 |
| 팀 4곳 메인 세션(design·publish·research·edu) | CLI 기본 = Fable 5.1 | 해당 폴더에서 세션을 열 때 로드 | 네 팀 모두 settings.json에 model 키 없음 |
| 팀 서브에이전트 18명 | frontmatter 핀: claude-opus-4-8 6명, claude-sonnet-5 12명 | 소집 시 로드 | 각 agents/*.md의 model: 줄 |
findings/ALL.masked.diff 기준. 34개 파일에 59개 hunk다. 경로는 실물 기준으로 적었다.
| 파일 | hunk | 담당 |
|---|---|---|
~/.hermes/claude-lane/bridge.sh | 2 | A |
~/Projects/pumui-web/prompts/orchestrator.md | 2 | A |
~/Projects/pumui-web/prompts/template_analyzer.md | 1 | A |
~/loops/vault-retro/CLAUDE.md | 1 | B |
~/loops/vault-retro/loop.md | 1 | B |
~/loops/life-rec/loop.md | 1 | B |
~/loops/budget-monthly/loop.md | 1 | B |
~/loops/payroll-review/CLAUDE.md | 1 | B |
~/loops/aivault-dedup/CLAUDE.md | 1 | C |
~/loops/amaranth-daily-check/loop.md | 3 | C |
~/loops/ea-review/CLAUDE.md | 1 | C |
~/loops/ea-review/loop.md | 1 | C |
~/loops/ea-review/prompt.md | 4 | C |
~/loops/golden-knowledge-sync/loop.md | 1 | C |
~/loops/invest-dividend-trend/CLAUDE.md | 2 | C |
~/loops/invest-dividend-trend/loop.md | 3 | C |
~/loops/mac-memory-watchdog/CLAUDE.md | 2 | C |
~/loops/mac-memory-watchdog/loop.md | 1 | C |
~/edu-team/CLAUDE.md | 4 | C |
~/edu-team/.claude/agents/교육디렉터.md | 2 | C |
~/edu-team/.claude/agents/첫학습자.md | 1 | C |
~/edu-team/.claude/skills/edu/SKILL.md | 2 | C |
~/design-team/CLAUDE.md | 1 | D |
~/design-team/.claude/agents/디자인디렉터.md | 2 | D |
~/design-team/.claude/skills/design/SKILL.md | 3 | D |
~/publish-team/CLAUDE.md | 2 | D |
~/publish-team/.claude/agents/디렉터.md | 3 | D |
~/publish-team/.claude/agents/작가.md | 3 | D |
~/publish-team/.claude/agents/첫독자.md | 1 | D |
~/publish-team/.claude/agents/편집자.md | 1 | D |
~/publish-team/.claude/skills/publish/SKILL.md | 1 | D |
~/research-team/CLAUDE.md | 2 | D |
~/research-team/.claude/agents/리서처.md | 1 | D |
~/research-team/.claude/agents/팀장.md | 1 | D |
| 34개 파일 | 59 |
hunk와 finding이 1:1이 아닌 곳이 넷 있다. hermes bridge.sh의 마지막 hunk는 W2-A-01·02·03을 함께 담는다. Claude에게 가는 프롬프트가 다섯 줄에 모여 있어 문맥 3줄 기준으로 분리가 불가능했다. ea-review prompt.md는 W2-C-12와 W2-C-13이 여섯 줄 간격이라 한 hunk로 합쳐졌다. publish 디렉터의 첫 hunk는 라우팅 description(W2-D-15)과 모델 핀(W2-D-02)이 인접해 합쳐졌고, 작가의 W2-D-20은 한 건이 같은 오표기의 두 위치라 hunk 2개로 나뉘었다.
| 그룹 | 한 줄 설명 | 2차 사례 |
|---|---|---|
| 1a 압박 표현 | 강조와 금지를 겹쳐 쌓아 목소리만 키운 문장. 하고 싶은 말을 보통 크기로 정확히 쓰면 된다 | W2-C-23, W2-D-27. 둘 다 뒤에 붙은 제약이 실제 재발 사고 기록이라 유지 판정 |
| 1b API 기능으로 대체된 스캐폴드 | 모델이 못 하던 일을 프롬프트로 흉내 내던 장치. 이제는 API 기능으로 갈아끼우면 되고 문장을 다시 쓸 일이 아니다 | 2차 해당 없음 |
| 1c 과잉 명세 | 방법을 한 단계씩 짜 주는 안무. 목표와 제약만 말하는 편이 결과가 낫다 | W2-B-08·11, W2-D-22(자가채점 밴드) |
| 1d 화석 | 자기가 만들어진 모델 세대보다 오래 살아남은 문장. 낡은 지도, 개정 이력 서술, 이미 끝난 세션 한정 지시가 여기 들어간다 | 2차의 압도적 다수. W2-C-03·06, W2-D-06·11·12 등 |
| 1e 금지 무더기 | 줄줄이 늘어선 금지 목록. 모델이 그걸 필요로 하느냐가 아니라 그 금지가 어디서 왔느냐(실제 사고냐 막연한 불안이냐)로 판단한다 | 2차 해당 없음. 검토한 금지 목록은 전부 날짜와 사고 근거가 달려 있었다 |
| 1f 출력 상한 안무 | 글자 수·문장 수·항목 수로 출력을 못 박는 패턴. 한 곳만 고치면 남으므로 같은 문서의 상한을 전부 함께 걷어낸다 | W2-A-01, W2-C-05·07·10 |
| 그룹 2 부서지기 쉬운 스킬 파일 | 템플릿 잔여물, 복제된 오타, 갈라진 미러 파일처럼 관리가 끊긴 흔적 | W2-B-04, W2-C-18·20 |
| 그룹 3 도구·라우팅 설명 | 도구나 에이전트를 언제 부르는지 알려 주는 텍스트. 설명이 부족하거나 사실과 다르면 호출 자체가 어긋난다 | W2-A-07, W2-C-21, W2-D-15·17 |
| 그룹 4 요청 설정과 구조 | 모델·도구·타임아웃·effort 같은 실행 설정, 그리고 프롬프트가 실행 경로에 어떻게 놓이는가 | W2-A-02·03·09, W2-B-06, W2-C-08·16, W2-D-19 |
rewrite 다시 쓰기 · add 없던 문장 추가 · remove 삭제 · replace 다른 수단으로 교체 · flag 고치지 않고 기록만
| 용어 | 뜻 |
|---|---|
| target model | 이 프롬프트를 실제로 읽고 일하는 AI 모델. 요리로 치면 레시피를 읽는 사람이다. 레시피를 아무리 잘 써도 그걸 읽는 사람이 딴 사람이면 소용이 없다. 2차의 핵심 발견이 바로 그것이다 |
| headless | 사람이 화면 앞에 없는 상태로 자동 실행되는 것. 새벽 3시에 혼자 돌아가는 프로그램이라 중간에 "이거 어떻게 할까요"라고 물으면 답해 줄 사람이 없다. 그래서 "질문하지 말고 끝까지 가라"는 선언이 필요하다 |
| frontmatter | 문서 맨 위에 붙는 설정 머리말. 책의 판권 페이지 같은 것으로, 여기에 model: ...이라고 적으면 그 에이전트는 무조건 그 모델로 뜬다 |
| hunk | 수정 묶음 한 덩어리. 문서 교정지에서 빨간 펜으로 고친 구간 하나를 뜻한다. "34개 파일 59 hunk"는 34개 문서의 59군데를 고쳤다는 말이다 |
| 화석(fossil) | 옛날에는 맞았는데 지금은 틀린 문장. 이사 간 집 주소가 적힌 명함 같은 것이다. 문서에 남아 있으면 AI가 그 주소로 계속 찾아간다 |
| 출력 상한(1f) | "3문장 이내로", "60자 안팎으로"처럼 결과물 길이를 숫자로 못 박은 지시. 예전 모델이 말이 너무 많아서 넣은 재갈인데, 지금 모델은 지시를 곧이곧대로 지켜서 필요한 정보까지 잘라 낸다 |
| 침묵 실패 | 실패했는데 아무 소리도 안 나는 고장. 우체통에 편지를 넣었고 "접수됐습니다"라는 안내까지 받았는데 실제로는 배달이 안 된 상태다. 로그만 보면 정상이라 제일 늦게 발견된다 |
| HITL 게이트 | 사람이 한 번 보고 넘겨야 다음으로 가는 정지선. 자동화가 끝까지 혼자 달리지 못하게 중간에 세워 두는 턱이다 |
| provenance | 이 문장이 왜, 언제, 무슨 일 때문에 생겼는지의 내력. HC가 문서에 날짜를 붙여 두는 관례가 바로 이것이고, 그래서 이번 감사에서 날짜 표기는 지우지 않았다 |
| 라우팅 description | 스킬이나 에이전트를 "언제 부를지" 알려 주는 소개문. 명함의 직함 같은 것이라, 여기가 틀리면 필요할 때 안 불리고 엉뚱할 때 불린다 |
| effort | 모델이 한 번 답할 때 얼마나 공들여 생각할지의 단계. 낮추면 빠르고 싸지고 올리면 느리고 비싸진다. pumui-web처럼 여러 사람이 같은 토큰을 쓰는 앱에서는 이 레버가 비용을 크게 좌우한다 |
| setting-sources | 세션이 어떤 설정 파일을 읽어 올지 고르는 옵션. 이게 제한돼 있으면 작업장 CLAUDE.md가 아예 로드되지 않는다. 2차에서 "문서를 안 읽는다"는 판정이 나온 경로가 대부분 여기다 |
HC 지시 "남은 결정 6건 중 코드 고치는 것도 다 처리해"에 따라 4절의 결정 항목을 코드까지 처리했다. 실행 에이전트 3명 전원 opus(X1 알림 채널, X2 동기화·cron·모델 핀, X3 교육팀 Codex 미러), 커밋과 검수는 메인 세션. 모든 원본은 wave2/backup-20260903/followup/에 복사해 두었고 삭제한 파일은 없다.
| 항목 | 한 일 | 확인 근거(도구 출력) | 비고 |
|---|---|---|---|
| (a) 모델 핀 | 유지 결정. retro.sh:105·run.sh:45의 --model opus는 무변경. 무인 회차가 대화형 Fable 5.1 쿼터를 쓰지 않게 하는 보호이고 opus 별칭은 현행 Opus 5로 해석된다. vault-retro·aivault-dedup loop.md에 결정 근거 한 줄씩 기록. 덤으로 vault-retro/golden_set.md 채점기준 4번의 assignee=claude를 hc로 정정(08-28 사고 잔재) |
grep "무인 회차 모델" 2파일 각 1건 · assignee=hc 확인 · LaunchAgent 2개 로드 상태 |
다음 회차 2026-09-06 20:00에 카드 assignee가 hc인지 확인 |
| (b) budget-monthly 채널 | 디스코드 발신은 감사가 본 1곳이 아니라 2곳이었다: run_monthly.sh의 실패 통보 함수와 monthly_update.py의 요약+HTML 첨부 함수(호출부 6곳). 둘 다 텔레그램 헤르메스 봇 sendMessage/sendDocument로 교체. 공유 파일 uplus-bill/notify.py는 다른 호출자가 있어 손대지 않음. 문서 loop.md 5곳·CLAUDE.md 2곳 동조 |
테스트 발송 sendMessage·sendDocument 모두 응답 "ok":true · bash -n·py_compile 통과 · 월간 계산은 미실행 |
HC 승인(09-03 오후): budget-monthly/golden_set.md 3·6번 채널명 "디스코드"→"텔레그램" 변경(판정 내용 그대로)을 HC가 확인해 유지로 확정 |
| (b′) invest-dividend-trend 채널 | notify-wrap.sh는 LaunchAgent 10개가 공유하므로 전역은 건드리지 않고 NOTIFY_CHANNEL=telegram opt-in 분기를 신설(기본값 = 종전 디스코드·음소거). 이 잡의 plist EnvironmentVariables에만 켜고 재적재. loop.md의 백엔드·채널 서술 정정 |
테스트 ok=true · launchctl print에 환경변수 확인 · 변수 없이 실행하면 muted 로그만 증가(다른 9개 잡 회귀 없음) |
첫 무인 회차 2026-09-07(월) 07:30 |
| (c-②) golden-knowledge-sync | 목적지를 철거된 server1 gpt-sandbox/workspace/에서 현행 샌드박스 pc-wsl ~/gpt-workspace/로 재지정. 정본 사본 golden-knowledge.md와 LESSONS-inbox.md 배치, 샌드박스 AGENTS.md에 Golden Knowledge 절 신설(pc-wsl엔 ~/.codex/AGENTS.md가 없어 중복 아님) |
원격 해시 = 로컬 해시 · 수동 실행 2회 rc=0 · loop_report.md에 ✅ 줄(2회차 신규 0줄로 멱등) |
첫 무인 회차 2026-09-04 07:10. pc가 꺼져 있으면 실패가 정상. pc-wsl AGENTS.md "참고" 절이 아직 server1을 자매 인스턴스로 적는데 범위 밖이라 그대로 |
| (c-③) amaranth-daily-check cron | 고치지 않았다. 감사 판정 정정. 40 22 31 2 *는 2026-07-10 HC 승인 "토큰 절감 3단계"로 cokacdir 잡 24건 전부에 적용된 파킹 관용구이고(원 스케줄은 .bak-20260710에 보존), 실제 점검은 LaunchAgent com.hc.watch-amaranth-daily가 매일 22:40 결정론 순찰로 수행하며 crit일 때만 원본 프롬프트로 에스컬레이션한다. 되살렸다면 이중 실행이었다. loop.md를 실제 백엔드로 정정하고 "되살리지 말 것" 경고를 넣었다 |
plist 주석 · schedule/*.json 24건 동일 패턴 · loop_report.md·순찰 로그에 2026-09-02까지 매일 판정 |
같은 이유로 2차 보고서가 "파킹돼 발화한 적 없다"고 적은 다른 cokacdir 잡도 되살리기 대상이 아니다 |
| ★ 범위 밖 수리: 워처 crit 경보 | 위 조사 중 발견. 워처 공용 watchers/lib.py의 발신구가 음소거된 디스코드 하나뿐이라 경보 92건이 조용히 삼켜지고 있었고, 그중엔 오늘 09:06 온톨로지 잡의 에스컬레이션 결과도 있다. 정기 보고(ok/warn)는 HC 의도대로 계속 음소거하고 crit만 텔레그램으로 대체 발송하도록 send_discord(level=)를 확장, run_watch.py의 crit 경로 3곳에 표시 |
dry-run 테스트에서 텔레그램 ok=True 2회 · ast 구문 통과 · loop_report 오염 없음 · cokacdir 재시작 불필요(schedule 무변경) |
HC 승인(09-03 오후): crit만 텔레그램 대체 발송을 유지로 확정(워처 6종 공통). 롤백이 필요해지면 followup/watchers-lib.py.orig·watchers-run_watch.py.orig 복사. 삼켜진 92건 중 미조치 crit이 있을 수 있다(예: 오늘 온톨로지 promote 대기 2건) |
| (d) edu-team Codex 미러 | AGENTS.md는 CLAUDE.md와 5행 한 줄만 다른 완전 미러여서 같은 자리 4곳(세션 동결 화석 2, "2왕복" 캡 2)을 같은 문장으로 동조. 추가로 Codex 하위 미러 .codex/agents/교육디렉터.toml·.agents/skills/edu/SKILL.md의 "2왕복" 잔재 3줄도 동일 문장으로 정정 |
edu-team 전체 grep "2왕복" 0건 · .agents SKILL.md와 .claude SKILL.md diff 없음 |
AGENTS.md에 Claude Code 전용 장치(/design, Agent Teams 환경변수·SendMessage)가 미러로 남아 있다. Codex 대응 수단을 몰라 그대로 둠 |
| (e)(f) 커밋 | 감사 변경 파일만 골라 9개 리포에 커밋(푸시 안 함): pumui-web a82f3e6(template_analyzer만. orchestrator는 pumui 세션의 10:36 커밋에 이미 포함, ccfd 컨테이너와 sha 일치) · design-team d259c8f · publish-team 1608ed9 · research-team f05fd9e · edu-team b1f10bd(AGENTS.md·Codex 미러 포함) · 1차 심링크 리포 diagram-design 3b3bb90, gpt-image-skill db8dcc0, last30days-skill c8e7d02, im-not-ai 2d2e414(SKILL.md+에이전트 12) |
각 커밋 해시 출력 · 감사 무관 미커밋 파일(design-team 5·research-team 5·pumui-web 3)은 그대로 둠 | 1차 C-11(notebooklm 본문 통합)은 여전히 미처리 |
| 시점 | 확인할 것 |
|---|---|
| 09-03 22:40 | amaranth-daily-check 순찰이 평소처럼 warn 1줄(ok/warn 경로 무변경 확인) |
| 09-04 07:10 | golden-knowledge-sync loop_report.md에 ✅ 줄 |
| 09-06 20:00 | vault-retro가 만든 카드 assignee = hc |
| 09-07 07:30 | invest-dividend-trend 요약이 텔레그램으로 실도착 |
| 09-09 | budget-monthly 첫 자동 회차 요약+HTML이 텔레그램으로 실도착 |
| 다음 crit 발생 시 | 워처 경보가 텔레그램으로 실도착(muted 로그에만 남으면 실패) |