/vet — the Seed Test
Goal: one idea in, one honest verdict out — PLANT, RESHAPE, or REFUSE — with a
receipt, and an honest twin bred if the verdict isn't PLANT.
Resolve $ROOT and $GARDEN_DIR as in skills/seed/SKILL.md. Read
$ROOT/doctrine/DOCTRINE.md (the gates and vocabularies) and
$ROOT/doctrine/EXEMPLARS.md (calibration corpus).
Step 1 — Neutralize (strip the pitch)
Restate the idea as a mechanism spec with zero adjectives:
- parties: everyone the system touches — users, providers, platforms, bystanders, the commons
- flows: value, money, data, attention — who gives what to whom
- consent: for each party bearing a cost — informed? at this scale/purpose?
- builder keeps: what the builder gets out of it
If material facts are missing, ask the user now — a vet on a vague spec is worthless. Show the user the neutral spec in one compact block before proceeding; they must recognize their idea in it.
Step 2 — Blind vet
The invariant: the vetter sees only the neutral mechanism spec. No authorship, no enthusiasm, no "the user loves this", no garden history. The blindness is the point: it is the guard against vetting-by-flattery. The mechanism enforcing it varies by platform; the invariant never does:
- Claude Code: spawn the
seed-vetteragent (auto-delegated; fresh context). - Codex: invoke it explicitly —
$seed-vetter, vet this mechanism spec: <spec>(TOML port incodex/agents/; explicit invocation is Codex's model). - Other platforms: spawn an isolated subtask/fresh context containing only
$ROOT/agents/seed-vetter.md's instructions plus the spec. If the platform has no isolated context at all, degrade honestly: run the gates yourself in a strictly spec-only frame and record"vetter_blindness": "degraded-inline"in the receipt.
The vetter returns strict JSON (schema in agents/seed-vetter.md).
Step 3 — Map gates → verdict (mechanical, done by you, not the agent)
creates=TRANSFERREDload-bearing → REFUSE; removable → RESHAPEhonest=DECEPTIVE→ REFUSE;SHADED→ RESHAPEserves=HOLLOW→ REFUSE (nothing worth a life's hours);NICE_TO_HAVE→ user's call, say so plainlyendures=UNGUARDED→ never blocks PLANT alone, but the charter (tend) MUST add guards- PLANT requires:
CREATED|EXCHANGED+TRANSPARENT+SERVES
Step 4 — Deliberate with the user
Walk the gates with the agent's evidence. The user may contest a gate with facts the spec missed — if so, amend the spec and re-run the blind vet (facts changed, so the judgment must). Never soften an enum to be kind; kindness here is accuracy. If it is a 9router, say "this is a 9router" and point at the corpus entry that matches.
Step 5 — Breed the honest twin (mandatory on RESHAPE/REFUSE)
Name the load-bearing impurity in one sentence. Keep the need, replace the mechanism: propose 1–3 honest twins, rough-vet each on the spot (enums only). A REFUSE that rescues the need into a PLANT-able twin is this skill's best outcome.
Step 6 — Receipt and garden
Write $GARDEN_DIR/receipts/<slug>-<YYYY-MM-DD>.json:
{"slug": "...", "date": "...", "spec": {...}, "gates": {...}, "verdict": "PLANT|RESHAPE|REFUSE",
"load_bearing_impurity": "... or null", "honest_twins": [...], "deliberation_notes": "..."}
Update the garden entry (status VETTED:PLANT / VETTED:RESHAPE / REFUSED, gates,
verdict, receipt path). Twins the user wants to keep get planted as new SEEDLINGs.
Close: PLANT → offer skills/tend/SKILL.md.