Skip to content

/craft-decisions

The Shelf - what waits on you, what's

BOOST
From plugin
craft
6763 skills27 agents63 commands7 hooks
+1
Install
> /plugin marketplace add drobins25/craft
> /plugin install craft@craft

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/craft-decisions

Context preview

What this command does when you run it.

The Shelf - what waits on you, what's

Command definition

craft-decisions.md
name: decisions
description: "The Shelf - what waits on you, what's
  ruled, what's claimed, what became real. Rule on a
  card, reopen or retire one, or move one to another
  topic."
when_to_use: |
  The user says "decision" about a product ruling:
  "save this as a decision", "what decisions are
  pending", "list decisions tagged X", "move the
  guides ones to wright". Renders live from
  .craft/decisions/, never from memory.

  Not for: facts, ideas, todos (notebook); code
  patterns the validator enforces (lock-decision);
  gate words on their own - "approve", "decline",
  "lock it" belong to whatever is on screen. Reactive
  only - never offers itself.
argument-hint: "[tag or topic] or empty for the Shelf"

Decisions

Claude draws every card and list frame - the lists from the graph's own draw calls, every card but the reopen diff from the text already in the conversation - following `### The drawing rule` below: a left rail with horizontal rules, no right edge, no fixed width, quoted words verbatim. A decision is presented as a card: the exact record it would become. Nothing here writes a record file directly - every write is a call this graph names.

This shell owns only routing.

The rules that never bend

<HARD-GATE>
NEVER use AskUserQuestion here - the answer is typed into the prompt.
NEVER write a record file by hand - every write is a call on the graph.
NEVER draw a card from memory - draw it from the record text in the conversation, and after any write read the file again before drawing it.
NEVER let a box-drawing character into a script's stdout - the rail is drawn here.
NEVER relay a script's error line as the answer.
NEVER render anything below the Shelf unasked.
NEVER select with subcommand syntax - selection is the list filters.
NEVER draw a card, take a quote or write an approval line for a retag.
NEVER treat the desk as open once the card the user asked about is ruled or put away - a later ruling in conversation is just conversation until they type the command again or call it a decision.
</HARD-GATE>

The Shelf rule above bars a second view nobody asked for, not words: one sentence of Claude's own under a drawer or the Shelf is fine.

Words the graph uses

Every word an arrow carries, and every word a diamond's name uses. One line each, no sentence longer than its rule.

  • **bare** - the command invoked with no words after it.
  • **words** - anything the user typed, on the invocation or on a card, that is not a letter.
  • **a record** - words that name or filter decision records.
  • **a ruling in conversation** - the user calls it a decision ("save this as a decision", "make that a decision") or types the command again; "go with that" and "yes, do it" said in passing are just conversation.
  • **the archive** - words asking what was declined or retired.
  • **a retag** - words naming record(s) and a tag to move them to.
  • **declined / retired / both** - which room of the archive the words asked for; **both** is the same call twice, declined then retired.
  • **records** - the user named the records themselves.
  • **a group** - the user named a tag instead, and its records are looked up.
  • **a block** - one nine-key record block in the list output already in hand; the count is read off that output, never from a fresh filter.
  • **one / several / zero** - how many blocks the filter matched.
  • **a face** - which card the record calls for: pending, a reshape, or a retire.
  • **pending** - the record sits in the root, not yet ruled.
  • **law** - the record sits in approved/, already ruled.
  • **a reshape** - words that change the record's own text.
  • **a retire** - words asking to move law to the archive.
  • **lettered / dashed** - the record's own Options section: `(a)` `(b)` `(c)` lines with one `Proposed:` is lettered, `- ` lines or an empty section is dashed.
  • **a live fork** - a sentence that leaves the choice open.
  • **no fork** - a sentence that says what to do, whatever alternative it names.
  • **fresh** - the card was drawn from the conversation and is not yet a file; it shows no slug.
  • **parked** - the card was drawn from a record in the root; it shows its slug, and every write on it names that slug.
  • **as filed** - the parked card still reads as its file does.
  • **reshaped** - the parked card has been redrawn on the user's words and no longer matches its file.
  • **a move** - what the user did with the card on screen.
  • **a letter** - a typed `a`, `b` or `c`, always a move, never a reference to the record's own option text.
  • **a writing move** - words that plainly name approve, keep pending or decline; two named moves, or one named ambiguously, is **words**.
  • **approve / keep pending / decline** - which writing move was named.
  • **agreement** - words that agree without naming a move ("yes", "okay, do that", "go ahead"). On a card with exactly one move they are that move: **a letter** on the retire line or card, **a rewrite** on the reopen card, **keep pending** on a question card. On a card with more than one move they are **words**.
  • **a rewrite** - `a)` on a reopen card.
  • **words that change the text / words that change nothing** - on a retire line or card, whether the user's words alter the record's own text.
  • **the card asked for** - words on the retire line asking to see the whole record before ruling.
  • **crafted / not crafted** - the record's derived disposition: crafted means a story shipped it.
  • **the typed answer** - the user's literal words, a bare letter included, carried as the quote.

The four scripts

A node's text names a script; every call is written `bash "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/<name>.sh"` and runs from wherever the session is - never from a changed directory, never searched for. Each block below is what a node points at: what the script takes, one example that runs as written, and what it prints.

These blocks are the whole contract: what a script takes and what it prints are written here, and a script's sourc

Read more
Ships withcraft

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

Get the whole plugin, auto-invoked

Other commands on craft.