@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.
- package/.claude-plugin/marketplace.json +9 -6
- package/README.md +1 -1
- package/package.json +1 -1
- package/plugins/html-effectiveness/.claude-plugin/plugin.json +1 -1
- package/plugins/html-effectiveness/README.md +9 -4
- package/plugins/html-effectiveness/agents/report-builder.md +4 -0
- package/plugins/html-effectiveness/assets/base.css +40 -20
- package/plugins/html-effectiveness/docs/template-gallery.md +28 -0
- package/plugins/html-effectiveness/scripts/_tmp.js +37 -0
- package/plugins/html-effectiveness/scripts/catalog.js +47 -0
- package/plugins/html-effectiveness/scripts/extract.js +104 -0
- package/plugins/html-effectiveness/scripts/render.js +2 -2
- package/plugins/html-effectiveness/skills/html-effectiveness/SKILL.md +4 -4
- package/plugins/html-effectiveness/templates/01-exploration-code-approaches.html.tmpl +400 -0
- package/plugins/html-effectiveness/templates/02-exploration-visual-designs.html.tmpl +456 -0
- package/plugins/html-effectiveness/templates/03-code-review-pr.html.tmpl +581 -0
- package/plugins/html-effectiveness/templates/04-code-understanding.html.tmpl +443 -0
- package/plugins/html-effectiveness/templates/05-design-system.html.tmpl +578 -0
- package/plugins/html-effectiveness/templates/06-component-variants.html.tmpl +557 -0
- package/plugins/html-effectiveness/templates/07-prototype-animation.html.tmpl +417 -0
- package/plugins/html-effectiveness/templates/08-prototype-interaction.html.tmpl +363 -0
- package/plugins/html-effectiveness/templates/09-slide-deck.html.tmpl +535 -0
- package/plugins/html-effectiveness/templates/10-svg-illustrations.html.tmpl +444 -0
- package/plugins/html-effectiveness/templates/11-status-report.html.tmpl +152 -0
- package/plugins/html-effectiveness/templates/12-incident-report.html.tmpl +547 -0
- package/plugins/html-effectiveness/templates/13-flowchart-diagram.html.tmpl +361 -0
- package/plugins/html-effectiveness/templates/14-research-feature-explainer.html.tmpl +348 -0
- package/plugins/html-effectiveness/templates/15-research-concept-explainer.html.tmpl +334 -0
- package/plugins/html-effectiveness/templates/16-implementation-plan.html.tmpl +657 -0
- package/plugins/html-effectiveness/templates/17-pr-writeup.html.tmpl +553 -0
- package/plugins/html-effectiveness/templates/18-editor-triage-board.html.tmpl +541 -0
- package/plugins/html-effectiveness/templates/19-editor-feature-flags.html.tmpl +627 -0
- package/plugins/html-effectiveness/templates/20-editor-prompt-tuner.html.tmpl +687 -0
- package/plugins/html-effectiveness/templates/manifest.json +436 -2
- package/plugins/html-effectiveness/tests/_tmp.test.js +58 -0
- package/plugins/html-effectiveness/tests/fixtures/01-exploration-code-approaches.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/02-exploration-visual-designs.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/03-code-review-pr.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/04-code-understanding.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/05-design-system.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/06-component-variants.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/07-prototype-animation.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/08-prototype-interaction.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/09-slide-deck.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/10-svg-illustrations.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/11-status-report.data.json +37 -0
- package/plugins/html-effectiveness/tests/fixtures/12-incident-report.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/13-flowchart-diagram.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/14-research-feature-explainer.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/15-research-concept-explainer.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/16-implementation-plan.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/17-pr-writeup.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/18-editor-triage-board.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/19-editor-feature-flags.data.json +3 -0
- package/plugins/html-effectiveness/tests/fixtures/20-editor-prompt-tuner.data.json +3 -0
- package/plugins/html-effectiveness/tests/manifest.test.js +61 -0
- package/plugins/plugin-validator/.claude-plugin/plugin.json +1 -1
- package/plugins/plugin-validator/skills/validate-agents/SKILL.md +2 -2
- package/plugins/plugin-validator/skills/validate-commands/SKILL.md +2 -2
- package/plugins/plugin-validator/skills/validate-hooks/SKILL.md +57 -18
- package/plugins/team-superpower/.claude-plugin/plugin.json +7 -39
- package/plugins/team-superpower/README.md +85 -24
- package/plugins/team-superpower/agents/backend-developer.md +82 -0
- package/plugins/team-superpower/agents/designer.md +5 -1
- package/plugins/team-superpower/agents/frontend-developer.md +96 -0
- package/plugins/team-superpower/agents/planner.md +144 -16
- package/plugins/team-superpower/agents/qa-engineer.md +30 -0
- package/plugins/team-superpower/agents/reviewer.md +68 -22
- package/plugins/team-superpower/agents/security-engineer.md +110 -0
- package/plugins/team-superpower/agents/software-architect.md +30 -0
- package/plugins/team-superpower/assets/CLAUDE.md.template +96 -0
- package/plugins/team-superpower/assets/ESCALATION.md +19 -5
- package/plugins/team-superpower/assets/SESSION_README.md +119 -11
- package/plugins/team-superpower/commands/team-feature-resume.md +72 -6
- package/plugins/team-superpower/commands/team-feature.md +329 -28
- package/plugins/team-superpower/hooks/hooks.json +0 -3
- package/plugins/team-superpower/hooks/task-completed.sh +54 -5
- package/plugins/team-superpower/hooks/task-created.sh +79 -4
- package/plugins/team-superpower/scripts/detect-stack.sh +434 -0
- package/plugins/team-superpower/scripts/parse-claudemd.sh +194 -0
- package/plugins/tech-graph/.claude-plugin/plugin.json +1 -1
- package/plugins/tech-graph/agents/tech-graph.md +8 -0
- 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.
|
|
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
|
|
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
|
-
|
|
|
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
|
|
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
|
-
|
|
|
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
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
|
28
|
-
|
|
|
29
|
-
| Event value | Array of matcher groups |
|
|
30
|
-
| Matcher group shape | `{ matcher
|
|
31
|
-
| Hook entry
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
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
|
|
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
|
-
-
|
|
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.
|
|
5
|
-
"description": "
|
|
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
|
-
|
|
19
|
-
"
|
|
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
|
|
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 design → plan → architecture + 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
|
|
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
|
-
-
|
|
11
|
-
- `designer` — runs `brainstorming
|
|
12
|
-
- `planner` — runs `using-git-worktrees
|
|
13
|
-
- `
|
|
14
|
-
- `
|
|
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
|
|
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` —
|
|
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
|
|
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
|
|
78
|
+
You will be interrupted at most three times:
|
|
58
79
|
|
|
59
|
-
1.
|
|
60
|
-
2.
|
|
61
|
-
3.
|
|
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
|
|
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
|
-
│ ├──
|
|
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
|
-
│
|
|
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
|
|
129
|
-
|
|
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
|
-
-
|
|
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.
|