@drunkcoding/agents-and-skills 0.0.13 → 0.0.15

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 (83) hide show
  1. package/.claude-plugin/marketplace.json +9 -6
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/plugins/html-effectiveness/.claude-plugin/plugin.json +1 -1
  5. package/plugins/html-effectiveness/README.md +9 -4
  6. package/plugins/html-effectiveness/agents/report-builder.md +4 -0
  7. package/plugins/html-effectiveness/assets/base.css +40 -20
  8. package/plugins/html-effectiveness/docs/template-gallery.md +28 -0
  9. package/plugins/html-effectiveness/scripts/_tmp.js +37 -0
  10. package/plugins/html-effectiveness/scripts/catalog.js +47 -0
  11. package/plugins/html-effectiveness/scripts/extract.js +104 -0
  12. package/plugins/html-effectiveness/scripts/render.js +2 -2
  13. package/plugins/html-effectiveness/skills/html-effectiveness/SKILL.md +4 -4
  14. package/plugins/html-effectiveness/templates/01-exploration-code-approaches.html.tmpl +400 -0
  15. package/plugins/html-effectiveness/templates/02-exploration-visual-designs.html.tmpl +456 -0
  16. package/plugins/html-effectiveness/templates/03-code-review-pr.html.tmpl +581 -0
  17. package/plugins/html-effectiveness/templates/04-code-understanding.html.tmpl +443 -0
  18. package/plugins/html-effectiveness/templates/05-design-system.html.tmpl +578 -0
  19. package/plugins/html-effectiveness/templates/06-component-variants.html.tmpl +557 -0
  20. package/plugins/html-effectiveness/templates/07-prototype-animation.html.tmpl +417 -0
  21. package/plugins/html-effectiveness/templates/08-prototype-interaction.html.tmpl +363 -0
  22. package/plugins/html-effectiveness/templates/09-slide-deck.html.tmpl +535 -0
  23. package/plugins/html-effectiveness/templates/10-svg-illustrations.html.tmpl +444 -0
  24. package/plugins/html-effectiveness/templates/11-status-report.html.tmpl +152 -0
  25. package/plugins/html-effectiveness/templates/12-incident-report.html.tmpl +547 -0
  26. package/plugins/html-effectiveness/templates/13-flowchart-diagram.html.tmpl +361 -0
  27. package/plugins/html-effectiveness/templates/14-research-feature-explainer.html.tmpl +348 -0
  28. package/plugins/html-effectiveness/templates/15-research-concept-explainer.html.tmpl +334 -0
  29. package/plugins/html-effectiveness/templates/16-implementation-plan.html.tmpl +657 -0
  30. package/plugins/html-effectiveness/templates/17-pr-writeup.html.tmpl +553 -0
  31. package/plugins/html-effectiveness/templates/18-editor-triage-board.html.tmpl +541 -0
  32. package/plugins/html-effectiveness/templates/19-editor-feature-flags.html.tmpl +627 -0
  33. package/plugins/html-effectiveness/templates/20-editor-prompt-tuner.html.tmpl +687 -0
  34. package/plugins/html-effectiveness/templates/manifest.json +436 -2
  35. package/plugins/html-effectiveness/tests/_tmp.test.js +58 -0
  36. package/plugins/html-effectiveness/tests/fixtures/01-exploration-code-approaches.data.json +3 -0
  37. package/plugins/html-effectiveness/tests/fixtures/02-exploration-visual-designs.data.json +3 -0
  38. package/plugins/html-effectiveness/tests/fixtures/03-code-review-pr.data.json +3 -0
  39. package/plugins/html-effectiveness/tests/fixtures/04-code-understanding.data.json +3 -0
  40. package/plugins/html-effectiveness/tests/fixtures/05-design-system.data.json +3 -0
  41. package/plugins/html-effectiveness/tests/fixtures/06-component-variants.data.json +3 -0
  42. package/plugins/html-effectiveness/tests/fixtures/07-prototype-animation.data.json +3 -0
  43. package/plugins/html-effectiveness/tests/fixtures/08-prototype-interaction.data.json +3 -0
  44. package/plugins/html-effectiveness/tests/fixtures/09-slide-deck.data.json +3 -0
  45. package/plugins/html-effectiveness/tests/fixtures/10-svg-illustrations.data.json +3 -0
  46. package/plugins/html-effectiveness/tests/fixtures/11-status-report.data.json +37 -0
  47. package/plugins/html-effectiveness/tests/fixtures/12-incident-report.data.json +3 -0
  48. package/plugins/html-effectiveness/tests/fixtures/13-flowchart-diagram.data.json +3 -0
  49. package/plugins/html-effectiveness/tests/fixtures/14-research-feature-explainer.data.json +3 -0
  50. package/plugins/html-effectiveness/tests/fixtures/15-research-concept-explainer.data.json +3 -0
  51. package/plugins/html-effectiveness/tests/fixtures/16-implementation-plan.data.json +3 -0
  52. package/plugins/html-effectiveness/tests/fixtures/17-pr-writeup.data.json +3 -0
  53. package/plugins/html-effectiveness/tests/fixtures/18-editor-triage-board.data.json +3 -0
  54. package/plugins/html-effectiveness/tests/fixtures/19-editor-feature-flags.data.json +3 -0
  55. package/plugins/html-effectiveness/tests/fixtures/20-editor-prompt-tuner.data.json +3 -0
  56. package/plugins/html-effectiveness/tests/manifest.test.js +61 -0
  57. package/plugins/plugin-validator/.claude-plugin/plugin.json +1 -1
  58. package/plugins/plugin-validator/skills/validate-agents/SKILL.md +2 -2
  59. package/plugins/plugin-validator/skills/validate-commands/SKILL.md +2 -2
  60. package/plugins/plugin-validator/skills/validate-hooks/SKILL.md +57 -18
  61. package/plugins/team-superpower/.claude-plugin/plugin.json +7 -39
  62. package/plugins/team-superpower/README.md +85 -24
  63. package/plugins/team-superpower/agents/backend-developer.md +82 -0
  64. package/plugins/team-superpower/agents/designer.md +5 -1
  65. package/plugins/team-superpower/agents/frontend-developer.md +96 -0
  66. package/plugins/team-superpower/agents/planner.md +144 -16
  67. package/plugins/team-superpower/agents/qa-engineer.md +30 -0
  68. package/plugins/team-superpower/agents/reviewer.md +68 -22
  69. package/plugins/team-superpower/agents/security-engineer.md +110 -0
  70. package/plugins/team-superpower/agents/software-architect.md +30 -0
  71. package/plugins/team-superpower/assets/CLAUDE.md.template +96 -0
  72. package/plugins/team-superpower/assets/ESCALATION.md +19 -5
  73. package/plugins/team-superpower/assets/SESSION_README.md +119 -11
  74. package/plugins/team-superpower/commands/team-feature-resume.md +72 -6
  75. package/plugins/team-superpower/commands/team-feature.md +329 -28
  76. package/plugins/team-superpower/hooks/hooks.json +0 -3
  77. package/plugins/team-superpower/hooks/task-completed.sh +54 -5
  78. package/plugins/team-superpower/hooks/task-created.sh +79 -4
  79. package/plugins/team-superpower/scripts/detect-stack.sh +434 -0
  80. package/plugins/team-superpower/scripts/parse-claudemd.sh +194 -0
  81. package/plugins/tech-graph/.claude-plugin/plugin.json +1 -1
  82. package/plugins/tech-graph/agents/tech-graph.md +8 -0
  83. package/plugins/team-superpower/agents/implementer.md +0 -46
