/seed — the front door
The premise, one breath: a project is a seed; goodness is the genome; genuinely good things grow themselves because helped people carry them. This plugin finds, vets, and charters such projects — and refuses the other kind.
Setup (silent)
# Resolve the plugin root: platform env var first, else landmark.
ROOT="${CLAUDE_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:-${OPENCODE_PLUGIN_ROOT:-${SEED_PROTOCOL_ROOT:-}}}}"
# Unset (some platforms set no root var)? Landmark: from this SKILL.md's real path
# (readlink -f through any symlink), walk up to the directory containing
# .claude-plugin/plugin.json — that directory is $ROOT.
GARDEN_DIR="${SEED_PROTOCOL_HOME:-$HOME/.seed-protocol}"
mkdir -p "$GARDEN_DIR/receipts" "$GARDEN_DIR/charters"
[ -f "$GARDEN_DIR/garden.md" ] || printf '# Seed Garden\n\nStatuses: SEEDLING → VETTED:PLANT / VETTED:RESHAPE / REFUSED → CHARTERED → BUILDING → GROWING → DORMANT\n' > "$GARDEN_DIR/garden.md"
Doctrine lives at $ROOT/doctrine/DOCTRINE.md; corpus at $ROOT/doctrine/EXEMPLARS.md.
Read the doctrine before any substantive routing — it is short and it is the law here.
Command spelling varies by platform (/seed on Claude Code and OpenCode, $seed on
Codex); when telling the user about commands, use this platform's spelling.
Route by intent, not by wording
| The user wants… | Do |
|---|---|
| ideas for what to build next; "brainstorm with me"; a new good project | skills/sow/SKILL.md flow |
| an idea judged: "is this good?", "vet X", "should I build X" | skills/vet/SKILL.md flow |
| to turn a vetted idea into a plan / first steps / charter | skills/tend/SKILL.md flow |
| to see the garden / status of their seeds | Show garden (below) |
| the philosophy: "why", "what makes a seed good", examples | Summarize DOCTRINE.md; offer EXEMPLARS.md highlights |
| unclear | Show garden + picker: Sow / Vet / Tend / Doctrine |
Showing the garden
Read $GARDEN_DIR/garden.md. Render a compact status view: each seed's title, status,
verdict if vetted, one-line note. Then offer next actions with the platform's native
picker (AskUserQuestion where available; a plain a/b/c list elsewhere) — options drawn
from what the garden actually contains (a SEEDLING suggests "Vet it", a VETTED:PLANT
suggests "Tend it", an empty garden suggests "Sow").
Garden entry format (all skills use exactly this)
## <slug> — <Title>
- status: SEEDLING | VETTED:PLANT | VETTED:RESHAPE | REFUSED | CHARTERED | BUILDING | GROWING | DORMANT
- what: <one line — the served human and the gift>
- gates: <CREATES>/<HONEST>/<SERVES>/<ENDURES enum values, or "unvetted">
- verdict: PLANT | RESHAPE | REFUSE | —
- receipt: receipts/<slug>-<date>.json | —
- charter: charters/<slug>.md | —
- note: <one line>
House rules (bind every skill in this plugin)
- Judgments are enums, not prose. Gate verdicts come from the fixed vocabularies in DOCTRINE.md. Prose explains; enums decide.
- Judge mechanisms, not intentions. Every scheme describes itself as a gift.
- The human decides. This plugin advises, refuses to flatter, and never overrides the user — but it must say "this is a 9router" out loud when it is one.
- Always breed the honest twin. A REFUSE without an attempted honest twin is half a job.
- Real choices go through the platform's native picker, recommended option first.