Back to Projects
CRAFT PLATFORM

Taste is now a real skill. Judgment built in. Craft.

PROOF OF CONCEPT

Below: a real /craft session. muse caught the feeling. alchemist named the physics. Nothing rewritten.

2m 14s · thought for 18s
claude-opus-4-8 · /craft
>
Read 1 file (ctrl+o to expand)
craft:muse(Nail terminal styling for crystallization showcase)
LBash(find ~/dev/personal-site/app/projects/craft-platform -type f | sort)
Read(app/projects/craft-platform/CraftShowcase.tsx)
… +2 tool uses
craft:alchemist(Implementation approach for crystallization terminal)
LBash(grep -n "craft-terminal|accent-green|accent-primary" app/...)
Read(app/globals.css)
… +5 tool uses
thinking…

Agents nailed it!

Muse said keep the chrome minimal - make it feel like watching a real session unfold, not a decorated screenshot.

Alchemist confirmed the build is clean: typed text, real spinners, sequential reveals. No CSS hacks.

Going to build it that way. What do you think?

CrystallizedThis is that terminal. You just watched it design itself.

"The crystallization session isn't a file. It's an event. The terminal needs to read like something is finishing, not something that already finished."

craft:muse · designing this section
HOW CRAFT THINKS

Every /craft invocation reads state and routes to the right action.

/craftStory in progress?Resume storyActive cycle?Pick storyBacklog?Assign to cycleCreate story

No menus. No configuration. State drives everything.

THE HOOK SYSTEM

7 lifecycle events - the nervous system of the plugin

Every action flows through hooks. The agent never sees the wiring.

hooks.json
{
  "hooks": {
    "SessionStart": [
      { "hooks": [{ "command": "session-start.sh", "once": true }] },
      { "matcher": "compact", "hooks": [{ "command": "post-compact-reinject.sh" }] }
    ],
    "PreToolUse": [
      { "matcher": "Write|Edit", "hooks": [{ "command": "check-write-permission.py" }] }
    ],
    "PostToolUse": [
      { "matcher": "Write|Edit", "hooks": [{ "command": "update-progress.py" }] }
    ],
    "UserPromptSubmit": [
      { "hooks": [{ "command": "inject-craft-context.sh" }] }
    ],
    "PreCompact": [
      { "hooks": [{ "command": "export-progress.sh" }] }
    ],
    "Stop": [
      { "hooks": [{ "command": "stop-hook-guard.sh" }] }
    ]
  }
}
stop-hook-guard.sh
#!/bin/bash
# When skill A invokes skill B, A drops a breadcrumb file.
# If the agent tries to stop after B completes, this hook
# reads the breadcrumb and injects "keep going."

BREADCRUMB="${PROJECT_ROOT}.craft/.continuation"
if [ -f "$BREADCRUMB" ]; then
  CRUMB_AGE=$(($(date +%s) - $(stat -f %m "$BREADCRUMB")))
  if [ "$CRUMB_AGE" -lt 1800 ]; then
    ACTION=$(grep '^ACTION:' "$BREADCRUMB" | sed 's/^ACTION: //')
    SKILL=$(grep '^SKILL:' "$BREADCRUMB" | sed 's/^SKILL: //')
    ARGS=$(grep '^ARGS:' "$BREADCRUMB" | sed 's/^ARGS: //')
    rm -f "$BREADCRUMB"  # One-shot: consumed on read

    echo "{\"systemMessage\": \"DO NOT STOP. Skill chain in progress.
      Invoke ${SKILL} with args: ${ARGS}\"}"
    exit 0
  fi
fi

rm -f $BREADCRUMB - One-shot. Consumed on read. If the agent stops mid-chain, this hook catches it and says “keep going.”

THE AGENTS

27 specialists. Zero shared memory.

Each agent runs in isolated context via Task tool. No shared memory between agents.

Core workflow

The agents that ship code.

Analysis

The agents that inspect what was shipped.

Crystallized

Agents produced by /craft:become - minds, not docs.

VALIDATION PIPELINE

7 checks. Every chunk. No exceptions.

After implementation, the chunk-validator agent runs checks sequentially. All 7 must pass before the story is marked complete.

chunk-validator agent
// chunk-validator agent - invoked by validate-chunk skill
// Runs checks sequentially, returns structured verdict

CHECKS = [
  "TypeScript Strict",  // tsc --noEmit
  "Lint",               // eslint
  "No Any Types",       // scan changed files
  "Build",              // next build (story-final only)
  "TDD Verification",   // verify test files exist
  "Tests + Coverage",   // vitest (story-final only)
  "Design Tokens",      // check raw hex vs tokens
]

// Per-chunk: typecheck, lint, any-types, tokens
// Story-final: ALL 7 checks
// Verdict: PASSED | FAILED | PARTIAL
TypeScript Strict
Lint
No Any Types
Build
TDD Verification
Tests + Coverage
Design Tokens

FAILED → refine-chunk. 2+ failures → mandatory learnings capture. 4+ → offer rollback.

UNDER THE HOOD
TypeScriptClaude Code Plugin APICustom Hooks (Python + Bash)YAML State Machine55+ Bash Tests27 Specialized Agents30 Commands11 Skills7-Check Validation Pipeline
KEEP GOING