craft-analyze
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
<!-- DO NOT SIMPLIFY THIS SCHEMA. Mockup records anchor agent recovery, graduation backlinks, and status surfacing. Every frontmatter field below is read by name somewhere (status, craft:status; agent_session, recovery; graduated_to, ramps). muse_session records a completed
> /plugin marketplace add drobins25/craft > /plugin install craft@craft
How it fires
How this command gets triggered: by you, by Claude, or both.
/mockup-inlineContext preview
What this command does when you run it.
<!-- DO NOT SIMPLIFY THIS SCHEMA. Mockup records anchor agent recovery, graduation backlinks, and status surfacing. Every frontmatter field below is read by name somewhere (status, craft:status; agent_session, recovery; graduated_to, ramps). muse_session records a completed
<!-- DO NOT SIMPLIFY THIS SCHEMA. Mockup records anchor agent recovery, graduation backlinks, and status surfacing. Every frontmatter field below is read by name somewhere (status, craft:status; agent_session, recovery; graduated_to, ramps). muse_session records a completed one-shot muse spawn - it is NEVER a re-anchor target; recovery re-anchors against agent_session only. Verbatim reactions are the convergence history - paraphrasing destroys them. One sanctioned exception: a labeled `Settled:` sub-line beneath a verbatim reaction (see the settle gate) - explicitly derived, marked as derived, and never replacing or rewording the verbatim line above it.
tweak port) and by recovery - the material's identity ports onward, never the inlined bytes. -->
A converged mockup is design truth the user approved in their browser. This flow gets there through three rounds of real reactions - diverge, refine, polish - then solidifies new design values to tokens.yaml BEFORE any destination artifact exists, so every downstream gate (binding contracts, chunk-validator, style-analyzer) enforces the mockup because the bible already agrees with it. The shell has already parsed the subject and run the single-session guard - this file owns everything else.
**At most three taste AskUserQuestion calls exist in this flow: vibe (Brief - not rendered on the muse path, where the built spread is the checkpoint), solidify (acceptance), destination (fork). One first-run pre-flight AUQ (Setup - Step 1) may precede them, on a project's first-ever mockup only.** Round picks and reactions are conversational text - a widget between the user and their taste kills the funnel. The taste budget is at most three, permanently: pre-flight is logistics, not taste, and deletes itself once a mockup record exists; nothing else may add a widget to this flow.
All writes live under the project's own `.craft/` (cold path: `$MOCKUP_ROOT/.craft/` - see Step 1) - the write gate never opens for a mockup.
**Cold-start determination - runs FIRST, before anything is created.** Ask whether this project is onboarded, using find-workshop.sh's exact semantic: `CRAFT_PROJECT_ROOT` is set, OR a walk-up from PWD finds `.craft/.global-state` or `.craft/project.md`.
**Pre-flight copy rules (locked).** The pre-flight question below is transcribed copy - never re-voiced, never "improved". No pre-flight string may contain "guess" or "guessing": the alchemist reads real code on both paths (the never-fabricate rule below - "no default palette ever reaches a brief"), and guess-language is the generic-AI framing this funnel is not. Never escalate: this is one honest ask, all options stay first-class permanently, and no future pass may add urgency, warn harder about what is "lost", re-order or re-weight options, or otherwise tune this beat to drive init adoption. The one sanctioned weight is the "(Recommended)" marker on "Init first" - owner-locked copy (2026-07-17), not a later escalation; no pass may remove it. Init is never pitched as a feature list, and "Go from what's on disk" is never written as the lesser option - for someone whose shipped code already is what they want, it is the right call. The pre-flight is a substep of Brief: substeps never become tasks, so it gets no entry on the task rail.
**Pre-flight (first mockup only) - Setup.** One conditional question that teaches what the funnel never says out loud: init is a design session this mockup could grow from. It gates on one check - `.craft/mockups/` holds no `*/record.md`, resolved against the funnel's own root (`$MOCKUP_ROOT` on the cold path, `${CRAFT_PROJECT_ROOT:-.}` warm), never PWD-relative and never the shell's Step 2 idiom, which resolves before `MOCKUP_ROOT` exists. The `mkdir` + `record.md` write below is what deletes it: a project that has mocked before never sees it, and an answered-and-entered run is never re-asked.
**Setup** - fires on the cold path's visual-files-present branch only (the zero-visual-files branch above keeps its hard route to `/craft:init` - nothing on disk to go from, no question to ask), and only while the record check above is empty:
question: "Craft hasn't met your taste yet. Init can run a short design session - sites you love, colors from one, type from another - and this mockup grows from whatever it learns. Or build from the code you already have." header: "Setup" options: - la
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 recommendation.
Agent crystallization command. Studies a tool, role, or person and produces a portable 9-section agent that inhabits the domain - with beliefs, scar tissue,…
Complete a cycle. Triggers reflection if pending learnings, then archives.
Design a cycle — create new cycles with planned stories, detail existing planning cycles, or quick-sketch a roadmap. Detects planning docs in .craft/planning/…