oh-my-customcode 1.1.46 → 1.1.47

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/dist/cli/index.js CHANGED
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  workspaces: [
242
242
  "packages/*"
243
243
  ],
244
- version: "1.1.46",
244
+ version: "1.1.47",
245
245
  description: "Batteries-included agent harness for Claude Code",
246
246
  type: "module",
247
247
  bin: {
package/dist/index.js CHANGED
@@ -2031,7 +2031,7 @@ var package_default = {
2031
2031
  workspaces: [
2032
2032
  "packages/*"
2033
2033
  ],
2034
- version: "1.1.46",
2034
+ version: "1.1.47",
2035
2035
  description: "Batteries-included agent harness for Claude Code",
2036
2036
  type: "module",
2037
2037
  bin: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "1.1.46",
6
+ "version": "1.1.47",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -38,6 +38,8 @@
38
38
 
39
39
  > **v2.1.212+**: MCP 도구 호출이 2분(기본값, `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`로 임계값 조정·비활성) 초과 시 자동으로 백그라운드로 이동해 세션이 계속 사용 가능해집니다 — 위 v2.1.210 Bash/PowerShell auto-background의 MCP 도구 확장. 느린 MCP 호출(ontology-rag `rebuild_ontology`, code-review-graph 인덱싱 등)을 hang으로 오판하지 말고, 2분 초과 시 백그라운드 전환을 전제로 후속 작업을 진행합니다.
40
40
 
41
+ > **v2.1.233+**: `WebFetch`의 세션 URL 캐시 TTL이 `CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`로 조정 가능해졌습니다(기본 15분 불변). **재확인 함정**: 같은 URL을 TTL 내 재조회하면 캐시가 반환되므로 **독립적인 2차 확인이 아닙니다** — R020 Degraded-Output Re-Verification Gate가 요구하는 "결정론적 2차 소스"로 동일 URL의 WebFetch 재호출을 쓰지 말고, 다른 소스나 CLI 실측(`npm view`, `gh`)을 사용합니다.
42
+
41
43
  > **v2.1.224+**: mid-turn에 연결된 MCP 도구가 **이름 고지 없이** tool search로 deferred되던 결함이 수정되었습니다. 구버전에서는 세션 도중 붙은 MCP 서버의 도구가 이름조차 노출되지 않아 "그런 도구 없음"으로 오판할 수 있었으므로, 위 tool-availability 주의(`command -v` 사전 확인과 동류)를 MCP 도구에도 적용합니다 — 도구 부재 결론 전에 `ToolSearch`로 실측합니다.
42
44
 
43
45
  > **v2.1.228+**: Write 도구가 **이번 세션에 읽지 않은 기존 파일도 newer model에서는 덮어쓸 수 있도록** 변경되어 Edit 도구 규칙과 일치합니다(구모델은 여전히 read 선행 필요). 도구가 강제하던 read-before-write 가드가 모델에 따라 사라지므로, "Write가 실패했다 = 파일을 안 읽었다"는 진단이 더 이상 보편적으로 성립하지 않고, **읽지 않은 파일을 Write하면 기존 내용이 경고 없이 소실**됩니다 — 전체 교체가 아닌 변경에는 Edit을 쓰는 원칙을 도구 강제가 아니라 절차로 유지합니다. 또한 deferred-tools reminder가 skill 호출 후 모델에 두 번 전달되던 문제가 수정되었습니다(중복 컨텍스트 소모).
@@ -492,6 +492,8 @@ Key optional fields: `scope`, `context`, `version`, `effort`, `model`, `agent`,
492
492
 
493
493
  > **v2.1.222+**: 스킬 frontmatter의 `disable-model-invocation: true`(모델이 스스로 그 스킬을 호출하지 못하게 막고 사용자/파이프라인의 명시적 호출만 허용하는 필드)가 설정된 스킬을 모델이 호출하려 할 때의 refusal 문구가 개선되어, 모델에게 **워크플로우를 스스로 복제하지 말고 사용자에게 실행을 요청하라**고 지시합니다. 무인 루프(`/fsd` 등)가 이런 스킬을 모델 호출 경로에 두면 실행 대신 refusal이 반환되므로, 해당 스킬은 **사용자/파이프라인 명시 호출**로 설계합니다.
494
494
 
495
+ > **v2.1.233+**: 스킬/커맨드의 인자 치환이 **인자 값을 다시 템플릿 마커로 재확장하던** 문제가 수정되었습니다 — 인자에 `$ARGUMENTS`·`$1` 같은 문자열이 들어오면 2차 확장돼 프롬프트가 변형될 수 있었습니다. 즉 구버전에서 **인자 값은 신뢰 입력이 아니었으므로**, 인자를 지시문에 그대로 끼워 넣는 스킬은 샘플 값으로 조립 결과를 실제 확인해 검증합니다(R023 Sample-Value Assembly — 문법 검증만으로는 드러나지 않는 계열).
496
+
495
497
  > **v2.1.228+**: claude.ai에서 동기화된 스킬이 하드닝되었습니다 — 로컬 커맨드·MCP prompt를 **shadow하지 않고**, description이 sanitize·labeling되며, 로컬 머신에서 그 본문이 `!` 명령을 실행하거나 `@` 파일 참조를 확장하지 **않습니다**. 즉 외부 출처 스킬은 로컬 `.claude/skills/` 스킬과 **동일한 실행 능력을 갖지 않으므로**, 동기화 스킬에 `!`/`@` 동작을 전제한 본문을 작성하면 무음 미실행이 됩니다. 구버전에서는 동기화 스킬이 로컬 커맨드를 가릴 수 있어 같은 이름 호출이 어느 정의로 해소되는지 결정론적이지 않았습니다.
496
498
 
497
499
  <!-- DETAIL: Skill Optional Fields (full yaml block)
@@ -1,12 +1,22 @@
1
1
  # [MUST] Agent Teams Rules (Conditional)
2
2
 
3
3
  > **Priority**: MUST | **ID**: R018
4
- > **Condition**: Agent Teams enabled (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`)
4
+ > **Condition**: Agent Teams enabled — `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` present in the tool list (see Detection)
5
5
  > **Fallback**: When disabled, R009/R010 apply
6
6
 
7
7
  ## Detection
8
8
 
9
- Available when `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or TeamCreate/SendMessage tools present.
9
+ Agent Teams is active only when the **team-creation path actually exists** — `TeamCreate` present in the tool list. The environment variable alone is NOT sufficient: it expresses intent to enable the feature, not the feature's availability.
10
+
11
+ | Observed state | Teams active? |
12
+ |----------------|---------------|
13
+ | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **and** `TeamCreate` present | Yes |
14
+ | env var set, `TeamCreate` **absent** | **No** — a team cannot be created, so no member can be spawned |
15
+ | `SendMessage` present, `TeamCreate` absent | **No** — peer/cross-session messaging is a separate capability (see Scope below), not evidence of Teams |
16
+
17
+ Rationale: since v2.1.233, `TeamCreate`/`TeamDelete` are absent from the tool list in this runtime (measured — R002 "Todo/Task 도구 기본 제거"), so a set env var cannot make teams creatable. Detection therefore rests on the tools actually being present, not on the env var alone — "the tool exists" is itself a claim requiring measurement (R020).
18
+
19
+ When Detection resolves to **No**, this entire rule is dormant and R009/R010 govern.
10
20
 
11
21
  ## Decision Matrix
12
22
 
@@ -119,7 +129,7 @@ Origin: #1293 (Session 110 retrospective, Low).
119
129
 
120
130
  > Origin: #1341 찐빠 #2 (low-confidence) — 4+ 병렬 Agent Tool 스폰 시 `[N]` prefix는 표기했으나 "R018 게이트: … → Agent Tool 폴백" announce를 생략한 것을 자가 위반으로 의심. 그러나 R018은 조건부 규칙이라 Agent Teams 비활성 환경에서는 게이트 투명성 자체가 미적용이다.
121
131
 
122
- R018 전체(게이트 투명성 포함)는 Agent Teams 활성 시에만 적용되는 조건부 규칙이다 (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` 또는 TeamCreate/SendMessage 도구 존재). Agent Teams **비활성** 환경에서는:
132
+ R018 전체(게이트 투명성 포함)는 Agent Teams 활성 시에만 적용되는 조건부 규칙이다 — 활성 조건은 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` 도구 존재이며, `SendMessage` 단독 존재는 활성 근거가 아니다(상세는 위 `## Detection`). Agent Teams **비활성** 환경에서는:
123
133
 
124
134
  - 게이트 투명성 announce 의무가 없다 — R009 `[N]` prefix 만으로 충분하다.
125
135
  - 3+ 병렬 Agent Tool 스폰을 "게이트 announce 누락"으로 자가 플래그하지 않는다 (false-positive 방지).
@@ -354,6 +364,8 @@ Do NOT avoid Agent Teams solely for cost reasons when criteria are met.
354
364
 
355
365
  Agent Teams 멤버는 long-running 작업 중 진행 상태를 TaskUpdate 로 명시적으로 알려야 한다. 침묵은 코디네이터가 죽었거나 멤버가 막혔다고 오인하게 만든다.
356
366
 
367
+ > **도구 가용성 선확인 (v2.1.233+)**: `TaskCreate/Get/Update/List`는 현행 모델(Opus 4.8 / Sonnet 5 / Fable 5 / Mythos 5 이상)에서 기본 제거되어 이 저장소 실행 환경에 **존재하지 않는다** — 실측은 R002 「Todo/Task 도구 기본 제거」. 아래 표는 Task 도구가 가용할 때(구모델 또는 `CLAUDE_CODE_ENABLE_TODO_TOOLS=1`)의 규정이며, **부재 시 아래 대체 규약을 따른다**. 없는 도구의 호출을 의무로 남겨두면 실행 불가능한 규정이 된다.
368
+
357
369
  | 시점 | 호출 |
358
370
  |------|------|
359
371
  | 작업 시작 | TaskUpdate(taskId, status: "in_progress") |
@@ -369,6 +381,16 @@ Agent Teams 멤버는 long-running 작업 중 진행 상태를 TaskUpdate 로
369
381
 
370
382
  Reference issue: #1087.
371
383
 
384
+ ### Task 도구 부재 시 대체 규약 (Origin: #1582)
385
+
386
+ | 시점 | 대체 수단 |
387
+ |------|-----------|
388
+ | 시작 / 완료 / 차단 | `SendMessage` 1줄 보고 (`summary`에 상태 단어 포함) |
389
+ | 장문 진행 보고 | 아티팩트 파일 경로만 전달 (R006 Artifact Channel Protocol) — SendMessage 본문은 v2.1.222+ 조용히 절단된다 |
390
+ | 코디네이터의 완료 판정 | SendMessage 보고가 아니라 **결정론적 ground-truth** (아래 Member Completion Verification) |
391
+
392
+ `TaskList` 부재로 **공유 작업 목록이라는 조율 기반 자체가 사라지므로**, 아래 Member Completion Verification의 "보고는 신호일 뿐, 판정은 실측"이 보조 원칙이 아니라 **유일한 방어선**이 된다.
393
+
372
394
  ## Member Completion Verification (deterministic ground-truth)
373
395
 
374
396
  Agent Teams member completion MUST be verified by deterministic ground-truth — NOT by SendMessage reports or TaskList status alone. Members may edit files without updating task status (task stays `pending`) or go idle without executing at all.
@@ -10,7 +10,7 @@ Before declaring any task `[Done]`, verify completion against task-type-specific
10
10
 
11
11
  | Task Type | REQUIRED Verification Before [Done] |
12
12
  |-----------|-------------------------------------|
13
- | Release | All issues closed, version bumped, PR merged, GitHub Release created; **External automation verified**: `.github/workflows/` listed AND `gh run list --limit 10` checked for auto-publish workflows |
13
+ | Release | All issues closed, version bumped, PR merged; **대기 조건은 AND** — `release.yml` completed **AND** GitHub Release `isDraft=false` (npm 도달은 충분조건이 아님, 아래 참조); **External automation verified**: `.github/workflows/` listed AND `gh run list --limit 10` checked for auto-publish workflows |
14
14
  | Implementation | Code compiles/passes lint, tests pass (if exist), no TODO markers left |
15
15
  | Documentation | Links valid, counts accurate, cross-references updated |
16
16
  | Git Operations | Operation succeeded (check exit code), working tree clean |
@@ -18,6 +18,10 @@ Before declaring any task `[Done]`, verify completion against task-type-specific
18
18
  | Agent/Skill Creation | Frontmatter valid, referenced skills exist, routing updated |
19
19
  | UI/Frontend | Browser render verified (dev server running + page loaded), no console errors, visual output matches intent; **CSS/style changes**: capture before/after visual diff or screenshot; type-check passing alone is NOT sufficient |
20
20
 
21
+ > **비동기 연쇄의 대기 조건 = 가장 늦게 완료되는 산출물 (Origin: #1584 #2)**: 릴리즈 체인처럼 산출물이 순차 생성되는 비동기 연쇄에서, 중간 산출물 도달을 완료로 읽으면 뒤따르는 산출물이 미완인 채 남는다. npm publish는 `release.yml` **안에서** GitHub Release 생성보다 먼저 끝나므로, npm 도달 시점에 검증을 끝내면 Release가 `draft=true`로 남을 수 있다. `gh run view <id> --json status`(completed) **AND** `gh release view <tag> --json isDraft`(false)를 둘 다 확인한다.
22
+ >
23
+ > v1.1.44는 타이밍이 맞아 드러나지 않고 v1.1.45에서 노출된 **간헐적 결함**이다 — 한 번 통과한 검증 순서가 경합을 배제하지 않는다.
24
+
21
25
  ## Optional: Quantitative Evidence (advisory, added v0.114.0, #1034)
22
26
 
23
27
  For complex agent invocations or multi-step workflows, attach 4-metric evidence to [Done] declarations as supplementary evidence (NOT a binary gate):
@@ -273,14 +277,18 @@ Origin: #1266 ④.
273
277
 
274
278
  #### 자율 루프 세션의 턴 경계 정의 (계수 전 확정 필수)
275
279
 
276
- 위 파싱 레시피는 **"사용자 프롬프트 = 턴 경계"**를 암묵 전제한다. `/fsd` 같은 자율 루프는 사용자 프롬프트가 거의 없어(실측: 사용자 프롬프트 4개 대 assistant 응답 30여 회) 이 전제로는 경계 재구성이 실패하고, 계수 자체가 성립하지 않는다. 자율 루프 transcript를 셀 때는 대안 경계 정의(예: **`tool_result` 직후 첫 text 블록을 응답 시작으로 간주**)를 먼저 확정하고, 정의를 확정하기 전에는 **위반 횟수를 단정하지 않는다**.
280
+ 위 파싱 레시피는 **"사용자 프롬프트 = 턴 경계"**를 암묵 전제한다. `/fsd` 같은 자율 루프는 사용자 프롬프트가 거의 없어(실측: 사용자 프롬프트 4개 대 assistant 응답 30여 회) 이 전제로는 경계 재구성이 실패하고, 계수 자체가 성립하지 않는다. 자율 루프 transcript를 셀 때는 **두 단계를 순서대로** 수행하고, 완료 전에는 **위반 횟수를 단정하지 않는다**.
281
+
282
+ 1. **전처리 — `.message.role`이 존재하는 라인만 필터링**한다. 트랜스크립트에는 role 없는 라인(메타·이벤트·요약)이 assistant/user 사이에 대량으로 끼어 있어, 필터 없이는 **인접성 판정 자체가 깨진다**. 2단계의 어떤 경계 정의도 이 필터 없이는 성립하지 않는다.
283
+ 2. **대안 경계 정의 확정** — 예: `tool_result` 직후 첫 text 블록을 응답 시작으로 간주.
277
284
 
278
285
  | Anti-pattern | Required |
279
286
  |--------------|----------|
280
- | 자율 루프 transcript를 사용자 프롬프트 경계로 파싱해 위반 N회로 단정 | 대안 경계 정의를 먼저 확정; 확정 전에는 횟수 단정 금지 |
287
+ | 자율 루프 transcript를 사용자 프롬프트 경계로 파싱해 위반 N회로 단정 | 1단계 필터 + 2단계 경계 정의를 먼저 확정; 확정 전에는 횟수 단정 금지 |
288
+ | 필터 없이 원본 라인 순서로 인접성을 판정 → 계수 실패를 경계 정의 탓으로 오진 | `.message.role` 필터를 먼저 적용한 뒤 경계 정의를 평가 |
281
289
  | 경계 재구성 실패를 "위반 없음"으로 해석 | 경계 무관 지표로 대체 보고 — `┌─ Agent:` 헤더 총량, tool_use 대 announce 라인 비율 |
282
290
 
283
- Origin: #1574 (v1.1.44 세션 — 자율 루프에서 R007 헤더 누락 계수를 시도했으나 사용자 프롬프트 4개로 턴 경계 재구성 불가). Cross-ref: R005(계수/매칭 방법 확인 — 도구 기본 동작 미확인 시 결과 오해석).
291
+ Origin: #1574 (v1.1.44 세션 — 자율 루프에서 R007 헤더 누락 계수를 시도했으나 사용자 프롬프트 4개로 턴 경계 재구성 불가); 1단계 필터는 #1584 #3 (v1.1.45 세션 — 위 조항을 신설했음에도 계수가 재실패. 실제 장애물은 경계 정의가 아니라 **`role=null` 라인 661개 / 전체 1215줄의 54%**였고, 필터 추가 즉시 성립(응답 시작 50, R007 위반 0) — 조항이 원인을 절반만 짚어 재발한 사례). Cross-ref: R005(계수/매칭 방법 확인 — 도구 기본 동작 미확인 시 결과 오해석).
284
292
 
285
293
  ### Proxy Signal vs Canonical Ground-Truth (#1336 ①②)
286
294
 
@@ -282,6 +282,18 @@ The Subagent Scope-Creep STOP Protocol (above) is REACTIVE — it halts an agent
282
282
 
283
283
  Cross-reference: the Subagent Scope-Creep STOP Protocol (reactive halt after trips) and R001 (credential/privileged-scope guardrails, re-confirm scope before irreversible shared-infra actions).
284
284
 
285
+ #### 우회 플래그는 우회 대상과 근거를 명시 (Origin: #1584 #6)
286
+
287
+ 보호장치를 우회하는 플래그(`--admin`, `--force`, `--no-verify` 등)를 위임 프롬프트에 지시할 때는 **무엇을 우회하는지와 그것이 정당한 근거**를 함께 적는다. 플래그만 적으면 하니스·에이전트가 무권한 우회로 판정해 플래그하거나 거부한다.
288
+
289
+ | Anti-pattern | Required |
290
+ |--------------|----------|
291
+ | `gh pr merge --admin`만 지시 | 우회 대상·근거 명시 — 예: "required status check 10종 전부 pass 확인함. `--admin`이 우회하는 것은 **리뷰어 승인 요건**뿐이며, 1인 메인테이너라 셀프 리뷰 불가" |
292
+
293
+ 목적은 권한 확보가 아니라 **감사 추적**이다. 승인의 인용이 아니라 우회 범위의 사실 서술이므로 아래 「Delegation Prompt Framing — 승인 인용 금지」와 충돌하지 않는다.
294
+
295
+ Origin: #1584 #6 — v1.1.45·v1.1.46 릴리즈 PR 머지에서 하니스가 "no visible user authorization naming that bypass"로 플래그했다.
296
+
285
297
  <!-- ARCHIVED CC version note (historical):
286
298
  > **v2.1.178+**: Auto mode now evaluates subagent spawns with the safety classifier BEFORE launch, closing a gap where a spawned subagent could request a blocked action without prior review. This is the PLATFORM-level complement to the (advisory) Pre-Delegation Privileged-Scope Boundary above: the orchestrator still states the approved/forbidden scope in the delegation prompt (proactive, model-level), and CC now also gates the spawn itself (platform-level). The two are defense-in-depth — the prompt-stated boundary remains required because the classifier gates ACTIONS, not task SCOPE.
287
299
  -->
@@ -311,6 +323,16 @@ Cross-reference: the Subagent Scope-Creep STOP Protocol (reactive halt after tri
311
323
 
312
324
  Origin: #1563 찐빠 #3 — `gh issue edit --assignee`가 gh 2.86.0에 없는 플래그였고(정답 `--add-assignee`) 에이전트가 실행 중 자체 복구했다. Cross-reference: R005(도구 플래그·기본 동작 실측 함정 사례집), 아래 Agent Capability Pre-Check(위임 전 존재성 확인의 도구·경로 각도).
313
325
 
326
+ #### 저장소 상태 기재도 같은 규율 (Origin: #1584 #5)
327
+
328
+ 위임 프롬프트에 저장소 상태(HEAD SHA, 브랜치, 작업트리 청결도)를 기재할 때도 **직전 실측**이 필요하다 — `git rev-parse --short HEAD` 한 줄이면 충분하다. 세션 중 머지·pull로 HEAD는 수시로 바뀌므로, 앞선 턴에서 본 값을 그대로 옮기면 서브에이전트가 **틀린 베이스를 전제로** 작업한다.
329
+
330
+ | Anti-pattern | Required |
331
+ |--------------|----------|
332
+ | 이전 턴에서 본 HEAD SHA를 위임서에 그대로 기재 | 위임 직전 `git rev-parse --short HEAD` 실측값 기재 |
333
+
334
+ Origin: #1584 #5 (v1.1.45 세션 — 커밋 위임서에 `develop @ 96ef8f85`로 적었으나 실측은 `f6d3f518`; #1572 머지 후 pull 미반영). R017 「메모리 TODO를 위임 전제로 쓸 때」의 **세션 내 축소판** — 스냅샷의 수명이 세션 간이 아니라 **턴 간**이라는 차이만 있다.
335
+
314
336
  ### Parallel Delegation — Sibling-Agent Disclosure
315
337
 
316
338
  2개 이상의 서브에이전트를 같은 메시지에서 병렬 스폰할 때, 각 위임 프롬프트는 **형제 에이전트의 존재와 각자의 담당 범위**를 고지해야 한다. 서브에이전트는 격리된 컨텍스트에서 실행되어 형제를 인지할 수 없으므로, 고지가 없으면 `git status` 같은 **저장소 전역 공유 뷰**의 출력을 자기 변경분으로 오독하거나 경합 원인을 "외부 세션/프로세스"로 오귀속한다.
@@ -673,11 +695,11 @@ The skill's WORKFLOW is followed, but git EXECUTION is delegated to mgr-gitnerd
673
695
 
674
696
  ## Agent Teams (required when enabled)
675
697
 
676
- When `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`: Agent Teams is required for qualifying tasks.
698
+ Agent Teams is active only when `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` is present in the tool list (the env var alone is NOT sufficient; `SendMessage` alone is not evidence). When active, Agent Teams is required for qualifying tasks; when not, R009/R010 govern.
677
699
 
678
- See **R018 (MUST-agent-teams.md)** for the complete decision matrix, self-check, team patterns, and lifecycle.
700
+ See **R018 (MUST-agent-teams.md)** for the Detection table, complete decision matrix, self-check, team patterns, and lifecycle.
679
701
 
680
- **Quick rule**: 3+ agents OR review cycle OR 2+ issues in same batch → use Agent Teams.
702
+ **Quick rule** (applies only when active): 3+ agents OR review cycle OR 2+ issues in same batch → use Agent Teams.
681
703
  Using Agent tool when Agent Teams criteria are met needs correction per R018.
682
704
 
683
705
  <!-- DETAIL: Announcement Format
@@ -8,11 +8,13 @@
8
8
  |------|-------|--------|
9
9
  | 1: Always | Read, Glob, Grep, ToolSearch | Free use, read-only |
10
10
  | 2: Default | Write, Edit, NotebookEdit | State changes explicitly, notify before modifying important files |
11
- | 3: Context | Agent, Skill, EnterPlanMode, ExitPlanMode, EnterWorktree, ExitWorktree, LSP, Monitor, TodoWrite, AskUserQuestion, PushNotification | Context-dependent, no user approval needed |
11
+ | 3: Context | Agent, Skill, EnterPlanMode, ExitPlanMode, EnterWorktree, ExitWorktree, LSP, Monitor, TodoWrite†, AskUserQuestion, PushNotification | Context-dependent, no user approval needed |
12
12
  | 4: Approval | Bash, PowerShell, WebFetch, WebSearch | Request user approval on first use |
13
- | 5: Conditional | TeamCreate, TeamDelete, SendMessage, TaskCreate, TaskGet, TaskList, TaskUpdate, TaskStop, TaskOutput | Available when Agent Teams enabled |
13
+ | 5: Conditional | TeamCreate†, TeamDelete†, SendMessage, TaskCreate†, TaskGet†, TaskList†, TaskUpdate†, TaskStop, TaskOutput | Available when Agent Teams enabled |
14
14
  | 6: MCP | ListMcpResourcesTool, ReadMcpResourceTool, CronCreate, CronDelete, CronList, RemoteTrigger | MCP/extension tools, available when servers configured |
15
15
 
16
+ > **†** 현행 모델의 기본 실행 환경에 **존재하지 않는다** — 아래 v2.1.233 노트 참조. 이 표는 **도구 카탈로그**이지 가용성 보증이 아니므로, 규칙이 특정 도구 호출을 의무화하기 전에 실측(도구 목록 / `ToolSearch`)으로 존재를 확인한다.
17
+
16
18
  ## File Access
17
19
 
18
20
  | Operation | Allowed | Prohibited |
@@ -84,7 +86,7 @@ Use a `"*"` deny rule in `settings.json` to enforce a deny-by-default posture, t
84
86
 
85
87
  > **v2.1.232/233+**: 232가 권한 검사 우회 3건을 수정했으나 **233이 그중 2건을 롤백**했습니다. 어느 것이 현행인지 버전별로 구분합니다.
86
88
  >
87
- > 1. **233 현재 유효 (232 수정 유지)** — (a) PowerShell에서 변수 기록 파라미터가 `$PSDefaultParameterValues`를 조용히 덮어써 이후 명령의 파일 접근을 리다이렉트할 수 있던 우회가 수정되었습니다. 또한 중첩 git 저장소가 부모 디렉토리의 trust를 상속하던 문제가 수정되어 저장소마다 별도 trust 확인이 필요하고, `sandbox.ripgrep`은 user/managed/`--settings`에서만 적용되며 **project settings로는 override 불가**입니다(위 v2.1.214 allow/deny 스코프 비대칭과 같은 계열의 축소 — repo-local 설정으로 켤 수 없는 항목이 늘었습니다).
89
+ > 1. **233 현재 유효 (232 수정 유지)** — (a) PowerShell에서 변수 기록 파라미터가 `$PSDefaultParameterValues`를 조용히 덮어써 이후 명령의 파일 접근을 리다이렉트할 수 있던 우회가 수정되었습니다. 또한 중첩 git 저장소가 부모 디렉토리의 trust를 상속하던 문제가 수정되어 저장소마다 별도 trust 확인이 필요하고, `sandbox.ripgrep`은 user/managed/`--settings`에서만 적용되며 **project settings로는 override 불가**입니다(위 v2.1.214 allow/deny 스코프 비대칭과 같은 계열의 축소 — repo-local 설정으로 켤 수 없는 항목이 늘었습니다). 233은 추가로 **Windows NT `\??\` device prefix 경로가 UNC 경로 검증을 우회**해 NTLM 자격증명 유출 벡터가 되던 결함을 수정했습니다 — 같은 경로를 여러 표기로 쓸 수 있다는 v2.1.221/223 "검사 대상 문자열 ≠ 실행 문자열" 계열의 **경로 표기** 각도입니다.
88
90
  > 2. **233에서 롤백됨 — 현재 권한 검사되지 않음** — (b) Windows Git Bash가 경로 검증에는 일반 파일로 보이는 Cygwin-style symlink를 따라가던 우회 수정, (c) Bash 입력 리다이렉션(`< file`)을 인자 표기와 동일하게 권한 검사하던 변경. 두 건 모두 232에서 도입됐다가 233에서 되돌려졌습니다(CHANGELOG v2.1.233: "Reverted the 2.1.232 Bash permission changes for Cygwin-style symlinks on Windows and for input redirections (`< file`); a narrower version will return in a later release"). **이 두 경로는 현행 233에서 권한 검사를 거치지 않으므로, 검사된다고 가정하고 경로 스코프 규칙을 설계하면 우회됩니다.**
89
91
  > 3. **재도입 예정** — "a narrower version will return in a later release"이므로 좁힌 형태로 돌아옵니다. 재도입 시 적용 범위가 232 원본과 다를 수 있으므로 그때 다시 확인합니다.
90
92
  >
@@ -92,6 +94,26 @@ Use a `"*"` deny rule in `settings.json` to enforce a deny-by-default posture, t
92
94
  >
93
95
  > **일반 교훈**: 단일 릴리즈의 플랫폼 권한 개선은 롤백될 수 있으므로 **항구적 보호막으로 간주하지 않습니다**. 스코프 규칙은 개선 이전 상태를 기준으로 설계하고 플랫폼 개선은 defense-in-depth로만 취급합니다(`feedback_platform_claim_staleness` 계열 — 플랫폼 주장의 시효성).
94
96
 
97
+ ### Todo/Task 도구 기본 제거 (v2.1.233+) — 위 표의 †
98
+
99
+ CHANGELOG v2.1.233 원문: *"Todo/task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) are no longer available on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` to bring them back"*. 이 저장소 에이전트 **49개 중 46개**(`claude-sonnet-5` 41 + `claude-opus-5` 5)가 대상 모델이므로 실행 환경의 기본값은 **부재**다(잔여 3개는 `haiku`).
100
+
101
+ **실측 (2026-08-15 — `claude -p --output-format stream-json` init 이벤트의 `tools` 배열, `claude-opus-5[1m]`/`claude-sonnet-5` 3회 동일 결과)**:
102
+
103
+ | 상태 | 도구 |
104
+ |------|------|
105
+ | 미등록 (CHANGELOG 명시) | `TodoWrite`, `TaskCreate`, `TaskGet`, `TaskList`, `TaskUpdate` |
106
+ | 미등록 (CHANGELOG 미명시 — 별도 게이팅) | `TeamCreate`, `TeamDelete` |
107
+ | 잔존 | `TaskStop`, `TaskOutput`, `SendMessage` |
108
+
109
+ 바이너리(`2.1.233`) 게이트 함수 실측도 이를 뒷받침한다 — 게이트 대상 도구 배열은 **정확히 5개**(CHANGELOG 명시 5종)이며 `TaskOutput`은 포함되지 않는다.
110
+
111
+ `TeamCreate` 부재는 CHANGELOG가 설명하지 않는 별개 사실이며, **Agent Teams 생성 경로 자체가 없다**는 뜻이다 — 환경변수 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`이 설정돼 있어도 R018은 이 환경에서 비활성이다(R018 Detection). 규칙은 **존재하지 않는 도구의 호출을 의무화하지 않는다** — 도구 의존 의무를 쓸 때는 부재 시 대체 규약을 함께 규정한다(R018 Member TaskUpdate Discipline이 그 예).
112
+
113
+ `CLAUDE_CODE_ENABLE_TODO_TOOLS=1`은 복구 수단이나 **환경 설정 사안**이므로 규칙이 그 설정을 전제하지 않는다. 공식 settings 문서(`code.claude.com/docs/en/settings`)에는 2026-08-15 기준 미수록 — 현재 근거는 CHANGELOG 원문 + 위 실측이다.
114
+
115
+ Origin: #1582. Cross-ref: R018(Member TaskUpdate Discipline 대체 규약), R020("도구가 있다"는 가정도 실측 대상).
116
+
95
117
  ## Agent Tool Permission Mode
96
118
 
97
119
  > Canonical source: R010 (MUST-orchestrator-coordination.md) "Universal bypassPermissions" owns the full requirement, rationale, self-check, and version history. Core rule: always pass `mode: "bypassPermissions"` explicitly on every Agent tool call — the Agent tool's default `mode` (`acceptEdits`) overrides agent frontmatter `permissionMode` and causes prompts during unattended execution. Skills that spawn agents MUST include this in their Agent tool call instructions. See R010 for details.
@@ -176,10 +176,31 @@ Origin: #1457 (Session 128 회고 찐빠 #1) — 오케스트레이터가 stale
176
176
 
177
177
  Origin: #1574 (v1.1.44 세션 — mgr-sauron 브리핑의 "선재 항목" 4건 중 3건이 부정확: 이미 해소된 항목, 의도적 차이를 결함으로 오인, 규모 과대). **완화 요인**: 프롬프트에 "그대로 믿지 말고 직접 확인하라"를 명시해 3건 전부 에이전트가 정정 — #1443의 "실측값 기준으로 동기화하라" 방어선과 동일 효과. Cross-ref: R011(메모리 신뢰도·Temporal Decay), R020(Diagnostic Hypothesis Verification).
178
178
 
179
+ ## CC 버전 노트 반영 전 — 스코프 상한 이후 릴리즈 확인 (Origin: #1584 #1)
180
+
181
+ CC 버전 노트를 룰에 반영하기 **전**, `npm view @anthropic-ai/claude-code version` + `claude --version`을 실측해 **스코프 상한 버전 이후의 릴리즈 존재 여부**를 확인한다. 있으면 그 CHANGELOG를 먼저 읽어 **롤백·후속 변경**을 파악한 뒤 반영한다. 이슈 생성과 작업 사이의 간극 동안 플랫폼이 스스로 뒤집을 수 있으므로 — **이슈 번호는 최신 릴리즈를 의미하지 않는다**.
182
+
183
+ | Anti-pattern | Required |
184
+ |--------------|----------|
185
+ | 이슈에 적힌 버전(스코프 상한)까지만 조사해 버전 노트를 반영 | 반영 전 `npm view`+`claude --version` 실측 → 상한 이후 릴리즈 CHANGELOG에서 롤백·후속 변경 확인 |
186
+ | 롤백된 개선을 현행 보호막으로 기재 | 롤백 여부를 확인하고, 롤백된 항목은 "현재 미적용"으로 명시 |
187
+
188
+ Origin: #1584 #1 (v1.1.46 세션) — 이슈 생성(8/11~14)과 작업(8/15) 사이 5일 간극 동안 v2.1.233이 v2.1.232 Bash 권한 변경 2건을 롤백했으나 이를 모른 채 배치해 mgr-sauron이 **FAIL로 차단**(당시 저장소 전역 `2.1.233` 언급 0건). Cross-ref: 위 Pre-Release Target Version Ground-Truth Gate(동일 "스냅샷 ≠ ground-truth" 원리의 버전 각도), R020(Diagnostic Hypothesis Verification), R016(버전노트 보존정책 — *어느* 노트를 남길지는 R016, *반영 전 실측*은 이 게이트).
189
+
179
190
  ## Post-Gate Scope-Expansion Re-Run (Origin: #1433 #2)
180
191
 
181
192
  R017 게이트(mgr-sauron) 통과 선언 후 신규 결함 발견 등으로 스코프가 확장되면(추가 파일 편집), 커밋 전 게이트를 **최종 상태에서 재실행**한다. 게이트 통과 시점 이후의 변경은 형식적으로 미검증이므로, 확장분 미검증 커밋은 R017이 최종 산출물을 커버하지 못하게 만든다.
182
193
 
194
+ ### Advisory 제시 시점 — "같은 커밋 포함 권고"는 판정과 함께 (Origin: #1584 #4)
195
+
196
+ 위 재실행 비용을 줄이는 방법은 권고를 **판정 시점에** 받는 것이다. mgr-sauron 위임 프롬프트에 "같은 커밋에 포함 권고" 성격의 advisory는 **PASS/FAIL 판정과 같은 응답에 제시**하도록 명시한다(또는 게이트 실행 전 예비 조회로 미리 수집). 판정 후 도착한 권고를 반영하면 그 자체가 스코프 확장이 되어 게이트 전량 재실행 + 위키 재동기화가 강제된다.
197
+
198
+ | Anti-pattern | Required |
199
+ |--------------|----------|
200
+ | 게이트 PASS 후 도착한 포함 권고를 반영해 스코프 확장 | 위임 프롬프트에 "포함 권고 advisory는 판정과 함께 제시" 명시; 판정 후 도착분은 다음 릴리즈 이월을 우선 검토 |
201
+
202
+ Origin: #1584 #4 (v1.1.45 세션) — R021 자기 서술 staleness 반영을 R017 통과 **후** 수행해 위키 재동기화 1회 + 게이트 전량 재실행 발생. 포함 판단 자체는 옳았고 **시점**이 결함이었다.
203
+
183
204
  ## Quick Verification Commands — agent/skill/guide/wiki counts via ls/find/wc. See commands via Read tool.
184
205
 
185
206
  <!-- DETAIL: Quick Verification Commands
@@ -61,7 +61,7 @@ Routes data engineering tasks to appropriate DE expert agents. This skill contai
61
61
  Before routing via Agent tool, evaluate in this order:
62
62
 
63
63
  ### Step 1: Agent Teams Eligibility (R018)
64
- Check if Agent Teams is available (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or TeamCreate/SendMessage tools present).
64
+ Check if Agent Teams is available — `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` present in the tool list. The env var alone is NOT sufficient, and `SendMessage` presence is not evidence of Teams (see R018 Detection).
65
65
 
66
66
  | Scenario | Preferred |
67
67
  |----------|-----------|
@@ -70,6 +70,8 @@ Check if Agent Teams is available (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or T
70
70
  | Cross-tool data quality analysis | Agent Teams |
71
71
  | Quick DAG/model validation | Agent Tool |
72
72
 
73
+ When Detection resolves to **No**, skip this step — route via the Agent tool under R009/R010.
74
+
73
75
  ### Step 2: Expert Selection
74
76
  Route to appropriate DE expert based on tool/framework detection.
75
77
 
@@ -99,7 +99,7 @@ This directive is preserved inline because Agent-tool prompt synthesis can drop
99
99
  Before selecting an expert agent, evaluate in this order:
100
100
 
101
101
  ### Step 1: Agent Teams Eligibility (R018)
102
- Check if Agent Teams is available (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or TeamCreate/SendMessage tools present).
102
+ Check if Agent Teams is available — `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` present in the tool list. The env var alone is NOT sufficient, and `SendMessage` presence is not evidence of Teams (see R018 Detection).
103
103
 
104
104
  | Scenario | Preferred |
105
105
  |----------|-----------|
@@ -109,6 +109,8 @@ Check if Agent Teams is available (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` or T
109
109
  | Cross-layer debugging (FE + BE + DB) | Agent Teams |
110
110
  | Simple file search/validation | Task Tool |
111
111
 
112
+ When Detection resolves to **No**, skip this step — route via the Agent tool under R009/R010.
113
+
112
114
  ### Step 2: Expert Agent Selection
113
115
  Route to appropriate language/framework expert based on file extension and keyword mapping.
114
116
 
@@ -33,8 +33,8 @@ Inspired by Pi Coding Agent Workflow Extension's multi-model verification patter
33
33
  ## Workflow
34
34
 
35
35
  ### Prerequisites
36
- - Agent Teams enabled (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`) for full parallel execution
37
- - Falls back to sequential Agent tool execution if Agent Teams unavailable
36
+ - None. This skill runs fully without Agent Teams — the three reviewers spawn as parallel Agent tool calls (see "Agent Tool Fallback" below).
37
+ - Agent Teams mode is used only when available: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` present in the tool list. The env var alone is NOT sufficient, and `SendMessage` presence is not evidence of Teams (see R018 Detection).
38
38
 
39
39
  ### Execution Flow
40
40
 
@@ -184,7 +184,7 @@ oh-my-customcode는 소프트웨어 컴파일과 동일한 구조를 따릅니
184
184
 
185
185
  ## Agent Teams (MUST when enabled)
186
186
 
187
- Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), 적격한 작업에 적극적으로 사용합니다.
187
+ Agent Teams는 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **그리고** `TeamCreate` 도구가 도구 목록에 존재할 때만 활성입니다. env 변수는 의도의 표현일 뿐 기능의 가용성이 아닙니다 — 현행 환경(CC v2.1.233+)에서 `TeamCreate`는 도구 목록에 **미등록**(실측)이므로 R018은 비활성(dormant)이며 R009/R010이 지배합니다.
188
188
 
189
189
  | 기능 | 서브에이전트 (기본) | Agent Teams |
190
190
  |------|---------------------|-------------|
@@ -193,8 +193,8 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
193
193
  | 적합한 작업 | 집중된 작업 | 리서치, 리뷰, 디버깅 |
194
194
  | 토큰 비용 | 낮음 | 높음 |
195
195
 
196
- **활성화 시, 적격한 협업 작업에 Agent Teams를 반드시 사용해야 합니다 (R018 MUST).**
197
- 결정 매트릭스는 R018 (MUST-agent-teams.md)을 참조하세요.
196
+ **활성 판정이 Yes일 때, 적격한 협업 작업에 Agent Teams를 반드시 사용해야 합니다 (R018 MUST).**
197
+ 판정표와 결정 매트릭스는 R018 (MUST-agent-teams.md) `## Detection`을 참조하세요.
198
198
  하이브리드 패턴 (Claude + Codex, 동적 생성 + Teams)이 지원됩니다.
199
199
  단순/비용 민감 작업에는 Task tool + 라우팅 스킬이 폴백으로 유지됩니다.
200
200
 
@@ -178,7 +178,7 @@ This is the core oh-my-customcode philosophy: **"No expert? CREATE one, connect
178
178
 
179
179
  ## Agent Teams (MUST when enabled)
180
180
 
181
- When Claude Code's Agent Teams feature is enabled (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), actively use it for qualifying tasks.
181
+ Agent Teams is active only when `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **AND** `TeamCreate` is present in the tool list. The env var expresses intent, not availability — in the current runtime (CC v2.1.233+) `TeamCreate` is **absent** from the tool list (measured), so R018 is dormant and R009/R010 govern.
182
182
 
183
183
  | Feature | Subagents (Default) | Agent Teams |
184
184
  |---------|---------------------|-------------|
@@ -187,8 +187,8 @@ When Claude Code's Agent Teams feature is enabled (`CLAUDE_CODE_EXPERIMENTAL_AGE
187
187
  | Best for | Focused tasks | Research, review, debugging |
188
188
  | Token cost | Lower | Higher |
189
189
 
190
- **When enabled, Agent Teams is MANDATORY for qualifying collaborative tasks (R018 MUST).**
191
- See R018 (MUST-agent-teams.md) for the decision matrix.
190
+ **When Detection resolves to Yes, Agent Teams is MANDATORY for qualifying collaborative tasks (R018 MUST).**
191
+ See R018 (MUST-agent-teams.md) `## Detection` for the detection table and decision matrix.
192
192
  Hybrid patterns (Claude + Codex, Dynamic Creation + Teams) are supported.
193
193
  Task tool + routing skills remain the fallback for simple/cost-sensitive tasks.
194
194
 
@@ -178,7 +178,7 @@ project/
178
178
 
179
179
  ## Agent Teams (MUST when enabled)
180
180
 
181
- Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), 적격한 작업에 적극적으로 사용합니다.
181
+ Agent Teams는 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` **그리고** `TeamCreate` 도구가 도구 목록에 존재할 때만 활성입니다. env 변수는 의도의 표현일 뿐 기능의 가용성이 아닙니다 — 현행 환경(CC v2.1.233+)에서 `TeamCreate`는 도구 목록에 **미등록**(실측)이므로 R018은 비활성(dormant)이며 R009/R010이 지배합니다.
182
182
 
183
183
  | 기능 | 서브에이전트 (기본) | Agent Teams |
184
184
  |------|---------------------|-------------|
@@ -187,8 +187,8 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
187
187
  | 적합한 작업 | 집중된 작업 | 리서치, 리뷰, 디버깅 |
188
188
  | 토큰 비용 | 낮음 | 높음 |
189
189
 
190
- **활성화 시, 적격한 협업 작업에 Agent Teams를 반드시 사용해야 합니다 (R018 MUST).**
191
- 결정 매트릭스는 R018 (MUST-agent-teams.md)을 참조하세요.
190
+ **활성 판정이 Yes일 때, 적격한 협업 작업에 Agent Teams를 반드시 사용해야 합니다 (R018 MUST).**
191
+ 판정표와 결정 매트릭스는 R018 (MUST-agent-teams.md) `## Detection`을 참조하세요.
192
192
  하이브리드 패턴 (Claude + Codex, 동적 생성 + Teams)이 지원됩니다.
193
193
  단순/비용 민감 작업에는 Task tool + 라우팅 스킬이 폴백으로 유지됩니다.
194
194
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.46",
2
+ "version": "1.1.47",
3
3
  "lastUpdated": "2026-07-14T00:00:00.000Z",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",