craft-analyze
CommandPost-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
This file is read by `tracker-intake.md` when the issue already has a cycle, and by `craft-story-implement.md` at every story start. It re-reads the issue, copies only what changed into the cycle's `context/` folder, re-resolves the newest Go, states the stage first, and
> /plugin marketplace add drobins25/craft> /plugin install craft@craft
This file is read by `tracker-intake.md` when the issue already has a cycle, and by `craft-story-implement.md` at every story start. It re-reads the issue, copies only what changed into the cycle's `context/` folder, re-resolves the newest Go, states the stage first, and continues the cycle where it stood.
**DO NOT invoke this as a skill via the Skill tool.** The parent flow Reads this file and executes the sections inline. The only Skill invocations are the hand-offs in `## Continue`.
**Status is never authority.** Only the newest Go grants a stage, and an answer in a comment is never a Go.
Set `slug` to the key lowercased, with each run of characters outside `a-z0-9` replaced by one `-`. An earlier copy is never edited: refresh only adds new dated files.
Read as tracker-intake.md's `## Read` says: every page, oldest first by creation, in the same file grammar. Write to `${CRAFT_PROJECT_ROOT:-.}/.craft/.intake/<slug>/` after emptying it, as `<slug>-comments-staged.md` and, on a pickup only, `<slug>-issue-staged.md`. A pickup reads the issue and its comments. A story start reads comments only.
If the host has no tracker tools, or a read fails, go to `## No tracker tools`.
python3 "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/snapshot-delta.py" <cycle-dir> <staged comments> [--issue <staged issue>] --tool "<tool names as used>"It prints five `key=value` lines: `comments_file`, `new_comments`, `issue_file`, `stamp`, `say`. Then delete the staging folder. An issue-text change is also recorded in the cycle, so the next story written or planned there stops at `${CLAUDE_PLUGIN_ROOT}/commands/references/tracker-follow.md`'s card.
python3 "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/record-go.py" <cycle-dir> <comments_file, or nothing when it is empty>It prints four lines: `changed`, `old_stage`, `stage`, `say`. On a pickup, print in this order, each on its own line:
1. record-go's `say`, always the first line of output. 2. On `stage=hold`, exactly `Nothing new starts on <KEY> until a newer Go.`, then stop. Do not continue the cycle. 3. Otherwise run `python3 "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/go-brief.py" <cycle-dir>`. On `prompts=answer`, print the non-empty `scope_line`, `rules_line`, `questions_line` and `answer_line`, then Read `${CLAUDE_PLUGIN_ROOT}/commands/references/go-run.md`, exactly as tracker-intake.md's `## The brief` says. On any other verdict print nothing. If the script exits non-zero, print exactly `I couldn't read the run rules in <KEY>'s newest Go, so I'll bring Craft's prompts to you.` 4. snapshot-delta's `say`.
On a pickup, run this after snapshot-delta's `say`:
python3 "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/question-answers.py" <cycle-dir>It prints `questions=<N>`, `answered=<A>` and one `line=` per question Craft posted on the issue: `Answered: <topic> - "<excerpt>" (<author>, <Mon D>)` or `Still open: <topic> (asked <Mon D>)`. Print each `line=` value, or nothing when `questions=0`.
Questions are matched to answers by heading and time, never by author or threading, because the connector posts as the user. An answer is input for work not yet done, never a Go and never a stage change: only a `## Go - ` comment moves the stage. If a story already finished went the other way, print one line, `<story> was built on a. <option title>; your answer on <KEY> picks <x>.`, and leave it for the user.
By the cycle's status:
Under a Go run, ready and active follow go-run.md's `## At the stage ceiling` instead. For an active cycle at a build stage, that invokes `craft:craft-story-implement-auto` directly, because cycle-start only lists planning and ready cycles.
One comments read (`## Read`, comments only), then `## Copy what changed`, then `## Stage` as far as record-go. Then:
When the host has no tracker tools, or the read failed, nothing is written. Use the cycle's recorded stage: `stage=` from `cycle-stage.sh`, which is empty when `cycle.yaml` has no `authorized_stage:` line.
A failed read can never widen what is allowed, so going on the recorded stage keeps an unattended run alive. The cost, a hold posted since the last good read goes unseen, is
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
Point at anything in a live browser tab - every pin gets a live attempt on the page the moment you SEND it, and the session keeps…
Consult a craft agent. Routes your question to the best mind in the workshop - not a menu, a recommendation.
Agent crystallization command. Studies a tool, role, or person and produces a portable 9-section agent that inhabits the domain -…
File a bug without fixing it, from a person mid-conversation or an agent mid-run. One door, a complete record on disk, nobody…
Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.