all-for-claudecode 2.9.1 → 2.11.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/MIGRATION.md +1 -1
- package/README.md +4 -0
- package/package.json +2 -2
- package/schemas/plugin.schema.json +2 -2
- package/scripts/afc-consistency-check.sh +25 -23
- package/scripts/afc-doctor.sh +10 -10
- package/scripts/afc-qa-audit.sh +1 -1
- package/scripts/afc-sync-cache.sh +1 -1
- package/{commands/analyze.md → skills/analyze/SKILL.md} +10 -8
- package/{commands/architect.md → skills/architect/SKILL.md} +3 -3
- package/skills/auto/SKILL.md +1156 -0
- package/{commands/clarify.md → skills/clarify/SKILL.md} +4 -3
- package/{commands/clean.md → skills/clean/SKILL.md} +14 -13
- package/{commands/consult.md → skills/consult/SKILL.md} +19 -18
- package/{commands/implement.md → skills/implement/SKILL.md} +28 -15
- package/{commands/init.md → skills/init/SKILL.md} +5 -1
- package/{commands/learner.md → skills/learner/SKILL.md} +4 -4
- package/{commands/plan.md → skills/plan/SKILL.md} +1 -122
- package/skills/plan/plan-template.md +118 -0
- package/{commands/pr-comment.md → skills/pr-comment/SKILL.md} +4 -4
- package/{commands/principles.md → skills/principles/SKILL.md} +1 -1
- package/{commands/qa.md → skills/qa/SKILL.md} +2 -2
- package/{commands/release-notes.md → skills/release-notes/SKILL.md} +8 -4
- package/{commands/review.md → skills/review/SKILL.md} +11 -11
- package/{commands/security.md → skills/security/SKILL.md} +19 -4
- package/{commands/spec.md → skills/spec/SKILL.md} +2 -77
- package/skills/spec/spec-template.md +72 -0
- package/{commands/triage.md → skills/triage/SKILL.md} +6 -7
- package/commands/auto.md +0 -585
- /package/{commands/checkpoint.md → skills/checkpoint/SKILL.md} +0 -0
- /package/{commands/debug.md → skills/debug/SKILL.md} +0 -0
- /package/{commands/doctor.md → skills/doctor/SKILL.md} +0 -0
- /package/{commands/ideate.md → skills/ideate/SKILL.md} +0 -0
- /package/{commands/launch.md → skills/launch/SKILL.md} +0 -0
- /package/{commands/research.md → skills/research/SKILL.md} +0 -0
- /package/{commands/resume.md → skills/resume/SKILL.md} +0 -0
- /package/{docs → skills/spec}/nfr-templates.md +0 -0
- /package/{commands/tasks.md → skills/tasks/SKILL.md} +0 -0
- /package/{commands/test.md → skills/test/SKILL.md} +0 -0
- /package/{commands/validate.md → skills/validate/SKILL.md} +0 -0
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Automated pipeline for Claude Code — spec → plan → implement → review → clean",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.11.0"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "afc",
|
|
14
14
|
"source": "./",
|
|
15
15
|
"description": "Automated pipeline for Claude Code. Automates the full development cycle: spec → plan → implement → review → clean.",
|
|
16
|
-
"version": "2.
|
|
16
|
+
"version": "2.11.0",
|
|
17
17
|
"category": "automation",
|
|
18
18
|
"tags": ["pipeline", "automation", "spec", "plan", "implement", "review", "critic-loop"]
|
|
19
19
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "afc",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "Automated pipeline for Claude Code. Automates the full development cycle: spec → plan → implement → review → clean.",
|
|
5
5
|
"author": { "name": "jhlee0409", "email": "relee6203@gmail.com" },
|
|
6
6
|
"homepage": "https://github.com/jhlee0409/all-for-claudecode",
|
|
7
7
|
"repository": "https://github.com/jhlee0409/all-for-claudecode",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"keywords": ["pipeline", "automation", "spec", "plan", "implement", "review", "critic-loop"],
|
|
10
|
-
"
|
|
10
|
+
"skills": "./skills/"
|
|
11
11
|
}
|
package/MIGRATION.md
CHANGED
|
@@ -112,7 +112,7 @@ git tag -d selfish/pre-auto 2>/dev/null
|
|
|
112
112
|
|------|--------|-------|
|
|
113
113
|
| Installation | `git clone` + `./install.sh` | `/plugin install <url>` |
|
|
114
114
|
| Command separator | `.` (`/afc-legacy.spec`) | `:` (`/afc:spec`) |
|
|
115
|
-
| Command location | `~/.claude/commands/afc-legacy.*.md` | `
|
|
115
|
+
| Command location | `~/.claude/commands/afc-legacy.*.md` | `skills/*/SKILL.md` inside the plugin |
|
|
116
116
|
| Hook scripts | `<project>/.claude/hooks/*.sh` | `scripts/*.sh` inside the plugin |
|
|
117
117
|
| Hook config | `<project>/.claude/settings.json` | `hooks/hooks.json` inside the plugin |
|
|
118
118
|
| Config file | `.claude/afc.config.md` (unchanged) | `.claude/afc.config.md` (unchanged) |
|
package/README.md
CHANGED
|
@@ -52,6 +52,10 @@ Spec (1/5) → Plan (2/5) → Implement (3/5) → Review (4/5) → Clean (5/5)
|
|
|
52
52
|
│ └─ File change map, ADR recording, research persistence
|
|
53
53
|
└─ Acceptance criteria, pre-implementation gates
|
|
54
54
|
|
|
55
|
+
Skill Advisor checkpoints (A–E) between phases dynamically invoke
|
|
56
|
+
auxiliary skills (ideate, consult, architect, security, test, qa, learner)
|
|
57
|
+
when LLM evaluation detects they would add value. Budget: max 5 per run.
|
|
58
|
+
|
|
55
59
|
Hooks run automatically at each step.
|
|
56
60
|
CI failure → debug-based RCA (not blind retry).
|
|
57
61
|
Critic Loops verify quality at each gate until convergence.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "all-for-claudecode",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "Claude Code plugin that automates the full dev cycle — spec, plan, implement, review, clean.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"all-for-claudecode": "bin/cli.mjs"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"agents/",
|
|
11
11
|
"bin/",
|
|
12
|
-
"
|
|
12
|
+
"skills/",
|
|
13
13
|
"docs/",
|
|
14
14
|
"hooks/",
|
|
15
15
|
"schemas/",
|
|
@@ -42,7 +42,7 @@ get_cmd_field() {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
# --- Check 1: Config Placeholder Validation ---
|
|
45
|
-
# Verify all {config.*} references in
|
|
45
|
+
# Verify all {config.*} references in skills/ and docs/ map to known config keys
|
|
46
46
|
|
|
47
47
|
check_config_placeholders() {
|
|
48
48
|
local template="$PROJECT_DIR/templates/afc.config.template.md"
|
|
@@ -66,9 +66,9 @@ check_config_placeholders() {
|
|
|
66
66
|
local valid_keys
|
|
67
67
|
valid_keys=$(printf '%s\n%s\n' "$yaml_keys" "$section_keys" | sort -u)
|
|
68
68
|
|
|
69
|
-
# Extract all {config.*} references from
|
|
69
|
+
# Extract all {config.*} references from skills and docs
|
|
70
70
|
local refs
|
|
71
|
-
refs=$(grep -rohE '\{config\.[a-z_]+\}' "$PROJECT_DIR/
|
|
71
|
+
refs=$(grep -rohE '\{config\.[a-z_]+\}' "$PROJECT_DIR/skills/" "$PROJECT_DIR/docs/" 2>/dev/null \
|
|
72
72
|
| sed 's/{config\.//;s/}//' \
|
|
73
73
|
| sort -u || true)
|
|
74
74
|
|
|
@@ -104,15 +104,17 @@ check_agent_names() {
|
|
|
104
104
|
| tr -d '"' \
|
|
105
105
|
| sort -u || true)
|
|
106
106
|
|
|
107
|
-
# Extract subagent_type references from
|
|
107
|
+
# Extract subagent_type references from skills (afc:agent-name pattern)
|
|
108
108
|
local referenced_agents
|
|
109
|
-
referenced_agents=$(grep -rohE 'subagent_type:[[:space:]]*"afc:[^"]*"' "$PROJECT_DIR/
|
|
109
|
+
referenced_agents=$(grep -rohE 'subagent_type:[[:space:]]*"afc:[^"]*"' "$PROJECT_DIR/skills/" 2>/dev/null \
|
|
110
110
|
| sed 's/.*"afc://;s/"//' \
|
|
111
111
|
| sort -u || true)
|
|
112
112
|
|
|
113
113
|
local count=0
|
|
114
114
|
local invalid=0
|
|
115
115
|
for ref in $referenced_agents; do
|
|
116
|
+
# Skip dynamic template patterns (e.g., afc-{domain}-expert)
|
|
117
|
+
case "$ref" in *"{"*) continue ;; esac
|
|
116
118
|
count=$((count + 1))
|
|
117
119
|
if ! printf '%s\n' "$defined_agents" | grep -qxF "$ref"; then
|
|
118
120
|
fail "subagent_type 'afc:$ref' referenced but no agents/$ref.md found"
|
|
@@ -122,7 +124,7 @@ check_agent_names() {
|
|
|
122
124
|
|
|
123
125
|
# Check for unprefixed subagent_type that should have afc: prefix
|
|
124
126
|
local unprefixed
|
|
125
|
-
unprefixed=$(grep -rohE 'subagent_type:[[:space:]]*"afc-[^"]*"' "$PROJECT_DIR/
|
|
127
|
+
unprefixed=$(grep -rohE 'subagent_type:[[:space:]]*"afc-[^"]*"' "$PROJECT_DIR/skills/" 2>/dev/null \
|
|
126
128
|
| sed 's/.*subagent_type:[[:space:]]*"//;s/".*//' \
|
|
127
129
|
| sort -u || true)
|
|
128
130
|
for ref in $unprefixed; do
|
|
@@ -254,22 +256,22 @@ check_phase_ssot() {
|
|
|
254
256
|
fi
|
|
255
257
|
}
|
|
256
258
|
|
|
257
|
-
# --- Check 7:
|
|
258
|
-
# Verify
|
|
259
|
+
# --- Check 7: Skill Documentation Cross-Reference ---
|
|
260
|
+
# Verify skills are documented in README.md, init/SKILL.md, and CLAUDE.md
|
|
259
261
|
|
|
260
262
|
check_command_docs() {
|
|
261
|
-
local
|
|
262
|
-
[ -d "$
|
|
263
|
+
local skills_dir="$PROJECT_DIR/skills"
|
|
264
|
+
[ -d "$skills_dir" ] || return
|
|
263
265
|
|
|
264
266
|
local readme="$PROJECT_DIR/README.md"
|
|
265
|
-
local
|
|
267
|
+
local init_skill="$skills_dir/init/SKILL.md"
|
|
266
268
|
local claude_md="$PROJECT_DIR/CLAUDE.md"
|
|
267
269
|
local issues=0
|
|
268
270
|
|
|
269
|
-
for
|
|
270
|
-
[ -f "$
|
|
271
|
+
for skill_file in "$skills_dir"/*/SKILL.md; do
|
|
272
|
+
[ -f "$skill_file" ] || continue
|
|
271
273
|
local cmd_name
|
|
272
|
-
cmd_name=$(basename "$
|
|
274
|
+
cmd_name=$(basename "$(dirname "$skill_file")")
|
|
273
275
|
|
|
274
276
|
# Sub-check A: README.md should mention /afc:{name}
|
|
275
277
|
if [ -f "$readme" ]; then
|
|
@@ -279,29 +281,29 @@ check_command_docs() {
|
|
|
279
281
|
fi
|
|
280
282
|
fi
|
|
281
283
|
|
|
282
|
-
# Sub-check B: init.md should mention afc:{name} for user-invocable
|
|
284
|
+
# Sub-check B: init/SKILL.md should mention afc:{name} for user-invocable skills
|
|
283
285
|
local invocable
|
|
284
|
-
invocable=$(get_cmd_field "$
|
|
285
|
-
if [ "$invocable" != "false" ] && [ -f "$
|
|
286
|
-
if ! grep -qE "afc:${cmd_name}([^a-z0-9-]|$)" "$
|
|
287
|
-
warn "
|
|
286
|
+
invocable=$(get_cmd_field "$skill_file" "user-invocable")
|
|
287
|
+
if [ "$invocable" != "false" ] && [ -f "$init_skill" ]; then
|
|
288
|
+
if ! grep -qE "afc:${cmd_name}([^a-z0-9-]|$)" "$init_skill" 2>/dev/null; then
|
|
289
|
+
warn "Skill '$cmd_name' missing from init/SKILL.md skill routing"
|
|
288
290
|
issues=$((issues + 1))
|
|
289
291
|
fi
|
|
290
292
|
fi
|
|
291
293
|
|
|
292
|
-
# Sub-check C: CLAUDE.md fork list for context:fork
|
|
294
|
+
# Sub-check C: CLAUDE.md fork list for context:fork skills
|
|
293
295
|
local ctx
|
|
294
|
-
ctx=$(get_cmd_field "$
|
|
296
|
+
ctx=$(get_cmd_field "$skill_file" "context")
|
|
295
297
|
if [ "$ctx" = "fork" ] && [ -f "$claude_md" ]; then
|
|
296
298
|
if ! grep "context: fork" "$claude_md" 2>/dev/null | grep -qE "([(, ])${cmd_name}([,) ]|$)"; then
|
|
297
|
-
warn "
|
|
299
|
+
warn "Skill '$cmd_name' (context:fork) missing from CLAUDE.md fork list"
|
|
298
300
|
issues=$((issues + 1))
|
|
299
301
|
fi
|
|
300
302
|
fi
|
|
301
303
|
done
|
|
302
304
|
|
|
303
305
|
if [ "$issues" -eq 0 ]; then
|
|
304
|
-
ok "
|
|
306
|
+
ok "Skill docs: all skills referenced in README.md, init/SKILL.md, CLAUDE.md"
|
|
305
307
|
fi
|
|
306
308
|
}
|
|
307
309
|
|
package/scripts/afc-doctor.sh
CHANGED
|
@@ -457,8 +457,8 @@ if [ "$IS_DEV" = true ]; then
|
|
|
457
457
|
# Cache sync check
|
|
458
458
|
CACHE_DIR="$HOME/.claude/plugins/cache/all-for-claudecode/afc/$V_PKG"
|
|
459
459
|
if [ -d "$CACHE_DIR" ]; then
|
|
460
|
-
CACHE_AUTO="$CACHE_DIR/
|
|
461
|
-
SOURCE_AUTO="$PROJECT_DIR/
|
|
460
|
+
CACHE_AUTO="$CACHE_DIR/skills/auto/SKILL.md"
|
|
461
|
+
SOURCE_AUTO="$PROJECT_DIR/skills/auto/SKILL.md"
|
|
462
462
|
if [ -f "$CACHE_AUTO" ] && [ -f "$SOURCE_AUTO" ]; then
|
|
463
463
|
if diff -q "$SOURCE_AUTO" "$CACHE_AUTO" >/dev/null 2>&1; then
|
|
464
464
|
pass "Cache in sync"
|
|
@@ -472,21 +472,21 @@ if [ "$IS_DEV" = true ]; then
|
|
|
472
472
|
warn "Plugin cache directory not found" "install plugin first, then npm run sync:cache"
|
|
473
473
|
fi
|
|
474
474
|
|
|
475
|
-
# --- Category 10:
|
|
476
|
-
section "
|
|
475
|
+
# --- Category 10: Skill Definitions (dev only) ---
|
|
476
|
+
section "Skill Definitions (dev)"
|
|
477
477
|
|
|
478
|
-
|
|
479
|
-
if [ -d "$
|
|
478
|
+
SKILL_DIR="$PROJECT_DIR/skills"
|
|
479
|
+
if [ -d "$SKILL_DIR" ]; then
|
|
480
480
|
CMD_COUNT=0
|
|
481
481
|
CMD_FM_MISSING=""
|
|
482
482
|
CMD_FIELD_MISSING=""
|
|
483
483
|
CMD_NAME_MISMATCH=""
|
|
484
484
|
CMD_AGENT_MISSING=""
|
|
485
485
|
|
|
486
|
-
for cmd_file in "$
|
|
486
|
+
for cmd_file in "$SKILL_DIR"/*/SKILL.md; do
|
|
487
487
|
[ -f "$cmd_file" ] || continue
|
|
488
488
|
CMD_COUNT=$((CMD_COUNT + 1))
|
|
489
|
-
BASENAME=$(basename "$cmd_file"
|
|
489
|
+
BASENAME=$(basename "$(dirname "$cmd_file")")
|
|
490
490
|
|
|
491
491
|
# Check frontmatter exists (--- ... ---)
|
|
492
492
|
if ! head -1 "$cmd_file" | grep -q '^---' 2>/dev/null; then
|
|
@@ -658,9 +658,9 @@ if [ "$IS_DEV" = true ]; then
|
|
|
658
658
|
# --- Category 12: Doc References (dev only) ---
|
|
659
659
|
section "Doc References (dev)"
|
|
660
660
|
|
|
661
|
-
# Scan
|
|
661
|
+
# Scan skills and agents for docs/ references
|
|
662
662
|
DOC_REFS_MISSING=""
|
|
663
|
-
for src_file in "$
|
|
663
|
+
for src_file in "$SKILL_DIR"/*/SKILL.md "$AGENT_DIR"/*.md; do
|
|
664
664
|
[ -f "$src_file" ] || continue
|
|
665
665
|
while IFS= read -r ref; do
|
|
666
666
|
[ -z "$ref" ] && continue
|
package/scripts/afc-qa-audit.sh
CHANGED
|
@@ -452,7 +452,7 @@ check_d1_cache_divergence() {
|
|
|
452
452
|
local diverged=0
|
|
453
453
|
local checked=0
|
|
454
454
|
|
|
455
|
-
for subdir in
|
|
455
|
+
for subdir in skills scripts hooks; do
|
|
456
456
|
local src_dir="$PROJECT_DIR/$subdir"
|
|
457
457
|
local cache_subdir="$cache_version_dir/$subdir"
|
|
458
458
|
[ -d "$src_dir" ] && [ -d "$cache_subdir" ] || continue
|
|
@@ -31,7 +31,7 @@ if [ ! -d "$CACHE_DIR" ]; then
|
|
|
31
31
|
fi
|
|
32
32
|
|
|
33
33
|
# Sync directories and files
|
|
34
|
-
DIRS_TO_SYNC="
|
|
34
|
+
DIRS_TO_SYNC="skills agents scripts hooks docs schemas templates"
|
|
35
35
|
FILES_TO_SYNC="package.json"
|
|
36
36
|
|
|
37
37
|
for dir in $DIRS_TO_SYNC; do
|
|
@@ -32,16 +32,18 @@ If neither rules file nor config exists: read `CLAUDE.md` for architecture info.
|
|
|
32
32
|
|
|
33
33
|
### 1. Parse Analysis Intent
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Read the user's question semantically. What does the user actually want to understand? Select the mode that best serves their learning goal.
|
|
36
36
|
|
|
37
|
-
| Mode |
|
|
38
|
-
|
|
39
|
-
| **Root Cause** |
|
|
40
|
-
| **Structural** |
|
|
41
|
-
| **Exploratory** |
|
|
42
|
-
| **Comparative** |
|
|
37
|
+
| Mode | When to select | Focus |
|
|
38
|
+
|------|---------------|-------|
|
|
39
|
+
| **Root Cause** | User wants to understand WHY something is broken, failing, or behaving unexpectedly — the goal is diagnosing a problem | Error trace → data flow → hypothesis |
|
|
40
|
+
| **Structural** | User wants to understand HOW a system is built or how components relate — the goal is comprehension of design or flow | Component relationships, call graphs, data flow |
|
|
41
|
+
| **Exploratory** | User wants to discover WHAT exists in the codebase — the goal is finding, listing, or locating things | File/function discovery, pattern matching |
|
|
42
|
+
| **Comparative** | User wants to understand the DIFFERENCE between two or more things — the goal is contrast and tradeoff evaluation | Side-by-side analysis of implementations |
|
|
43
43
|
|
|
44
|
-
If the
|
|
44
|
+
If the question spans multiple modes, select the PRIMARY mode that best matches the user's core learning goal, and note secondary aspects to incorporate during analysis.
|
|
45
|
+
|
|
46
|
+
If the intent doesn't clearly match a single mode, default to **Exploratory**.
|
|
45
47
|
|
|
46
48
|
### 2. Codebase Exploration
|
|
47
49
|
|
|
@@ -53,8 +53,8 @@ Analyze `$ARGUMENTS` to identify the task type:
|
|
|
53
53
|
|
|
54
54
|
Use Agent Teams for wide analysis scope (3+ modules) with parallel exploration:
|
|
55
55
|
```
|
|
56
|
-
Task("analyze features/timeline", subagent_type: Explore)
|
|
57
|
-
Task("analyze widgets/timeline", subagent_type: Explore)
|
|
56
|
+
Task("analyze features/timeline", subagent_type: "Explore")
|
|
57
|
+
Task("analyze widgets/timeline", subagent_type: "Explore")
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
**Cross-Module Import Chain Verification** (after Explore agents return):
|
|
@@ -101,7 +101,7 @@ Structure analysis results and **print to console**:
|
|
|
101
101
|
|
|
102
102
|
> **Always** read `${CLAUDE_PLUGIN_ROOT}/docs/critic-loop-rules.md` first and follow it.
|
|
103
103
|
|
|
104
|
-
Run the critic loop until convergence. Safety cap:
|
|
104
|
+
Run the critic loop until convergence. Safety cap: 5 passes.
|
|
105
105
|
|
|
106
106
|
| Criterion | Validation |
|
|
107
107
|
|-----------|------------|
|