craft-analyze
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
Open your project's dashboard - the whole graph of cycles, stories, and records in one page. Rebuilds the data first, offers a page update when the shipped template moved ahead, then opens it.
> /plugin marketplace add drobins25/craft > /plugin install craft@craft
How it fires
How this command gets triggered: by you, by Claude, or both.
/craft-dashboardContext preview
What this command does when you run it.
Open your project's dashboard - the whole graph of cycles, stories, and records in one page. Rebuilds the data first, offers a page update when the shipped template moved ahead, then opens it.
name: dashboard description: "Open your project's dashboard - the whole graph of cycles, stories, and records in one page. Rebuilds the data first, offers a page update when the shipped template moved ahead, then opens it." argument-hint: ""
Opens `.craft/dashboard.html` - a single page rendering your project's whole graph (cycles, stories, records, and how they connect). The page is a copied artifact with its own version, independent of the plugin version; this command is what keeps it current.
Use `$CRAFT_PROJECT_ROOT` (set at session start) as the base path for all `.craft/` references. If not set, resolve it by walking up from PWD to find the nearest `.craft/.global-state`.
Set `PROJECT` to `${CRAFT_PROJECT_ROOT:-.}`.
Run:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard/dashboard-page.sh --check --root "$PROJECT"Read `STATE` and `COPY` from its output. Branch:
**`STATE=no-project`** - print one plain line: "No craft project found here - run `/craft:init` first." Stop. Do not rebuild, do not open.
**`STATE=missing`** - this is a first run, nothing to ask. Pull silently:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard/dashboard-page.sh --pull --root "$PROJECT"No question, no extra line about it. Remember that this was the first run - Step 2 prints the reveal instead of the routine receipt. Continue to Step 2.
**`STATE=behind`** - the shipped template moved ahead of the user's copy. Ask via **AskUserQuestion**, wording chosen by `COPY`:
Options are "Pull the update" and "Keep my current page" (declining is always allowed). If the user accepts, run:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard/dashboard-page.sh --pull --root "$PROJECT"Either way, continue to Step 2.
**`STATE=current`** - nothing to ask, nothing to print about it. Continue to Step 2.
Run once, regardless of the branch above:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard/dashboard-run.sh --root "$PROJECT"This prints one JSON line on stdout. Read it directly - do not re-derive counts elsewhere:
Graph rebuilt - <nodes> records, <edges> connections That's every story, fix, tweak, idea, and dead end you've ever recorded, connected into one map - your project's second brain. It grows as you work. Finish something, drop a note, land a fix - the map already knows. Hit Refresh (or reload the page) anytime and it's caught up.
Never print the raw `reason` code - it is a machine value, not a sentence.
Run:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dashboard/insights-check.sh --check --root "$PROJECT"Read `VERDICT` from its output:
This step is silent on every path - no receipt line, no mention of generating anything. The page itself is the reveal.
`PAGE` is `$PROJECT/.craft/dashboard.html` (the same absolute path `--check` printed). Attempt to open it in the default browser, swallowing failure:
open "$PAGE" 2>/dev/null || xdg-open "$PAGE" 2>/dev/null || true
Always print the page's `file://` path, on its own line, whether or not the open in Step 3 succeeded - it is the fallback for headless sessions, SSH, or no default browser, and the way to re-open the page later:
file://<PAGE>
This line prints on every path that reaches Step 2 (i.e. every branch except `no-project`), regardless of what Step 3 did.
After the link, close with exactly one ignorable line:
Want to hear the weirdest thing you ever did in here? Just ask.
If the user accepts (any yes, or asks a question of their own about their project's history), answer by reading the graph directly - no new scripts, no agents:
1. Read `.craft/graph/graph.js` - parse the JSON after `window.CRAFT_GRAPH =`. The default "ever" ask spans the whole history; scope to a date window only when the user names one ("this week" = last 7 days). 2. For the interesting hits, read their content mirrors in `.craft/graph/records/` (files are named by node id). 3. Tell the story - lead with the single best find, in plain language with dates and titles. Rejected dials, long-lived dead ends, single-day fix blitzes, and ideas captured at odd hours are usually the gold.
The same path answers any question about the project's history ("oldest open idea", "what did I kill this
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/…