@erclx/canon 5.38.0 → 5.40.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/README.md +5 -5
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/SKILL.md +12 -9
- package/claude/skills/auto-ship/SKILL.md +43 -23
- package/claude/skills/backlog-triage/SKILL.md +62 -53
- package/claude/skills/backlog-triage/references/apply.md +69 -0
- package/claude/skills/build-in-slices/SKILL.md +8 -4
- package/claude/skills/canon-cli/SKILL.md +5 -1
- package/claude/skills/canon-feedback/SKILL.md +18 -8
- package/claude/skills/canon-feedback-triage/SKILL.md +10 -3
- package/claude/skills/canvas-board/SKILL.md +37 -18
- package/claude/skills/ci-workflow/SKILL.md +5 -4
- package/claude/skills/code-craft/SKILL.md +10 -6
- package/claude/skills/codebase-layout/SKILL.md +3 -5
- package/claude/skills/context-fold/REQUIREMENT.md +4 -4
- package/claude/skills/context-fold/SKILL.md +42 -23
- package/claude/skills/context-fold/references/context-refresh.md +4 -3
- package/claude/skills/context-fold/references/context.md +79 -64
- package/claude/skills/create-rule/SKILL.md +7 -3
- package/claude/skills/create-skill/SKILL.md +27 -7
- package/claude/skills/create-skill/references/skill-reference.md +41 -17
- package/claude/skills/decision-escalate/SKILL.md +8 -5
- package/claude/skills/deploy-app/SKILL.md +1 -1
- package/claude/skills/deprecation-migration/SKILL.md +12 -4
- package/claude/skills/design-taste/SKILL.md +17 -11
- package/claude/skills/docs-sync/REQUIREMENT.md +1 -0
- package/claude/skills/docs-sync/SKILL.md +17 -6
- package/claude/skills/docs-sync/references/docs.md +54 -21
- package/claude/skills/docs-sync/references/readme.md +32 -8
- package/claude/skills/document-health/SKILL.md +3 -4
- package/claude/skills/draft-and-pick/SKILL.md +73 -47
- package/claude/skills/draft-doc/SKILL.md +9 -4
- package/claude/skills/draft-doc/references/context.md +4 -4
- package/claude/skills/draft-doc/references/docs.md +1 -0
- package/claude/skills/draft-doc/references/wiki.md +3 -2
- package/claude/skills/draft-figure/SKILL.md +9 -7
- package/claude/skills/draft-identity/SKILL.md +24 -52
- package/claude/skills/draft-identity/references/card-route.md +46 -0
- package/claude/skills/draft-ready/SKILL.md +19 -7
- package/claude/skills/draft-screencast/SKILL.md +6 -112
- package/claude/skills/draft-screencast/references/beats-template.md +119 -0
- package/claude/skills/draft-slides/SKILL.md +9 -7
- package/claude/skills/draft-slides/references/deck.md +183 -0
- package/claude/skills/git-branch/SKILL.md +3 -3
- package/claude/skills/git-commit/SKILL.md +5 -3
- package/claude/skills/git-followup/SKILL.md +16 -9
- package/claude/skills/git-issue/SKILL.md +6 -5
- package/claude/skills/git-pr/SKILL.md +56 -44
- package/claude/skills/git-pr/references/evidence.md +2 -2
- package/claude/skills/git-pr/references/final-command.md +1 -1
- package/claude/skills/git-pr/references/labels.md +1 -1
- package/claude/skills/git-pr/references/publish.md +1 -1
- package/claude/skills/git-ship/SKILL.md +43 -34
- package/claude/skills/git-ship/references/ci-watch.md +31 -0
- package/claude/skills/git-split/SKILL.md +28 -100
- package/claude/skills/git-split/references/independent.md +40 -0
- package/claude/skills/git-split/references/stacked.md +73 -0
- package/claude/skills/git-stage/SKILL.md +9 -7
- package/claude/skills/git-worktree/SKILL.md +27 -49
- package/claude/skills/git-worktree/references/cleanup.md +55 -0
- package/claude/skills/markdown-craft/SKILL.md +2 -2
- package/claude/skills/markdown-craft/references/markdown.md +82 -53
- package/claude/skills/plan-feature/SKILL.md +52 -46
- package/claude/skills/plan-feature/references/batches.md +46 -0
- package/claude/skills/plan-groundwork/SKILL.md +60 -74
- package/claude/skills/plan-groundwork/references/output.md +48 -0
- package/claude/skills/plan-intake/SKILL.md +28 -21
- package/claude/skills/plan-intake-answer/SKILL.md +14 -13
- package/claude/skills/read-frames/SKILL.md +2 -0
- package/claude/skills/record-screencast/SKILL.md +31 -11
- package/claude/skills/review-address/SKILL.md +76 -158
- package/claude/skills/review-address/references/rebase-only.md +34 -0
- package/claude/skills/review-craft/SKILL.md +27 -11
- package/claude/skills/review-pr/SKILL.md +91 -40
- package/claude/skills/review-ui/SKILL.md +63 -37
- package/claude/skills/review-ui/references/hosted-preview.md +30 -0
- package/claude/skills/role-orchestrator/SKILL.md +105 -74
- package/claude/skills/role-orchestrator/references/orchestrator-filing.md +26 -0
- package/claude/skills/role-orchestrator/references/orchestrator-handback.md +1 -1
- package/claude/skills/role-planner/SKILL.md +66 -64
- package/claude/skills/role-reviewer/SKILL.md +57 -46
- package/claude/skills/role-worker/SKILL.md +68 -63
- package/claude/skills/search-craft/SKILL.md +7 -5
- package/claude/skills/session-compact/SKILL.md +16 -11
- package/claude/skills/session-map/SKILL.md +31 -10
- package/claude/skills/session-relay/SKILL.md +32 -65
- package/claude/skills/session-resume/SKILL.md +18 -13
- package/claude/skills/session-worktree/SKILL.md +70 -42
- package/claude/skills/systematic-debugging/SKILL.md +6 -1
- package/claude/skills/target-check/SKILL.md +13 -6
- package/claude/skills/target-setup/SKILL.md +39 -27
- package/claude/skills/task-board/SKILL.md +68 -60
- package/claude/skills/task-board/references/board.md +1 -1
- package/claude/skills/task-board/references/create-report.md +36 -0
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/task-complete/SKILL.md +20 -18
- package/claude/skills/teach-workspace/SKILL.md +61 -33
- package/claude/skills/test-craft/SKILL.md +2 -1
- package/claude/skills/test-first/SKILL.md +15 -9
- package/claude/skills/ui-checklist/SKILL.md +18 -16
- package/claude/skills/ux-audit/SKILL.md +9 -10
- package/claude/skills/ux-measure/SKILL.md +23 -19
- package/claude/skills/video-craft/SKILL.md +15 -7
- package/claude/skills/write-human/SKILL.md +9 -1
- package/claude/skills/youtube-transcripts/SKILL.md +2 -1
- package/docs/agents/audits.md +61 -60
- package/docs/agents/context-audit.md +40 -58
- package/docs/agents/index.md +11 -61
- package/docs/agents/indexes.md +25 -29
- package/docs/agents/install-and-sync.md +125 -235
- package/docs/agents/markdown-audit.md +54 -96
- package/docs/agents/migrate.md +41 -16
- package/docs/agents/output-shape.md +60 -45
- package/docs/agents/overview.md +36 -12
- package/docs/agents/records.md +37 -79
- package/docs/agents/sessions-transfer.md +26 -70
- package/docs/agents/targets.md +25 -77
- package/docs/target/index.md +0 -1
- package/docs/target/migrations.md +57 -66
- package/docs/target/projects.md +36 -78
- package/docs/target/scenarios.md +9 -19
- package/docs/target/sync.md +27 -68
- package/docs/workflow/ai-workflow.md +22 -68
- package/docs/workflow/operating-model.md +32 -186
- package/docs/workflow/parallel-features.md +29 -66
- package/docs/workflow/skill-map-on-request.md +22 -24
- package/docs/workflow/skill-map.md +72 -76
- package/docs/workflow/visual-design-workflow.md +25 -118
- package/docs/workflow/zshrc-aliases.md +18 -37
- package/package.json +1 -1
- package/src/canvas/client/inspector/fields.css +4 -0
- package/src/canvas/index.html +6 -0
- package/src/claude/skills-reach.ts +2 -2
- package/src/cli/ui.ts +3 -1
- package/src/commands/canvas.ts +23 -0
- package/src/commands/capture.ts +14 -0
- package/src/commands/claude.ts +14 -1
- package/src/commands/context.ts +106 -7
- package/src/commands/demo.ts +22 -0
- package/src/commands/deps.ts +6 -0
- package/src/commands/driver.ts +28 -2
- package/src/commands/gov.ts +52 -18
- package/src/commands/hooks.ts +63 -0
- package/src/commands/intake.ts +17 -0
- package/src/commands/labels.ts +38 -5
- package/src/commands/markdown.ts +169 -32
- package/src/commands/pr.ts +160 -43
- package/src/commands/records.ts +8 -0
- package/src/commands/secrets.ts +6 -0
- package/src/commands/sessions.ts +8 -0
- package/src/commands/tasks.ts +52 -0
- package/src/commands/teach.ts +13 -0
- package/src/commands/upstream.ts +25 -1
- package/src/commands/worktrees.ts +5 -0
- package/src/context/audit.ts +274 -5
- package/src/context/classify/prompts.ts +1 -1
- package/src/context/folders.ts +1 -1
- package/src/context/gate.ts +23 -7
- package/src/context/shape-gated.ts +30 -0
- package/src/counts/scan.ts +1 -1
- package/src/design/components.ts +1 -1
- package/src/design/document.ts +1 -1
- package/src/design/tokens.ts +1 -1
- package/src/gate/boundaries.ts +4 -1
- package/src/gate/measures.ts +16 -191
- package/src/gate/stages.ts +14 -30
- package/src/git/env.ts +6 -0
- package/src/hooks/reply-links.ts +110 -0
- package/src/markdown/density.ts +258 -0
- package/src/markdown/gate.ts +57 -18
- package/src/markdown/reference-shape.ts +103 -0
- package/src/markdown/scope.ts +162 -0
- package/src/markdown/structure.ts +9 -59
- package/src/pr/lift.ts +153 -19
- package/src/pr/painted.ts +87 -0
- package/src/roots/record.ts +18 -1
- package/src/sandbox/census.ts +1 -1
- package/src/sandbox/headless/run.ts +3 -2
- package/src/sandbox/headless/watch.ts +3 -4
- package/src/shipped/references.ts +1 -1
- package/src/slides/convert/master.ts +3 -0
- package/src/sync/format.ts +46 -0
- package/src/sync/stamp.ts +6 -0
- package/tooling/astro/reference.md +2 -2
- package/tooling/base/reference.md +1 -1
- package/tooling/claude/seeds/.claude/hooks/reply-links.sh +72 -0
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +22 -1
- package/tooling/claude/seeds/.claude/settings.json +4 -0
- package/tooling/go/reference.md +1 -1
- package/tooling/nextjs/reference.md +1 -1
- package/tooling/php/reference.md +1 -1
- package/tooling/python/reference.md +1 -1
- package/tooling/vite-react/reference.md +1 -1
- package/tooling/web/reference.md +1 -1
- package/docs/agents/canvas.md +0 -86
- package/docs/agents/capture.md +0 -65
- package/docs/agents/census.md +0 -23
- package/docs/agents/commands.md +0 -154
- package/docs/agents/comments.md +0 -34
- package/docs/agents/context-audit-checks.md +0 -90
- package/docs/agents/context-classify.md +0 -101
- package/docs/agents/counts.md +0 -74
- package/docs/agents/demo.md +0 -140
- package/docs/agents/docs.md +0 -27
- package/docs/agents/drift-surfaces.md +0 -201
- package/docs/agents/driver.md +0 -103
- package/docs/agents/gate.md +0 -90
- package/docs/agents/gov-detect.md +0 -47
- package/docs/agents/hooks.md +0 -58
- package/docs/agents/intake.md +0 -81
- package/docs/agents/key-changes.md +0 -116
- package/docs/agents/label-coverage.md +0 -86
- package/docs/agents/markdown-audit-weight.md +0 -81
- package/docs/agents/pr-evidence-layout.md +0 -70
- package/docs/agents/pr-evidence.md +0 -273
- package/docs/agents/pr-frames.md +0 -131
- package/docs/agents/pr-lift.md +0 -132
- package/docs/agents/pr-local.md +0 -111
- package/docs/agents/pr-preview.md +0 -155
- package/docs/agents/pr-reads.md +0 -111
- package/docs/agents/pr-tick.md +0 -72
- package/docs/agents/records-push.md +0 -61
- package/docs/agents/records-stale.md +0 -40
- package/docs/agents/records-validate.md +0 -57
- package/docs/agents/restated.md +0 -83
- package/docs/agents/routing.md +0 -61
- package/docs/agents/rule-citations.md +0 -90
- package/docs/agents/sandbox.md +0 -126
- package/docs/agents/scripting.md +0 -142
- package/docs/agents/sessions.md +0 -128
- package/docs/agents/skills-audit.md +0 -120
- package/docs/agents/skills-reach.md +0 -64
- package/docs/agents/slides.md +0 -176
- package/docs/agents/state-scoped-risk.md +0 -105
- package/docs/agents/superseded.md +0 -85
- package/docs/agents/tasks-archive.md +0 -83
- package/docs/agents/tasks-plans.md +0 -152
- package/docs/agents/tasks-validate.md +0 -133
- package/docs/agents/tasks.md +0 -123
- package/docs/agents/teach-authoring.md +0 -118
- package/docs/agents/teach.md +0 -157
- package/docs/agents/test-order.md +0 -58
- package/docs/agents/upstream.md +0 -94
- package/docs/agents/worktrees.md +0 -118
- package/docs/target/standards-moved.md +0 -34
- package/src/markdown/growth.ts +0 -43
|
@@ -6,93 +6,56 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Parallel features
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Run independent features in parallel, one git worktree and one Claude Code session per feature.
|
|
10
10
|
|
|
11
11
|
## One worktree per feature
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- For full autonomy per worktree, invoke `canon:auto-ship` instead of the manual chain. Approve the plan, walk away, come back to a pull request the chain marked as a draft and then read the flag back on. The mark says the work has had no review yet, and it holds no window, since readying a pull request to merge lifts it directly, an act reserved to the operator or to the controlling session that closed the review.
|
|
13
|
+
- Invoke `canon:plan-feature` in each session. Plans land at `.canon/plans/feature-<slug>.md` at the main root.
|
|
14
|
+
- `ui-checklist` writes a per-branch handoff at `tmp/handoff/ui-checklist/<slug>.md`, which `git-pr` posts and removes. The slug is the branch name minus its leading type segment.
|
|
15
|
+
- Ship each worktree with `canon:git-ship`, or `canon:auto-ship` for a draft pull request
|
|
16
|
+
- Only the operator or the controlling session readies a draft
|
|
18
17
|
|
|
19
18
|
## A coordinated flow
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
Assert the orchestrator role in one warm session with `canon:role-orchestrator`. It plans each feature or dispatches a cold planner under `canon:role-planner`, and dispatches a reviewer under `canon:role-reviewer` for each PR. The human launches workers and merges. See [operating model](operating-model.md).
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
See [operating model](operating-model.md) for what caps the worker tracks under it and what conflict holds one behind another. An operator caps a session's workers by saying so, and that cap binds for the session rather than standing as a number in a file.
|
|
28
|
-
|
|
29
|
-
Before a handoff, the orchestrator checks the plan against the tree rather than reading it: grep each construct it names and count the sites, confirm every phase label it cites is still open, and open each file it describes. A plan goes stale from whatever merged after it was written, and reading cannot catch that.
|
|
30
|
-
|
|
31
|
-
A constraint naming a track in flight carries the same problem past the handoff, so the block opens with the commit it was measured against. A worker re-tests before honoring one, fetching and then logging that commit against `origin/main` over the paths the constraint names, and any merge there means the track landed and the constraint is dead. An unstamped block reads as unverified rather than as live, which covers every plan written before the rule.
|
|
22
|
+
- Run one orchestrator at a time
|
|
23
|
+
- Execution order comes off `.canon/tasks/priority.md`
|
|
24
|
+
- Before a handoff, grep each construct the plan names and open each file it describes
|
|
25
|
+
- A constraint naming a track in flight opens with the commit it was measured against. A merge of that track into `origin/main` over the named paths kills the constraint.
|
|
32
26
|
|
|
33
27
|
## Records at the main root
|
|
34
28
|
|
|
35
|
-
`.canon/plans/` and `.canon/review/`
|
|
36
|
-
|
|
37
|
-
The plan's shape is fixed by `claude/skills/plan-feature/references/plan.md`: the section list, the filename, and the contract its questions keep. Its lifecycle, from the session that writes it to the archive, is `claude/skills/plan-feature/references/plan-lifecycle.md`. Every question carries a `- Suggested:` line and an empty `- Answer:` slot, and a blank answer accepts the suggestion at execution time. That default is what makes a plan decision-ready in one pass, and it is the opposite of the contract an intake folder keeps, where an empty slot means nobody reached the item.
|
|
38
|
-
|
|
39
|
-
An execution that picks other than the suggestion rewrites the `- Suggested:` line as `overridden at execution to <pick>,` followed by the measurement that moved it, and leaves the slot blank. That fixed phrase is how a reader of the archived plan tells an override from a suggestion the execution accepted, since an authored suggestion often carries a number of its own. The same deviation takes one line in the open task's `## Findings`, which is the register that survives the plan being archived. A deviation from a question somebody already answered goes back to whoever answered it instead, since a filled slot is a decision already made.
|
|
40
|
-
|
|
41
|
-
`canon records validate plans` reports where a plan and that standard disagree: a filename that is not `feature-<slug>.md`, a missing required section, a files-to-touch entry naming no file, and a question carrying a suggestion with no answer slot. The same verb takes `groundwork`, `intake`, and `teach`, which are governed the same way and were unreachable for the same reason. Nothing fires it automatically, because all four folders are gitignored and every check the repository runs reads changed files from git. It reports and never writes, since the folders are per-machine scratch with no history to recover a wrong repair from.
|
|
42
|
-
|
|
43
|
-
`canon records push` carries these folders off the disk they live on, and `canon records pull` brings them back. Every top-level entry under `.canon/` is backed except `tmp`, `ordinal-locks`, and `.records.git`, so a folder added later enters the payload on its own rather than waiting on a name written into a list. Push names each folder it carries the first time it sees it, which is what keeps a stray folder visible instead of silently entering the payload. It refuses the whole push, naming each path, when a new or changed file is over 25 MB or carries a credential `canon secrets scan` would report. The history lives in a second git directory at `.canon/.records.git` with `.canon/` as its work tree, so every path a task file cites stays where it is.
|
|
44
|
-
|
|
45
|
-
A person points it at a private repository once and both verbs refuse until they have, and `push` refuses when that origin is also a remote of the project, since the payload is the task board and the groundwork trails. `.husky/post-merge` runs the push after its archive loop, on every merge rather than only on one that closed a task. See [records push](../agents/records-push.md) for the refusal table.
|
|
46
|
-
|
|
47
|
-
`canon records size` reports what each of these folders holds, heaviest first, along with `.canon/tmp`. Each row carries the file count, the bytes, how many files were written in the last 7 and 30 days, and the dates of the least and most recently written one. Nothing fails on a number, because a record folder has no correct size. What the verb replaces is a reading somebody had to remember to take: a pen went from 44 entries to 236 between two counts made by hand a fortnight apart, and nothing reported the rate in between.
|
|
48
|
-
|
|
49
|
-
`canon records prune-tmp` reports scratch under `.canon/tmp` nobody has touched inside an age window, and deletes it only with `--write`. A `tmp/handoff/` folder and the live `tmp/pr/poll/` baseline are never offered, since a reader deletes a handoff once it is read and a poll baseline is state a session still needs. See [records](../agents/records.md) for the candidate shapes and the exit codes.
|
|
29
|
+
`.canon/plans/` and `.canon/review/` resolve at the main worktree root. File-editing tools refuse a main-root path from a worktree, so write a whole file through the shell and change an existing one through a `canon` verb.
|
|
50
30
|
|
|
51
|
-
`
|
|
31
|
+
`claude/skills/plan-feature/references/plan.md` fixes the plan's shape and `claude/skills/plan-feature/references/plan-lifecycle.md` its lifecycle. A blank `- Answer:` slot accepts the `- Suggested:` line.
|
|
52
32
|
|
|
53
|
-
|
|
33
|
+
- To pick otherwise, rewrite that line as `overridden at execution to <pick>,` plus the measurement, and add one line to the open task's `## Findings`
|
|
54
34
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
`canon
|
|
35
|
+
- `canon records validate plans` reports a plan breaking its standard, and takes `groundwork`, `intake`, and `teach`
|
|
36
|
+
- `canon records push` and `canon records pull` carry `.canon/` to and from a private repository. See [records](../agents/records.md).
|
|
37
|
+
- `canon records size`, `canon records prune-tmp`, and `canon records stale canonical` report folder size, idle scratch, and releases since the requirements review
|
|
38
|
+
- `canon tasks archive` moves a shipped plan to `.canon/plans/archive/` and retargets the task's `Plan:` line
|
|
58
39
|
|
|
59
40
|
## Shipping a fan-out
|
|
60
41
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
**Rebase profile.** Work confined to one domain directory, such as a new skill under its own folder or independent fixes in different subtrees of `scripts/`, rarely touches a sibling's files. A shared file does not hold a branch back, per the conflict test in [operating model](operating-model.md). These paths are shared hotspots, the ones a second branch should expect to rebase over and resolve:
|
|
64
|
-
|
|
65
|
-
- `CLAUDE.md`, since cross-domain behavior lives there
|
|
66
|
-
- `tooling/**`, since stack manifests, golden configs, and seeds are tightly coupled
|
|
67
|
-
- `canon/context/context-model/overview.md` and `docs/agents/`, which several domains cross-reference
|
|
68
|
-
- Any folder's `index.md`, since `canon indexes regen` rewrites it and two worktrees adding files to a regen-covered folder race on it. Resolve its conflict by running the regen over the rebased tree rather than by hand.
|
|
69
|
-
|
|
70
|
-
Land any in-flight edit to a hotspot on `main` before fanning out where you can. A worktree on a stale `CLAUDE.md` costs more to rebase than it saved.
|
|
71
|
-
|
|
72
|
-
**Merge order.** Merge the branch with the smallest hotspot footprint first. A branch touching `CLAUDE.md`, a context entry, or a regenerated `index.md` merges last, and its siblings rebase on the new `main` once it lands.
|
|
73
|
-
|
|
74
|
-
**Rebase before the next merge.** After one squash-merge, each sibling is behind `main` and may carry a stale copy of a shared file. The branch merging second resolves, in the session that built it and after the first lands, never against a sibling still building: run `/review-address` there, which trial-merges against `origin/main` and rebases a branch that no longer merges or whose files `main` changed. Push, then merge. Never force-merge a stale branch.
|
|
42
|
+
Merge order matters only when two branches touch the same file. Expect to rebase over `CLAUDE.md`, `tooling/**`, `canon/context/context-model.md`, `docs/agents/`, and any folder's `index.md`. Resolve an `index.md` conflict with `canon indexes regen` over the rebased tree.
|
|
75
43
|
|
|
76
|
-
**
|
|
77
|
-
|
|
78
|
-
|
|
44
|
+
- **Merge order.** Merge the smallest hotspot footprint first, and a branch touching `CLAUDE.md` or a context entry last.
|
|
45
|
+
- **Rebase.** The branch merging second runs `/review-address`, which trial-merges against `origin/main` and rebases. Push, then merge.
|
|
46
|
+
- **Clean up.** Run `/git-worktree cleanup` to remove merged worktrees. To start fresh, `ExitWorktree(action: "keep")`, then `/session-worktree <new-name>`.
|
|
47
|
+
- **Wrong call.** If a rebase needs a decision the tree does not carry, land one branch before starting the next.
|
|
79
48
|
|
|
80
49
|
## The task board
|
|
81
50
|
|
|
82
|
-
`.canon/tasks/` is gitignored and resolves at the main worktree root,
|
|
83
|
-
|
|
84
|
-
A hand-maintained `priority.md` sits beside the index carrying execution order and what each task is waiting on, which the alphabetical index cannot express.
|
|
85
|
-
|
|
86
|
-
`canon tasks validate` reads a row against its own table before it reads anything the row claims. A blank or prose line closes the table above it, so a row stranded there is checked against the line behind it rather than parsed as a continuation, and a row that clears that test still has its cell count checked against its header. A `## Needs a plan` row that states its own position, searched for `<ordinal> here` or the bare word `last` anywhere in the cell rather than at its start, is checked against where it actually sits, which is what catches a gap, a duplicate, and a sequence starting somewhere other than first alike.
|
|
87
|
-
|
|
88
|
-
Past that shape, it checks what a surviving row claims against what the tree holds: every plan pointer resolves, every task file is named by a board row or a backlog line and never by both, no task sits in two groups, and every row marked ready names its files. One check across both surfaces is what lets a task move between the board and the backlog without the move reading as a dropped file. Paths two ready rows share go to a `shared` array moving no exit code, the candidate list the orchestrator's conflict check reads. Blockers re-takes what a parked row waits on, reporting one whose cited task reached the trunk and one whose cited file nothing running still holds. A cited task settles the row by being archived, or by closing every outcome and naming a pull request the trunk carries, since the checkbox alone is marked while the branch is still in review. Both halves read a citation out of the blocker cell, so a row citing neither is reported as untested rather than counted clean, and so is a cited task the trunk could not answer for. It reports and never writes, because a row is the orchestrator's claim and a validator repairing one would assert the claim it exists to test. Nothing fires it automatically, since the board is gitignored per-machine scratch with no shared moment to hang a hook on, so the orchestrator's sweep calls it at the point the readiness claim is made and follows it with the parked re-test.
|
|
89
|
-
|
|
90
|
-
`canon:task-board` creates the file, holding the filename convention and the frontmatter contract so a malformed write cannot break the index for every sibling, and declines a task decided against. `canon:task-complete` marks a shipped task's outcomes and moves one the merge hook left to `.canon/tasks/archive/`. Creation is where the origin invariant is enforced: every task names a plan, a groundwork folder, an intake folder, or an issue, since a task with no origin is either lost context or work nobody decided to do.
|
|
51
|
+
`.canon/tasks/` is gitignored and resolves at the main worktree root, one file per task. A hook generates `index.md`, and `priority.md` carries execution order and blockers.
|
|
91
52
|
|
|
92
|
-
|
|
53
|
+
`canon tasks validate` reports and never writes:
|
|
93
54
|
|
|
94
|
-
|
|
55
|
+
- A row's cell count must match its header, and a `## Needs a plan` row stating its position is checked against where it sits
|
|
56
|
+
- Every plan pointer resolves, every task file is named once, and every ready row names its files
|
|
57
|
+
- A parked row is reported when its cited task reached the trunk
|
|
95
58
|
|
|
96
|
-
|
|
59
|
+
`canon:task-board` creates a task file, and `canon:task-complete` marks outcomes. The `post-merge` hook archives the task a merged pull request closed, with its plan, and a `post-rewrite` hook does the same for a rebase pull. Both archive only when the merge carried a PR number and the task is closed.
|
|
97
60
|
|
|
98
|
-
|
|
61
|
+
`CANON_SKIP_RECLAIM`, `CANON_SKIP_UPGRADE`, and `CANON_SKIP_PLUGIN_UPDATE` turn off the three hook steps that act on the machine.
|
|
@@ -6,34 +6,32 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Skill map on request
|
|
8
8
|
|
|
9
|
-
These
|
|
9
|
+
These skills serve a request rather than a moment. With the [skill map](skill-map.md) they cover every plugin skill once.
|
|
10
10
|
|
|
11
11
|
## Generate an artifact on demand
|
|
12
12
|
|
|
13
|
-
| Skill | When to use
|
|
14
|
-
| ------------------------- |
|
|
15
|
-
| `canon:create-rule` |
|
|
16
|
-
| `canon:create-skill` |
|
|
17
|
-
| `canon:draft-doc` |
|
|
18
|
-
| `canon:draft-ready` |
|
|
19
|
-
| `canon:draft-figure` |
|
|
20
|
-
| `canon:ci-workflow` |
|
|
21
|
-
| `canon:draft-slides` |
|
|
22
|
-
| `canon:draft-screencast` |
|
|
23
|
-
| `canon:record-screencast` |
|
|
24
|
-
| `canon:draft-identity` |
|
|
13
|
+
| Skill | When to use |
|
|
14
|
+
| ------------------------- | ------------------------------------------------- |
|
|
15
|
+
| `canon:create-rule` | A project rule the toolkit does not ship |
|
|
16
|
+
| `canon:create-skill` | A new `SKILL.md` |
|
|
17
|
+
| `canon:draft-doc` | A new `docs/` page, context entry, or `README.md` |
|
|
18
|
+
| `canon:draft-ready` | Finished files a worker should copy |
|
|
19
|
+
| `canon:draft-figure` | A figure or architecture view inside a doc |
|
|
20
|
+
| `canon:ci-workflow` | A GitHub Actions workflow file |
|
|
21
|
+
| `canon:draft-slides` | A deck rendered to editable PowerPoint |
|
|
22
|
+
| `canon:draft-screencast` | A recording script with beats seeded |
|
|
23
|
+
| `canon:record-screencast` | Recording a screencast draft into a finished mp4 |
|
|
24
|
+
| `canon:draft-identity` | A logo mark and social card |
|
|
25
25
|
|
|
26
26
|
## Answer a question at any point
|
|
27
27
|
|
|
28
|
-
| Skill | When to use
|
|
29
|
-
| --------------------------- |
|
|
30
|
-
| `canon:canon-cli` | To pick
|
|
31
|
-
| `canon:youtube-transcripts` |
|
|
32
|
-
| `canon:read-frames` | To read a recorded demo back frame by frame
|
|
33
|
-
| `canon:teach-workspace` | To learn a subject across sessions
|
|
34
|
-
| `canon:markdown-craft` | Before a substantial markdown edit
|
|
35
|
-
| `canon:write-human` | Before drafting or revising prose
|
|
28
|
+
| Skill | When to use |
|
|
29
|
+
| --------------------------- | ----------------------------------------------------- |
|
|
30
|
+
| `canon:canon-cli` | To pick a `canon` verb, or learn which can lose edits |
|
|
31
|
+
| `canon:youtube-transcripts` | A video transcript wanted as context |
|
|
32
|
+
| `canon:read-frames` | To read a recorded demo back frame by frame |
|
|
33
|
+
| `canon:teach-workspace` | To learn a subject across sessions |
|
|
34
|
+
| `canon:markdown-craft` | Before a substantial markdown edit |
|
|
35
|
+
| `canon:write-human` | Before drafting or revising prose |
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
A learning workspace produces two halves and only one of them leaves. A lesson is worked through once and stays in the workspace, and a reference page or a glossary carries no learner, so it belongs wherever the project already keeps prose on that subject. Asking `canon:teach-workspace` to promote sorts each durable page by who owns its subject, sending an Anthropic-owned subject to the wiki, an internal one to the matching context entry, and everything else, subject-neutral material included, to the public docs. It proposes and waits, because a promoted page is public prose that needs a line naming who owns the subject, and it writes nothing to a destination: each page the operator confirms goes to a handoff file that `canon:teach-workspace` folds in from a branch in its fold mode. A project with no wiki folder gets a refusal naming `canon wiki init` rather than a folder it never asked for.
|
|
37
|
+
Ask `canon:teach-workspace` to promote a learning workspace's reference pages and glossaries. It proposes a destination per page and waits. An Anthropic-owned subject goes to the wiki, an internal one to the matching context entry, and the rest to the public docs. A project with no wiki folder gets a refusal naming `canon wiki init`.
|
|
@@ -6,103 +6,99 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Skill map
|
|
8
8
|
|
|
9
|
-
Groups run in the order a project meets them.
|
|
10
|
-
|
|
11
|
-
This page and [skill map on request](skill-map-on-request.md) are the corpus the coverage claim is measured against: every name `canon claude skills list --names` reports takes exactly one row across the two. A skill serving two moments sits at the earlier one, this page counting as earlier than the sibling, and a mention on any other page is prose rather than routing. The sibling holds the groups that answer a request rather than mark a moment.
|
|
12
|
-
|
|
13
|
-
Each row sits under the group its skill's `metadata.family` names. The landing page's skills field groups by that field and reads each row's text from both pages, so its build refuses a skill with no row, a row naming no skill, a row filed under another group, and a heading on either page naming no family group, even one with no rows under it. A new group takes its vocabulary entry in `src/claude/skills-families.ts` before its heading lands here.
|
|
9
|
+
Groups run in the order a project meets them. Every name `canon claude skills list --names` reports takes one row across this page and [skill map on request](skill-map-on-request.md), under the group its `metadata.family` names.
|
|
14
10
|
|
|
15
11
|
## Set up a project
|
|
16
12
|
|
|
17
|
-
| Skill | When to use
|
|
18
|
-
| -------------------- |
|
|
19
|
-
| `canon:target-setup` | On a fresh scaffold, to
|
|
20
|
-
| `canon:deploy-app` |
|
|
13
|
+
| Skill | When to use |
|
|
14
|
+
| -------------------- | --------------------------------------------- |
|
|
15
|
+
| `canon:target-setup` | On a fresh scaffold, to run the install chain |
|
|
16
|
+
| `canon:deploy-app` | When a project is ready to publish |
|
|
21
17
|
|
|
22
18
|
## Decide what to build
|
|
23
19
|
|
|
24
|
-
| Skill | When to use
|
|
25
|
-
| -------------------------- |
|
|
26
|
-
| `canon:plan-intake` |
|
|
27
|
-
| `canon:plan-intake-answer` |
|
|
28
|
-
| `canon:backlog-triage` |
|
|
29
|
-
| `canon:plan-groundwork` |
|
|
30
|
-
| `canon:decision-escalate` |
|
|
31
|
-
| `canon:draft-and-pick` |
|
|
32
|
-
| `canon:canvas-board` |
|
|
33
|
-
| `canon:task-board` |
|
|
34
|
-
| `canon:plan-feature` |
|
|
35
|
-
| `canon:codebase-layout` |
|
|
20
|
+
| Skill | When to use |
|
|
21
|
+
| -------------------------- | -------------------------------------------------- |
|
|
22
|
+
| `canon:plan-intake` | The input is a pile of findings |
|
|
23
|
+
| `canon:plan-intake-answer` | An intake folder holds unread slots |
|
|
24
|
+
| `canon:backlog-triage` | The backlog needs pruning |
|
|
25
|
+
| `canon:plan-groundwork` | The state is unmeasured and approaches compete |
|
|
26
|
+
| `canon:decision-escalate` | Open decisions turn on your preference |
|
|
27
|
+
| `canon:draft-and-pick` | The call is taste, wanting candidates side by side |
|
|
28
|
+
| `canon:canvas-board` | A direction should be drawn as editable frames |
|
|
29
|
+
| `canon:task-board` | A decided item needs a file on the board |
|
|
30
|
+
| `canon:plan-feature` | The approach is settled and needs a plan |
|
|
31
|
+
| `canon:codebase-layout` | A change adds a file and needs a folder |
|
|
36
32
|
|
|
37
33
|
## Build the feature
|
|
38
34
|
|
|
39
|
-
| Skill | When to use
|
|
40
|
-
| ----------------------------- |
|
|
41
|
-
| `canon:session-worktree` | At
|
|
42
|
-
| `canon:auto-ship` | After plan approval, to chain implement
|
|
43
|
-
| `canon:test-first` | Before implementing a planned change
|
|
44
|
-
| `canon:test-craft` |
|
|
45
|
-
| `canon:build-in-slices` | While building
|
|
46
|
-
| `canon:api-design` |
|
|
47
|
-
| `canon:deprecation-migration` |
|
|
48
|
-
| `canon:code-craft` | Before writing a function, class, or module
|
|
49
|
-
| `canon:review-craft` |
|
|
50
|
-
| `canon:search-craft` | Before searching outside the project
|
|
51
|
-
| `canon:systematic-debugging` |
|
|
52
|
-
| `canon:design-taste` |
|
|
53
|
-
| `canon:video-craft` | Before composing or judging a video
|
|
54
|
-
| `canon:ui-checklist` | After a UI change, to
|
|
35
|
+
| Skill | When to use |
|
|
36
|
+
| ----------------------------- | -------------------------------------------------- |
|
|
37
|
+
| `canon:session-worktree` | At plan-to-execute, for an isolated tree |
|
|
38
|
+
| `canon:auto-ship` | After plan approval, to chain implement through PR |
|
|
39
|
+
| `canon:test-first` | Before implementing a planned change |
|
|
40
|
+
| `canon:test-craft` | Writing or changing a test |
|
|
41
|
+
| `canon:build-in-slices` | While building, to commit each slice |
|
|
42
|
+
| `canon:api-design` | Changing what a caller sees |
|
|
43
|
+
| `canon:deprecation-migration` | Deleting or replacing code something may call |
|
|
44
|
+
| `canon:code-craft` | Before writing a function, class, or module |
|
|
45
|
+
| `canon:review-craft` | Reviewing a change |
|
|
46
|
+
| `canon:search-craft` | Before searching outside the project |
|
|
47
|
+
| `canon:systematic-debugging` | A test fails or a bug surfaces |
|
|
48
|
+
| `canon:design-taste` | Drafting or judging an interface |
|
|
49
|
+
| `canon:video-craft` | Before composing or judging a video |
|
|
50
|
+
| `canon:ui-checklist` | After a UI change, to list what to check |
|
|
55
51
|
|
|
56
52
|
## Check the work before it leaves the branch
|
|
57
53
|
|
|
58
|
-
| Skill | When to use
|
|
59
|
-
| ----------------------- |
|
|
60
|
-
| `canon:document-health` |
|
|
61
|
-
| `canon:ux-audit` | To read UI source for missing states
|
|
62
|
-
| `canon:ux-measure` | To
|
|
54
|
+
| Skill | When to use |
|
|
55
|
+
| ----------------------- | ---------------------------------------------- |
|
|
56
|
+
| `canon:document-health` | Documents must answer for length and staleness |
|
|
57
|
+
| `canon:ux-audit` | To read UI source for missing states |
|
|
58
|
+
| `canon:ux-measure` | To measure paint, processor, and layout cost |
|
|
63
59
|
|
|
64
60
|
## Ship it
|
|
65
61
|
|
|
66
|
-
| Skill | When to use
|
|
67
|
-
| --------------------- |
|
|
68
|
-
| `canon:git-ship` | To run the
|
|
69
|
-
| `canon:context-fold` |
|
|
70
|
-
| `canon:task-complete` | After the fold, to mark
|
|
71
|
-
| `canon:docs-sync` |
|
|
72
|
-
| `canon:git-stage` |
|
|
73
|
-
| `canon:git-commit` |
|
|
74
|
-
| `canon:git-branch` |
|
|
75
|
-
| `canon:git-pr` |
|
|
62
|
+
| Skill | When to use |
|
|
63
|
+
| --------------------- | --------------------------------------------- |
|
|
64
|
+
| `canon:git-ship` | To run the post-feature chain through open PR |
|
|
65
|
+
| `canon:context-fold` | The diff left a context entry untrue |
|
|
66
|
+
| `canon:task-complete` | After the fold, to mark shipped outcomes |
|
|
67
|
+
| `canon:docs-sync` | A change left `README.md` or `docs/` stale |
|
|
68
|
+
| `canon:git-stage` | Staged changes span several concerns |
|
|
69
|
+
| `canon:git-commit` | Staged changes are one concern |
|
|
70
|
+
| `canon:git-branch` | A branch name needs generating or renaming |
|
|
71
|
+
| `canon:git-pr` | A pull request needs a title and body |
|
|
76
72
|
|
|
77
73
|
## After the pull request opens
|
|
78
74
|
|
|
79
|
-
| Skill | When to use
|
|
80
|
-
| ---------------------- |
|
|
81
|
-
| `canon:review-pr` | From an independent session, to post findings
|
|
82
|
-
| `canon:review-ui` | Beside
|
|
83
|
-
| `canon:review-address` |
|
|
84
|
-
| `canon:git-followup` |
|
|
85
|
-
| `canon:git-split` |
|
|
86
|
-
| `canon:git-issue` |
|
|
87
|
-
| `canon:git-worktree` | After a
|
|
75
|
+
| Skill | When to use |
|
|
76
|
+
| ---------------------- | --------------------------------------------- |
|
|
77
|
+
| `canon:review-pr` | From an independent session, to post findings |
|
|
78
|
+
| `canon:review-ui` | Beside code review, to drive the checklist |
|
|
79
|
+
| `canon:review-address` | As the worker, to fix posted findings |
|
|
80
|
+
| `canon:git-followup` | A small edit on a branch with an open PR |
|
|
81
|
+
| `canon:git-split` | A branch carries unrelated commits |
|
|
82
|
+
| `canon:git-issue` | Something belongs on the tracker |
|
|
83
|
+
| `canon:git-worktree` | After a merge, to reclaim worktrees |
|
|
88
84
|
|
|
89
85
|
## Run several tracks at once
|
|
90
86
|
|
|
91
|
-
| Skill | When to use
|
|
92
|
-
| ------------------------- |
|
|
93
|
-
| `canon:role-orchestrator` | To assert the control session that
|
|
94
|
-
| `canon:role-planner` | To assert the
|
|
95
|
-
| `canon:role-reviewer` | To assert the
|
|
96
|
-
| `canon:role-worker` | To assert the
|
|
97
|
-
| `canon:session-relay` |
|
|
98
|
-
| `canon:session-resume` | At
|
|
99
|
-
| `canon:session-compact` | Before a compaction
|
|
100
|
-
| `canon:session-map` |
|
|
87
|
+
| Skill | When to use |
|
|
88
|
+
| ------------------------- | --------------------------------------------------- |
|
|
89
|
+
| `canon:role-orchestrator` | To assert the control session that dispatches |
|
|
90
|
+
| `canon:role-planner` | To assert the role of a session writing a plan |
|
|
91
|
+
| `canon:role-reviewer` | To assert the role of a session reviewing one PR |
|
|
92
|
+
| `canon:role-worker` | To assert the role of a session building one branch |
|
|
93
|
+
| `canon:session-relay` | This session owes another a message |
|
|
94
|
+
| `canon:session-resume` | At session start, to pick up a previous one |
|
|
95
|
+
| `canon:session-compact` | Before a compaction, to write a handoff |
|
|
96
|
+
| `canon:session-map` | When an orchestrating session closes |
|
|
101
97
|
|
|
102
98
|
## Keep the project current with the toolkit
|
|
103
99
|
|
|
104
|
-
| Skill | When to use
|
|
105
|
-
| ----------------------------- |
|
|
106
|
-
| `canon:target-check` | In a target
|
|
107
|
-
| `canon:canon-feedback` |
|
|
108
|
-
| `canon:canon-feedback-triage` | In the toolkit repo, to file
|
|
100
|
+
| Skill | When to use |
|
|
101
|
+
| ----------------------------- | ---------------------------------------------------- |
|
|
102
|
+
| `canon:target-check` | In a target, to compare each domain with the toolkit |
|
|
103
|
+
| `canon:canon-feedback` | The toolkit is broken, missing, or off |
|
|
104
|
+
| `canon:canon-feedback-triage` | In the toolkit repo, to file feedback issues |
|
|
@@ -6,147 +6,54 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Visual design workflow
|
|
8
8
|
|
|
9
|
-
Three tiers
|
|
10
|
-
|
|
11
|
-
The tier framework sits alongside [Claude Design](../../wiki/claude/design.md), the one catalog page in this range. Excalidraw and the surrounding MCP and skill ecosystem are named inline below rather than catalogued separately. This page decides when to reach for what.
|
|
12
|
-
|
|
13
|
-
[Claude Design](../../wiki/claude/design.md), released 2026-04-17 and priced inside Claude subscriptions, is the ceiling tool for tier 1 and tier 2. Reserve it for codebase extraction and the richly annotated handoff bundle.
|
|
9
|
+
Three tiers run from prose-only design docs to a graphical source of truth, and tiers stack. [Claude Design](../../wiki/claude/design.md) is the ceiling tool for tiers 1 and 2.
|
|
14
10
|
|
|
15
11
|
## Tier 0: prose only
|
|
16
12
|
|
|
17
|
-
The default. `canon/DESIGN.md` holds visual intent
|
|
18
|
-
|
|
19
|
-
Claude Code reads it and writes the implementation. Works for CLI tools, internal dashboards, admin panels, and backend-focused projects.
|
|
20
|
-
|
|
21
|
-
### Seed shape
|
|
22
|
-
|
|
23
|
-
The toolkit seed in `tooling/claude/seeds/canon/DESIGN.md` ships an intent template with a starting set of roles, each naming its custom property, and `claude/skills/canvas-board/references/design.md` carries the same tables under `## Template` with placeholder rows. The column headers are what the parser reads, so they stay verbatim in either, while the rows are the project's own. The seed's lead asks for the project's own stylesheet, such as `src/styles/tokens.css` or a Tailwind `@theme` block, and falls back to `.claude/design/project/` only when the project has none.
|
|
24
|
-
|
|
25
|
-
`canon design render` writes an HTML plus CSS preview to `.canon/tmp/render/design/` for eyeballing the current system without leaving Claude Code. See `canon/context/design/index.md`.
|
|
26
|
-
|
|
27
|
-
A project wanting a neutral starting point to override runs `canon design install`, which copies one stylesheet to `.claude/design/base.css` carrying an achromatic token set as custom properties and two components built on them. Greys run from near-black to near-white and the accent is monochrome, so the only palette the project renders is one it writes itself. That file is toolkit-owned and `canon design sync` refreshes it, so a project overrides a value in `.claude/design/project/` instead, which sync never touches. Nothing arrives without that install, and the two channels are independent: a record the project wrote is its own, and the installed stylesheet is the toolkit's.
|
|
28
|
-
|
|
29
|
-
A record generated from a token source carries the values in tables instead, which is the shape this toolkit's own record takes. There a cell no source anchors ends in `? verify`, and the preview shows that marker beside the value rather than folding it in, so a swatch and a font sample stay built from the value alone. A confidence line above the sections names how many cells are anchored against how many are tagged, which is what tells a reader whether they are looking at a record of the code or a proposal about it. It reads the columns a source could anchor and leaves out the row names, so the ratio is not diluted by cells no tag could ever reach. The proposal path tags nearly all of them, so that count reads low on day one by design.
|
|
30
|
-
|
|
31
|
-
### Tools
|
|
32
|
-
|
|
33
|
-
- None beyond Claude Code itself
|
|
34
|
-
- Playwright CLI optional for verifying journeys across routes and browser-only behavior. See [`test-craft`](../../claude/skills/test-craft/SKILL.md) for which layer a journey belongs at.
|
|
13
|
+
The default. `canon/DESIGN.md` holds visual intent as one Overview paragraph, at most three one-line rules a section, and a table naming each color and shape role, with a lead naming the stylesheet. Claude Code alone suffices, and [`test-craft`](../../claude/skills/test-craft/SKILL.md) says which layer a Playwright journey belongs at.
|
|
35
14
|
|
|
36
|
-
|
|
15
|
+
- The seed is `tooling/claude/seeds/canon/DESIGN.md`, and its column headers stay verbatim
|
|
16
|
+
- `canon design render` previews it in `.canon/tmp/render/design/`
|
|
17
|
+
- `canon design install` copies a neutral base to `.claude/design/base.css`, so override values in `.claude/design/project/`. See `canon/context/features/design.md`.
|
|
37
18
|
|
|
38
|
-
|
|
19
|
+
These skills cover the tier:
|
|
39
20
|
|
|
40
|
-
- `canon:ui-checklist`
|
|
41
|
-
- `canon:
|
|
42
|
-
- `canon:
|
|
21
|
+
- `canon:ui-checklist`, `canon:ux-audit`, and `canon:ux-measure` review and measure a UI
|
|
22
|
+
- `canon:draft-and-pick` drafts candidates as frames on the canvas and takes your pick
|
|
23
|
+
- `canon:canvas-board` works a direction out as HTML frames you edit in the browser. Only the pick moves into `canon/DESIGN.md`.
|
|
24
|
+
- `canon:draft-identity` drafts a logo mark and social card
|
|
43
25
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
- `canon:draft-and-pick` for a call settled by looking, drafting several candidates as frames on the canvas and taking your pick
|
|
47
|
-
- `canon:canvas-board` for a direction worked out over several turns, drawn as HTML frames you drag, select, and restyle in the browser while the session reads your changes back. Only the pick moves into `canon/DESIGN.md`, since the canvas folder is gitignored
|
|
48
|
-
- `canon:draft-identity` to draft a project's logo mark and compose it into an icon sequence and a social card, through `draft-and-pick`'s own render-and-pick loop. On an Astro project holding the card route scaffold, the card lands as a route the project keeps and is captured through a running server, so it reads the project's real stylesheet rather than typed copies of every color. Everywhere else it ships as a PNG and the run says so.
|
|
49
|
-
- Anthropic's `frontend-design` plugin optional for light visual steering
|
|
50
|
-
|
|
51
|
-
### When to pick
|
|
52
|
-
|
|
53
|
-
- UI is not the core product
|
|
54
|
-
- Design decisions are few and can be written as sentences
|
|
55
|
-
- No designer on the project
|
|
56
|
-
- Stakeholders review code or behavior rather than mockups
|
|
26
|
+
Pick tier 0 when the UI is not the core product, decisions fit in sentences, and stakeholders review code.
|
|
57
27
|
|
|
58
28
|
## Tier 1: visual companion
|
|
59
29
|
|
|
60
|
-
Prose stays
|
|
61
|
-
|
|
62
|
-
- Excalidraw handles agent-drawn layouts when the round-trip canvas loop matters
|
|
63
|
-
- Claude Design joins only when codebase extraction or the annotated handoff bundle is worth the ceiling cost
|
|
64
|
-
|
|
65
|
-
Both produce derived artifacts, so human edits are review annotations rather than source changes.
|
|
66
|
-
|
|
67
|
-
### Seed shape
|
|
68
|
-
|
|
69
|
-
Same as tier 0. `DESIGN.md` stays human-maintained.
|
|
70
|
-
|
|
71
|
-
Impeccable, if installed, keeps its own root `DESIGN.md` and `PRODUCT.md` in its own format. These are separate files from the toolkit's `canon/DESIGN.md` and are not synced with it. Treat impeccable's pair as its own source of truth for its commands, and the toolkit's `canon/DESIGN.md` as the source other toolkit skills read.
|
|
72
|
-
|
|
73
|
-
### Tools
|
|
74
|
-
|
|
75
|
-
- Excalidraw canvas server on localhost plus the community [`yctimlin/mcp_excalidraw`](https://github.com/yctimlin/mcp_excalidraw) MCP shim, for projects that need an agent to draw, read back, and revise a canvas. MIT-licensed, plaintext JSON scene format. `describe_scene` and `get_canvas_screenshot` let the agent verify its own layout before claiming it is correct.
|
|
76
|
-
- Playwright MCP ([`microsoft/playwright-mcp`](https://github.com/microsoft/playwright-mcp)) for browser-side verification, driven off the accessibility tree rather than screenshots.
|
|
77
|
-
- Chrome DevTools MCP ([`ChromeDevTools/chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp)) for live frontend debugging: performance traces, network inspection, and DOM and CSS inspection.
|
|
78
|
-
- Claude Design as the ceiling option for codebase extraction or polished handoff bundles. See [Claude Design](../../wiki/claude/design.md).
|
|
30
|
+
Prose stays the source of truth, with a visual render as a feedback surface. Human edits to these derived artifacts are review annotations.
|
|
79
31
|
|
|
80
|
-
|
|
32
|
+
- Excalidraw canvas server plus the community [`yctimlin/mcp_excalidraw`](https://github.com/yctimlin/mcp_excalidraw) MCP, where the agent draws, reads back, and revises
|
|
33
|
+
- Playwright MCP ([`microsoft/playwright-mcp`](https://github.com/microsoft/playwright-mcp)) for browser checks off the accessibility tree
|
|
34
|
+
- Chrome DevTools MCP ([`ChromeDevTools/chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp)) for traces, network, DOM, and CSS
|
|
35
|
+
- Claude Design for codebase extraction or a polished handoff bundle
|
|
36
|
+
- A frontend design skill: [pbakaus/impeccable](https://github.com/pbakaus/impeccable), [nextlevelbuilder/ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill), or Anthropic's `frontend-design`
|
|
81
37
|
|
|
82
|
-
|
|
83
|
-
- A frontend design skill to steer visual quality. Pick one of [pbakaus/impeccable](https://github.com/pbakaus/impeccable), which bundles curated anti-pattern references and is the strongest default, [nextlevelbuilder/ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill), which maps product type to UI rules through a reasoning engine, or Anthropic's `frontend-design` plugin.
|
|
38
|
+
Impeccable keeps its own root `DESIGN.md` and `PRODUCT.md`, separate from `canon/DESIGN.md`. Use Excalidraw for agent-driven layout iteration, and Claude Design for one extraction pass or the final handoff. Most projects pick one.
|
|
84
39
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- UI is a meaningful part of the product but not the entire product
|
|
88
|
-
- Stakeholders want to see layout proposals before code exists
|
|
89
|
-
- Design decisions benefit from visual inspection
|
|
90
|
-
- A single contributor owns both design and implementation
|
|
91
|
-
|
|
92
|
-
### Excalidraw vs Claude Design in tier 1
|
|
93
|
-
|
|
94
|
-
The two tools solve non-overlapping halves of the visual companion problem.
|
|
95
|
-
|
|
96
|
-
Excalidraw gives the agent a canvas it can read back over MCP. Output is agent-facing and persists as a JSON file in the repo. Pick it when Claude Code needs to iterate on layouts autonomously, not when a human needs polished review artifacts.
|
|
97
|
-
|
|
98
|
-
Claude Design reads the raw codebase without prose curation and produces a polished handoff bundle with chat history. Weekly quota makes it expensive, so reserve it for the extraction pass or the final handoff moment, not daily iteration.
|
|
99
|
-
|
|
100
|
-
Most tier 1 projects pick one. Projects with a messy codebase and no curated `DESIGN.md` may want Claude Design once for the initial extraction.
|
|
40
|
+
Pick tier 1 when stakeholders want layouts before code and one contributor owns design and implementation.
|
|
101
41
|
|
|
102
42
|
## Tier 2: visual as source of truth
|
|
103
43
|
|
|
104
|
-
Design happens in a graphical tool. `canon/DESIGN.md`
|
|
105
|
-
|
|
106
|
-
### Seed shape
|
|
107
|
-
|
|
108
|
-
`canon/DESIGN.md` becomes a generated artifact. A top-of-file note identifies the upstream source, either a Claude Design project ID or a Figma file URL. Manual edits in the seed carry a warning tag because they will not survive regeneration.
|
|
109
|
-
|
|
110
|
-
### Tools
|
|
111
|
-
|
|
112
|
-
- Figma desktop app with the official [Figma Dev Mode MCP](https://www.figma.com/blog/introducing-claude-code-to-figma/) for teams with a dedicated designer already on Figma. Bidirectional sync and Code to Canvas capture of a running Claude Code UI into editable Figma frames.
|
|
113
|
-
- Claude Design with its Claude Code handoff bundle for teams without an existing Figma investment and for solo founders or PMs driving design themselves. One-way handoff, no bidirectional sync. See [Claude Design](../../wiki/claude/design.md).
|
|
114
|
-
- Playwright and Chrome DevTools MCPs as in tier 1
|
|
44
|
+
Design happens in a graphical tool, and implementation follows it. `canon/DESIGN.md` becomes generated, with a top note naming the upstream Claude Design project ID or Figma file URL.
|
|
115
45
|
|
|
116
|
-
|
|
46
|
+
- Figma desktop with the official [Figma Dev Mode MCP](https://www.figma.com/blog/introducing-claude-code-to-figma/) for teams with a designer already on Figma. It syncs both ways and captures a running UI into editable frames.
|
|
47
|
+
- Claude Design with its Claude Code handoff bundle for teams without Figma. The handoff is one-way.
|
|
48
|
+
- The Playwright and Chrome DevTools MCPs from tier 1
|
|
117
49
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
### When to pick
|
|
121
|
-
|
|
122
|
-
- UI is the product or a major differentiator
|
|
123
|
-
- A dedicated designer is on the project or will join
|
|
124
|
-
- Design review happens in the graphical tool rather than in code
|
|
125
|
-
- Design changes more often than implementation
|
|
126
|
-
|
|
127
|
-
### Figma vs Claude Design in tier 2
|
|
128
|
-
|
|
129
|
-
Figma wins when a dedicated designer already owns a Figma file, external collaborators expect Figma for review, or the workflow needs the agent to capture a running Claude Code UI and push it back as editable frames via Code to Canvas. Figma's MCP is bidirectional.
|
|
130
|
-
|
|
131
|
-
Claude Design wins when nobody on the team has a Figma workflow yet and the handoff bundle with chat history is the intended implementation path. Claude Design's handoff is one-way, and its quota limits daily iteration, so it is most useful for the initial extraction pass and the final handoff moment rather than day-to-day design work.
|
|
50
|
+
Pick tier 2 when the UI is the product, a designer owns it, and design changes more often than code.
|
|
132
51
|
|
|
133
52
|
## Decision guide
|
|
134
53
|
|
|
135
|
-
|
|
54
|
+
Count yes answers to four questions. Zero or one is tier 0, two or three is tier 1, and four is tier 2.
|
|
136
55
|
|
|
137
56
|
- Is the UI the product rather than a thin interface over a backend?
|
|
138
57
|
- Do non-engineers review visual proposals before code exists?
|
|
139
58
|
- Is there a dedicated designer, or will there be one?
|
|
140
59
|
- Does design iterate independently of code?
|
|
141
|
-
|
|
142
|
-
Zero or one yes: tier 0. Two or three: tier 1. Four: tier 2.
|
|
143
|
-
|
|
144
|
-
Resist over-tiering early. Moving up is cheap because tiers stack. Moving down means abandoning tooling and confusing collaborators.
|
|
145
|
-
|
|
146
|
-
## References
|
|
147
|
-
|
|
148
|
-
- [Claude Design](../../wiki/claude/design.md): first-party hosted design product and handoff bundle
|
|
149
|
-
- `canon/context/claude-plugin/skill-strategy/overview.md`: how to decide between workflow and domain-knowledge skills
|
|
150
|
-
- [`microsoft/playwright-mcp`](https://github.com/microsoft/playwright-mcp): browser automation MCP used in tier 1 and tier 2
|
|
151
|
-
- [`ChromeDevTools/chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp): live frontend debugging MCP used in tier 1 and tier 2
|
|
152
|
-
- [`yctimlin/mcp_excalidraw`](https://github.com/yctimlin/mcp_excalidraw): community MCP server behind the tier 1 visual companion
|