oh-my-customcode 1.1.74 → 1.1.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -6
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/MUST-completion-verification.md +2 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +2 -2
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +31 -1
- package/templates/.claude/rules/MUST-tool-identification.md +3 -1
- package/templates/.claude/rules/SHOULD-verification-ladder.md +16 -0
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +37 -1
- package/templates/CLAUDE.md.en +2 -1
- package/templates/CLAUDE.md.ko +2 -1
- package/templates/README.md +3 -2
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +37 -1
package/README.md
CHANGED
|
@@ -109,6 +109,8 @@ Agent(qa-engineer):sonnet │
|
|
|
109
109
|
Agent(arch-documenter):haiku ┘
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
+
Soft default is 4 concurrent agents, hard cap 5. Agent Teams (shared task list, peer messaging) is used instead of plain parallel agents when it's available — but it requires Claude Code to expose a `TeamCreate` tool, which is not present on a stock install today. Until then, oh-my-customcode's standard Agent-tool parallel model above is what actually runs.
|
|
113
|
+
|
|
112
114
|
---
|
|
113
115
|
|
|
114
116
|
### Agents (50)
|
|
@@ -170,6 +172,9 @@ All commands are invoked inside the Claude Code conversation.
|
|
|
170
172
|
| `/adversarial-review` | Attacker-mindset security code review |
|
|
171
173
|
| `/pipeline` | Execute YAML-defined pipelines |
|
|
172
174
|
| `/pipeline resume` | Resume a halted pipeline from last failure point |
|
|
175
|
+
| `/omcustom:fsd` | Full Self Driving — autonomous release loop: repeats `/pipeline auto-dev` (issue → implement → verify → release) then `/homework` (retrospective audit) until no eligible issues remain |
|
|
176
|
+
| `/homework` | Retrospective audit of the current session, surfacing process gaps as feedback/issues |
|
|
177
|
+
| `/agora` | Anonymized multi-round, multi-vendor consensus review (independent CLI reviewers + rotating judge) for decisions that need adversarial scrutiny |
|
|
173
178
|
|
|
174
179
|
### Agent Management
|
|
175
180
|
|
|
@@ -217,7 +222,9 @@ All commands are invoked inside the Claude Code conversation.
|
|
|
217
222
|
| **SHOULD** | 8 | Interaction, error handling, memory, HUD, ecomode, ontology routing, wiki sync, verification ladder |
|
|
218
223
|
| **MAY** | 1 | Optimization |
|
|
219
224
|
|
|
220
|
-
Key rules: R010 (orchestrator never writes files), R009 (parallel execution mandatory), R017 (sauron verification before push), R020 (completion verification before declaring done), R021 (advisory-first enforcement model).
|
|
225
|
+
Key rules: R010 (orchestrator never writes files), R009 (parallel execution mandatory), R017 (sauron verification before push), R020 (completion verification before declaring done), R021 (advisory-first enforcement — most rules are prompt-based, not hard-blocked), R016 (continuous improvement — violations update the rule, and stale clauses are retired into HTML comments rather than accumulating forever), R023 (verification ladder — cheapest check first: deterministic hooks/linters, then cheap-model review, then expensive-model review, then human).
|
|
226
|
+
|
|
227
|
+
R018 (Agent Teams) is conditional: it only takes effect when both `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` is set AND the `TeamCreate` tool is present in the tool list. On a stock Claude Code install today, `TeamCreate` is not registered, so R018 is dormant and R009/R010 (the standard Agent-tool parallel-execution model) govern instead.
|
|
221
228
|
|
|
222
229
|
---
|
|
223
230
|
|
|
@@ -229,16 +236,20 @@ Reference documentation covering best practices, architecture decisions, and int
|
|
|
229
236
|
|
|
230
237
|
## Safety
|
|
231
238
|
|
|
232
|
-
oh-my-customcode
|
|
239
|
+
oh-my-customcode ships 42 lifecycle hook scripts covering security, drift detection, and rule reinforcement. A few examples:
|
|
233
240
|
|
|
234
241
|
| Hook | Trigger | Action |
|
|
235
242
|
|------|---------|--------|
|
|
236
243
|
| secret-filter | Bash, Read output | Detects AWS keys, API tokens, private keys, bearer tokens |
|
|
237
244
|
| audit-log | Edit, Write, Bash, Agent | Append-only JSONL at `~/.claude/audit.jsonl` |
|
|
238
245
|
| schema-validator | Write, Edit, Bash input | Validates tool inputs, flags dangerous patterns |
|
|
239
|
-
|
|
|
246
|
+
| claude-md-reinject | SessionStart (fresh session, resume, or compact) | Reinjects CLAUDE.md and the enforced rule set — prevents rule amnesia after context compaction |
|
|
247
|
+
| stuck-detector | PostToolUse, repeated edits | Flags an agent looping on the same file/edit without progress |
|
|
248
|
+
| r007-r008-drift-advisor | UserPromptSubmit, SubagentStop, PostToolUse | Advisory check that the last turn carried the required agent/tool identification headers |
|
|
240
249
|
|
|
241
|
-
|
|
250
|
+
Most hooks are advisory (exit 0) — they warn but never block. A small number of hard-block hooks (e.g. `stage-blocker`, `rule-deletion-guard`) reject the tool call outright (exit 2). oh-my-customcode's own governance rules (`.claude/rules/`) follow an **advisory-first enforcement model**: prompt-based guidance is the default, and a rule is only promoted to a blocking hook after repeated, observed violations. Rules also retire — clauses tied to since-fixed platform bugs or that go unused for two minor releases are wrapped in HTML comments (still readable via the source file, invisible to the agent's context) rather than left to accumulate indefinitely.
|
|
251
|
+
|
|
252
|
+
The hook source of truth is `.claude/hooks/hooks.json`; `omcustom init` compiles it into the `hooks` block of `.claude/settings.json` (via `src/core/hooks-settings.ts`), which is the file Claude Code actually loads.
|
|
242
253
|
|
|
243
254
|
---
|
|
244
255
|
|
|
@@ -273,7 +284,7 @@ your-project/
|
|
|
273
284
|
│ ├── agents/ # 50 agent definitions
|
|
274
285
|
│ ├── skills/ # 115 skill modules
|
|
275
286
|
│ ├── rules/ # 23 governance rules (R000-R023)
|
|
276
|
-
│ ├── hooks/ #
|
|
287
|
+
│ ├── hooks/ # 42 lifecycle hook scripts (hooks.json source; compiled into settings.json)
|
|
277
288
|
│ ├── schemas/ # Tool input validation schemas
|
|
278
289
|
│ ├── specs/ # Extracted canonical specs
|
|
279
290
|
│ ├── contexts/ # 4 shared context files
|
|
@@ -306,7 +317,9 @@ bun test # Run tests
|
|
|
306
317
|
bun run build # Production build
|
|
307
318
|
```
|
|
308
319
|
|
|
309
|
-
Requirements: Node.js >= 18.0.0, Claude Code CLI.
|
|
320
|
+
Requirements: Node.js >= 18.0.0, Claude Code CLI (developed and tested against Claude Code v2.1.277).
|
|
321
|
+
|
|
322
|
+
Releases are two-stage automation: a merged `release/vX.Y.Z` PR triggers `auto-tag.yml`, which creates the git tag; the tag push then triggers `release.yml`, which builds, verifies, and publishes to npm. The project's own contributor knowledge base — the in-repo wiki at `wiki/` (278 pages covering agents, skills, rules, and workflows) — is CI-verified on every PR against a source-hash manifest, so wiki pages cannot silently drift from the code they document.
|
|
310
323
|
|
|
311
324
|
---
|
|
312
325
|
|
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -148,12 +148,14 @@ Cross-reference: R018 (Member Completion Verification), `feedback_release_delega
|
|
|
148
148
|
6. **정량 기준 정밀화 — 산술 단위는 파일이 아니라 편집 항목 (Origin: #1621 #2a, v1.1.51 세션)**: 위 4항의 "파일 4~5개 상한"은 신설 당일 재절단을 막지 못했다 — R017 그룹은 담당 6파일로 상한 인접이었으나, 실제 초과 원인은 파일 수가 아니라 **조항 2개 신설**이었다. 파일당 편집 항목이 1개라는 암묵 가정이 깨지면 파일 수 기준 산술이 무의미해진다. 위임 크기 산술의 단위는 **편집 항목 수**(신설 조항 1개, 버전 노트 1개, 사본 배선 1개 등)로 바꾼다: **항목당 약 2턴(Edit + 위치 탐색) + 파일당 고정비(Read 1 + 미러 Edit 1 + diff 1 = 3턴)**로 계산한다. 같은 세션에서 4파일·항목 소수 위임들은 완주해 대조를 이룬다.
|
|
149
149
|
7. **리서치형 위임의 산출물 우선 기록 (Origin: #1621 #2b, v1.1.51 세션)**: 파일 편집형뿐 아니라 리서치형(수집 중심) 위임도 절단에 취약하다 — v1.1.51 세션에서 훅 이벤트 감사 위임이 22회 도구 호출(WebFetch/Read)을 전부 수집에 쓰고 **아티팩트를 1회도 Write하지 않은 채 절단**되어, 수집한 산출물 전량이 에이전트 컨텍스트에만 존재하고 파일에는 남지 않았다(재개 지시 "산출물 우선 기록"으로 복구). 리서치형 위임의 표준 문안에는 **"첫 2턴 안에 아티팩트 골격을 Write하고 수집 즉시 증분 Edit하라 — 수집 완료 후 일괄 기록 금지"**를 포함한다. 절단은 항상 마지막 작업을 자르므로, 기록을 마지막에 몰면 절단 시 산출물이 전량 유실된다 — 위 5항(파일 편집형의 "미러 즉시 동기화")의 리서치형 대응이다.
|
|
150
150
|
8. **훅 피드백 잠식 (Origin: #1625 #5)**: settings 훅은 서브에이전트 세션에도 발화하므로, 세션 종료성 훅(Stop 계열)의 반복 피드백이 서브에이전트의 마지막 턴들을 소모·오염시켜 최종 보고가 "대기 중" 류로 끝날 수 있다 — mid-step 종료·"실제가 보고보다 앞섬"의 신규 원인 축. v1.1.53 세션에서 커밋 에이전트 2건의 "대기 중" 보고가 실측 결과 모두 완전 완료였다. 절단·대기 보고를 받으면 훅 피드백 잠식 가능성도 원인 후보에 포함하고 ground-truth로 판정한다.
|
|
151
|
+
9. **문서 미러·parity 위임 상한 — 3파일 이하, 산술 통과가 절단 부재를 보장하지 않음 (Origin: #1709 찐빠 #1, v1.1.75 세션)**: 6항의 편집 항목 산술(항목 × 2턴 + 파일 고정비 3턴)을 **적용하지 않고** 문서 미러·parity 위임(카운트·용어·목록 동기화를 여러 문서에 반복 반영) 7파일을 단일 발주하면 절단됩니다 — 6항 공식대로면 7파일은 고정비만 `7×3=21`턴으로 이미 20턴을 초과하므로, 산술을 적용했다면 애초에 단일 발주하지 않았을 상황이었습니다. 실측 결과 6파일 편집은 완결(카운트·Agora 행·훅 수·CONTRIBUTING 절차 재작성)됐고 남은 1파일(AGENTS.md)은 변경 불필요였습니다. 같은 반복의 6개 편집 항목·1파일 위임(ARCHITECTURE_ko 미러)도 정확히 20턴에서 절단됐으나 보고는 전달됐습니다 — 이 건은 신설 공식(파일 수 × 3 + 편집 항목 수 × 2 ≤ 16, `1×3+6×2=15`)을 **통과**하고도 절단됐으므로, 이 산술은 절단 부재를 보장하는 게이트가 아니라 **상한 가이드**입니다. 문서 미러·parity는 편집 항목 수가 파일마다 반복돼 산술을 누락하면 초과 폭이 커지므로, 4항의 일반 파일 편집형 "파일 4~5개 상한"보다 좁은 **3파일 이하 상한**을 따로 두고, 위임서에 위 턴 산술(≤16 — 20턴 한도 아래 여유를 둔 제안값이며 근거 수치는 미확정)을 함께 기재합니다. 3파일 상한은 6항 산술을 대체하지 않는 **보조 상한**입니다. 배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
|
|
151
152
|
|
|
152
153
|
| Anti-pattern | Required |
|
|
153
154
|
|--------------|----------|
|
|
154
155
|
| 파일 수만 세어 위임 크기 판정 → 조항 다수 파일에서 절단 | 편집 항목 수 × 2턴 + 파일 고정비(3턴)로 산술 |
|
|
155
156
|
| 리서치 위임이 수집을 끝낸 뒤 일괄 기록 | 첫 2턴 내 골격 Write + 증분 Edit |
|
|
156
157
|
| "대기 중" 보고를 미완료로 단정 | 훅 피드백 잠식 가능성 포함해 ground-truth로 완료 여부 판정 |
|
|
158
|
+
| 문서 미러·parity 위임을 "파일 4~5개 상한" 근거로 7파일까지 단일 발주 | 문서 미러·parity 위임은 파일 3개 이하로 분할 + 턴 산술(파일 × 3 + 항목 × 2 ≤ 16)을 위임서에 기재 |
|
|
157
159
|
|
|
158
160
|
> **v2.1.257+**: 서브에이전트가 컴퓨터 절전·연결 끊김·서버 오류로 응답이 mid-stream 절단될 때 불완전 응답으로 그대로 종료하던 동작이 **자동 이어감**으로 수정되었습니다. 즉 "판정 없이 종료" 증상의 원인 축 중 **네트워크/서버 절단 축은 v2.1.257부터 소멸**하며, 남는 실재 원인은 `maxTurns` 한도(위 실증)·위임 경계 미분할·에이전트 자체 판단 종료·훅 피드백 잠식(8항)입니다. 따라서 v2.1.257+ 환경에서 mid-step 종료를 관측하면 네트워크 절단을 원인 후보에서 먼저 제외하고 `maxTurns` partial 표시 유무를 확인합니다 — 단 원인 축 하나가 사라졌다고 ground-truth 실측 원칙을 낮추지 않습니다. 같은 릴리즈에서 턴을 백그라운드로 보낼 때(`←`/Ctrl+B) 실행 중이던 도구가 거부된 것으로 처리되던 결함도 수정되어, 구버전 background 세션의 "도구 거부됨" 기록은 실제 거부의 증거가 아닐 수 있습니다.
|
|
159
161
|
|
|
@@ -32,7 +32,7 @@ Update the relevant rule rather than just acknowledging the violation.
|
|
|
32
32
|
|--------------|----------|
|
|
33
33
|
| 규칙 조항만 추가하고 커밋 → 자동화 경로에 발동 지점이 없어 동일 결함 재발 | 발동 실행 경로 명시 + 반영 확인; 대상 없으면 "배선 불요" 명시 |
|
|
34
34
|
|
|
35
|
-
**신설 조항의 동일 반복 self-check (Origin: #1691 #4·#5·#7 — v1.1.71)**: 위임서 규율을 신설·보강한 반복에서는, 그 조항을 **같은 반복에서 오케스트레이터가 작성하는 이후 위임서에 즉시 적용**한 뒤 다음 단계로 넘어갑니다. v1.1.69에서 R010 「출처 인용과 인접 문구 점검도 같은 규율」을 신설한 바로 그 반복의 위임서가 이슈 문장을 인용하지 않고 같은 파일 grep을 요구하지 않아 자기 위반 3건(High 1건 포함)이 적대적 리뷰에서 적발되었습니다 — 텍스트가 룰에 실렸다는 사실은 오케스트레이터 자신의 행동이 바뀌었다는 증거가
|
|
35
|
+
**신설 조항의 동일 반복 self-check (Origin: #1691 #4·#5·#7 — v1.1.71)**: 위임서 규율을 신설·보강한 반복에서는, 그 조항을 **같은 반복에서 오케스트레이터가 작성하는 이후 위임서에 즉시 적용**한 뒤 다음 단계로 넘어갑니다. v1.1.69에서 R010 「출처 인용과 인접 문구 점검도 같은 규율」을 신설한 바로 그 반복의 위임서가 이슈 문장을 인용하지 않고 같은 파일 grep을 요구하지 않아 자기 위반 3건(High 1건 포함)이 적대적 리뷰에서 적발되었습니다 — 텍스트가 룰에 실렸다는 사실은 오케스트레이터 자신의 행동이 바뀌었다는 증거가 아닙니다(배선: auto-dev.yaml implement 스텝 bullet — 신설·보강 조항의 Anti-pattern 표를 위임서와 1:1 대조, 4사본 — v1.1.75).
|
|
36
36
|
|
|
37
37
|
| Anti-pattern | Required |
|
|
38
38
|
|--------------|----------|
|
|
@@ -42,7 +42,7 @@ Origin: #1533 (v1.1.35에서 R017 (b) 조항 추가했으나 auto-dev.yaml versi
|
|
|
42
42
|
|
|
43
43
|
Cross-reference: R021(Enforcement Policy — advisory 규칙의 발동 지점), R017(구조 검증).
|
|
44
44
|
|
|
45
|
-
**적용 범위 확장 (Origin: #1698 #1 — v1.1.72)**: 이 self-check는 서브에이전트에 **요구하는** 규율뿐 아니라 오케스트레이터가 **스스로 작성하는 산문(룰 문안·요약·수치)**에도 대칭 적용됩니다. 상세·인용은 R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강
|
|
45
|
+
**적용 범위 확장 (Origin: #1698 #1 — v1.1.72)**: 이 self-check는 서브에이전트에 **요구하는** 규율뿐 아니라 오케스트레이터가 **스스로 작성하는 산문(룰 문안·요약·수치)**에도 대칭 적용됩니다. 상세·인용은 R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강 항목 참조.
|
|
46
46
|
|
|
47
47
|
## Integration
|
|
48
48
|
|
|
@@ -356,6 +356,18 @@ git branch --list
|
|
|
356
356
|
|
|
357
357
|
Origin: #1646 (v1.1.58 세션 — 커밋 위임서 `12e74a76` vs 실제 `e101a0b4`, 정리 위임서 '로컬 브랜치 2개 존재' vs 실제 부재; 원인은 `gh pr merge --delete-branch`가 체크아웃된 브랜치를 base로 전환·pull·삭제하는 부수효과였음 — 도구 부수효과를 모른 채 상태를 예측한 사례).
|
|
358
358
|
|
|
359
|
+
#### 브리프 실측값에는 측정 명령을 병기 (Origin: #1709 #3)
|
|
360
|
+
|
|
361
|
+
위임서의 브리프(사전 실측)에 적는 수치 — CC 버전, 룰 노트 커버리지 최댓값, 카운트 등 — 에는 그 숫자를 낸 **측정 명령을 함께 기재합니다**. 같은 숫자라도 출처(예: 로컬 CLI 설치 버전 vs 룰 코퍼스 내 버전 노트 최댓값)가 다르면 의미가 다르므로, 측정 명령이 없으면 서브에이전트가 숫자의 의미를 오해합니다.
|
|
362
|
+
|
|
363
|
+
예: `claude --version`=X(CLI 설치 버전) / `git grep -oh '2\.1\.2[0-9][0-9]' .claude/rules | sort -V | tail -1`=Y(룰 코퍼스 버전-노트 커버리지 최댓값) — 두 값은 서로 다른 것을 측정하므로 X와 Y가 다를 수 있으며, **그 차이 자체가 이 조항이 방지하려는 오독의 요점**입니다. 이 예시에 실제 버전 리터럴을 쓰면, 룰 코퍼스가 곧 `git grep` 대상이므로 조항 자신이 측정 결과를 오염시킵니다 — 그래서 X/Y 플레이스홀더로 표기합니다.
|
|
364
|
+
|
|
365
|
+
| Anti-pattern | Required |
|
|
366
|
+
|--------------|----------|
|
|
367
|
+
| 브리프에 "CC 최신 버전은 2.1.2NN입니다"처럼 측정 명령 없이 수치만 기재 | 수치 옆에 측정 명령을 병기(예: `claude --version`=X / `git grep ... \| sort -V \| tail -1`=Y) |
|
|
368
|
+
|
|
369
|
+
Origin: #1709 찐빠 #3 — 브리프의 숫자에 출처·의미(CLI 설치 버전 vs 룰 노트 커버리지)를 붙이지 않았습니다. R010 「출처 인용과 인접 문구 점검…」 보강 [#1698 #1]의 "실측 사실은 오케스트레이터가 계속 기재" 예외를 쓰면서 실측의 **대상**을 명시하지 않은 사례입니다. Cross-ref: 위 「Delegation Prompt Command Examples」(명령·플래그 실측), 위 「저장소 상태 기재도 같은 규율」(SHA/브랜치 실측). 배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
|
|
370
|
+
|
|
359
371
|
#### 출처 인용과 인접 문구 점검도 같은 규율 (Origin: #1688 — Iteration 3 #1, Iteration 4 #1·#2)
|
|
360
372
|
|
|
361
373
|
위임서에 **Origin 이슈·CHANGELOG·메모리에서 가져온 사실**을 적을 때는 그 출처의 해당 문장을 `gh issue view <N> --json body` 또는 원문 파일에서 **인용 형태로 동봉합니다**. 기억이나 메모리 요약을 전제로 옮겨 적으면 서브에이전트가 그것을 사실로 기재하고, 위키까지 전파된 뒤에야 적대적 리뷰가 잡습니다 — v1.1.66에서 CHANGELOG에 없는 원인("부모가 mid-turn일 때")을, v1.1.67에서 메모리의 세션 번호를 릴리즈 번호로 잘못 옮긴 것("v1.1.61" — 실제 #1660은 v1.1.63 반복)이 각각 High로 적발되었습니다. R017 「메모리 TODO를 위임 전제로 쓸 때」의 위임서 각도이며, 위 「저장소 상태 기재도 같은 규율」이 SHA에 대해 요구하는 것을 **출처 문장**에 대해 요구합니다.
|
|
@@ -375,7 +387,7 @@ Origin: #1646 (v1.1.58 세션 — 커밋 위임서 `12e74a76` vs 실제 `e101a0b
|
|
|
375
387
|
| 인용 대상 코드를 보지 않고 제안 문안을 룰로 승격 | 인용문이 가리키는 코드·파일과 대조 후 기재 |
|
|
376
388
|
| 오케스트레이터의 함의를 확정형으로 위임서에 기재 | `[가설 — 실측이 반대면 반대로 기재]` 표기 + 판정 기준 동봉 |
|
|
377
389
|
|
|
378
|
-
**보강
|
|
390
|
+
**보강 항목 (Origin: #1698 #1·#2(#3은 #1로 흡수), #1701 #1, #1704 #1, #1707 #2 — v1.1.72~75)**: [#1698 #1] 오케스트레이터는 룰·문서에 커밋될 **최종 문안**을 완성문으로 위임서에 붙여 넣지 않습니다 — 서브에이전트가 이슈 본문에서 사실·수치를 직접 뽑아 작성하고, 오케스트레이터는 제안 포인터·삽입 위치·제약을 지정합니다. 단 인용 원문, 실측 사실(HEAD/브랜치/카운트), 승인·금지 작업 목록, 표준 금지 문구, `[가설]` 표기 함의, 검증 재실행 금지 목록은 계속 오케스트레이터가 기재합니다 — 이들은 "최종 문안"이 아니라 위임 전제입니다(배선: `auto-dev.yaml` implement 스텝 description, 4사본). 원인은 "오케스트레이터가 위임서에 룰 문안 전체를 직접 작성하면서 수치를 기억으로 옮김 — 서브에이전트에는 `gh issue view` 인용을 요구했으나 오케스트레이터 자신의 산문은 같은 규율을 받지 않음"이며, "인용 정확성이 주제인 반복에서 같은 계열 3회째(v1.1.69 세션번호 → v1.1.70 "and marketplace" → v1.1.71 "High 2건")"가 재발 근거입니다. "리뷰에서 오류가 난 문장은 전부 오케스트레이터 작성분이었음"이며, "인용 대조 14건 중 오케스트레이터 작성 수치 1건 외 전부 원문 일치"가 실증됩니다. [#1698 #2] 인접 점검은 "같은 주제 키워드 grep"에만 의존하지 않고, 삽입 지점 앞뒤 섹션(±1 heading)의 Anti-pattern 표를 전수 대조하는 이원화를 적용합니다 — "인접성 점검을 키워드 grep에만 의존"했다가 12줄 아래 조항과의 모순을 놓친 사례가 원인입니다. [#1707 #2] 이 ±1 heading 대조는 인접 섹션과의 모순 여부뿐 아니라, 그 섹션 안의 상대 위치 참조(위 표·아래 표·직전 조항 등)가 삽입 후에도 원래 의도한 대상에 여전히 재바인딩되는지도 함께 확인합니다 — 원인은 "서브에이전트의 ±1 heading 점검이 "모순 여부"에만 초점, 상대 참조("위/아래 표")의 재바인딩은 점검 항목에 없음"입니다(배선: auto-dev.yaml implement 스텝 표준 제약 블록, 형제 위임이 같은 릴리즈에서 추가). [#1701 #1] 위임서에 적는 오케스트레이터 자신의 **요구사항 요약**(예: "…만 지정"과 같은 범위 문구)도 최종 문안과 동일하게 취급합니다 — 단 위 예외 목록(승인·금지 작업 목록·표준 금지 문구·실측 사실 등)은 이 취급에서 제외합니다. 원인은 "위임서가 이슈 원문 대신 오케스트레이터가 요약한 요구 문구("…만")를 전달 — 룰 문안은 서브에이전트가 썼지만 범위 규정은 오케스트레이터 산문이었음"이며, 이슈 제안 문장을 `gh issue view` 출력에서 복사해 전달하고 오케스트레이터의 범위 요약에는 `[요약 — 원문 우선]`을 표기합니다(배선: auto-dev.yaml implement 스텝 bullet 확장, 4사본 — R016 Rule Wiring Check). [#1704 #1] 위임서에 적는 오케스트레이터 자신의 **배선 판정**(예: "기존 implement 스텝 bullet이 커버" 류)도 같은 취급을 받습니다 — 위임서는 배선 대상 후보 파일·앵커만 제시하고, 커버 여부는 서브에이전트가 해당 문장을 인용해 판정합니다. 원인은 "배선 대상을 grep 실측 없이 오케스트레이터가 요약해 확정형으로 기재 — Iteration 1 찐빠 #1("…만 지정" 요약)과 같은 클래스의 재발(요약이 룰 문안 대신 배선 판정으로 자리만 옮김)"입니다(배선: auto-dev.yaml implement 스텝 bullet 확장, 4사본 — 기존 bullet은 `constraints`를 오케스트레이터 제공 항목으로 **허용**하므로 이 조항을 커버하지 않습니다).
|
|
379
391
|
|
|
380
392
|
> **#1700 판정 (v1.1.72)**: 이 인용의 "v1.1.69 세션번호"는 발생 시점이 아니라 조항 작성 시점으로 보입니다 — 오류 발생·적발은 Iteration 4/v1.1.67(#1688 찐빠 #1), 조항 초안은 커밋 448143c7(PR #1690 = release/v1.1.69) 실측입니다.
|
|
381
393
|
|
|
@@ -384,6 +396,7 @@ Origin: #1646 (v1.1.58 세션 — 커밋 위임서 `12e74a76` vs 실제 `e101a0b
|
|
|
384
396
|
| 룰 문안 **최종 문안**을 오케스트레이터가 직접 작성해 위임서에 기재 | 서브에이전트가 이슈 본문에서 사실·수치를 직접 뽑아 작성; 오케스트레이터는 포인터·삽입 위치·제약만 지정 — 인용 원문·실측 사실·승인/금지 목록·표준 금지 문구·`[가설]` 표기·재실행 금지 목록은 오케스트레이터가 계속 기재 |
|
|
385
397
|
| 위임서의 "요구사항 요약"을 오케스트레이터가 산문으로 재구성해 확정형으로 기재 (예: "…만 지정") | 이슈 제안 문장을 `gh issue view` 출력에서 복사해 전달; 오케스트레이터의 범위 요약에는 `[요약 — 원문 우선]` 표기 |
|
|
386
398
|
| 같은 주제 키워드 grep만으로 인접성 점검 완료 판정 | 키워드 grep + 삽입 지점 ±1 heading의 Anti-pattern 표 전수 대조를 병행 |
|
|
399
|
+
| ±1 heading 대조를 모순 여부에만 국한 → 인접 문구의 "위 표"·"아래 표"·"직전 조항" 참조가 삽입 후 다른 대상으로 재바인딩된 것을 놓침 | ±1 heading 대조에 상대 위치 참조 재바인딩 확인을 포함 |
|
|
387
400
|
| 위임서에 오케스트레이터의 배선 판정("기존 bullet이 커버")을 확정형으로 기재 | 배선 대상 후보 파일·앵커만 제시하고 커버 여부는 서브에이전트가 해당 문장을 인용해 판정 |
|
|
388
401
|
|
|
389
402
|
#### 참인 전제 ≠ 참인 함의 — 브랜치 전환 위임 (Origin: #1595 #2)
|
|
@@ -591,9 +604,18 @@ Before delegating a task to a subagent, MUST verify the target agent's tool capa
|
|
|
591
604
|
| `Write` files | `tools:` includes Write (and target path not in `disallowedTools` scope) |
|
|
592
605
|
| MCP server calls | `mcpServers:` includes the required server |
|
|
593
606
|
| Task targets a specific file path | The path EXISTS (`Glob`/`ls`) — capability check alone does not catch a missing/renamed file |
|
|
607
|
+
| Task targets an EXISTING file for editing/commit (not a newly-created file) | The path is git-tracked (`git ls-files <path>` non-empty) — an existing-but-untracked target needs an explicit scope decision before delegation |
|
|
594
608
|
|
|
595
609
|
> **Path existence ≠ tool capability (#1269 ③)**: the pre-check above verifies the agent HAS Read/Write/Bash, but not that the target path actually exists. Delegating a read/write to a missing or renamed path causes the same round-trip waste the capability pre-check is meant to prevent. Verify path existence (Glob/ls) before delegating path-specific work.
|
|
596
610
|
|
|
611
|
+
> **Tracked 여부도 path existence 확인에 포함 (#1709 #4)**: 위 path existence 확인(`Glob`/`ls`)은 파일 **존재**를 확인하지만 **tracked 여부**는 확인하지 않습니다. **적용 범위는 기존 파일을 편집·커밋 대상으로 지정할 때에 한하며, 신규 생성 대상(아직 존재하지 않아 처음부터 untracked인 파일)은 제외**합니다 — 신규 파일은 존재하지 않으므로 `git ls-files`가 빈 결과를 내는 것이 정상이고 스코프 결정 대상이 아닙니다. 기존 파일에서 `git ls-files <path>`가 빈 결과를 반환하면 그 경로는 존재해도 git에 추적되지 않는 파일이므로(예: `.gitignore`로 제외됨), 그 경로를 위임 범위에 넣기 전에 범위에서 제외할지 force-add가 필요한지를 먼저 결정합니다. untracked 여부는 `git ls-files <path>`(빈 결과) 또는 `git check-ignore -v --no-index <path>`(히트 시 제외 사유까지 확인 가능)로 판별합니다.
|
|
612
|
+
>
|
|
613
|
+
> | Anti-pattern | Required |
|
|
614
|
+
> |--------------|----------|
|
|
615
|
+
> | 경로 존재(`ls`/`Glob`)만 확인하고 위임 → 기존 파일 대상이 untracked라 커밋 단계에서야 발견 | 기존 파일 편집·커밋 대상에 한해 `git ls-files <path>`(또는 `git check-ignore -v --no-index <path>`)로 tracked 여부까지 확인; untracked면 위임 범위에서 제외하거나 force-add 여부를 사전 결정. 신규 생성 대상은 이 확인에서 제외 |
|
|
616
|
+
>
|
|
617
|
+
> Origin: #1709 찐빠 #4 — `git ls-files AGENTS.md` = 0, `git check-ignore -v --no-index` 히트(AGENTS.md가 `.gitignore` 리터럴로 제외됨). 문서 갱신 대상을 열거할 때 경로 존재만 확인(위 Path existence)하고 tracked 여부는 확인하지 않았습니다. R017 (c)의 "untracked 신규 산출물 실측"은 **커밋 직전** 실측을 다루지만, 이 조항은 **위임 전** 대상 파일이 애초에 tracked인지 판별하는 것을 다룬다는 점에서 범위가 다릅니다. 배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
|
|
618
|
+
|
|
597
619
|
> **Multi-copy content consistency (#1287)**: 동일 파일이 다중 사본으로 존재하는 경우(예: auto-dev.yaml이 실행본 + templates 미러 + 레거시 사본 등 N곳), 위임 전 경로 존재뿐 아니라 **사본 간 내용 일관성(md5/diff)도 확인**해야 한다. 사본이 drift된 상태에서 "N곳 동일 변경 적용"으로 위임하면 에이전트가 작업 중에야 drift를 발견(round-trip)하거나, 일부 사본만 갱신되어 불일치가 심화된다.
|
|
598
620
|
>
|
|
599
621
|
> | Anti-pattern | Required |
|
|
@@ -602,6 +624,14 @@ Before delegating a task to a subagent, MUST verify the target agent's tool capa
|
|
|
602
624
|
>
|
|
603
625
|
> Origin: #1287 (v0.164.0 세션 회고 찐빠 #1).
|
|
604
626
|
|
|
627
|
+
> **언어 미러·parity 위임은 추가·수정·삭제 세 방향 (#1709 #2)**: en 원본에 대응하는 로컬라이즈 미러(README_ko, ARCHITECTURE_ko 등) 동기화를 위임할 때는 표준 문안에 "en에 있는 내용을 **추가**, en과 달라진 내용을 **수정**, en에서 사라진 내용을 **삭제**해 세 방향 모두 일치시키라"를 고정하고, 완료 조건에 "en에 없는데 ko에만 남은 행·문장이 0건임을 grep으로 확인"을 포함합니다. 추가만 지시하면(additive-only) en에서 제거된 행이 ko에 stale로 잔존합니다.
|
|
628
|
+
>
|
|
629
|
+
> | Anti-pattern | Required |
|
|
630
|
+
> |--------------|----------|
|
|
631
|
+
> | 미러 동기화 위임을 "en의 새 내용을 ko에 반영하라"로만 지시(추가 전용) | "추가·수정·삭제 세 방향으로 en과 일치"를 표준 문안에 고정 + "en에 없는 행 0건 grep" 완료 조건 포함 |
|
|
632
|
+
>
|
|
633
|
+
> Origin: #1709 찐빠 #2 — parity 지시가 추가 전용이라 en에서 제거된 행이 ko 미러에 stale로 남았습니다. Cross-ref: 위 Multi-copy content consistency(사본 간 md5/diff 일치 확인)의 언어 미러 변형. 배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
|
|
634
|
+
|
|
605
635
|
> **New-File Count-Impact Pre-Check (#1443)**: 신규 파일 추가를 서브에이전트에 위임하기 전, 그 파일이 **새 최상위 토픽/엔티티 디렉토리**(카운트 증가)인지 **기존 디렉토리 내부 문서**(카운트 불변)인지 사전 판별해야 한다. 사전 판별 없이 "카운트 N→N+1 동기화"로 위임하면 잘못된 전제가 서브에이전트에 전파된다. `find <dir> -mindepth 1 -maxdepth 1 -type d | wc -l` 등으로 토픽 디렉토리 실측하고, 카운트 위임 프롬프트에는 항상 "실측값 기준으로 동기화하라, 추측으로 숫자를 바꾸지 말라"를 명시해 잘못된 전제를 서브에이전트가 정정할 여지를 확보한다.
|
|
606
636
|
>
|
|
607
637
|
> | Anti-pattern | Required |
|
|
@@ -134,7 +134,9 @@ Origin: #1595 #5 (v1.1.48 세션 — R008 위반 3건이 단일 턴에 집중. t
|
|
|
134
134
|
| 도구 호출 턴을 짧은 요약 산문만으로 시작(narration 채널로 흐름) | 헤더(`┌─ Agent:` 또는 단축 헤더)와 Core Rule 접두사를 **text 블록**으로 명시 — 산문 요약은 그 뒤에 |
|
|
135
135
|
| "announce를 썼다"는 기억으로 advisory를 오탐으로 가정 | 트랜스크립트의 `text` 블록에서 마커를 실측(R020 Self-Violation Counting) |
|
|
136
136
|
|
|
137
|
-
Iteration 1(Agent 스폰 15메시지 전부 narration)과 Iteration 2(7메시지 text)의 대비는 계수 도구 결함이 아니라 출력 채널 선택의
|
|
137
|
+
Iteration 1(Agent 스폰 15메시지 전부 narration)과 Iteration 2(7메시지 text)의 대비는 계수 도구 결함이 아니라 출력 채널 선택의 차이로 서술했으나, 이 귀속은 아래 v1.1.75 보강으로 대체되었다.
|
|
138
|
+
|
|
139
|
+
**원인 귀속 보강 (Origin: #1703·#1706 — v1.1.75)**: 실 세션 6건·tool_use 응답 1008건(아티팩트 Part B 표 5건 860건 + 각주 인용 2.1.251 세션 148건, 재계산)을 재측정한 결과, text 블록이 없는 tool_use 응답의 비율이 CC 2.1.233에서 0%(0/256)였다가 2.1.251에서 39.2%(58/148)로 급증하고 2.1.258~2.1.275 구간에서 53.6~61.8%로 유지되는 것을 확인했습니다. 이 경계는 CHANGELOG v2.1.251의 "Fixed conversations getting stuck on \"text content blocks must be non-empty\" errors after a turn where the model produced only thinking" 항목과 일치합니다. narration 채널 옵션은 thinking 본문 354건 전수에서 마커가 0건 매칭되어 은퇴했으므로(#1703), R008 누락 턴은 마커가 narration으로 옮겨간 것이 아니라 thinking과 tool_use만 있고 text 블록이 없는 형태로 기록된 것입니다. `[가설]` 2.1.251 이전의 thinking-only 턴이 클라이언트 측 text 강제 주입으로 감춰졌는지 API 재시도로 트랜스크립트에서 탈락했는지, 그리고 thinking 내용이 announce 정규식과 왜 불일치하는지는 API 원본 스트리밍 로그 대조 없이는 미확정입니다.
|
|
138
140
|
|
|
139
141
|
## Tier-3 Interaction Tool Prefix (MANDATORY)
|
|
140
142
|
|
|
@@ -111,6 +111,22 @@ staleness/audit 검증은 model ID·placeholder·TBD뿐 아니라 **폐기된
|
|
|
111
111
|
|
|
112
112
|
Origin: #1455 #1 (Session 127 회고 찐빠 #1) — cc-release-monitor PR #1449 머지 후 workflow_dispatch 실검증에서 issue_body의 `<details>`·릴리즈 요약에 12칸 리터럴 들여쓰기 발견 → PR #1451 재작업. 첫 위임이 문법 검증만 지시하고 샘플 값 출력 조립 검증을 누락. `textwrap.dedent` + 멀티라인 변수 함정이 문법 검증만으로는 미노출. R020(문법 통과 ≠ 출력 정상)과 정합.
|
|
113
113
|
|
|
114
|
+
**리서치 위임의 결론 수치는 표에서 재계산해 병기 (Origin: #1707 #4 — v1.1.75)**: 리서치·계측 위임의 완료 조건에는 결론 문장에 등장하는 모든 수치를 산출물 자체의 표에서 jq/awk 등으로 재계산하고, 그 값을 결론 옆에 병기하도록 명시합니다. 원인은 "리서치 에이전트가 표를 먼저 쓰고 결론을 별도 산술로 작성(표에서 재계산하지 않음)"이며, 결론 문장의 합계(697)가 표(354)와 불일치한 산술 모순 사례가 실증입니다.
|
|
115
|
+
|
|
116
|
+
| Anti-pattern | Required |
|
|
117
|
+
|--------------|----------|
|
|
118
|
+
| 결론 문장의 수치를 표와 별도로 산술해 기재 | 결론 수치를 표에서 jq/awk로 재계산하고 결론 옆에 병기하도록 완료 조건에 명시 |
|
|
119
|
+
|
|
120
|
+
배선: auto-dev.yaml deep-plan 스텝 description (4사본) — 「Delegated Verification Floor」 상한선 조항과 같은 방식입니다.
|
|
121
|
+
|
|
122
|
+
**오케스트레이터가 전달하는 에이전트 보고 수치도 재계산 의무 (Origin: #1709 찐빠 #5, v1.1.75)**: 위 조항은 리서치 에이전트 자신의 산출물 검증을 다루지만, **오케스트레이터가 한 에이전트의 보고 수치를 다음 위임서로 옮겨 적을 때도 같은 의무**가 적용됩니다 — 옮기기 전 `git diff --stat`/`grep -c` 등으로 1회 재계산한 뒤 기재합니다. v1.1.75 세션에서 문서 갱신 에이전트가 "20 new grouped rows"로 보고했으나 실제 diff는 21행이었고, 오케스트레이터가 그 수치를 검증 없이 후속 위임서에 그대로 옮겨 적어 후속 에이전트가 diff 계수로 재정정했습니다 — R016 「신설 조항의 동일 반복 self-check」의 수치 각도이기도 합니다.
|
|
123
|
+
|
|
124
|
+
| Anti-pattern | Required |
|
|
125
|
+
|--------------|----------|
|
|
126
|
+
| 에이전트 보고 수치를 재계산 없이 다음 위임서에 그대로 전달 | 옮겨 적기 전 `git diff --stat`/`grep -c` 등으로 1회 재계산 후 기재 |
|
|
127
|
+
|
|
128
|
+
배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
|
|
129
|
+
|
|
114
130
|
## Delegated Verification Floor — CI 잡 목록에서 도출 (Origin: #1574)
|
|
115
131
|
|
|
116
132
|
위임 프롬프트의 검증 항목은 "변경 파일의 영향 범위"만으로 정하면 부족하다. **하한선은 CI가 실제로 돌리는 잡 전체**다 — 워크플로 YAML의 잡 목록을 읽어 대응하는 로컬 명령(`lint` / `test` / `validate-docs` / sync 검사)을 열거하고, 그중 로컬 실행 가능한 것을 위임 완료 조건에 포함한다. 로컬에서 통과시키지 않은 CI 잡은 병합 시점에 halt로 돌아와 수정 에이전트 추가 발주를 강제한다.
|
|
@@ -348,7 +348,7 @@ steps:
|
|
|
348
348
|
|
|
349
349
|
- name: deep-plan
|
|
350
350
|
skill: deep-plan
|
|
351
|
-
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4)."
|
|
351
|
+
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
352
352
|
depends_on: plan
|
|
353
353
|
|
|
354
354
|
- name: implement
|
|
@@ -389,6 +389,42 @@ steps:
|
|
|
389
389
|
(#1701 #1). The orchestrator's own wiring judgement (which file/anchor already covers a
|
|
390
390
|
new clause) counts as final wording too — the prompt supplies candidate files/anchors
|
|
391
391
|
only, and the subagent decides coverage by quoting the covering sentence (R010 [#1704 #1]).
|
|
392
|
+
- Before dispatching any delegation prompt in an iteration that created or reinforced a rule
|
|
393
|
+
clause, the orchestrator MUST compare that clause's Anti-pattern table rows 1:1 against the
|
|
394
|
+
delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
|
|
395
|
+
반복 self-check」 was known as text but not executed as a procedure, #1707 #1).
|
|
396
|
+
- Every rule/skill/guide TEXT-editing delegation prompt MUST include this fixed constraint
|
|
397
|
+
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent 반말; (b) locate by anchor
|
|
398
|
+
strings, never line numbers; (c) copy quotations from `gh issue view --json body` output and
|
|
399
|
+
verify with `grep -F`; (d) ±1 heading check including re-binding of relative references (위
|
|
400
|
+
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3).
|
|
401
|
+
- Document mirror/parity delegations (README/ARCHITECTURE/CLAUDE.md ko-en, templates
|
|
402
|
+
mirrors, etc.) MUST be split to ≤3 files per delegation (a companion cap alongside the
|
|
403
|
+
arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
|
|
404
|
+
edit_items × 2 ≤ 16 — a #1709-proposed guide kept below the 20-turn limit, not a
|
|
405
|
+
truncation guarantee, per R020 「maxTurns 절단 실증」 6항) and state that arithmetic in
|
|
406
|
+
the delegation prompt before dispatch (#1709 #1).
|
|
407
|
+
- Parity delegation prompts (e.g. a ko mirror tracking an en source) MUST require THREE
|
|
408
|
+
directions — additions, edits, AND deletions — to match the source, never additions
|
|
409
|
+
only; completion criteria MUST include a `grep -F` confirming zero rows/sentences are
|
|
410
|
+
present in the target but absent from the source (#1709 #2).
|
|
411
|
+
- When a delegation prompt or brief states a measured version/count value (CC version,
|
|
412
|
+
rule-note coverage ceiling, file/skill counts), append the exact command used to
|
|
413
|
+
measure it (e.g. `claude --version`=X / `git grep -oh '2\.1\.2[0-9][0-9]'
|
|
414
|
+
.claude/rules | sort -V | tail -1`=Y) so the subagent can distinguish a CLI-install
|
|
415
|
+
version from a rule-corpus coverage ceiling (#1709 #3).
|
|
416
|
+
- Before delegating an edit/commit to an EXISTING file (not a newly-created target, which
|
|
417
|
+
is by definition untracked), confirm the path is git-tracked via `git ls-files <path>`
|
|
418
|
+
— not just existence via Glob/ls. An existing-but-untracked path — verify with
|
|
419
|
+
`git check-ignore -v --no-index <path>` to confirm intentional exclusion (e.g. a
|
|
420
|
+
`.gitignore` rule) — MUST be excluded from delegation scope, or its tracked status
|
|
421
|
+
decided first, before dispatch (R010 「Agent Capability Pre-Check」 git-tracked row)
|
|
422
|
+
(#1709 #4).
|
|
423
|
+
- When forwarding a number an agent reported (row/line/file counts, etc.) into a
|
|
424
|
+
subsequent delegation prompt, recompute it once via diff/ls (e.g. `git diff -U0 --
|
|
425
|
+
<path> | grep -c '^+[^+]'`) before restating it — do not relay an unverified
|
|
426
|
+
agent-reported count (R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4
|
|
427
|
+
확장, #1709 #5).
|
|
392
428
|
|
|
393
429
|
|
|
394
430
|
## Sensitive Path Handling (CC v2.1.121+)
|
package/templates/CLAUDE.md.en
CHANGED
|
@@ -47,7 +47,7 @@ NO EXCEPTIONS. NO EXCUSES.
|
|
|
47
47
|
|------|------|-------------|
|
|
48
48
|
| R007 Agent ID | Every response starts with `┌─ Agent:` header | Add header immediately |
|
|
49
49
|
| R008 Tool ID | Every tool call prefixed with `[agent][model] → Tool:` | Add prefix immediately |
|
|
50
|
-
| R009 Parallel | 2+ independent tasks → parallel agents (max
|
|
50
|
+
| R009 Parallel | 2+ independent tasks → parallel agents (soft default 4, max 5) | Stop sequential, switch to parallel |
|
|
51
51
|
| R010 Orchestrator | Orchestrator never modifies files → delegate to subagents | Stop direct modification, delegate |
|
|
52
52
|
|
|
53
53
|
---
|
|
@@ -174,6 +174,7 @@ This is the core oh-my-customcode philosophy: **"No expert? CREATE one, connect
|
|
|
174
174
|
| QA Team | 3 | qa-planner, qa-writer, qa-engineer |
|
|
175
175
|
| Manager | 6 | mgr-creator, mgr-updater, mgr-supplier, mgr-gitnerd, mgr-sauron, mgr-claude-code-bible |
|
|
176
176
|
| System | 4 | sys-memory-keeper, sys-naggy, tracker-checkpoint, wiki-curator |
|
|
177
|
+
| Agora | 1 | agora-runner |
|
|
177
178
|
| **Total** | **50** | |
|
|
178
179
|
|
|
179
180
|
## Agent Teams (MUST when enabled)
|
package/templates/CLAUDE.md.ko
CHANGED
|
@@ -47,7 +47,7 @@ oh-my-customcode로 구동됩니다.
|
|
|
47
47
|
|------|------|--------|
|
|
48
48
|
| R007 에이전트 식별 | 모든 응답은 `┌─ Agent:` 헤더로 시작 | 즉시 헤더 추가 |
|
|
49
49
|
| R008 도구 식별 | 모든 도구 호출에 `[에이전트명][모델] → Tool:` 접두사 | 즉시 접두사 추가 |
|
|
50
|
-
| R009 병렬 실행 | 독립 작업 2개 이상 → 병렬 에이전트 (최대
|
|
50
|
+
| R009 병렬 실행 | 독립 작업 2개 이상 → 병렬 에이전트 (권장 4, 최대 5) | 순차 실행 중단, 병렬로 전환 |
|
|
51
51
|
| R010 오케스트레이터 | 오케스트레이터는 파일 수정 금지 → 서브에이전트에 위임 | 직접 수정 중단, 위임 |
|
|
52
52
|
|
|
53
53
|
---
|
|
@@ -174,6 +174,7 @@ project/
|
|
|
174
174
|
| QA Team | 3 | qa-planner, qa-writer, qa-engineer |
|
|
175
175
|
| Manager | 6 | mgr-creator, mgr-updater, mgr-supplier, mgr-gitnerd, mgr-sauron, mgr-claude-code-bible |
|
|
176
176
|
| System | 4 | sys-memory-keeper, sys-naggy, tracker-checkpoint, wiki-curator |
|
|
177
|
+
| Agora | 1 | agora-runner |
|
|
177
178
|
| **총계** | **50** | |
|
|
178
179
|
|
|
179
180
|
## Agent Teams (MUST when enabled)
|
package/templates/README.md
CHANGED
|
@@ -80,11 +80,12 @@ CI의 `verify-template-sync.sh`가 소스와 templates/ 간 일치를 검증합
|
|
|
80
80
|
| DE Engineer | 6 |
|
|
81
81
|
| SW Engineer / Database | 4 |
|
|
82
82
|
| Security | 1 |
|
|
83
|
-
| SW Architect |
|
|
83
|
+
| SW Architect | 2 |
|
|
84
84
|
| Infra Engineer | 2 |
|
|
85
85
|
| QA Team | 3 |
|
|
86
86
|
| Manager | 6 |
|
|
87
87
|
| System | 4 |
|
|
88
|
+
| Agora | 1 |
|
|
88
89
|
|
|
89
90
|
### Skills (115)
|
|
90
91
|
|
|
@@ -115,7 +116,7 @@ CI의 `verify-template-sync.sh`가 소스와 templates/ 간 일치를 검증합
|
|
|
115
116
|
|
|
116
117
|
각 디렉토리는 단일 토픽에 대한 best practices, 튜토리얼, 또는 설계 가이드를 담습니다. 에이전트가 작업 중 참조합니다 (R006 관심사 분리).
|
|
117
118
|
|
|
118
|
-
### Hooks (
|
|
119
|
+
### Hooks (42)
|
|
119
120
|
|
|
120
121
|
`.claude/hooks/scripts/*.sh` — 라이프사이클 훅 스크립트.
|
|
121
122
|
|
package/templates/manifest.json
CHANGED
|
@@ -348,7 +348,7 @@ steps:
|
|
|
348
348
|
|
|
349
349
|
- name: deep-plan
|
|
350
350
|
skill: deep-plan
|
|
351
|
-
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4)."
|
|
351
|
+
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
352
352
|
depends_on: plan
|
|
353
353
|
|
|
354
354
|
- name: implement
|
|
@@ -389,6 +389,42 @@ steps:
|
|
|
389
389
|
(#1701 #1). The orchestrator's own wiring judgement (which file/anchor already covers a
|
|
390
390
|
new clause) counts as final wording too — the prompt supplies candidate files/anchors
|
|
391
391
|
only, and the subagent decides coverage by quoting the covering sentence (R010 [#1704 #1]).
|
|
392
|
+
- Before dispatching any delegation prompt in an iteration that created or reinforced a rule
|
|
393
|
+
clause, the orchestrator MUST compare that clause's Anti-pattern table rows 1:1 against the
|
|
394
|
+
delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
|
|
395
|
+
반복 self-check」 was known as text but not executed as a procedure, #1707 #1).
|
|
396
|
+
- Every rule/skill/guide TEXT-editing delegation prompt MUST include this fixed constraint
|
|
397
|
+
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent 반말; (b) locate by anchor
|
|
398
|
+
strings, never line numbers; (c) copy quotations from `gh issue view --json body` output and
|
|
399
|
+
verify with `grep -F`; (d) ±1 heading check including re-binding of relative references (위
|
|
400
|
+
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3).
|
|
401
|
+
- Document mirror/parity delegations (README/ARCHITECTURE/CLAUDE.md ko-en, templates
|
|
402
|
+
mirrors, etc.) MUST be split to ≤3 files per delegation (a companion cap alongside the
|
|
403
|
+
arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
|
|
404
|
+
edit_items × 2 ≤ 16 — a #1709-proposed guide kept below the 20-turn limit, not a
|
|
405
|
+
truncation guarantee, per R020 「maxTurns 절단 실증」 6항) and state that arithmetic in
|
|
406
|
+
the delegation prompt before dispatch (#1709 #1).
|
|
407
|
+
- Parity delegation prompts (e.g. a ko mirror tracking an en source) MUST require THREE
|
|
408
|
+
directions — additions, edits, AND deletions — to match the source, never additions
|
|
409
|
+
only; completion criteria MUST include a `grep -F` confirming zero rows/sentences are
|
|
410
|
+
present in the target but absent from the source (#1709 #2).
|
|
411
|
+
- When a delegation prompt or brief states a measured version/count value (CC version,
|
|
412
|
+
rule-note coverage ceiling, file/skill counts), append the exact command used to
|
|
413
|
+
measure it (e.g. `claude --version`=X / `git grep -oh '2\.1\.2[0-9][0-9]'
|
|
414
|
+
.claude/rules | sort -V | tail -1`=Y) so the subagent can distinguish a CLI-install
|
|
415
|
+
version from a rule-corpus coverage ceiling (#1709 #3).
|
|
416
|
+
- Before delegating an edit/commit to an EXISTING file (not a newly-created target, which
|
|
417
|
+
is by definition untracked), confirm the path is git-tracked via `git ls-files <path>`
|
|
418
|
+
— not just existence via Glob/ls. An existing-but-untracked path — verify with
|
|
419
|
+
`git check-ignore -v --no-index <path>` to confirm intentional exclusion (e.g. a
|
|
420
|
+
`.gitignore` rule) — MUST be excluded from delegation scope, or its tracked status
|
|
421
|
+
decided first, before dispatch (R010 「Agent Capability Pre-Check」 git-tracked row)
|
|
422
|
+
(#1709 #4).
|
|
423
|
+
- When forwarding a number an agent reported (row/line/file counts, etc.) into a
|
|
424
|
+
subsequent delegation prompt, recompute it once via diff/ls (e.g. `git diff -U0 --
|
|
425
|
+
<path> | grep -c '^+[^+]'`) before restating it — do not relay an unverified
|
|
426
|
+
agent-reported count (R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4
|
|
427
|
+
확장, #1709 #5).
|
|
392
428
|
|
|
393
429
|
|
|
394
430
|
## Sensitive Path Handling (CC v2.1.121+)
|