oh-my-customcode 0.148.0 → 0.150.0
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 +2 -2
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/hooks/hooks.json +10 -0
- package/templates/.claude/hooks/scripts/plugin-cache-check.sh +35 -0
- package/templates/.claude/rules/MUST-agent-teams.md +25 -2
- package/templates/.claude/rules/MUST-continuous-improvement.md +32 -1
- package/templates/.claude/rules/MUST-intent-transparency.md +24 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +27 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +9 -3
- package/templates/CLAUDE.md +1 -1
- package/templates/README.md +1 -1
- package/templates/guides/agent-teams/troubleshooting.md +146 -0
- package/templates/guides/claude-code-tracking.md +86 -0
- package/templates/manifest.json +2 -2
- package/templates/tests/tsconfig.json +7 -0
package/README.md
CHANGED
|
@@ -222,7 +222,7 @@ Key rules: R010 (orchestrator never writes files), R009 (parallel execution mand
|
|
|
222
222
|
|
|
223
223
|
---
|
|
224
224
|
|
|
225
|
-
### Guides (
|
|
225
|
+
### Guides (58)
|
|
226
226
|
|
|
227
227
|
Reference documentation covering best practices, architecture decisions, and integration patterns. Located in `guides/` at project root, covering topics from agent design to CI/CD to observability.
|
|
228
228
|
|
|
@@ -279,7 +279,7 @@ your-project/
|
|
|
279
279
|
│ ├── specs/ # Extracted canonical specs
|
|
280
280
|
│ ├── contexts/ # 4 shared context files
|
|
281
281
|
│ └── ontology/ # Knowledge graph for RAG
|
|
282
|
-
└── guides/ #
|
|
282
|
+
└── guides/ # 58 reference documents
|
|
283
283
|
```
|
|
284
284
|
|
|
285
285
|
---
|
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -185,6 +185,16 @@
|
|
|
185
185
|
}
|
|
186
186
|
],
|
|
187
187
|
"description": "Auto-detect and fix previous session issues at start (#838)"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"matcher": "*",
|
|
191
|
+
"hooks": [
|
|
192
|
+
{
|
|
193
|
+
"type": "command",
|
|
194
|
+
"command": "bash .claude/hooks/scripts/plugin-cache-check.sh"
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"description": "Advisory check for plugin cache directories missing node_modules (#1207)"
|
|
188
198
|
}
|
|
189
199
|
],
|
|
190
200
|
"UserPromptSubmit": [
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# plugin-cache-check.sh — SessionStart advisory hook
|
|
3
|
+
# Detects shared plugin caches with package.json but missing node_modules.
|
|
4
|
+
# Always exit 0 (non-blocking). Output advisory to stderr only.
|
|
5
|
+
# Issue: #1207 — claude-mem v13.3.0 plugin node_modules missing (zod/v3 module error)
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Read and pass stdin through unchanged
|
|
10
|
+
input=$(cat)
|
|
11
|
+
|
|
12
|
+
PLUGIN_CACHE="${HOME}/.claude/shared-plugins/cache"
|
|
13
|
+
|
|
14
|
+
if [ ! -d "$PLUGIN_CACHE" ]; then
|
|
15
|
+
echo "$input"
|
|
16
|
+
exit 0
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
missing=()
|
|
20
|
+
while IFS= read -r pkg; do
|
|
21
|
+
dir=$(dirname "$pkg")
|
|
22
|
+
if [ ! -d "$dir/node_modules" ]; then
|
|
23
|
+
missing+=("$dir")
|
|
24
|
+
fi
|
|
25
|
+
done < <(find "$PLUGIN_CACHE" -maxdepth 4 -name package.json 2>/dev/null)
|
|
26
|
+
|
|
27
|
+
if [ ${#missing[@]} -gt 0 ]; then
|
|
28
|
+
echo "[Advisory] Plugin cache missing node_modules (run \`(cd <dir> && bun install)\` per directory):" >&2
|
|
29
|
+
for d in "${missing[@]}"; do
|
|
30
|
+
echo " - $d" >&2
|
|
31
|
+
done
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
echo "$input"
|
|
35
|
+
exit 0
|
|
@@ -38,14 +38,18 @@ These are distinct mechanisms. Agent Teams `SendMessage` requires `TeamCreate` a
|
|
|
38
38
|
## Self-Check (Before Agent Tool)
|
|
39
39
|
|
|
40
40
|
Before using Agent tool for 2+ agent tasks, complete this check:
|
|
41
|
-
Quick rule: 3+ agents OR review cycle → use Agent Teams. Sequential deps / scaffolding → Agent Tool. 2+ issues in same batch → prefer Agent Teams.
|
|
41
|
+
Quick rule: User explicitly preferred plain subagents this session? → use Agent Tool (R000 user instructions > R018). Otherwise: 3+ agents OR review cycle → use Agent Teams. Sequential deps / scaffolding → Agent Tool. 2+ issues in same batch → prefer Agent Teams.
|
|
42
42
|
|
|
43
43
|
<!-- DETAIL: Self-Check (Before Agent Tool)
|
|
44
44
|
╔══════════════════════════════════════════════════════════════════╗
|
|
45
45
|
║ BEFORE USING Agent TOOL FOR 2+ AGENTS: ║
|
|
46
46
|
║ ║
|
|
47
|
+
║ 0. Has user explicitly preferred plain subagents this session? ║
|
|
48
|
+
║ YES → Use Agent tool (R000 user instructions > R018) ║
|
|
49
|
+
║ NO → Continue to #1 ║
|
|
50
|
+
║ ║
|
|
47
51
|
║ 1. Is Agent Teams available? ║
|
|
48
|
-
║ YES → check criteria #2-#
|
|
52
|
+
║ YES → check criteria #2-#5 ║
|
|
49
53
|
║ NO → Proceed with Agent tool ║
|
|
50
54
|
║ ║
|
|
51
55
|
║ 2. Will 3+ agents be involved? ║
|
|
@@ -305,3 +309,22 @@ Agent Teams actively preferred for qualifying collaborative tasks. Use Agent too
|
|
|
305
309
|
Do NOT avoid Agent Teams solely for cost reasons when criteria are met.
|
|
306
310
|
|
|
307
311
|
**Active preference rule**: When Agent Teams is available, default to using it for any multi-step or multi-issue work. Only fall back to Agent tool for truly simple, single-issue tasks with no verification needs.
|
|
312
|
+
|
|
313
|
+
## Member TaskUpdate Discipline
|
|
314
|
+
|
|
315
|
+
Agent Teams 멤버는 long-running 작업 중 진행 상태를 TaskUpdate 로 명시적으로 알려야 한다. 침묵은 코디네이터가 죽었거나 멤버가 막혔다고 오인하게 만든다.
|
|
316
|
+
|
|
317
|
+
| 시점 | 호출 |
|
|
318
|
+
|------|------|
|
|
319
|
+
| 작업 시작 | TaskUpdate(taskId, status: "in_progress") |
|
|
320
|
+
| 의미 있는 진행 (≥30s 분기/체크포인트) | TaskUpdate(taskId, description 업데이트 또는 메타데이터) |
|
|
321
|
+
| 완료 | TaskUpdate(taskId, status: "completed") |
|
|
322
|
+
| 차단 시 | TaskUpdate(taskId, description: 차단 사유) — 그 후 SendMessage |
|
|
323
|
+
|
|
324
|
+
### Common Violations
|
|
325
|
+
|
|
326
|
+
- 30초 이상 작업하면서 in_progress 미설정 → 다른 멤버가 task 를 claim 시도해 충돌
|
|
327
|
+
- 완료 후 status 미갱신 → 후속 작업이 영원히 blocked
|
|
328
|
+
- 차단 사유를 SendMessage 로만 보내고 task description 업데이트 누락 → TaskList 만 보는 멤버는 사유를 모름
|
|
329
|
+
|
|
330
|
+
Reference issue: #1087.
|
|
@@ -33,6 +33,7 @@ Update the relevant rule rather than just acknowledging the violation.
|
|
|
33
33
|
| Process gap (workflow hole) | ✅ | ✅ | ✅ | ⚠️ (패턴 3회 이상 반복 시) |
|
|
34
34
|
| Repeatable system bug | — | ✅ | ✅ | ⚠️ (수정이 구조적일 경우, 일회성 아닐 때) |
|
|
35
35
|
| Agent selection failure (wrong agent routed) | — | ✅ | — | ✅ (라우팅 스킬 업데이트 후보) |
|
|
36
|
+
| External repo convention miss | ✅ | ✅ | — | ⚠️ (3회 이상 반복 시) |
|
|
36
37
|
|
|
37
38
|
**Skill Promotion**: feedback memory가 동일 패턴으로 3회 이상 반복되면 "failure pattern"으로 승격. skill-extractor의 `--mode failure` 플래그로 스킬 후보 분석 가능 (Skillify 내재화, #972).
|
|
38
39
|
|
|
@@ -50,7 +51,36 @@ When repeating agent failures or suboptimal routing is detected:
|
|
|
50
51
|
|
|
51
52
|
This connects R016's continuous improvement loop with the adaptive-harness skill's learning capability.
|
|
52
53
|
|
|
53
|
-
##
|
|
54
|
+
## External Repo Contribution Pre-Check
|
|
55
|
+
|
|
56
|
+
Before starting work on contributing to an external repository (skill submission, agent contribution, plugin development), MUST read these files in the target repo FIRST round:
|
|
57
|
+
|
|
58
|
+
| File | Purpose |
|
|
59
|
+
|------|---------|
|
|
60
|
+
| `CONTRIBUTING.md` | Submission rules, PR conventions |
|
|
61
|
+
| `AGENTS.md` | Agent contribution guide (if applicable) |
|
|
62
|
+
| `docs/adding-a-*.md` | Domain-specific add guide (e.g., `adding-a-skill.md`) |
|
|
63
|
+
| Domain-specific checklist | Frontmatter conventions, metadata enums |
|
|
64
|
+
| `package.json` scripts | Validation commands (e.g., `npm run ci`) |
|
|
65
|
+
|
|
66
|
+
### Self-Check
|
|
67
|
+
|
|
68
|
+
Before first implementation commit on external contribution:
|
|
69
|
+
- [ ] Read CONTRIBUTING / AGENTS / skill-checklist
|
|
70
|
+
- [ ] Identified frontmatter convention + metadata enums
|
|
71
|
+
- [ ] Identified validation commands
|
|
72
|
+
- [ ] Confirmed domain fit (does this contribution match the target repo's domain?)
|
|
73
|
+
|
|
74
|
+
### Common Violation
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
❌ WRONG: Start implementation → discover frontmatter convention mid-session → rewrite
|
|
78
|
+
✓ CORRECT: First round read CONTRIBUTING/AGENTS → identify conventions → then implement
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Reference issues: #1188 item #5, #1188 item #7, #1198 item #5.
|
|
82
|
+
|
|
83
|
+
## Anti-Patterns — 5 patterns: "I'll update later", "one-time exception", "doesn't cover this", "finish task first", "calibration during action-oriented tone". See table via Read tool.
|
|
54
84
|
|
|
55
85
|
<!-- DETAIL: Anti-Patterns
|
|
56
86
|
| Anti-Pattern | Why It's Wrong | Correct Action |
|
|
@@ -59,6 +89,7 @@ This connects R016's continuous improvement loop with the adaptive-harness skill
|
|
|
59
89
|
| "This is a one-time exception" | Exceptions become patterns | If the rule is wrong, fix it; if it's right, follow it |
|
|
60
90
|
| "The rule doesn't cover this case" | Missing coverage = rule gap | Add the case to the rule immediately |
|
|
61
91
|
| "Let me finish the task first" | Rule violations compound | Fix rule first (5 min), then continue (prevents N future violations) |
|
|
92
|
+
| "Calibration/humility during action-oriented tone (auto mode, ㄱㄱ, 계속해)" | Self-questioning wastes time when user signals action; action-mode preempts meta-reflection | Defer calibration to post-task feedback memory; respond with short action confirmation |
|
|
62
93
|
-->
|
|
63
94
|
|
|
64
95
|
## Timing — Rule updates MUST happen before continuing original task, in the same session.
|
|
@@ -79,6 +79,30 @@ At the start of every new task, issue, or autonomous sub-loop, answer these thre
|
|
|
79
79
|
- Related issue: #1188 item #4 — AskUserQuestion rejected, agent re-asked via free text in next turn (2026-05-19)
|
|
80
80
|
-->
|
|
81
81
|
|
|
82
|
+
### Failed Tool Re-Try Discipline
|
|
83
|
+
|
|
84
|
+
User-specified tools/formats persist across failures. After a tool rejection or failure, retry with the SAME tool — do NOT silently switch to a different mechanism.
|
|
85
|
+
|
|
86
|
+
| 시나리오 | Required |
|
|
87
|
+
|---------|----------|
|
|
88
|
+
| `AskUserQuestion` 거절됨 | 사용자가 다른 도구 명시할 때까지 `AskUserQuestion` 재시도 |
|
|
89
|
+
| 자유 텍스트로 재질문 | 금지 — directive 위반 |
|
|
90
|
+
| 다른 도구로 silent switch | 금지 — 명시적 사용자 확인 필요 |
|
|
91
|
+
|
|
92
|
+
Reference issues: #1188 item #4.
|
|
93
|
+
|
|
94
|
+
### User Directive Persistence — Git Push Continuation
|
|
95
|
+
|
|
96
|
+
사용자가 같은 세션 내에서 명시적으로 커밋/푸시를 한 번 허용했다면, 동일 카테고리/동일 브랜치의 후속 작업은 추가 확인 없이 진행 가능. push security policy classifier가 first-time strict, follow-up relaxed로 동작해야 함.
|
|
97
|
+
|
|
98
|
+
| 시나리오 | 동작 |
|
|
99
|
+
|----------|------|
|
|
100
|
+
| 1차 명시 "커밋, 푸시" + 동일 브랜치 | mgr-gitnerd push 진행 (advisory warning은 출력) |
|
|
101
|
+
| 2차 연속 작업 (동일 카테고리, 동일 브랜치) | 1차 directive persistence — 재확인 요청 금지 |
|
|
102
|
+
| 다른 브랜치 / 다른 카테고리 | 새 confirmation 필요 |
|
|
103
|
+
|
|
104
|
+
**Why**: 사용자 directive 일관성 — #1208 보고. 같은 세션 내 동일 의도를 반복 차단하면 R015 user directive persistence 위반.
|
|
105
|
+
|
|
82
106
|
## Agent Triggers
|
|
83
107
|
|
|
84
108
|
Defined in `.claude/skills/intent-detection/patterns/agent-triggers.yaml`. Each agent has keywords, file patterns, actions, and base confidence.
|
|
@@ -33,6 +33,11 @@ The main conversation is the **sole orchestrator**. It uses routing skills to de
|
|
|
33
33
|
║ NOT exempt. ║
|
|
34
34
|
║ NO → Good. Continue. ║
|
|
35
35
|
║ ║
|
|
36
|
+
║ 5. Am I about to edit a root meta-file (.gitignore, ║
|
|
37
|
+
║ .editorconfig, README.md, CHANGELOG.md, CLAUDE.md, etc.)? ║
|
|
38
|
+
║ YES → Delegate to specialist per Root Meta-File table. ║
|
|
39
|
+
║ NO → Good. Continue. ║
|
|
40
|
+
║ ║
|
|
36
41
|
║ If any answer points to a problem → resolve before proceeding ║
|
|
37
42
|
╚══════════════════════════════════════════════════════════════════╝
|
|
38
43
|
```
|
|
@@ -98,6 +103,12 @@ Key violations to avoid (file writes, git commands, bundled operations — all m
|
|
|
98
103
|
|
|
99
104
|
✓ CORRECT: Agent/skill/guide creation routed through mgr-creator
|
|
100
105
|
Skill(brainstorming) → Agent(mgr-creator) → Write(".claude/agents/new.md")
|
|
106
|
+
|
|
107
|
+
❌ WRONG: Orchestrator edits ".gitignore" because "it's only 1 line"
|
|
108
|
+
Main conversation → Edit(".gitignore", "!/README.ko.md")
|
|
109
|
+
|
|
110
|
+
✓ CORRECT: Even single-line edits delegate to specialist
|
|
111
|
+
Main conversation → Agent(mgr-gitnerd) → Edit(".gitignore", "!/README.ko.md")
|
|
101
112
|
```
|
|
102
113
|
|
|
103
114
|
<!-- DETAIL: Common Violations (extended)
|
|
@@ -329,6 +340,22 @@ The following paths MUST be created or structurally modified ONLY through `mgr-c
|
|
|
329
340
|
|
|
330
341
|
> **Enforcement**: Advisory (R021) — no hard-block hook. Candidate for promotion if violation rate exceeds threshold. See R021 Hard Enforcement Candidates.
|
|
331
342
|
|
|
343
|
+
### Root Meta-File Delegation
|
|
344
|
+
|
|
345
|
+
루트 메타 파일은 변경 규모와 무관하게 orchestrator 직접 편집 금지. 적절한 specialist에 위임:
|
|
346
|
+
|
|
347
|
+
| Path | Delegated to |
|
|
348
|
+
|------|--------------|
|
|
349
|
+
| `.gitignore`, `.gitattributes` | mgr-gitnerd |
|
|
350
|
+
| `.editorconfig`, `.prettierrc*`, `.eslintrc*` | mgr-updater |
|
|
351
|
+
| `.npmrc`, `.nvmrc`, `package.json` (non-version fields), `package-lock.json` | mgr-updater |
|
|
352
|
+
| `CODEOWNERS`, `.github/CODEOWNERS` | mgr-gitnerd |
|
|
353
|
+
| `README.md`, `README*.md`, `CHANGELOG.md` | arch-documenter |
|
|
354
|
+
| `LICENSE`, `NOTICE` | arch-documenter |
|
|
355
|
+
| `CLAUDE.md` (project root) | arch-documenter (content) / mgr-updater (count sync) |
|
|
356
|
+
|
|
357
|
+
**Why**: "1 line edit" 논리는 R010 약화 — orchestrator 직접 편집 진입로 차단. #1208 보고.
|
|
358
|
+
|
|
332
359
|
<!-- DETAIL: System Agents Reference
|
|
333
360
|
| Agent | File | Purpose |
|
|
334
361
|
|-------|------|---------|
|
|
@@ -351,7 +351,7 @@ MCP tools (claude-mem, episodic-memory) are **orchestrator-scoped** and not inhe
|
|
|
351
351
|
|
|
352
352
|
### Session-End Self-Check (MANDATORY)
|
|
353
353
|
|
|
354
|
-
(1) sys-memory-keeper updated MEMORY.md? (2) claude-mem save attempted?
|
|
354
|
+
(1) sys-memory-keeper updated MEMORY.md? (2) claude-mem save attempted? (3) If `omcustom-feedback` skill is active, prompt user to trigger it? All three required before confirming to user. See full self-check via Read tool.
|
|
355
355
|
|
|
356
356
|
<!-- DETAIL: Session-End Self-Check (MANDATORY)
|
|
357
357
|
```
|
|
@@ -366,10 +366,15 @@ MCP tools (claude-mem, episodic-memory) are **orchestrator-scoped** and not inhe
|
|
|
366
366
|
║ YES → Continue (even if it failed) ║
|
|
367
367
|
║ NO → ToolSearch + save now ║
|
|
368
368
|
║ ║
|
|
369
|
+
║ 3. Is omcustom-feedback skill available in this project? ║
|
|
370
|
+
║ YES → Ask user: "이번 세션 피드백을 omcustom-feedback로 ║
|
|
371
|
+
║ 기록하시겠습니까?" — accept skip ║
|
|
372
|
+
║ NO → Skip ║
|
|
373
|
+
║ ║
|
|
369
374
|
║ Note: episodic-memory auto-indexes conversations after session ║
|
|
370
375
|
║ ends. No manual action needed — do NOT search as "verification" ║
|
|
371
376
|
║ ║
|
|
372
|
-
║
|
|
377
|
+
║ ALL steps must be completed before confirming to user. ║
|
|
373
378
|
║ "Attempted" means called the tool — failure is OK, skipping ║
|
|
374
379
|
║ is NOT. ║
|
|
375
380
|
╚══════════════════════════════════════════════════════════════════╝
|
|
@@ -413,7 +418,8 @@ Phase 1 COEXIST 기간 중 세션 종료 시:
|
|
|
413
418
|
1. sys-memory-keeper가 MEMORY.md 갱신? → YES: 계속
|
|
414
419
|
2. claude-mem 저장 시도? → YES (기존 항목)
|
|
415
420
|
3. AgentMemory 저장 시도? → YES (COEXIST 추가)
|
|
416
|
-
|
|
421
|
+
4. omcustom-feedback 권유? → YES (활성 시) / 스킵 (비활성 시)
|
|
422
|
+
네 단계 모두 완료 후 사용자에게 확인. 둘 중 하나 실패해도 비차단.
|
|
417
423
|
|
|
418
424
|
### Phase 2 진입 전 필수 조건
|
|
419
425
|
|
package/templates/CLAUDE.md
CHANGED
package/templates/README.md
CHANGED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Agent Teams 트러블슈팅 가이드
|
|
2
|
+
|
|
3
|
+
## 개요
|
|
4
|
+
|
|
5
|
+
Agent Teams 운용 중 발생하는 일반적 문제와 해결책. #1206/#1210 보고 기반.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Graceful Shutdown 실패
|
|
10
|
+
|
|
11
|
+
### 증상
|
|
12
|
+
|
|
13
|
+
- `shutdown_request` 발신 2회 이상에도 멤버가 idle notification만 반환
|
|
14
|
+
- TeamDelete 호출 시 "active members exist" 에러 → 교착 상태
|
|
15
|
+
|
|
16
|
+
### 원인
|
|
17
|
+
|
|
18
|
+
- 멤버가 long-running polling loop에 진입하여 외부 신호를 수신하지 못함
|
|
19
|
+
- TaskUpdate 미발신 → 코디네이터가 멤버의 실제 상태를 인식 불가
|
|
20
|
+
- `isActive` flag를 강제 해제할 수 있는 helper 부재
|
|
21
|
+
|
|
22
|
+
### 해결 절차
|
|
23
|
+
|
|
24
|
+
#### 1단계: 정상 graceful shutdown 시도
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
1. shutdown_request 1회 발신 (SendMessage)
|
|
28
|
+
2. 30초 대기 후 멤버 status 확인 (TaskList)
|
|
29
|
+
3. TaskUpdate(status: "completed") 응답이 오면 정상 종료 진행
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
#### 2단계: 재발신
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
1. shutdown_request 2회 발신
|
|
36
|
+
2. 30초 추가 대기
|
|
37
|
+
3. 여전히 무응답이면 3단계로 진행
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
#### 3단계: Force kill (last resort)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 현재 세션의 tmux 목록 확인
|
|
44
|
+
tmux -L claude-swarm-$$ ls
|
|
45
|
+
|
|
46
|
+
# 특정 pane kill
|
|
47
|
+
tmux -L claude-swarm-$$ kill-pane -t <pane-id>
|
|
48
|
+
|
|
49
|
+
# 또는 전체 swarm 세션 kill
|
|
50
|
+
tmux -L claude-swarm-$$ kill-server
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### 4단계: isActive flag 수동 해제
|
|
54
|
+
|
|
55
|
+
tmux kill 후에도 TeamDelete가 실패하는 경우:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# teams 디렉토리 위치 확인
|
|
59
|
+
ls ~/.claude/teams/<team-id>/
|
|
60
|
+
|
|
61
|
+
# members.json에서 isActive를 false로 강제 설정
|
|
62
|
+
jq '.members |= map(.isActive = false)' \
|
|
63
|
+
~/.claude/teams/<team-id>/members.json \
|
|
64
|
+
> /tmp/m.json \
|
|
65
|
+
&& mv /tmp/m.json ~/.claude/teams/<team-id>/members.json
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> **주의**: `~/.claude/teams/` 경로는 CC 버전에 따라 다를 수 있습니다. 실제 경로는 CC 버전 릴리즈 노트에서 확인하십시오.
|
|
69
|
+
|
|
70
|
+
#### 5단계: TeamDelete 재시도
|
|
71
|
+
|
|
72
|
+
`isActive = false` 상태에서 TeamDelete를 재호출합니다. 성공 시 `~/.claude/teams/<team-id>/` 디렉토리가 자동 정리됩니다.
|
|
73
|
+
|
|
74
|
+
### 예방
|
|
75
|
+
|
|
76
|
+
- R018 Member TaskUpdate Discipline을 준수하면 코디네이터가 멤버 상태를 항상 추적 가능
|
|
77
|
+
- 멤버 작업 시작 시 `TaskUpdate(status: "in_progress")` 즉시 호출
|
|
78
|
+
- long-running loop (30초 이상) 마다 description 업데이트
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 멤버 무응답 (TaskUpdate 침묵)
|
|
83
|
+
|
|
84
|
+
### 증상
|
|
85
|
+
|
|
86
|
+
- 30초 이상 멤버가 `in_progress` 상태 미설정
|
|
87
|
+
- 다른 멤버가 동일 task를 claim 시도 → 충돌 및 중복 작업 발생
|
|
88
|
+
- 코디네이터가 멤버를 "dead" 로 오판하여 재spawn 시도
|
|
89
|
+
|
|
90
|
+
### 원인
|
|
91
|
+
|
|
92
|
+
- 멤버가 복잡한 계산이나 I/O에 진입한 후 TaskUpdate를 호출하지 않음
|
|
93
|
+
- R018 Member TaskUpdate Discipline 위반
|
|
94
|
+
|
|
95
|
+
### 해결 절차
|
|
96
|
+
|
|
97
|
+
1. TaskList로 현재 task 상태 확인
|
|
98
|
+
2. 해당 멤버에게 SendMessage로 상태 요청
|
|
99
|
+
3. 60초 이상 무응답 시 Reassign 고려 (R018 Blocked Agent Behavior 참조)
|
|
100
|
+
|
|
101
|
+
### 예방 (R018 준수)
|
|
102
|
+
|
|
103
|
+
| 시점 | 필수 호출 |
|
|
104
|
+
|------|-----------|
|
|
105
|
+
| 작업 시작 | `TaskUpdate(taskId, status: "in_progress")` |
|
|
106
|
+
| 30초 이상 분기/체크포인트 | `TaskUpdate(taskId, description: "<진행 상황>")` |
|
|
107
|
+
| 완료 | `TaskUpdate(taskId, status: "completed")` |
|
|
108
|
+
| 차단 시 | `TaskUpdate(taskId, description: "<차단 사유>")` + `SendMessage` |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## TeamDelete 후 잔여 리소스
|
|
113
|
+
|
|
114
|
+
### 증상
|
|
115
|
+
|
|
116
|
+
- TeamDelete 성공 후에도 `~/.claude/teams/` 하위에 디렉토리가 남음
|
|
117
|
+
- 다음 세션에서 동일 team-id 재사용 시 충돌
|
|
118
|
+
|
|
119
|
+
### 해결
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# 잔여 팀 디렉토리 수동 정리
|
|
123
|
+
rm -rf ~/.claude/teams/<team-id>/
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## CC Upstream 제한사항 (v2.1.146 기준)
|
|
129
|
+
|
|
130
|
+
| 기능 | 현황 | 대안 |
|
|
131
|
+
|------|------|------|
|
|
132
|
+
| TeamDelete `force` 옵션 | 미제공 | tmux kill-pane (3단계 절차) |
|
|
133
|
+
| 멤버 강제 종료 API | 미제공 | isActive flag 수동 해제 (4단계) |
|
|
134
|
+
| Graceful shutdown timeout 설정 | 미제공 | 30초 대기 후 수동 처리 |
|
|
135
|
+
|
|
136
|
+
CC가 정식 `force shutdown` API를 제공하면 3-4단계 workaround를 제거할 수 있습니다. 추적은 `guides/claude-code-tracking.md` 참조.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Reference
|
|
141
|
+
|
|
142
|
+
- Issue: #1210 (#1206 item 2 분리)
|
|
143
|
+
- Cycle: v0.150.0
|
|
144
|
+
- Memory: `feedback_agent_teams_force_shutdown.md`
|
|
145
|
+
- R018: `.claude/rules/MUST-agent-teams.md` (Member TaskUpdate Discipline)
|
|
146
|
+
- CC Upstream Tracking: `guides/claude-code-tracking.md`
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Claude Code Upstream Tracking
|
|
2
|
+
|
|
3
|
+
oh-my-customcode가 의존하는 CC upstream API/기능 추적 목록. 각 항목은 현재 workaround와 정식 API 등장 시 제거할 대상을 명시합니다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Background Agent Progress API (#1212)
|
|
8
|
+
|
|
9
|
+
### Status
|
|
10
|
+
|
|
11
|
+
- **v2.1.146 기준**: 정식 progress API 미제공
|
|
12
|
+
- `/bg` 흐름으로 시작한 background agent의 진행 상황을 메인 세션에서 직접 추적 불가
|
|
13
|
+
|
|
14
|
+
### Workarounds
|
|
15
|
+
|
|
16
|
+
| 방법 | 구현 | 한계 |
|
|
17
|
+
|------|------|------|
|
|
18
|
+
| stdout/stderr tail | `/tmp/.claude-bg-<id>.log` 파일을 수동으로 tail | 세션 간 log 파일 위치 불일치 가능 |
|
|
19
|
+
| statusline agent count | R012 statusline에 `claude agents --json` (v2.1.144+) active count segment 추가 | count만 표시, 개별 진행률 없음 |
|
|
20
|
+
| PostToolUse hook | `BackgroundTask` 이벤트 수신 후 별도 로그 작성 (커스텀) | hook 구현 부담, 이벤트 타입 안정성 미보장 |
|
|
21
|
+
|
|
22
|
+
### Track
|
|
23
|
+
|
|
24
|
+
- CC release note에서 background agent 관련 변경사항 모니터
|
|
25
|
+
- 정식 progress API 등장 시 위 workaround를 모두 제거하고 공식 API로 대체
|
|
26
|
+
- 후보 변경 키워드: `"background"`, `"bg agent"`, `"task progress"`, `"agent status"`
|
|
27
|
+
|
|
28
|
+
### Reference
|
|
29
|
+
|
|
30
|
+
- Issue: #1212 (#1206 item 7 분리)
|
|
31
|
+
- Memory: `feedback_background_agent_progress_tracking.md`
|
|
32
|
+
- Cycle: v0.150.0
|
|
33
|
+
- R012: `.claude/rules/SHOULD-hud-statusline.md` (statusline integration)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Agent Teams Force Shutdown (#1210)
|
|
38
|
+
|
|
39
|
+
### Status
|
|
40
|
+
|
|
41
|
+
- **v2.1.146 기준**: `TeamDelete`에 `force` 옵션 미제공
|
|
42
|
+
- Graceful shutdown 실패 시 tmux kill-pane workaround 필요
|
|
43
|
+
|
|
44
|
+
### Workaround
|
|
45
|
+
|
|
46
|
+
tmux 세션 직접 kill + `isActive` flag 수동 해제 절차. 상세 절차는 `guides/agent-teams/troubleshooting.md` 참조.
|
|
47
|
+
|
|
48
|
+
### Track
|
|
49
|
+
|
|
50
|
+
- CC release note에서 TeamDelete API 변경사항 모니터
|
|
51
|
+
- 정식 `force` 옵션 등장 시 troubleshooting.md의 3-4단계 workaround 제거
|
|
52
|
+
- 후보 변경 키워드: `"TeamDelete"`, `"force shutdown"`, `"team teardown"`, `"agent kill"`
|
|
53
|
+
|
|
54
|
+
### Reference
|
|
55
|
+
|
|
56
|
+
- Issue: #1210 (#1206 item 2 분리)
|
|
57
|
+
- Guide: `guides/agent-teams/troubleshooting.md`
|
|
58
|
+
- Cycle: v0.150.0
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 추적 방법
|
|
63
|
+
|
|
64
|
+
### 버전 확인
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# 현재 CC 버전 확인
|
|
68
|
+
claude --version
|
|
69
|
+
|
|
70
|
+
# 또는 CC release notes
|
|
71
|
+
# https://github.com/anthropics/claude-code/releases
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 모니터링 주기
|
|
75
|
+
|
|
76
|
+
- 각 릴리즈 사이클(`/pipeline auto-dev`) 시작 시 CC 버전 확인
|
|
77
|
+
- 새 버전 확인 시 이 파일의 "Status" 항목 업데이트
|
|
78
|
+
- Workaround 제거 가능 시 해당 항목을 "Resolved" 섹션으로 이동
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Resolved
|
|
83
|
+
|
|
84
|
+
> 해결된 항목은 여기에 기록합니다. 완전 제거 전 1개 릴리즈 사이클 동안 유지합니다.
|
|
85
|
+
|
|
86
|
+
현재 없음.
|
package/templates/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.150.0",
|
|
3
3
|
"lastUpdated": "2026-05-20T00:00:00.000Z",
|
|
4
4
|
"omcustomMinClaudeCode": "2.1.121",
|
|
5
5
|
"omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"name": "guides",
|
|
27
27
|
"path": "guides",
|
|
28
28
|
"description": "Reference documentation",
|
|
29
|
-
"files":
|
|
29
|
+
"files": 58
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"name": "hooks",
|