orchestrix-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +10 -0
- package/LICENSE +21 -0
- package/README.md +73 -0
- package/bin/install.js +82 -0
- package/package.json +30 -0
- package/project-scaffold/README.md +33 -0
- package/project-scaffold/core-config.yaml +19 -0
- package/project-scaffold/knowledge/README.md +34 -0
- package/project-scaffold/knowledge/architecture/decisions.md +32 -0
- package/project-scaffold/knowledge/registry/api.yaml +15 -0
- package/project-scaffold/knowledge/taste/brand.md +20 -0
- package/project-scaffold/knowledge/taste/coding-standards.md +17 -0
- package/project-scaffold/knowledge/taste/design-system.md +32 -0
- package/skills/README.md +74 -0
- package/skills/brainstorm/SKILL.md +86 -0
- package/skills/commit/SKILL.md +57 -0
- package/skills/design-architecture/SKILL.md +65 -0
- package/skills/design-review/SKILL.md +83 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/design-ui/SKILL.md +96 -0
- package/skills/draft-story/SKILL.md +106 -0
- package/skills/implement/SKILL.md +78 -0
- package/skills/orchestrate/SKILL.md +94 -0
- package/skills/research/SKILL.md +63 -0
- package/skills/review-code/SKILL.md +71 -0
- package/skills/run-tests/SKILL.md +73 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-architecture
|
|
3
|
+
description: Use when a feature needs a new or changed architectural decision — a service, data model, cross-cutting pattern, or external integration — before stories are drafted.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, Grep, Glob]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [requirement, system_context]
|
|
9
|
+
reads: [architecture/*, registry/api, registry/db]
|
|
10
|
+
outputs: [specs/<slug>-arch.md]
|
|
11
|
+
updates: [architecture/decisions, registry/api?, registry/db?]
|
|
12
|
+
authority: "Write to the specs namespace (default docs/specs/) and update the architecture KB / registry. No source code, no production."
|
|
13
|
+
verify: "States the alternatives and the rationale; consistent with existing decisions (or explicitly supersedes one); no placeholder."
|
|
14
|
+
accept:
|
|
15
|
+
when: "Always — an architecture decision is foundational; the whole build rests on it."
|
|
16
|
+
timing: inline
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Design Architecture
|
|
20
|
+
|
|
21
|
+
Make one architectural decision a feature needs, with its rationale, and record
|
|
22
|
+
it durably — before any story is drafted on top of it.
|
|
23
|
+
|
|
24
|
+
**Core principle:** Decide deliberately and record why. A wrong foundation
|
|
25
|
+
discovered late wastes the whole build, so this is a gated, foundational step —
|
|
26
|
+
not something `implement` should improvise.
|
|
27
|
+
|
|
28
|
+
## Process
|
|
29
|
+
|
|
30
|
+
1. **Read the slice.** Load relevant `architecture/*` decisions and the
|
|
31
|
+
`registry/api` + `registry/db` facts. Understand what already exists.
|
|
32
|
+
2. **State the decision needed.** One sentence: what must be decided and why it
|
|
33
|
+
came up now.
|
|
34
|
+
3. **Weigh 2–3 alternatives** with trade-offs; pick one; say why the others lose.
|
|
35
|
+
4. **Check consistency.** It must not contradict an existing decision. If it
|
|
36
|
+
must, explicitly supersede that decision — never silently diverge.
|
|
37
|
+
5. **Scope it.** Decide only what this feature forces. Don't design the whole
|
|
38
|
+
system (YAGNI); leave future decisions to future features.
|
|
39
|
+
|
|
40
|
+
## Outputs
|
|
41
|
+
|
|
42
|
+
**Per-feature record** — `specs/<slug>-arch.md`:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
# <Feature> — Architecture Decision
|
|
46
|
+
|
|
47
|
+
## Decision — one line.
|
|
48
|
+
|
|
49
|
+
## Context — why it came up.
|
|
50
|
+
|
|
51
|
+
## Alternatives — what was rejected and why.
|
|
52
|
+
|
|
53
|
+
## Impact — affected modules, data, interfaces.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Durable record (metabolism)** — append an ADR to `architecture/decisions`
|
|
57
|
+
(append/supersede, with provenance). If the decision adds or changes endpoints or
|
|
58
|
+
data models, update `registry/api` / `registry/db` so downstream skills read the
|
|
59
|
+
new facts.
|
|
60
|
+
|
|
61
|
+
## Done
|
|
62
|
+
|
|
63
|
+
Write the decision, update the KB, then stop for approval (`accept: inline`). On
|
|
64
|
+
approval the orchestrator wires `draft-story`, which reads the updated
|
|
65
|
+
`architecture/*` and `registry/*`.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-review
|
|
3
|
+
description: Use after a UI feature is built and running, before merging, to review the rendered interface against its UI spec, the design system, and world-class craft.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Bash, Grep, Glob]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [built_ui, ui_spec]
|
|
9
|
+
reads: [taste/design-system, taste/brand]
|
|
10
|
+
outputs: [design_review_report]
|
|
11
|
+
authority: "Read-only on code; render and screenshot the running UI. No edits, no commits, no production."
|
|
12
|
+
verify: "Report is based on actual rendered screens (screenshots), not inferred from source; contains both verdicts (spec compliance AND visual quality)."
|
|
13
|
+
accept:
|
|
14
|
+
when: "never — findings route back to implement; the human reviews at the end batch."
|
|
15
|
+
timing: deferred
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Design Review
|
|
19
|
+
|
|
20
|
+
Review a built UI with a senior designer's eye. The visual counterpart of
|
|
21
|
+
`review-code`: two verdicts, in order — does it match the spec, then is it
|
|
22
|
+
world-class.
|
|
23
|
+
|
|
24
|
+
**Core principle:** You cannot review design from source. Render it and look at
|
|
25
|
+
the pixels. A claim about how it looks, without a screenshot, is a guess — the
|
|
26
|
+
visual equivalent of claiming tests pass without running them.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
|
|
30
|
+
- `built_ui` — the running app (url / dev server / screenshots of each screen).
|
|
31
|
+
- `ui_spec` — `specs/<slug>-ui.md` it must satisfy.
|
|
32
|
+
- Read `taste/design-system` + `taste/brand` — the bar to calibrate against.
|
|
33
|
+
Deviations from the system are higher severity, not lower.
|
|
34
|
+
|
|
35
|
+
## Look at the real thing first
|
|
36
|
+
|
|
37
|
+
Render every screen and state in the spec (loading, empty, error too). Capture
|
|
38
|
+
screenshots. Review those, not the CSS.
|
|
39
|
+
|
|
40
|
+
## Verdict 1 — Spec compliance
|
|
41
|
+
|
|
42
|
+
For each screen/flow/state in `ui_spec`: present and correct, missing, or wrong.
|
|
43
|
+
Missing a screen or a non-happy state → spec verdict FAIL.
|
|
44
|
+
|
|
45
|
+
## Verdict 2 — Visual quality
|
|
46
|
+
|
|
47
|
+
Against the design system and world-class craft:
|
|
48
|
+
|
|
49
|
+
- **Hierarchy** obvious in one glance? **Spacing** on the system's scale?
|
|
50
|
+
- **Consistency** with the system's type/color/tokens? Drift = defect.
|
|
51
|
+
- Is the **memorable-thing** actually visible here?
|
|
52
|
+
- **Non-happy states** real, not stubs (loading/empty/error)?
|
|
53
|
+
- **Interaction quality** — jank, slow transitions, layout shift?
|
|
54
|
+
|
|
55
|
+
### Anti-slop check
|
|
56
|
+
|
|
57
|
+
Flag any AI-default tell: Inter/Roboto where the system says otherwise ·
|
|
58
|
+
purple-blue gradient heroes · three-column rounded-card grids · default Tailwind
|
|
59
|
+
swatches · drop shadows on everything · emoji as icons · generic everything.
|
|
60
|
+
|
|
61
|
+
Rate each finding **Critical** (must fix) · **Important** (fix before merge) ·
|
|
62
|
+
**Minor** (note it).
|
|
63
|
+
|
|
64
|
+
## Output: `design_review_report`
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
spec_compliance: pass # pass | fail
|
|
68
|
+
missing: [<screen/state not built>]
|
|
69
|
+
findings:
|
|
70
|
+
- { severity: Important, screen: settings, issue: "...", fix: "...", shot: "..." }
|
|
71
|
+
verdict: changes_requested # approved | changes_requested
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Rules
|
|
75
|
+
|
|
76
|
+
- **Evidence-based.** Every finding names the screen and, where possible, a
|
|
77
|
+
screenshot. No "looks off" without showing it.
|
|
78
|
+
- **Don't pre-judge.** Surface deviations; don't excuse one because the spec or a
|
|
79
|
+
deadline pushed it.
|
|
80
|
+
- **Findings route back, not to the human.** Critical/Important go to `implement`
|
|
81
|
+
(re-run with this report as `qa_feedback`). The human sees the result at the
|
|
82
|
+
end-of-run acceptance.
|
|
83
|
+
- If it's clean and on-system, say so plainly and approve.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-system
|
|
3
|
+
description: Use when a project has no design direction yet, or must (re)establish its aesthetic — produces the durable design system (aesthetic POV, type, color, space, motion) before any UI is designed.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, WebSearch, Grep, Glob]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [product_context, references?]
|
|
9
|
+
reads: [taste/brand, taste/design-system]
|
|
10
|
+
outputs: [taste/design-system, taste/brand]
|
|
11
|
+
authority: "Author the durable design KB (taste/design-system, taste/brand). High-authority, audited (knowledge write). No source code, no production."
|
|
12
|
+
verify: "Specific, not generic: a named typeface, real type/space scales, named reference products, one memorable-thing. Covers type + color + space + motion. No AI-default tells (see anti-slop)."
|
|
13
|
+
accept:
|
|
14
|
+
when: "Always — the aesthetic direction is foundational and brand-defining."
|
|
15
|
+
timing: inline
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Design System
|
|
19
|
+
|
|
20
|
+
Establish the project's durable visual direction — once — so every UI after it
|
|
21
|
+
is consistent and unmistakably this product's. This is the source of taste the
|
|
22
|
+
`design-ui` skill applies.
|
|
23
|
+
|
|
24
|
+
**Posture:** You are a senior product designer with strong opinions about
|
|
25
|
+
typography, color, space, and motion. You research, then propose ONE coherent
|
|
26
|
+
system and explain why. Opinionated, not dogmatic. Zero tolerance for generic,
|
|
27
|
+
AI-generated-looking interfaces.
|
|
28
|
+
|
|
29
|
+
## The forcing question (do this first)
|
|
30
|
+
|
|
31
|
+
Ask: **"What is the one thing someone should remember after seeing this product
|
|
32
|
+
for the first time?"** One sentence — a feeling, a claim, a posture. Every
|
|
33
|
+
decision below serves it. A system that tries to be memorable for everything is
|
|
34
|
+
memorable for nothing.
|
|
35
|
+
|
|
36
|
+
## Commit to a reference (this is what beats slop)
|
|
37
|
+
|
|
38
|
+
AI defaults to the on-distribution average. Beat it by committing to a specific
|
|
39
|
+
point of view BEFORE specifying anything:
|
|
40
|
+
|
|
41
|
+
1. **Research the space.** What do the 2–3 best products here actually look like?
|
|
42
|
+
2. **Name 2–3 concrete references** to steal direction from (e.g. Linear,
|
|
43
|
+
Things 3, Stripe, Vercel, Bloomberg terminal, Notion). Not to copy — to anchor.
|
|
44
|
+
3. **State the one rule that makes this distinctive** (the type personality, a
|
|
45
|
+
signature color, a density choice, a motion restraint).
|
|
46
|
+
|
|
47
|
+
## Specify the system (specifics, not adjectives)
|
|
48
|
+
|
|
49
|
+
- **Typography** — a named typeface (not Inter/Roboto unless deliberate and
|
|
50
|
+
justified), a type scale with real sizes/weights, line-height rules.
|
|
51
|
+
- **Color** — a real palette with roles (bg, surface, text, accent, states), not
|
|
52
|
+
default framework swatches; state the contrast floor.
|
|
53
|
+
- **Space** — a spacing scale; density posture (tight/airy) tied to the product.
|
|
54
|
+
- **Layout** — grid and composition principles; how hierarchy is created.
|
|
55
|
+
- **Motion** — timing, easing, and where motion is used (and where it is not).
|
|
56
|
+
|
|
57
|
+
## Anti-slop (forbidden defaults — name and avoid)
|
|
58
|
+
|
|
59
|
+
Inter/Roboto by default · purple-blue gradient heroes · three-column
|
|
60
|
+
rounded-card feature grids · drop shadows on everything · default Tailwind
|
|
61
|
+
palette (blue-500…) · emoji as product icons · centered everything · gradients /
|
|
62
|
+
glassmorphism with no reason. If a choice is one of these, it must be a
|
|
63
|
+
deliberate, justified decision — not a default.
|
|
64
|
+
|
|
65
|
+
## Output: the durable KB (structured, with provenance)
|
|
66
|
+
|
|
67
|
+
Write `taste/design-system` and `taste/brand` as structured entries (per the
|
|
68
|
+
knowledge format: terse, chunked, each with `source`/`added`/`approved_by`).
|
|
69
|
+
Record the memorable-thing, the references, the one distinctive rule, and each
|
|
70
|
+
specified token/scale. This is the source `design-ui` reads.
|
|
71
|
+
|
|
72
|
+
## Self-critique before done
|
|
73
|
+
|
|
74
|
+
Look at the system with a designer's eye: does it read as a specific, named
|
|
75
|
+
point of view, or as a generic template? Could you tell it apart from a default
|
|
76
|
+
AI UI? If not, sharpen it.
|
|
77
|
+
|
|
78
|
+
## Done
|
|
79
|
+
|
|
80
|
+
Write the KB, then stop for approval (`accept: inline`). On approval, `design-ui`
|
|
81
|
+
applies this system per feature. Re-run only to evolve the direction.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-ui
|
|
3
|
+
description: Use when a feature has a user interface, to design its screens and flows by applying the project's design system with world-class craft, before stories are drafted.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, Grep, Glob]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [requirement, ui_context]
|
|
9
|
+
reads: [taste/design-system, taste/brand]
|
|
10
|
+
outputs: [specs/<slug>-ui.md]
|
|
11
|
+
updates: [taste/design-system?, taste/brand?]
|
|
12
|
+
authority: "Write to the specs namespace (default docs/specs/) and design assets. No source code, no production."
|
|
13
|
+
verify: "Every screen and flow maps to a requirement; expresses the design system (not generic defaults); passes the designer's-eye self-critique."
|
|
14
|
+
accept:
|
|
15
|
+
when: "Visual direction — the look is foundational; everything downstream builds on it."
|
|
16
|
+
timing: inline
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Design UI
|
|
20
|
+
|
|
21
|
+
Design a feature's UI by APPLYING the project's design system — not inventing a
|
|
22
|
+
one-off look. Consistency is the asset; the system is where world-class comes
|
|
23
|
+
from. This skill expresses it for one feature.
|
|
24
|
+
|
|
25
|
+
**Posture:** Senior product designer. Strong opinions on type, color, space,
|
|
26
|
+
motion. Zero tolerance for generic, AI-generated-looking screens.
|
|
27
|
+
|
|
28
|
+
## Precondition
|
|
29
|
+
|
|
30
|
+
Read `taste/design-system` + `taste/brand`. **If the design system is empty,
|
|
31
|
+
stop and route to `design-system` first.** Do not invent a per-feature
|
|
32
|
+
aesthetic — that is exactly how product consistency dies.
|
|
33
|
+
|
|
34
|
+
Carry the system's **memorable-thing** and **distinctive rule** through every
|
|
35
|
+
screen. If this feature can't express them, say so.
|
|
36
|
+
|
|
37
|
+
## Process
|
|
38
|
+
|
|
39
|
+
1. **Map screens to requirements.** Every screen/state must trace to a
|
|
40
|
+
requirement. Cut the rest (YAGNI).
|
|
41
|
+
2. **Apply the system, don't restate it.** Use its typeface, scale, palette,
|
|
42
|
+
spacing, motion. Reuse existing components/tokens before proposing new ones.
|
|
43
|
+
3. **Specify each screen:** purpose, layout and hierarchy, the system tokens
|
|
44
|
+
used, and the non-happy states — loading, empty, error. These are where UIs
|
|
45
|
+
actually fail.
|
|
46
|
+
4. **Show, don't just tell.** When a layout choice is clearer shown than
|
|
47
|
+
described, produce a mockup/wireframe, not prose.
|
|
48
|
+
|
|
49
|
+
## Anti-slop (forbidden defaults)
|
|
50
|
+
|
|
51
|
+
No Inter/Roboto unless the system says so · no purple-blue gradient heroes · no
|
|
52
|
+
three-column rounded-card grids by reflex · no default Tailwind swatches · no
|
|
53
|
+
drop shadows on everything · no emoji as icons. A default is only allowed as a
|
|
54
|
+
deliberate, justified choice.
|
|
55
|
+
|
|
56
|
+
## Designer's-eye self-critique (mandatory gate before done)
|
|
57
|
+
|
|
58
|
+
Look at the result and ask:
|
|
59
|
+
|
|
60
|
+
- Does this look like it could ship from {the named references}, or like a
|
|
61
|
+
generic AI UI? If the latter, fix it.
|
|
62
|
+
- Is hierarchy obvious in one glance? Is spacing on the scale? Is the
|
|
63
|
+
memorable-thing visible here?
|
|
64
|
+
- Did any anti-slop tell sneak in?
|
|
65
|
+
|
|
66
|
+
Fix until it passes. This is the visual equivalent of `run-tests` — don't claim
|
|
67
|
+
done without running it.
|
|
68
|
+
|
|
69
|
+
## Output: `specs/<slug>-ui.md`
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
# <Feature> — UI Spec
|
|
73
|
+
|
|
74
|
+
## Screens — each: purpose, the requirement it serves, layout + hierarchy.
|
|
75
|
+
|
|
76
|
+
## Flows — how the user moves between screens.
|
|
77
|
+
|
|
78
|
+
## States — loading / empty / error for each screen.
|
|
79
|
+
|
|
80
|
+
## System use — tokens/components used; how the memorable-thing shows up here.
|
|
81
|
+
|
|
82
|
+
## New patterns — anything the system lacked, with rationale (candidate for KB).
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`draft-story`'s `UI Reference` points to this file.
|
|
86
|
+
|
|
87
|
+
## Metabolism
|
|
88
|
+
|
|
89
|
+
A genuinely new, reusable design decision (not feature-specific) folds back into
|
|
90
|
+
`taste/design-system` / `taste/brand` via `updates:` — append with provenance,
|
|
91
|
+
supersede rather than rewrite. Feature-only details stay in the spec.
|
|
92
|
+
|
|
93
|
+
## Done
|
|
94
|
+
|
|
95
|
+
Write the UI spec, pass the self-critique, then stop for visual approval
|
|
96
|
+
(`accept: inline`). On approval the orchestrator wires `draft-story`.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: draft-story
|
|
3
|
+
description: Use when a feature request or requirement must become an implementable spec with acceptance criteria, before any code is written.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, Grep, Glob]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [requirement, context]
|
|
9
|
+
reads: [taste/coding-standards, registry/api, registry/db, front-end-spec?]
|
|
10
|
+
outputs: [docs/stories/<slug>.md]
|
|
11
|
+
authority: "Write one flat story file at docs/stories/<slug>.md. No folders. No source code. No production. No spend."
|
|
12
|
+
verify: "Every requirement maps to at least one acceptance criterion; constraints are copied verbatim; no placeholders (no TBD/TODO/'handle edge cases')."
|
|
13
|
+
accept:
|
|
14
|
+
when: "Always — this output sets the direction the whole build rests on."
|
|
15
|
+
timing: inline
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Draft Story
|
|
19
|
+
|
|
20
|
+
Turn a requirement into one implementable story. This is the upfront direction
|
|
21
|
+
gate: cheap to get right here, expensive to discover wrong after a build.
|
|
22
|
+
|
|
23
|
+
**Core principle:** A story is done when an engineer with no prior context could
|
|
24
|
+
implement it without guessing.
|
|
25
|
+
|
|
26
|
+
## Output
|
|
27
|
+
|
|
28
|
+
Write ONE flat Markdown file: `docs/stories/<slug>.md` — `<slug>` is a kebab
|
|
29
|
+
handle from the title. No folders, no `epic.story` numbering. Produce exactly
|
|
30
|
+
these sections (with frontmatter) and nothing more.
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
---
|
|
34
|
+
origin: <stable short handle of the requirement this story came from>
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# <Story title>
|
|
38
|
+
|
|
39
|
+
## Goal
|
|
40
|
+
|
|
41
|
+
One sentence: what this delivers and for whom.
|
|
42
|
+
|
|
43
|
+
## Constraints
|
|
44
|
+
|
|
45
|
+
Hard rules this story must respect, one per line, copied verbatim — no
|
|
46
|
+
paraphrase (version floors, allowed/forbidden dependencies, naming and copy
|
|
47
|
+
rules, platform requirements). Every section below implicitly includes these.
|
|
48
|
+
|
|
49
|
+
## Acceptance Criteria
|
|
50
|
+
|
|
51
|
+
- AC1: <observable, testable condition>
|
|
52
|
+
- AC2: ...
|
|
53
|
+
Every AC must be checkable by a test or a human looking at a result.
|
|
54
|
+
|
|
55
|
+
## File Map
|
|
56
|
+
|
|
57
|
+
- Create: <exact/path>
|
|
58
|
+
- Modify: <exact/path>
|
|
59
|
+
- Test: <exact/path>
|
|
60
|
+
|
|
61
|
+
## Interfaces
|
|
62
|
+
|
|
63
|
+
- Consumes: <signatures this story relies on from existing code>
|
|
64
|
+
- Produces: <signatures later work will rely on — exact names and types>
|
|
65
|
+
|
|
66
|
+
## UI Reference (only if the story touches UI)
|
|
67
|
+
|
|
68
|
+
Link to the front-end spec / design and name the exact screens or components in
|
|
69
|
+
scope. Omit this section entirely for non-UI stories.
|
|
70
|
+
|
|
71
|
+
## Out of Scope
|
|
72
|
+
|
|
73
|
+
What this story deliberately does NOT do.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Rules
|
|
77
|
+
|
|
78
|
+
- **One story, one coherent deliverable.** If it spans independent subsystems,
|
|
79
|
+
split into separate stories — each its own `docs/stories/<slug>.md`, all
|
|
80
|
+
sharing the same `origin` so the set is queryable as one group.
|
|
81
|
+
- **Flat, no hierarchy.** One file per story under `docs/stories/`. Grouping is
|
|
82
|
+
the `origin` field (a query the AI runs), never a folder. Order comes from
|
|
83
|
+
Interfaces (dependencies), never from a number.
|
|
84
|
+
- **No placeholders.** "Add validation", "handle errors", "TBD" are failures.
|
|
85
|
+
State the actual condition.
|
|
86
|
+
- **Acceptance criteria are observable.** "Works well" is not an AC. "Returns
|
|
87
|
+
400 with `{error:'Email required'}` for empty email" is.
|
|
88
|
+
- **Stay at spec altitude.** Describe what must be true, not how to code it.
|
|
89
|
+
Implementation is the `implement` skill's job.
|
|
90
|
+
- **Constraints are verbatim.** Copy each hard rule exactly from its source — a
|
|
91
|
+
paraphrased limit is a changed limit.
|
|
92
|
+
- **UI Reference only when there is UI.** Omit the section for non-UI stories;
|
|
93
|
+
never leave it as an empty placeholder.
|
|
94
|
+
|
|
95
|
+
## Self-review before finishing
|
|
96
|
+
|
|
97
|
+
1. Does every requirement map to an AC? List any gap, then close it.
|
|
98
|
+
2. Are all hard constraints copied verbatim, not paraphrased?
|
|
99
|
+
3. Any placeholder text? Replace with the real condition.
|
|
100
|
+
4. Do the names in Interfaces match across sections?
|
|
101
|
+
|
|
102
|
+
## Done
|
|
103
|
+
|
|
104
|
+
Write `docs/stories/<slug>.md`. Hand off its path for direction confirmation
|
|
105
|
+
(this skill's `accept` is `inline`): the human approves the direction, or sends
|
|
106
|
+
it back, before `implement` begins.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: implement
|
|
3
|
+
description: Use when implementing a feature or bugfix from a spec with acceptance criteria, before writing implementation code.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Bash]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [story, acceptance_criteria, scope, qa_feedback?]
|
|
9
|
+
reads: [taste/coding-standards, registry/api, registry/db]
|
|
10
|
+
outputs: [code_diff, ac_traceability, test_files]
|
|
11
|
+
authority: "Write src/ and tests/. No production, no deploy, no network spend."
|
|
12
|
+
verify: "run-tests is green AND every acceptance criterion has evidence (file:line + test)."
|
|
13
|
+
accept:
|
|
14
|
+
when: "scope is high-risk"
|
|
15
|
+
timing: deferred
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Implement (Test-Driven)
|
|
19
|
+
|
|
20
|
+
Write the test first. Watch it fail. Write the minimum code to pass.
|
|
21
|
+
|
|
22
|
+
**Core principle:** If you did not watch the test fail, you do not know the test
|
|
23
|
+
tests the right thing.
|
|
24
|
+
|
|
25
|
+
> Rework note: when `qa_feedback` is present, you are re-running this same skill
|
|
26
|
+
> on prior output. Read the feedback, add or fix the failing test that proves
|
|
27
|
+
> it, then continue the cycle. Do not start a separate "fix" process.
|
|
28
|
+
|
|
29
|
+
## The Iron Law
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Wrote code before its test? Delete it. Implement again from the test. "Keep it
|
|
36
|
+
as reference" is testing-after with extra steps.
|
|
37
|
+
|
|
38
|
+
## RED → GREEN → REFACTOR (one acceptance criterion at a time)
|
|
39
|
+
|
|
40
|
+
1. **RED** — Write one test for one behavior. Clear name. Real code, not mocks.
|
|
41
|
+
2. **Verify RED** — Run it. Confirm it fails, and fails because the feature is
|
|
42
|
+
missing (not a typo). A test that passes now tests existing behavior — fix it.
|
|
43
|
+
3. **GREEN** — Write the simplest code that passes. No extra options, no
|
|
44
|
+
abstraction the test does not demand (YAGNI).
|
|
45
|
+
4. **Verify GREEN** — Run it. The test passes, other tests still pass, output is
|
|
46
|
+
clean. Failing? Fix the code, not the test.
|
|
47
|
+
5. **REFACTOR** — Remove duplication, improve names. Stay green. Add no behavior.
|
|
48
|
+
6. **Repeat** for the next acceptance criterion.
|
|
49
|
+
|
|
50
|
+
## Scope
|
|
51
|
+
|
|
52
|
+
- `scope=small` (bugfix, ≤3 files): same cycle, narrow it to the changed behavior.
|
|
53
|
+
- `scope=high-risk` (security, data, money, irreversible): same cycle; this
|
|
54
|
+
skill's `accept` triggers a human sign-off on the result.
|
|
55
|
+
|
|
56
|
+
## AC traceability (required output)
|
|
57
|
+
|
|
58
|
+
For every acceptance criterion, record evidence — the orchestrator and
|
|
59
|
+
`run-tests` consume this:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
AC1 -> code: src/auth/login.ts:42-58 | test: tests/auth/login.test.ts:'rejects empty email'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
No evidence = the criterion is not done. Placeholders (`TODO`, empty paths) are
|
|
66
|
+
not evidence.
|
|
67
|
+
|
|
68
|
+
## Red flags — stop and restart the cycle
|
|
69
|
+
|
|
70
|
+
- Code written before its test
|
|
71
|
+
- A test that passed the first time you ran it
|
|
72
|
+
- You cannot explain why the test failed
|
|
73
|
+
- "I will add tests after" / "too simple to test" / "just this once"
|
|
74
|
+
|
|
75
|
+
## Done
|
|
76
|
+
|
|
77
|
+
`run-tests` is green, every AC has evidence. Output `code_diff`,
|
|
78
|
+
`ac_traceability`, and `test_files`.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: orchestrate
|
|
3
|
+
description: Use when a goal must be delivered end-to-end by composing skills, with the human approving direction at the start and the result at the end.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Task]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [intent, constraints?]
|
|
9
|
+
reads: [skill-registry, taste/*]
|
|
10
|
+
outputs: [accepted_deliverable, run_ledger]
|
|
11
|
+
authority: "Dispatch leaf skills, each within its own authority. Do not directly touch source, production, or spend — leaf skills do that, gated. Enforce every accept gate."
|
|
12
|
+
verify: "Every dispatched skill's verify passed; final review is clean; all inline accepts were obtained."
|
|
13
|
+
accept:
|
|
14
|
+
when: "The final deliverable — once, batched."
|
|
15
|
+
timing: inline
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Orchestrate
|
|
19
|
+
|
|
20
|
+
The root skill. The human binds intent here; this skill composes leaf skills to
|
|
21
|
+
fulfill it. It holds the only warm context. Leaf skills run as fresh, isolated
|
|
22
|
+
dispatches and keep none.
|
|
23
|
+
|
|
24
|
+
**Core principle:** Organize by capability, not by role. The human sets
|
|
25
|
+
direction at the start and accepts the result at the end. In between, the run is
|
|
26
|
+
lights-out: objective `verify` gates each step, not a human.
|
|
27
|
+
|
|
28
|
+
**This skill is the designated root.** It does not orchestrate itself. There is
|
|
29
|
+
no step above intent.
|
|
30
|
+
|
|
31
|
+
## The loop
|
|
32
|
+
|
|
33
|
+
1. **Bind intent.** Read the human's goal and constraints. This is the only
|
|
34
|
+
place intent enters.
|
|
35
|
+
2. **Select.** Read the skill registry. Pick skills by their `description`
|
|
36
|
+
(when-to-use). Load a skill's full `contract` only when it is a candidate —
|
|
37
|
+
never load every contract at once.
|
|
38
|
+
3. **Wire (emergent, not hardcoded).** Build the path by matching one skill's
|
|
39
|
+
`outputs` to the next skill's `inputs`. Skills do not know each other; only
|
|
40
|
+
you do. Do not assume a fixed pipeline — wire what this intent needs.
|
|
41
|
+
4. **Dispatch one step.** Hand the skill exactly the `inputs` it declares, as
|
|
42
|
+
files. Run it as a fresh subagent for isolation. Choose the cheapest model
|
|
43
|
+
that can do the step.
|
|
44
|
+
5. **Verify (gate).** Run the skill's `verify`. If it fails, re-dispatch the
|
|
45
|
+
**same** skill with the failure as feedback (see Rework). If it passes,
|
|
46
|
+
continue.
|
|
47
|
+
6. **Accept (gate).** Apply the rule below. Then continue — do not pause to ask
|
|
48
|
+
"should I keep going?" mid-run.
|
|
49
|
+
7. **Repeat** 3–6 until the intent is fulfilled.
|
|
50
|
+
8. **Final acceptance.** Present the batched deferred accepts and a final review
|
|
51
|
+
to the human, once. Apply corrections (see Metabolism), then deliver.
|
|
52
|
+
|
|
53
|
+
## Accept gate
|
|
54
|
+
|
|
55
|
+
| Skill's `accept.timing` | Skill's `authority` | Action |
|
|
56
|
+
| ----------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
57
|
+
| `inline` | any | Stop now. Get human sign-off before continuing. |
|
|
58
|
+
| `deferred` | reversible / low blast | Record it for the final acceptance batch. |
|
|
59
|
+
| `deferred` | **irreversible / high blast** (spend, send, deploy, delete, sign) | **Override to inline.** Stop and get sign-off now. A deferred review cannot un-send an email. |
|
|
60
|
+
| `never` | any | No human. Continue. |
|
|
61
|
+
|
|
62
|
+
You are the teeth. The fields are only data; you enforce them.
|
|
63
|
+
|
|
64
|
+
## Rework is a loop, not a skill
|
|
65
|
+
|
|
66
|
+
A failed `verify` or a `changes_requested` review is not a separate "fix" step.
|
|
67
|
+
Re-dispatch the same skill with the feedback as an input (e.g. `qa_feedback`).
|
|
68
|
+
Same capability, new input.
|
|
69
|
+
|
|
70
|
+
## Metabolism
|
|
71
|
+
|
|
72
|
+
When the human corrects something at final acceptance ("not on-brand", "wrong
|
|
73
|
+
tone"), write the correction back into the relevant `taste/*` knowledge base, so
|
|
74
|
+
the next run reads the improved taste. The run teaches the organization.
|
|
75
|
+
|
|
76
|
+
## Context discipline (stay lean)
|
|
77
|
+
|
|
78
|
+
- **Files, not paste.** Move artifacts between steps as files. Never paste a
|
|
79
|
+
step's full output into your context — it would be re-read every later turn.
|
|
80
|
+
- **Ledger.** Append each finished step to a progress ledger file
|
|
81
|
+
(`.orchestrate/ledger.md`). After a compaction, trust the ledger and `git
|
|
82
|
+
log`, not memory. A step recorded done is done — do not re-dispatch it.
|
|
83
|
+
- **Cheapest model per step.** Mechanical step → cheap model. Judgment step →
|
|
84
|
+
capable model. State the model explicitly on every dispatch.
|
|
85
|
+
- **Keep your own context small.** You coordinate; the leaves do the heavy work.
|
|
86
|
+
|
|
87
|
+
## Red flags — stop
|
|
88
|
+
|
|
89
|
+
- Pausing to ask the human mid-run when nothing is `inline` or irreversible
|
|
90
|
+
- Running an irreversible-authority skill on a `deferred` accept
|
|
91
|
+
- Hardcoding a fixed skill order instead of wiring outputs→inputs
|
|
92
|
+
- Pasting a step's full output into your context instead of handing a file
|
|
93
|
+
- Re-dispatching a step the ledger already marks done
|
|
94
|
+
- Marking the run complete without every step's `verify` evidence
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: research
|
|
3
|
+
description: Use when a planning or design decision needs external facts — market, competitor, feasibility, or a library/tech choice — before committing.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [Read, WebSearch, WebFetch]
|
|
6
|
+
metadata:
|
|
7
|
+
contract:
|
|
8
|
+
inputs: [question, scope]
|
|
9
|
+
reads: []
|
|
10
|
+
outputs: [research/<slug>.md]
|
|
11
|
+
authority: "Read-only, plus external/web reads. No code, no production, no spend."
|
|
12
|
+
verify: "Every claim carries a source; the recommendation follows from the findings, not from prior belief."
|
|
13
|
+
accept:
|
|
14
|
+
when: "never — informational; it feeds a decision, it does not make one."
|
|
15
|
+
timing: deferred
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Research
|
|
19
|
+
|
|
20
|
+
Answer one decision-relevant question with sourced facts, so a downstream
|
|
21
|
+
decision rests on evidence instead of assumption.
|
|
22
|
+
|
|
23
|
+
**Core principle:** Evidence before recommendation. A claim without a source is
|
|
24
|
+
an opinion — label it as one or drop it.
|
|
25
|
+
|
|
26
|
+
## Process
|
|
27
|
+
|
|
28
|
+
1. **Sharpen the question.** State exactly what decision this informs and what
|
|
29
|
+
would change the answer. If the question is vague, narrow it first.
|
|
30
|
+
2. **Gather from several independent sources.** One source is a lead, not a fact.
|
|
31
|
+
3. **Verify each claim.** Cross-check; keep the source for every claim. Note
|
|
32
|
+
where sources disagree.
|
|
33
|
+
4. **Recommend.** Give the answer the findings support, with the trade-offs. If
|
|
34
|
+
the evidence is thin, say so — "insufficient evidence" is a valid result.
|
|
35
|
+
|
|
36
|
+
## Output: `research/<slug>.md`
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
# <Question>
|
|
40
|
+
|
|
41
|
+
## Answer — the recommendation in one or two lines.
|
|
42
|
+
|
|
43
|
+
## Findings
|
|
44
|
+
|
|
45
|
+
- <claim> — source: <url/ref> — confidence: high/med/low
|
|
46
|
+
|
|
47
|
+
## Disagreements / gaps — where sources conflict or evidence is thin.
|
|
48
|
+
|
|
49
|
+
## So what — how this changes the downstream decision.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
- **No unsourced claims.** Each finding names its source.
|
|
55
|
+
- **Recommendation must follow from findings**, not from what you assumed going
|
|
56
|
+
in. If findings contradict the assumption, say that.
|
|
57
|
+
- **Stay scoped.** Answer the question asked; don't expand into a survey.
|
|
58
|
+
|
|
59
|
+
## Done
|
|
60
|
+
|
|
61
|
+
Write the brief. It feeds back to `brainstorm` / `design-*` (no human gate —
|
|
62
|
+
`accept: never`). Durable facts it surfaces (e.g. a chosen library) become an
|
|
63
|
+
architecture decision via `design-architecture`, not a direct write to knowledge.
|