mold
Turn a high-leverage design decision into an approved spec through grounded dialogue. Use it when a leverage trigger fires (auth, irreversible effects, concurrency, contracts, destructive ops, a new slice, a cross-slice dependency, an invariant gap) or when the user asks for a spec or design. Typica
By paulnsorensen · 396 installs
npx skills add paulnsorensen/easy-cheese --skill mold
Source repository · Upstream listing
/mold
Ceremony scales to the job. The Bounds pass picks one of three tiers from references/tiers.md : Quick writes a validated mini spec, Light runs only the dialogue modes the open forks need, and Full runs the whole Flow below. Saving a spec needs no extraction approval. Cook still needs an explicit user request. /cheese 's tier 1 escalation enters mini spec mode; see Agent invoked mini spec mode .
Flow
1. Bounds pass — open the Goal / Decided / Asking / [AGENT DECIDED] ledger with the goal pinned as one sentence; only an explicit user fork changes it. Split it into G n clauses ( references/handshake.md § Goal coverage). Map every input's goals and non goals as one [AGENT DECIDED] line; ask the user only when the goal is genuinely unknown or a leverage trigger fires. Run the shape check, then announce the tier with its reason ( references/tiers.md ). Quick exits here to Agent invoked mini spec mode without a write approval turn. Upgrade the tier whenever the evidence changes; never downgrade silently.
2. Route — choose the secondary mode from references/modes.md , announce it, and correct false premises first.
3. Dialogue — consequential forks are the user's to pick. A fork is consequential per the leverage line in ../age/references/voice.md . Every other fork is [AGENT DECIDED] . Supply options, trade offs, and evidence before you ask. Ground each critical claim through code, the [Validate Cycle](references/validate cycle.md), or a [Prototype Cycle](references/prototype cycle.md). Resolve every contradiction. Render the decision map after three consecutive fork questions, or on request.
4. Sketch — For work across modules or with a new public interface, run references/shape check.md . Bind identity and role nouns to code referents. Record the Placement block; no bodies.
5. Plan and validate — run the fresh context fork coherence taste test with python3 skills/mold/scripts/mold.pyz taste test ; a failure reopens only named forks, and the third failed verdict stops. The taste review guides the spec but is not a Cook execution reference. For bound curd work, dispatch a typed PlannerRequest , validate its PlannerResultWriterView (one retry, then save without runnable inputs), and normalize on the host. A clear single curd task can instead use standalone Cook without a planner. Show semantic curds and waves before any Cook choice. See references/curdle.md § "Typed planner dispatch".
6. Readiness check — Before saving, run the coherence self check and strict spec validation. Save a draft when unresolved parent work remains; record each hold in execution holds: . Finalization refuses ready while an entry remains. User approval is not a prerequisite for writing. Before Cook, require an explicit user selection of scope and route. See references/handshake.md and references/early curds.md .
7. Curdle — Resolve the durable spec path with python3 skills/mold/scripts/mold.pyz artifact path specs <slug and read path from its JSON reply. Write the validated draft and read it back. Retain typed plan evidence and unresolved holds. Write local issue drafts and durable decisions; publish follow ups only after their own approval. A concrete bounded curd may use references/early curds.md while Mold continues shaping its parent. The selected spec path can enter standalone Cook; bound curd execution also receives validated direct refs, never a pointer.
8. Offer Cook or keep shaping — after reconciliation, run [ python3 skills/mold/scripts/mold.pyz curd count ](references/curd count.md). A saved draft is not an execution request. If the user selects bound curd execution, run scripts/mold.pyz finalize and pass only ready direct inputs. A standalone clear task can enter Cook by spec path without machine finalization. Otherwise keep shaping or stop without a Cook command.
Portability: [rules](../cheese/references/harness portability.md). Slash commands are host renderings, not the control model.
Follow up candidates
Every non goal and explicit dialogue deferral becomes a [FOLLOW UP?] follow up candidate. Dispose of the set before a runnable Cook handoff; details: references/handshake.md § Follow up disposition.
Modes
Mode Use when Goal
Explore The idea is vague Identify the real problem and pain point
Ground A file, bug, or existing doc is named Verify facts against evidence
Shape The goal is known but approach is open Compare viable options (Do Nothing always included)
Sketch Interfaces or module boundaries matter Lock responsibilities and seams
Grill A favoured approach needs stress testing Steelman each item, then put every design changing call to the user as a fork
Diagnose A symptom, failure, or trace is supplied Build a Loop → reproduce → hypothesize → confirm root cause
Modes: references/modes.md. Evals: references/evals.md. Canvas: [review canvas.md](references/review canvas.md).
Agent invoked mini spec mode
/cheese 's tier 1 escalation calls /mold after the call site passes all Cook fast path checks. The Quick tier enters the same mode without a write approval turn. It produces a validated draft without design dialogue. Return the spec path. After the spec validates, show it and ask one direct Cook question. On explicit selection, dispatch /cook spec <path for clear standalone work; do not invent a pointer or require a planner. Append hard when the user passed it.
The full coherence checklist does not run in this mode. The agent introduced scope check still runs implicitly. Every distinguishing noun must come from the user's input or tier 2 /culture / /briesearch synthesis. Never add one silently.
Full procedure, the mini spec schema, and the Provenance rules: references/mini spec mode.md .
Preferred tools and fallbacks
Call source code search, read, and edit backends according to [ code intelligence routing.md ](../cheese/references/code intelligence routing.md). Shape checks use semantic caller search plus dependency context; procedure: references/shape check.md .
Mold specific tools beyond source code routing:
Need Prefer Fallback
External validation /briesearch with Context7/Tavily user docs, repo docs, or note as unverified
Wiki grounding (Ground entry + decision points; scope per references/grounding.md § When to probe) mcp hallouminate list corpora + mcp hallouminate ground on repo:<repo :wiki record hallouminate: absent in the ledger, proceed on code evidence, and cap at speculating when design rationale is central
The grounding record precedes the first structured question: the ledger holds a probe result — citations or hallouminate: absent — first. Mark each unsupported claim [?] until settled.
Sub agent context gate
/mold owns the dialogue, contradictions, and save approval state. Do not delegate these items. Delegate evidence heavy code work to a fresh context explorer and external research to a researcher . Shape uses an explorer digest as input. Record parent context exploration as a degraded path. See references/context budget.md for budgets and checkpoints.
Gate graph
python3 skills/mold/scripts/mold.pyz gate graph render dot svg png mermaid renders one gate model. Image targets use Mermaid when Graphviz is unavailable. Tests keep gate nodes aligned with the handshake checklist. See references/gate graph.md .
Spec provenance and Test Contracts
Every Mold produced spec carries a provenance marker in frontmatter:
A spec has no disposition field. Test Contracts is optional: a spec may
include it, and no gate requires it. Row level rules: references/curdle.md
§ Test Contracts.
Fork taste gate
python3 skills/mold/scripts/mold.pyz taste test binds the verdict to draft SHA256 and each settled fork. Stale, partial, or blocked verdicts fail; a failure reopens only named forks, with two rounds. Approved specs pass unchanged metadata to /cook spec <spec path (add auto only when the user chose it) for standalone work; bound curd work uses /cook auto result <result path .
Each fork appears in Approach, Interface sketches, and Acceptance, plus Test Contracts when the draft has them. Do not rename sections. Tag reflecting lines with fork id and run taste test precheck before dispatch. goal must survive verbatim in Problem statement ( goal drift ); each G n clause carries an Acceptance or disposition tag ( goal coverage ). See references/curdle.md § Spec template and references/gate graph.md .
Execution gate
Mold may save a validated parent spec or early curd mini spec without an approval turn. The agent coherence check still controls what the artifact claims as settled. Print the narrowing delta ( taste test coverage ) and the scope audit table before presenting any Cook option. Unresolved decisions remain visible holds, not implicit approvals. See references/handshake.md .
Never start Cook from a saved spec, silence, auto , or a general design approval. The user must select the exact curd or parent scope and a Cook route. A changed scope or plan needs a new selection. A failed bound finalization leaves a saved draft without executable refs. See references/early curds.md .
hard
Mold never runs the metacognitive check. Plate alone runs it at the
verified artifacts boundary. Mold appends hard to every Cook command that
it emits when the user passed the flag. Cure forwards the same flag to Plate.
See ../hard cheese/references/composition.md .
Handoff
Pipeline: culture → [mold] → cook (⇄ press) → age → cure → plate
After Curdle's phase two finishes, run [ python3 skills/mold/scripts/mold.pyz curd count ](references/curd count.md) for the blast radius digest. A draft offers no Cook command. On explicit Cook selection, retain the selected spec path for standalone work. Bound curd work dispatches the printed finalize command, /cook auto result <result path ; the result carries request id , spec ref , planner result ref , plan ref , and exact coverage . Prompt through the shared handoff gate ([policy](../cheese/references/handoff gate.md)); never pre select. Keep applicability, contract, and taste review metadata unchanged. Append hard when the user passed it.
The digest's mode is orientation, not a skill or Cook gate. Render the fixed blast radius menu from decomposable , candidate curds , verdict , and mode ; see references/handoff menus.md .
Rules
Dialogue first; artifacts are the by product.
Tiered lettered options. Consequential forks use A/B/C/D choices via the question transport at ../cheese/references/ask user question.md . Never decide them silently. Everything below the leverage line is [AGENT DECIDED] by default: make the call, log a one line vetoable alternative in the ledger, and do not ask. A fork is valid only after its depth was contributed in dialogue first. Precede every structured question with visible prose that weighs the fork and the evidence. Keep one open picker.
Fork cards. Before each consequential question, show a fork card: what it decides, what it moves, and each branch as a symbol table or plain text graph. Offer Explain more as a choice; an unclear reply re renders the same fork with more context ([fork questions](references/fork questions.md)).
Altitude tag. Every Asking fork names the acceptance criterion, public seam, or non goal it moves. A fork that moves none, or that sits below the leverage line, is [AGENT DECIDED] or a follow up candidate, never a user question.
Decision ledger. Each round prints Goal / Decided / Asking / [AGENT DECIDED] , the goal verbatim. Curdle persists consequential decisions to [ADRs](references/adr.md) and minor ones to the spec. The taste verdict names every settled consequential entry exactly once.
Decision map and fork round cap. Stop after three consecu