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.
Files changed (42) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/MIGRATION.md +1 -1
  4. package/README.md +4 -0
  5. package/package.json +2 -2
  6. package/schemas/plugin.schema.json +2 -2
  7. package/scripts/afc-consistency-check.sh +25 -23
  8. package/scripts/afc-doctor.sh +10 -10
  9. package/scripts/afc-qa-audit.sh +1 -1
  10. package/scripts/afc-sync-cache.sh +1 -1
  11. package/{commands/analyze.md → skills/analyze/SKILL.md} +10 -8
  12. package/{commands/architect.md → skills/architect/SKILL.md} +3 -3
  13. package/skills/auto/SKILL.md +1156 -0
  14. package/{commands/clarify.md → skills/clarify/SKILL.md} +4 -3
  15. package/{commands/clean.md → skills/clean/SKILL.md} +14 -13
  16. package/{commands/consult.md → skills/consult/SKILL.md} +19 -18
  17. package/{commands/implement.md → skills/implement/SKILL.md} +28 -15
  18. package/{commands/init.md → skills/init/SKILL.md} +5 -1
  19. package/{commands/learner.md → skills/learner/SKILL.md} +4 -4
  20. package/{commands/plan.md → skills/plan/SKILL.md} +1 -122
  21. package/skills/plan/plan-template.md +118 -0
  22. package/{commands/pr-comment.md → skills/pr-comment/SKILL.md} +4 -4
  23. package/{commands/principles.md → skills/principles/SKILL.md} +1 -1
  24. package/{commands/qa.md → skills/qa/SKILL.md} +2 -2
  25. package/{commands/release-notes.md → skills/release-notes/SKILL.md} +8 -4
  26. package/{commands/review.md → skills/review/SKILL.md} +11 -11
  27. package/{commands/security.md → skills/security/SKILL.md} +19 -4
  28. package/{commands/spec.md → skills/spec/SKILL.md} +2 -77
  29. package/skills/spec/spec-template.md +72 -0
  30. package/{commands/triage.md → skills/triage/SKILL.md} +6 -7
  31. package/commands/auto.md +0 -585
  32. /package/{commands/checkpoint.md → skills/checkpoint/SKILL.md} +0 -0
  33. /package/{commands/debug.md → skills/debug/SKILL.md} +0 -0
  34. /package/{commands/doctor.md → skills/doctor/SKILL.md} +0 -0
  35. /package/{commands/ideate.md → skills/ideate/SKILL.md} +0 -0
  36. /package/{commands/launch.md → skills/launch/SKILL.md} +0 -0
  37. /package/{commands/research.md → skills/research/SKILL.md} +0 -0
  38. /package/{commands/resume.md → skills/resume/SKILL.md} +0 -0
  39. /package/{docs → skills/spec}/nfr-templates.md +0 -0
  40. /package/{commands/tasks.md → skills/tasks/SKILL.md} +0 -0
  41. /package/{commands/test.md → skills/test/SKILL.md} +0 -0
  42. /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.1"
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.9.1",
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.9.1",
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
- "commands": "./commands/"
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` | `commands/*.md` inside the plugin |
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.9.1",
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
- "commands/",
12
+ "skills/",
13
13
  "docs/",
14
14
  "hooks/",
15
15
  "schemas/",
@@ -41,9 +41,9 @@
41
41
  "type": "array",
42
42
  "items": { "type": "string" }
43
43
  },
44
- "commands": {
44
+ "skills": {
45
45
  "type": "string",
46
- "description": "Path to commands directory"
46
+ "description": "Path to skills directory"
47
47
  },
48
48
  "agents": {
49
49
  "type": "string",
@@ -42,7 +42,7 @@ get_cmd_field() {
42
42
  }
43
43
 
44
44
  # --- Check 1: Config Placeholder Validation ---
45
- # Verify all {config.*} references in commands/ and docs/ map to known config keys
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 commands and docs
69
+ # Extract all {config.*} references from skills and docs
70
70
  local refs
71
- refs=$(grep -rohE '\{config\.[a-z_]+\}' "$PROJECT_DIR/commands/" "$PROJECT_DIR/docs/" 2>/dev/null \
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 commands (afc:agent-name pattern)
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/commands/" 2>/dev/null \
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/commands/" 2>/dev/null \
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: Command Documentation Cross-Reference ---
258
- # Verify commands are documented in README.md, init.md, and CLAUDE.md
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 commands_dir="$PROJECT_DIR/commands"
262
- [ -d "$commands_dir" ] || return
263
+ local skills_dir="$PROJECT_DIR/skills"
264
+ [ -d "$skills_dir" ] || return
263
265
 
264
266
  local readme="$PROJECT_DIR/README.md"
265
- local init_cmd="$commands_dir/init.md"
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 cmd_file in "$commands_dir"/*.md; do
270
- [ -f "$cmd_file" ] || continue
271
+ for skill_file in "$skills_dir"/*/SKILL.md; do
272
+ [ -f "$skill_file" ] || continue
271
273
  local cmd_name
