craft-analyze
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
How the orchestrator turns a returned QA or walkthrough report into bug records. Read this inline and follow it. Read `${CLAUDE_PLUGIN_ROOT}/commands/references/bugs-record.md` first and follow it. This file adds only what is specific to a QA or walkthrough report.
> /plugin marketplace add drobins25/craft > /plugin install craft@craft
How it fires
How this command gets triggered: by you, by Claude, or both.
/analysis-bug-filingContext preview
What this command does when you run it.
How the orchestrator turns a returned QA or walkthrough report into bug records. Read this inline and follow it. Read `${CLAUDE_PLUGIN_ROOT}/commands/references/bugs-record.md` first and follow it. This file adds only what is specific to a QA or walkthrough report.
How the orchestrator turns a returned QA or walkthrough report into bug records. Read this inline and follow it. Read `${CLAUDE_PLUGIN_ROOT}/commands/references/bugs-record.md` first and follow it. This file adds only what is specific to a QA or walkthrough report.
The orchestrator files, from the report the analyzer returned. An analyzer never runs a script and never writes a file: it finds, describes, and hands the report back. Nothing in this procedure summons the user. Filing never pauses the run.
The caller builds `found_during` and passes it to capture. It leads with the scope the user confirmed, in the user's words, and adds the cycle as context. Five forms, `<type>` being `qa` or `walkthrough`:
`<Cycle N>` is the cycle title's text before its first colon when the title starts with "Cycle ", and the full title otherwise. The cycle never replaces the scope.
Before the batch, run `bash "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/bugs-list.sh" --status=open` once and keep the output in view for every finding.
One call per record:
bash "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/bugs-capture.sh" --found-during="<found_during>" [--requirement="<verbatim>"] --stdin <<'BODY'
<the body>
BODYPass `--requirement` only when Expected quotes a story acceptance criterion that the orchestrator itself put in the brief or the scope. Otherwise leave it out: an assumed requirement that reads as cited is worse than a blank one.
Pass `--layer` only when the finding makes it plain by the bug reference's definitions of code, spec, and judgment. Leave it out when unsure. `--verdict` follows the bug reference: `unspecified` when no requirement covers the behavior, otherwise left out until triage.
The script prints the record's absolute path as its last line. It exits 2 and writes nothing when a required field is missing. Fix the named field and run it again.
The body follows the template in `${CLAUDE_PLUGIN_ROOT}/commands/references/bugs-record.md`. Expected, Actual, and Reproduce come from the finding's expected, actual, and steps. Consequences is the impact in the reader's terms; the analyzer's priority, confidence, and walkthrough grade stay in its report. `## Blocks my next step` starts `no - found by <qa | walkthrough> analysis; nobody was mid-task on it.` Console errors and network failures go verbatim in `## Evidence`. Screenshot paths go in `## References`. `## Done when` is written by the orchestrator from Expected and the steps, as the check that proves it fixed. The analyzer's suggested cause goes in `## Notes`, labelled a hypothesis.
The found_during value for a QA run on the checkout page, mid-cycle:
craft analyze qa: the checkout page (Cycle 4: Payments)
The body piped to capture for one of its findings:
Place Order does nothing when the cart holds a single item ## What happened **Expected.** Clicking Place Order with one item in the cart submits the order and opens the confirmation page. **Actual.** The button highlights on click and nothing else happens. No request leaves the page and the cart stays on screen. ## Consequences A shopper with a one-item cart cannot buy it, and one item is the most common cart. ## Blocks my next step no - found by qa analysis; nobody was mid-task on it. ## Reproduce Starting state: dev server running on http://localhost:3000 with an empty cart. 1. Open /products and add any one product to the cart. 2. Open /checkout. 3. Click Place Order. ## Evidence Console after step 3: Uncaught TypeError: Cannot read properties of undefined (reading 'map') at CheckoutForm.tsx:58. Network panel: no request to /api/orders. ## Done when Steps 1-3 with one item in the cart send a POST to /api/orders and open the confirmation page, and the console shows no TypeError. ## References - Screenshot: .craft/analysis/screenshots/qa-checkout-001.png ## Notes Hypothesis only: the submit handler maps over a shipping options list that is undefined until a second item is added.
A `feels-off` or `nitpick` walkthrough finding is appended to `.craft/analysis/pending/ux.yaml`. When that file is missing, create it from `${CLAUDE_PLUGIN_ROOT}/
Stop Vibing. Start Crafting. A Claude Code plugin that acts as an intelligent harness for your development workflow: your codebase is read-only by default, every change passes through a Write Gate as planned and approved work, and craft tracks your project's
Repo: drobins25/craft
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
Consult a craft agent. Routes your question to the best mind in the workshop - not a menu, a…
Agent crystallization command. Studies a tool, role, or person and produces a portable…
File a bug without fixing it, from a person mid-conversation or an agent mid-run. One door, a…
Complete a cycle. Triggers reflection if pending learnings, then archives.