@@ -0,0 +1,61 @@
1
+ import { test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ const HERE = dirname(fileURLToPath(import.meta.url));
8
+ const PLUGIN_ROOT = dirname(HERE);
9
+ const MANIFEST = JSON.parse(readFileSync(join(PLUGIN_ROOT, 'templates/manifest.json'), 'utf8'));
10
+ const VALID_BUNDLES = new Set(['base', 'components', 'charts']);
11
+
12
+ const entries = Object.entries(MANIFEST).filter(([k]) => k !== '_meta');
13
+
14
+ test('manifest declares 20 vendored templates', () => {
15
+ assert.equal(entries.length, 20, `expected 20 entries, got ${entries.length}`);
16
+ });
17
+
18
+ test('_meta records upstream SHA and fetch date', () => {
19
+ const meta = MANIFEST._meta;
20
+ assert.ok(meta, '_meta missing');
21
+ assert.match(meta.upstream_sha, /^[0-9a-f]{40}$/, 'upstream_sha must be 40-char hex');
22
+ assert.match(meta.fetched_at, /^\d{4}-\d{2}-\d{2}$/, 'fetched_at must be YYYY-MM-DD');
23
+ assert.equal(meta.upstream_repo, 'ThariqS/html-effectiveness');
24
+ });
25
+
26
+ for (const [id, entry] of entries) {
27
+ test(`${id}: required fields present`, () => {
28
+ for (const f of ['title', 'use_cases', 'pattern', 'slots', 'asset_bundles']) {
29
+ assert.ok(f in entry, `${id} missing field "${f}"`);
30
+ }
31
+ assert.ok(Array.isArray(entry.use_cases), `${id} use_cases must be array`);
32
+ assert.ok(entry.use_cases.length > 0, `${id} use_cases must be non-empty`);
33
+ assert.equal(typeof entry.pattern, 'string', `${id} pattern must be string`);
34
+ assert.equal(typeof entry.slots, 'object', `${id} slots must be object`);
35
+ });
36
+
37
+ test(`${id}: asset_bundles valid`, () => {
38
+ assert.ok(Array.isArray(entry.asset_bundles), `${id} asset_bundles not array`);
39
+ for (const b of entry.asset_bundles) {
40
+ assert.ok(VALID_BUNDLES.has(b), `${id} asset_bundles contains invalid "${b}"`);
41
+ }
42
+ });
43
+
44
+ test(`${id}: template file exists`, () => {
45
+ const tmplRel = entry.tmpl || `templates/${id}.html.tmpl`;
46
+ const tmplAbs = join(PLUGIN_ROOT, tmplRel);
47
+ assert.ok(existsSync(tmplAbs), `${id} template file missing: ${tmplRel}`);
48
+ });
49
+
50
+ test(`${id}: fixture file exists`, () => {
51
+ const fix = join(PLUGIN_ROOT, `tests/fixtures/${id}.data.json`);
52
+ assert.ok(existsSync(fix), `${id} fixture missing: tests/fixtures/${id}.data.json`);
53
+ const data = JSON.parse(readFileSync(fix, 'utf8'));
54
+ for (const [slot, schemaRaw] of Object.entries(entry.slots)) {
55
+ const schema = typeof schemaRaw === 'string' ? { type: schemaRaw } : schemaRaw;
56
+ if (schema.required) {
57
+ assert.ok(slot in data, `${id} fixture missing required slot "${slot}"`);
58
+ }
59
+ }
60
+ });
61
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "plugin-validator",
3
3
  "displayName": "Plugin Validator",
4
- "version": "0.0.13",
4
+ "version": "0.0.15",
5
5
  "description": "Orchestrated validator for Claude Code plugins — validates skills, agents, commands, and hooks across every plugin under plugins/**.",
6
6
  "author": {
7
7
  "name": "Steven Hoang"
@@ -18,7 +18,7 @@ find plugins -path '*/agents/*.md'
18
18
  find plugins -path '*/.claude-plugin/plugin.json'
19
19
  ```
20
20
 
21
- For each `plugin.json`, parse and check whether the `agents` key is present (any shape). Emit one `[FAIL]` per plugin that declares it. Then validate every agent `.md` file as below.
21
+ For each `plugin.json`, parse the optional `agents` field if present (see "`agents` field rule" below). Then validate every agent `.md` file as below.
22
22
 
23
23
  ## Spec Compliance Checks
24
24
 
@@ -30,7 +30,7 @@ For each `plugin.json`, parse and check whether the `agents` key is present (any
30
30
  | `description` length | 1-1024 chars, non-empty |
31
31
  | `tools` optional | Comma-separated string; each name appears in the valid-tool list below |
32
32
  | `model` optional | One of `sonnet`, `opus`, `haiku`, `inherit` |
33
- | No `agents` key in plugin.json | The plugin loader rejects any `agents` field with `agents: Invalid input`. Agent files are auto-discovered from `<plugin>/agents/*.md`. If `plugin.json` declares an `agents` array (or any other shape), flag as `[FAIL]` and recommend deleting the key. Confirmed against `anthropics/claude-code` official plugins (`pr-review-toolkit`, `frontend-design`, `commit-commands`, `hookify`) none declare `agents`. |
33
+ | `agents` field rule | Optional. Per https://code.claude.com/docs/en/plugins-reference#component-path-fields, value is `string` or `array`. Each entry must be a relative path starting with `./` (per "Path behavior rules"). If field is absent, agents are auto-discovered from `<plugin>/agents/*.md`. **Failure modes**: (a) value type other than string/array → `[FAIL]`. (b) entry does not start with `./` → `[FAIL]` (loader rejects with `agents: Invalid input` for bare filenames like `"reviewer.md"`). (c) entry points outside plugin root (contains `..`) → `[FAIL]`. (d) entry path does not exist on disk → `[FAIL]`. (e) field present and replaces the default `agents/` directory while files there exist that are not listed → `[WARN]` (loader silently drops them; v2.1.140+ shows `/doctor` warning). |
34
34
 
35
35
  ### Valid tool names (Claude Code ≥ 2.1.139)
36
36
 
@@ -18,7 +18,7 @@ find plugins -path '*/commands/*.md'
18
18
  find plugins -path '*/.claude-plugin/plugin.json'
19
19
  ```
20
20
 
21
- For each `plugin.json`, parse and check whether the `commands` key is present (any shape). Emit one `[FAIL]` per plugin that declares it. Then validate every command `.md` file as below.
21
+ For each `plugin.json`, parse the optional `commands` field if present (see "`commands` field rule" below). Then validate every command `.md` file as below.
22
22
 
23
23
  ## Spec Compliance Checks
24
24
 
@@ -31,7 +31,7 @@ For each `plugin.json`, parse and check whether the `commands` key is present (a
31
31
  | `model` optional | One of `sonnet`, `opus`, `haiku`, `inherit` |
32
32
  | Filename → command | Filename minus `.md` is lowercase alphanumeric + hyphens; produces `/<filename>` |
33
33
  | Body non-empty | At least one non-blank line after frontmatter |
34
- | No `commands` key in plugin.json | The plugin loader rejects any `commands` field with `commands: Invalid input`. Command files are auto-discovered from `<plugin>/commands/*.md`. If `plugin.json` declares a `commands` array (or any other shape), flag as `[FAIL]` and recommend deleting the key. Confirmed against `anthropics/claude-code` official plugins (`pr-review-toolkit`, `frontend-design`, `commit-commands`, `hookify`) none declare `commands`. |
34
+ | `commands` field rule | Optional. Per https://code.claude.com/docs/en/plugins-reference#component-path-fields, value is `string` or `array`. Each entry must be a relative path starting with `./` (per "Path behavior rules"). If field is absent, commands are auto-discovered from `<plugin>/commands/*.md`. **Failure modes**: (a) value type other than string/array → `[FAIL]`. (b) entry does not start with `./` → `[FAIL]` (loader rejects with `commands: Invalid input` for bare filenames). (c) entry points outside plugin root (contains `..`) → `[FAIL]`. (d) entry path does not exist on disk → `[FAIL]`. (e) field present and replaces the default `commands/` directory while files there exist that are not listed → `[WARN]` (loader silently drops them; v2.1.140+ shows `/doctor` warning). |
35
35
 
36
36
  ### Valid tool names (Claude Code ≥ 2.1.139)
37
37
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: validate-hooks
3
- description: Validates plugin hooks (plugin.json hooks field and any referenced hooks.json) in plugins/** against the Claude Code plugin spec. Use via /validate-hooks command.
3
+ description: Validates plugin hooks (plugin.json hooks field and any hooks/hooks.json) in plugins/** against the Claude Code plugin spec. Use via /validate-hooks command.
4
4
  license: MIT
5
5
  metadata:
6
6
  author: Steven Hoang
@@ -9,37 +9,74 @@ metadata:
9
9
 
10
10
  # Validate Hooks
11
11
 
12
- Validate plugin hooks under `plugins/**` against the Claude Code plugin spec. Scope: `plugins/**` only — local-only `.claude/skills/` and `.claude/hooks/` are out of scope.
12
+ Validate plugin hooks under `plugins/**` against the Claude Code plugin spec (https://code.claude.com/docs/en/hooks, https://code.claude.com/docs/en/plugins-reference#hooks). Scope: `plugins/**` only — local-only `.claude/hooks/` is out of scope.
13
13
 
14
14
  ## Discovery
15
15
 
16
16
  ```bash
17
- find plugins -name 'hooks.json'
18
- find plugins -name 'plugin.json' -path '*/.claude-plugin/*'
17
+ /usr/bin/find plugins -name 'hooks.json'
18
+ /usr/bin/find plugins -name 'plugin.json' -path '*/.claude-plugin/*'
19
19
  ```
20
20
 
21
- Parse each `plugin.json`. If its `hooks` field is an inline object, validate inline. If its `hooks` field is a string path, that is a hard `[FAIL]` (see Spec Compliance below) — but still attempt to resolve and parse the referenced file for additional checks.
21
+ For each `plugin.json`, classify the `hooks` field:
22
+
23
+ | Form | Action |
24
+ |------|--------|
25
+ | absent | Use auto-discovery: validate `<plugin_root>/hooks/hooks.json` if it exists. If neither field nor file exist, plugin has no hooks — skip. |
26
+ | string path | Resolve relative to plugin root, parse referenced JSON, validate. |
27
+ | array of paths | Resolve each, parse, validate each. |
28
+ | object (inline config) | Validate inline. |
29
+
30
+ All four forms are spec-legal. **Do not flag the `hooks` field for being a string, array, or object.**
31
+
32
+ If both inline `hooks` and `hooks/hooks.json` exist, emit `[WARN]` — duplication invites drift; pick one source of truth.
22
33
 
23
34
  ## Spec Compliance Checks
24
35
 
25
36
  | Check | Rule |
26
37
  |-------|------|
27
- | `hooks` field shape | Must be an inline object. String-path form (`"hooks": "<path>"`) is rejected by the Claude Code plugin loader with `hooks: Invalid input`. Flag as `[FAIL]`. |
28
- | Top-level event keys | One of: `PreToolUse`, `PostToolUse`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `Notification`, `PreCompact`, `SessionStart`, `SessionEnd` |
29
- | Event value | Array of matcher groups |
30
- | Matcher group shape | `{ matcher: string, hooks: [...] }` |
31
- | Hook entry shape | `{ type: "command"\|"prompt", command?: string, prompt?: string, timeout?: integer }` |
32
- | Command path resolves | Resolves relative to plugin root, or uses `${CLAUDE_PROJECT_DIR}` / `${CLAUDE_PLUGIN_ROOT}` |
33
- | Executable bit | Referenced shell script has `+x` |
34
- | Regex compiles | Matcher value compiles as a Python `re` pattern |
38
+ | Top-level container | The hooks config is an object with a single `hooks` key whose value is an object keyed by event name. |
39
+ | Event name in allowlist | One of the 28 events below. |
40
+ | Event value | Array of matcher groups. |
41
+ | Matcher group shape | `{ matcher?: string, hooks: [...] }` (matcher optional). |
42
+ | Hook entry `type` | One of: `command`, `http`, `mcp_tool`, `prompt`, `agent`. |
43
+ | Hook entry shape (command) | `{ type: "command", command: string, args?: array, timeout?: integer, statusMessage?: string, if?: string, once?: boolean }`. |
44
+ | Hook entry shape (http) | `{ type: "http", url: string, headers?: object, timeout?: integer, ... }`. |
45
+ | Hook entry shape (mcp_tool) | `{ type: "mcp_tool", server: string, tool: string, ... }`. |
46
+ | Hook entry shape (prompt) | `{ type: "prompt", prompt: string, model?: string, timeout?: integer, ... }`. |
47
+ | Hook entry shape (agent) | `{ type: "agent", agent: string, prompt?: string, timeout?: integer, ... }`. |
48
+ | Command path resolves | Resolves relative to plugin root, or uses `${CLAUDE_PROJECT_DIR}` / `${CLAUDE_PLUGIN_ROOT}`. |
49
+ | Executable bit | Referenced shell script has `+x`. |
50
+ | Regex compiles | Matcher value compiles as a Python `re` pattern (only checked when matcher contains characters outside `[A-Za-z0-9_|]`). |
51
+
52
+ ### Allowed event names (28)
53
+
54
+ ```
55
+ SessionStart, Setup, InstructionsLoaded, UserPromptSubmit, UserPromptExpansion,
56
+ PreToolUse, PermissionRequest, PermissionDenied, PostToolUse, PostToolUseFailure,
57
+ PostToolBatch, Notification, SubagentStart, SubagentStop,
58
+ TaskCreated, TaskCompleted, Stop, StopFailure, TeammateIdle,
59
+ ConfigChange, CwdChanged, FileChanged, WorktreeCreate, WorktreeRemove,
60
+ PreCompact, PostCompact, SessionEnd, Elicitation, ElicitationResult
61
+ ```
62
+
63
+ ### Events that do NOT support `matcher`
64
+
65
+ ```
66
+ UserPromptSubmit, PostToolBatch, Stop, TeammateIdle,
67
+ TaskCreated, TaskCompleted, WorktreeCreate, WorktreeRemove, CwdChanged
68
+ ```
69
+
70
+ If a matcher group under one of these events sets a `matcher` field, emit `[WARN]` — the field is silently ignored by the loader. Not a `[FAIL]`.
35
71
 
36
72
  ## Best-Practice Checks
37
73
 
38
74
  | Check | Rule |
39
75
  |-------|------|
40
- | No absolute user paths | Body of command does not contain `/Users/<name>/...` or `/home/<name>/...` |
41
- | Timeout sane | `timeout` ≤ 60 unless inline comment justifies |
42
- | Prompt-type targets exist | `prompt`-type hooks reference skills or commands that exist on disk |
76
+ | No absolute user paths | Body of `command` does not contain `/Users/<name>/...` or `/home/<name>/...`. |
77
+ | Timeout sane | `timeout` ≤ 60 unless inline comment justifies. |
78
+ | Prompt/agent targets exist | `prompt`-type and `agent`-type hooks reference skills, commands, or agents that exist on disk. |
79
+ | `${CLAUDE_PLUGIN_ROOT}` quoting | Shell-form commands wrap `${CLAUDE_PLUGIN_ROOT}` in double quotes (path may contain spaces). |
43
80
 
44
81
  ## How to Run
45
82
 
@@ -52,13 +89,15 @@ Parse each `plugin.json`. If its `hooks` field is an inline object, validate inl
52
89
 
53
90
  ### plugins/<plugin>/<file>
54
91
  - [PASS] <check description>
92
+ - [WARN] <check description>: <details>
55
93
  - [FAIL] <check description>: <details>
56
94
  ```
57
95
 
58
- 4. Final tally: `Summary: <N> hooks files scanned. <P> pass, <F> fail.`
96
+ 4. Final tally: `Summary: <N> hooks files scanned. <P> pass, <F> fail, <W> warn.`
59
97
 
60
98
  ## References
61
99
 
62
- - [Claude Code plugin docs](https://docs.claude.com/en/docs/claude-code/plugins.md)
100
+ - Hook event lifecycle: https://code.claude.com/docs/en/hooks
101
+ - Plugin hook location + types: https://code.claude.com/docs/en/plugins-reference#hooks
63
102
  - Resolution evidence: see `docs/superpowers/specs/2026-05-13-plugin-validation-skills-design.md` § Resolution 1
64
103
  - Sibling skills: `validate-skills`, `validate-agents`, `validate-commands`
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "team-superpower",
3
3
  "displayName": "Team Superpower",
4
- "version": "0.0.13",
5
- "description": "Coordination layer that runs the obra/superpowers skill chain across a Claude Code agent team — one /team-feature command takes an idea through brainstorming, plan, TDD implementation, review, and finish with at most 4 owner touchpoints.",
4
+ "version": "0.0.15",
5
+ "description": "Shape-adaptive coordination layer that runs the obra/superpowers skill chain across a Claude Code agent team — one /team-feature command takes an idea through design, plan, pre-impl architecture+security gate, BE/FE implementation, QA gate, code review, CI gate, and finish with at most 3 owner touchpoints. Stack (full-stack / be-only / fe-only), test/build commands, contract sync between BE and FE, security checklist, and CI required checks are driven by a `team-superpower` block in the repo's CLAUDE.md.",
6
6
  "author": {
7
7
  "name": "Steven Hoang"
8
8
  },
@@ -13,41 +13,9 @@
13
13
  "orchestration",
14
14
  "workflow",
15
15
  "brainstorming",
16
- "code-review"
17
- ],
18
- "hooks": {
19
- "TeammateIdle": [
20
- {
21
- "matcher": "*",
22
- "hooks": [
23
- {
24
- "type": "command",
25
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/teammate-idle.sh"
26
- }
27
- ]
28
- }
29
- ],
30
- "TaskCreated": [
31
- {
32
- "matcher": "*",
33
- "hooks": [
34
- {
35
- "type": "command",
36
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/task-created.sh"
37
- }
38
- ]
39
- }
40
- ],
41
- "TaskCompleted": [
42
- {
43
- "matcher": "*",
44
- "hooks": [
45
- {
46
- "type": "command",
47
- "command": "${CLAUDE_PLUGIN_ROOT}/hooks/task-completed.sh"
48
- }
49
- ]
50
- }
51
- ]
52
- }
16
+ "code-review",
17
+ "architecture",
18
+ "security",
19
+ "qa"
20
+ ]
53
21
  }
@@ -1,34 +1,55 @@
1
1
  # team-superpower
2
2
 
3
- Coordination layer that runs the [obra/superpowers](https://github.com/obra/superpowers) skill chain across a Claude Code **agent team**. One `/team-feature` command takes an idea through brainstormingworktreeplanTDD implementation → review → finish, with at most **4 owner touchpoints**.
3
+ Coordination layer that runs the [obra/superpowers](https://github.com/obra/superpowers) skill chain across a Claude Code **agent team**. One `/team-feature` command takes an idea through designplanarchitecture + security gate BE/FE implementation → QA gate → code review → finish, with at most **3 owner touchpoints**.
4
4
 
5
- This plugin is *not* a fork of Superpowers. It consumes Superpowers skills as-installed and only adds the orchestration: who runs which skill, when, and how teammates talk without bothering the owner.
5
+ This plugin is *not* a fork of Superpowers. It consumes Superpowers skills as-installed and adds the orchestration: who runs which skill, when, and how teammates talk without bothering the owner.
6
+
7
+ ## v2 — shape-adaptive, project-aware
8
+
9
+ The plugin reads a `team-superpower` YAML block from your repo-root `CLAUDE.md` to drive every stack decision: BE-only repos do not spawn a frontend teammate, FE-only repos do not spawn a backend teammate, full-stack repos get both plus a contract-publish gate. Test/build/format commands come from `CLAUDE.md` — no more hard-coded `dotnet test`. CI green is required before the finish-branch menu (when a CI provider is configured). The security engineer's checklist is project-aware (no SQL items if no SQL, no XSS items if no HTML). The Superpowers version is pinned at session start so mid-feature skill drift can't corrupt recovery. See `assets/CLAUDE.md.template` for the schema and `docs/superpowers/README.md` (seeded on first run) for the operating manual.
6
10
 
7
11
  ## What you get
8
12
 
9
13
  - Three slash commands: `/team-feature`, `/team-feature-resume`, `/team-cleanup`.
10
- - Four agent roles, each with a tightly-scoped system prompt mapping it to specific Superpowers skills:
11
- - `designer` — runs `brainstorming`.
12
- - `planner` — runs `using-git-worktrees`, then `writing-plans`.
13
- - `implementer` — runs `subagent-driven-development` + `test-driven-development` per task.
14
- - `reviewer` — runs `requesting-code-review`, then `finishing-a-development-branch`.
14
+ - **Eight agent roles**, each with a tightly-scoped system prompt mapping it to specific Superpowers skills or gate behaviour:
15
+ - `designer` — runs `brainstorming` (phase 1).
16
+ - `planner` — runs `using-git-worktrees` then `writing-plans` (phase 2). Routes implementation by `impl:be-` / `impl:fe-` prefix.
17
+ - `software-architect` — phase-3 pre-impl architecture gate. Reviews design + plan. Posts `ARCH_PASSED` / `ARCH_BLOCKED`.
18
+ - `security-engineer` — phase-3 pre-impl security gate, parallel with `software-architect`. Threat-models design + plan. Posts `SEC_PASSED` / `SEC_BLOCKED`.
19
+ - `backend-developer` — phase-4 implementer for `impl:be-` tasks (server, data, infra, CI). Runs `subagent-driven-development` + `test-driven-development` per task.
20
+ - `frontend-developer` — phase-4 implementer for `impl:fe-` tasks. Same skill chain.
21
+ - `qa-engineer` — phase-5 post-impl QA gate. Verifies acceptance criteria + regression coverage. Posts `QA_PASSED` / `QA_BLOCKED`.
22
+ - `reviewer` — phase-6 runs `requesting-code-review`; phase-7 runs `finishing-a-development-branch`.
15
23
  - Three guardrail hooks (registered automatically via `hooks/hooks.json`):
16
24
  - `TeammateIdle` — refuses idle while peer mail is unanswered.
17
- - `TaskCreated` — enforces `impl:`/`review:`/`meta:`/`block:` task title prefixes.
25
+ - `TaskCreated` — enforces `impl:` / `review:` / `meta:` / `block:` task title prefixes.
18
26
  - `TaskCompleted` — gates `impl:` completions on `plan_approved_at` and validates escalation entries.
19
- - `scripts/team-state.sh` — the inspection + cleanup helper. Called by the slash commands; also runnable directly.
27
+ - `scripts/team-state.sh` — inspection + cleanup helper. Called by the slash commands; also runnable directly.
20
28
  - Robustness primitives baked into the workflow:
21
29
  - **Preflight scan** in `/team-feature` and `/team-feature-resume` — detects orphaned team config, stale task lists, and in-flight runs before doing anything destructive.
30
+ - **Two gate phases** (pre-impl arch+security, post-impl QA) — block forward progress until findings resolve, so the reviewer at phase 6 sees clean code-quality issues only, not architectural or security regressions.
22
31
  - **Heartbeat file** at `docs/superpowers/sessions/<slug>.heartbeat` — touched at every phase boundary; cleanup refuses to wipe state while the heartbeat is fresh.
23
32
  - **Atomic checkpoint writes** (tmp + rename) — half-written checkpoints can't corrupt recovery.
24
33
  - **Automatic cleanup after `FINISH_DONE`** — the lead verifies all phases complete, all commits in place, teammates idle, then runs the canonical "clean up the team" primitive followed by a verification scan. No manual `rm -rf` required.
25
34
  - **`/team-cleanup [slug]`** for the case where a previous lead crashed and the canonical cleanup path is no longer available.
26
35
  - Templates seeded into your project on first use: `docs/superpowers/ESCALATION.md` (escalation template + 2 worked examples) and `docs/superpowers/README.md` (onboarding + troubleshooting).
27
36
 
37
+ ## Phase chain at a glance
38
+
39
+ | Phase | Role(s) | Output | Gate? |
40
+ |---|---|---|---|
41
+ | 1 Design | `designer` | Design doc → `docs/superpowers/specs/` | Owner approval |
42
+ | 2 Plan | `planner` | Worktree + plan with `impl:be-` / `impl:fe-` tasks → `docs/superpowers/plans/` | Owner approval |
43
+ | 3 Pre-impl review (parallel) | `software-architect` + `security-engineer` | ARCH + SEC reports → `docs/superpowers/reviews/` | Both must post PASSED |
44
+ | 4 Implementation (parallel) | `backend-developer` + `frontend-developer` | TDD commits on feature branch | All `impl:` tasks complete |
45
+ | 5 QA | `qa-engineer` | QA report → `docs/superpowers/reviews/` | `QA_PASSED` |
46
+ | 6 Code review | `reviewer` | Review report → `docs/superpowers/reviews/` | `REVIEW_PASSED` |
47
+ | 7 Finish | `reviewer` | Merge / PR / keep / discard | Owner decision |
48
+
28
49
  ## Requirements
29
50
 
30
51
  - Claude Code `2.1.32` or later.
31
- - `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your environment (the slash command will halt if absent).
52
+ - `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your environment (the slash command halts if absent).
32
53
  - The Superpowers plugin installed: `/plugin install superpowers@claude-plugins-official`.
33
54
  - `jq` on `$PATH` (the hooks degrade to log-only when missing, but you want them enforcing).
34
55
 
@@ -54,15 +75,30 @@ Then make sure the agent-teams env flag is set in `~/.claude/settings.json`:
54
75
  /team-feature add a /healthcheck endpoint that returns 200 OK
55
76
  ```
56
77
 
57
- You will be interrupted at most four times:
78
+ You will be interrupted at most three times:
58
79
 
59
- 1. Brainstorming clarifying questions (batched per phase).
60
- 2. Design sign-off.
61
- 3. Plan approval.
62
- 4. Finish-branch decision (merge / PR / keep / discard).
80
+ 1. Design sign-off (after phase 1).
81
+ 2. Plan approval (after phase 2).
82
+ 3. Finish-branch decision — merge / PR / keep / discard (in phase 7).
63
83
 
64
84
  Anything else that reaches you uses the escalation template in `docs/superpowers/ESCALATION.md`. If a teammate pings you without using the template, that's a bug — file it.
65
85
 
86
+ ## Task prefix routing
87
+
88
+ The planner assigns every `impl:` task one of two sub-prefixes; the lead routes by prefix:
89
+
90
+ | Prefix | Routed to | Scope |
91
+ |---|---|---|
92
+ | `impl:be-` | `backend-developer` | Server-side code, APIs, data, schemas, migrations, infra / CI scripts, Docker, IaC |
93
+ | `impl:fe-` | `frontend-developer` | UI components, pages, client-side state, styles, browser assets |
94
+
95
+ Defect-fix tasks filed mid-flight inherit the routing prefix:
96
+
97
+ | Prefix | Filed by | Routed to |
98
+ |---|---|---|
99
+ | `impl:qa-fix-be-` / `impl:qa-fix-fe-` | `qa-engineer` (phase 5) | matching BE / FE implementer |
100
+ | `impl:review-fix-be-` / `impl:review-fix-fe-` | `reviewer` (phase 6) | matching BE / FE implementer |
101
+
66
102
  ## Resume after `/resume` drops the team
67
103
 
68
104
  ```text
@@ -95,13 +131,30 @@ bash plugins/team-superpower/scripts/team-state.sh cleanup <slug> --force # app
95
131
 
96
132
  `/team-feature` runs cleanup automatically the instant the reviewer reports `FINISH_DONE` (merge / PR / keep / discard). Before wiping anything, the lead verifies:
97
133
 
98
- - every phase from brainstorming through finish is complete in the checkpoint
134
+ - every phase from design through finish is complete in the checkpoint
99
135
  - the shared task list has zero in-progress tasks
100
- - the expected commits exist on the worktree (design, plan, TDD pairs of test + code, review report, and any merge / PR-prep commit per the finish decision)
136
+ - the expected commits exist on the worktree (design, plan, ARCH+SEC reports, TDD pairs of test + code, QA report, code-review report, and any merge / PR-prep commit per the finish decision)
101
137
  - all teammates are idle and shut down
102
138
 
103
139
  Only then does it invoke the canonical "clean up the team" primitive, verify with a scan that `~/.claude/teams/superpower-<slug>/` is gone, and append a `## Closing` block to the checkpoint. If any step fails, the lead halts and instructs the owner to run `/team-cleanup <slug>` manually. **No `rm -rf` runs on a half-finished feature.**
104
140
 
141
+ ### Worktree removal on merge
142
+
143
+ When (and only when) the finish decision is `merged` AND the platform-cleanup scan shows everything `absent`, the lead now runs a Step D.5 worktree removal between team cleanup and the final checkpoint commit. `git worktree remove <path>` is non-forced by default; the feature branch is left in place (only the worktree directory is removed). If `git worktree remove` fails (untracked files, locked worktree, in-progress git operation), the lead presents a 4-option menu:
144
+
145
+ | | Option | Behaviour |
146
+ |---|---|---|
147
+ | A | Show files + retry | Lists blocking files via `git status --short` + `git diff --stat`, then retries (cap 3). |
148
+ | B | Force remove | Discards uncommitted work in the worktree (requires typed `yes` confirmation). |
149
+ | C | Keep worktree | Leaves the directory on disk; owner removes manually. |
150
+ | D | Escalate | §7 escalation with verbatim stderr. |
151
+
152
+ Other finish decisions (`pr_opened`, `kept`, `discarded`) skip Step D.5 — the worktree stays so the owner can keep working in it or inspect artefacts. The Closing block records the outcome with a `worktree:` field.
153
+
154
+ ### Merge-failure menu
155
+
156
+ If the reviewer's merge step in phase 7 fails (`conflict` / `non-ff` / `dirty-worktree` / `push-rejected`), it posts `FINISH_BLOCKED <reason>` instead of `FINISH_DONE`. The lead surfaces a 5-option menu — retry / switch to pr_opened / switch to kept / switch to discarded / escalate — counted as the same finish-branch touchpoint, not a new one. Retries cap at 3; after the 3rd `FINISH_BLOCKED`, option A drops. The cap persists across `/team-feature-resume` via the checkpoint.
157
+
105
158
  ## Layout
106
159
 
107
160
  ```
@@ -111,7 +164,11 @@ plugins/team-superpower/
111
164
  ├── agents/
112
165
  │ ├── designer.md
113
166
  │ ├── planner.md
114
- │ ├── implementer.md
167
+ │ ├── software-architect.md
168
+ │ ├── security-engineer.md
169
+ │ ├── backend-developer.md
170
+ │ ├── frontend-developer.md
171
+ │ ├── qa-engineer.md
115
172
  │ └── reviewer.md
116
173
  ├── commands/
117
174
  │ ├── team-feature.md
@@ -120,13 +177,16 @@ plugins/team-superpower/
120
177
  ├── hooks/
121
178
  │ ├── hooks.json
122
179
  │ ├── teammate-idle.sh
123
- │ ├── task-created.sh
124
- │ └── task-completed.sh
180
+ │ ├── task-created.sh → recognises v2 sub-prefixes and the shape marker
181
+ │ └── task-completed.sh → migration serialization + contract-publish verification
125
182
  ├── scripts/
126
- └── team-state.sh → inspection + cleanup helper, called by the slash commands
183
+ ├── team-state.sh → inspection + cleanup helper
184
+ │ ├── detect-stack.sh → filesystem-based stack detection (BE / FE / contracts / CI)
185
+ │ └── parse-claudemd.sh → extract the team-superpower block from CLAUDE.md
127
186
  └── assets/
128
- ├── ESCALATION.md → seeded to docs/superpowers/ESCALATION.md on first run
129
- └── SESSION_README.md → seeded to docs/superpowers/README.md on first run
187
+ ├── ESCALATION.md → seeded to docs/superpowers/ESCALATION.md on first run
188
+ ├── SESSION_README.md → seeded to docs/superpowers/README.md on first run
189
+ └── CLAUDE.md.template → copy to repo root if no CLAUDE.md exists
130
190
  ```
131
191
 
132
192
  ## Design
@@ -136,6 +196,7 @@ See the project's `docs/superpowers/README.md` after first run for the operating
136
196
  - The **lead** is a conductor. It never runs a Superpowers skill itself.
137
197
  - Teammates run **canonical, unmodified** Superpowers skills. They are forbidden from paraphrasing or replacing them.
138
198
  - TDD is enforced by `subagent-driven-development` + `test-driven-development` per implementer task. The `TaskCompleted` hook is a backstop, not the primary control.
199
+ - **Two gate phases** keep the reviewer's job small. Architecture and security issues are caught at phase 3 (pre-impl) so implementers don't waste cycles on plans that fail review. QA defects are caught at phase 5 (post-impl) so the reviewer at phase 6 only deals with code-quality findings.
139
200
  - All cross-team chatter that needs an owner decision goes through the §7 escalation template. The hook spot-checks the template fields and refuses malformed escalations.
140
201
  - Every phase boundary writes a checkpoint to `docs/superpowers/sessions/<slug>.md`. That's the only thing that survives a `/resume` failure — the slash command `/team-feature-resume` reads it back.
141
202
 
@@ -143,7 +204,7 @@ See the project's `docs/superpowers/README.md` after first run for the operating
143
204
 
144
205
  - Token-usage metrics per teammate per phase.
145
206
  - Per-role permission allowlists.
146
- - Frontend/backend specialist implementers (defer until pattern proves out).
207
+ - Standalone devops, technical-writer, or minimal-change-engineer roles — infra/CI folds into `backend-developer`; documentation lands in PR descriptions and inline; minimal-change patterns are scoped per task by the planner.
147
208
 
148
209
  ## License
149
210
 
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: backend-developer
3
+ description: Specialised phase-4 implementer for server-side, infrastructure, and CI tasks. Reads `CLAUDE.md` to pick test/build/format commands per project stack. Claims `impl:be-` prefixed tasks (including `impl:be-migration-*`, `impl:be-contract-publish-*`, `impl:contract-update-*`).
4
+ tools: Read, Write, Edit, Bash, Glob, Grep
5
+ model: sonnet
6
+ ---
7
+
8
+ # Backend Developer — Phase 4 (Implementation)
9
+
10
+ You are a **backend-developer** teammate. You are a specialised implementer covering server-side AND infrastructure/CI work. Your only job: claim backend-prefixed tasks from the shared task list and complete each through the canonical Superpowers chain.
11
+
12
+ ## Read CLAUDE.md at task start
13
+
14
+ Before claiming your first task — and on every resume — read the repo-root `CLAUDE.md`. Use `bash ${CLAUDE_PLUGIN_ROOT}/scripts/parse-claudemd.sh get backend.<field>` to fetch individual scalars. The `backend` block defines your toolbelt:
15
+
16
+ | `CLAUDE.md` key | How you use it |
17
+ |-----------------------------|----------------|
18
+ | `backend.test_command` | Use after every RED→GREEN cycle to verify. Never hard-code `dotnet test` or `npm test`. |
19
+ | `backend.build_command` | Use to confirm the project still builds. |
20
+ | `backend.format_command` | Run after REFACTOR if defined and not `none`. |
21
+ | `backend.test_framework` | xunit / nunit / mstest / **reqnroll** / pytest / jest / vitest / etc. Reqnroll changes how tests are written — see below. |
22
+ | `backend.migration_tool` | Names the migration runner. Schema-touching tasks come with `impl:be-migration-*` prefix; do not invent your own migrations outside that prefix. |
23
+ | `backend.package_manager` | Use the project's package manager when adding deps — do not silently switch (`pnpm` ≠ `npm` ≠ `yarn`). |
24
+
25
+ Also read the free-form prose in CLAUDE.md (sections after the YAML block, e.g. `## Conventions`). Style rules, naming, and "we don't do X here" guidance live there. Apply them.
26
+
27
+ If `CLAUDE.md` has no `team-superpower` block, halt and escalate via §7. The lead's phase 0 should have already produced `docs/superpowers/stack.detected.md` — work from that if so, otherwise escalate to the owner.
28
+
29
+ ## Hard rules
30
+
31
+ 1. Run the unmodified Superpowers `subagent-driven-development` skill for every task. Read `~/.claude/plugins/cache/claude-plugins-official/superpowers/5.1.0/skills/subagent-driven-development/SKILL.md` before claiming your first task.
32
+ 2. Every code change MUST follow the canonical `test-driven-development` skill: RED → GREEN → REFACTOR. If you wrote production code before a failing test existed, delete it and restart. Non-negotiable.
33
+ 3. You are scoped to: routes, services, repositories, schemas, migrations, server config, build scripts, CI / deploy pipeline files, Dockerfiles, IaC. Do NOT touch frontend files (`components/`, `pages/`, browser `assets/`). If a task bleeds into frontend scope, halt and escalate.
34
+ 4. You **may not** modify the plan or the design. If the plan is wrong, escalate via the §7 template — `software-architect` + `security-engineer` already gated the plan at phase 3; raise it to the lead, not silently work around.
35
+ 5. You handle `impl:qa-fix-be-` and `impl:review-fix-be-` tasks (filed by `qa-engineer` and `reviewer` respectively).
36
+ 6. Mark a task complete only after the two-stage review inside `subagent-driven-development` passes.
37
+ 7. **Migrations serialize.** If your claim is `impl:be-migration-*` and another `impl:be-migration-*` task is `in_progress`, idle and wait — do NOT claim. The `TaskCompleted` hook also enforces this with `MIGRATION_RACE` as a backstop.
38
+ 8. **Use the test framework from CLAUDE.md.** Do not hard-code `dotnet test` / `npm test` / `pytest`. If `backend.test_framework: reqnroll`, expect `.feature` Gherkin files in the plan — write step bindings against them rather than authoring xUnit tests yourself. The planner owns the Gherkin.
39
+ 9. **Use the format command from CLAUDE.md** after every REFACTOR, unless `backend.format_command` is `none` or unset.
40
+
41
+ ## Contract-publish task (full-stack only)
42
+
43
+ If your claim is `impl:be-contract-publish-<slug>`:
44
+
45
+ 1. Read `contracts.source_of_truth`, `contracts.openapi_path` (or analogous), and `contracts.ts_gen_command` from CLAUDE.md.
46
+ 2. Generate or update the contract artefact per the plan's instructions for this feature. Commit the artefact.
47
+ 3. Run `contracts.ts_gen_command` (or the equivalent for grpc / graphql / typescript) to regenerate FE-consumable types. Commit the generated output.
48
+ 4. Set `metadata.contract_files` on the task (so the `TaskCompleted` hook can confirm a commit touched it).
49
+ 5. Post `CONTRACT_PUBLISHED <task-id>` to the lead's mailbox — the lead will not assign any `impl:fe-*` task until it sees this.
50
+ 6. Mark the task complete. The `TaskCompleted` hook will refuse completion if no commit on this task touches a contract file — that's the backstop against silent no-ops.
51
+
52
+ ## Mid-implementation contract drift
53
+
54
+ If, during a non-publish backend task, you discover the published contract needs to change:
55
+
56
+ 1. Halt your current task (do not partially-edit the contract sideways).
57
+ 2. File a new task titled `impl:contract-update-<topic>` (the hook recognizes the prefix). Self-claim it.
58
+ 3. The lead pauses all `impl:fe-*` work via mailbox.
59
+ 4. Update the contract files. Run `contracts.ts_gen_command` to regenerate FE-consumable types. Commit.
60
+ 5. Post `CONTRACT_UPDATED <task-id>` to the lead's mailbox.
61
+ 6. The lead resumes FE work — FE will re-pull the contract hash before continuing.
62
+ 7. Resume your original task.
63
+
64
+ If a `frontend-developer` posts `CONTRACT_DRIFT_DETECTED <details>` to your mailbox first, follow the same flow: halt your current task (if any), file the `impl:contract-update-*` task, fix the contract, post `CONTRACT_UPDATED`, resume.
65
+
66
+ ## Responsibilities
67
+
68
+ Claim the lowest-numbered eligible backend task (any of `impl:be-*`, `impl:be-migration-*`, `impl:be-contract-publish-*`, `impl:contract-update-*`, `impl:qa-fix-be-*`, `impl:review-fix-be-*`), mark it in-progress, run subagent-driven-development, mark complete. Repeat until no eligible tasks remain, then idle.
69
+
70
+ ## Output
71
+
72
+ Committed code on the feature branch per task. No separate report needed.
73
+ Post `BE_DONE <task-id>` to the lead's mailbox after each task completes. For contract tasks, also post `CONTRACT_PUBLISHED <task-id>` (on publish) or `CONTRACT_UPDATED <task-id>` (on drift fix).
74
+
75
+ ## Escalation
76
+
77
+ Use the §7 template in `docs/superpowers/ESCALATION.md` for any blocker. Common blockers:
78
+ - Task scope bleeds into frontend files.
79
+ - Plan contradicts design doc on an API contract.
80
+ - A migration would destroy data in an unexpected way.
81
+ - CI change would block other PRs already in flight.
82
+ - `CLAUDE.md`'s `backend` block has a field set to `# CONFIRM:` and you can't proceed without that value — escalate so the owner fills it in.
@@ -11,13 +11,17 @@ You are the **designer** teammate on a team-superpower agent team. The lead spaw
11
11
 
12
12
  ## Hard rules
13
13
 
14
- 1. Run the unmodified Superpowers `brainstorming` skill at `~/.claude/plugins/superpowers/skills/brainstorming/SKILL.md`. Follow it verbatim. Do not invent steps, skip the visual-companion offer, or collapse the clarifying-question loop. Read the SKILL.md before you do anything else.
14
+ 1. Run the unmodified Superpowers `brainstorming` skill at `~/.claude/plugins/cache/claude-plugins-official/superpowers/5.1.0/skills/brainstorming/SKILL.md`. Follow it verbatim. Do not invent steps, skip the visual-companion offer, or collapse the clarifying-question loop. Read the SKILL.md before you do anything else.
15
15
  2. **Never** write code, plans, worktree commands, or anything outside `docs/superpowers/specs/`.
16
16
  3. Save the design doc to `docs/superpowers/specs/YYYY-MM-DD-<slug>-design.md` and commit it. The brainstorming skill already prescribes this; do not deviate from its filename pattern. The `<slug>` is given to you by the lead in your spawn prompt.
17
17
  4. Before sending a clarifying question to the owner, **post it to the lead via mailbox first**. The lead may answer from project context or escalate. Never DM the owner directly.
18
18
  5. Every escalation you do raise MUST use the template in `docs/superpowers/ESCALATION.md`. No exceptions, even for one-line questions.
19
19
  6. When the owner signs off on the design, post `DESIGN_APPROVED <path>` to the lead's mailbox where `<path>` is the absolute path of the design doc. Then idle.
20
20
 
21
+ ## Output
22
+
23
+ A committed design document at `docs/superpowers/specs/YYYY-MM-DD-<slug>-design.md`, owner-approved per the brainstorming skill's sign-off step. Signals completion by posting `DESIGN_APPROVED <path>` to the lead's mailbox.
24
+
21
25
  ## What you must NOT do
22
26
 
23
27
  - Decide implementation strategy. The plan is the planner's job.