272
- cmd_name=$(basename "$cmd_file" .md)
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 commands
284
+ # Sub-check B: init/SKILL.md should mention afc:{name} for user-invocable skills
283
285
  local invocable
284
- invocable=$(get_cmd_field "$cmd_file" "user-invocable")
285
- if [ "$invocable" != "false" ] && [ -f "$init_cmd" ]; then
286
- if ! grep -qE "afc:${cmd_name}([^a-z0-9-]|$)" "$init_cmd" 2>/dev/null; then
287
- warn "Command '$cmd_name' missing from init.md skill routing"
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 commands
294
+ # Sub-check C: CLAUDE.md fork list for context:fork skills
293
295
  local ctx
294
- ctx=$(get_cmd_field "$cmd_file" "context")
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 "Command '$cmd_name' (context:fork) missing from CLAUDE.md fork list"
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 "Command docs: all commands referenced in README.md, init.md, CLAUDE.md"
306
+ ok "Skill docs: all skills referenced in README.md, init/SKILL.md, CLAUDE.md"
305
307
  fi
306
308
  }
307
309
 
@@ -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/commands/auto.md"
461
- SOURCE_AUTO="$PROJECT_DIR/commands/auto.md"
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: Command Definitions (dev only) ---
476
- section "Command Definitions (dev)"
475
+ # --- Category 10: Skill Definitions (dev only) ---
476
+ section "Skill Definitions (dev)"
477
477
 
478
- CMD_DIR="$PROJECT_DIR/commands"
479
- if [ -d "$CMD_DIR" ]; then
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 "$CMD_DIR"/*.md; do
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" .md)
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 commands and agents for docs/ references
661
+ # Scan skills and agents for docs/ references
662
662
  DOC_REFS_MISSING=""
663
- for src_file in "$CMD_DIR"/*.md "$AGENT_DIR"/*.md; do
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
@@ -452,7 +452,7 @@ check_d1_cache_divergence() {
452
452
  local diverged=0
453
453
  local checked=0
454
454
 
455
- for subdir in commands scripts hooks; do
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="commands agents scripts hooks docs schemas templates"
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
- Classify `$ARGUMENTS` into one of these analysis modes:
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 | Trigger Keywords | Focus |
38
- |------|-----------------|-------|
39
- | **Root Cause** | "why", "cause", "bug", "error", "broken" | Error trace → data flow → hypothesis |
40
- | **Structural** | "how", "architecture", "flow", "trace", "structure" | Component relationships, call graphs, data flow |
41
- | **Exploratory** | "what", "find", "where", "which", "list" | File/function discovery, pattern matching |
42
- | **Comparative** | "difference", "compare", "vs", "between" | Side-by-side analysis of implementations |
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 intent doesn't clearly match a mode, default to **Exploratory**.
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: 7 passes (higher than the standard 5 because architecture analysis involves broader exploration across modules and layers).
104
+ Run the critic loop until convergence. Safety cap: 5 passes.
105
105
 
106
106
  | Criterion | Validation |
107
107
  |-----------|------------|