/cheese
Inputs
Accept anything the user supplies as
:
- A natural-language feature description, idea, or question.
- A spec path () or pasted spec content.
- A bug report, stack trace, failing test output, or reproduction steps.
- A file path, glob, or directory.
- A PR or issue reference (, , GitHub URL).
- A research question about an external library, API, or pattern.
- An empty or near-empty prompt — treat as "what's next?" and clarify.
Optional flags:
- — gate dispatch behind a confirmation prompt.
- — propagate through the implementation chain to terminal ; a new PR follows 's explicit-choice and review-shape policy.
--continue <slug-or-note-path>
— resume an in-flight pipeline from a handoff slug or note.
- — propagate to , which runs the final artifact-writing gate before and publication.
If
is missing entirely and there is no recent context to lean on, ask one clarifying question through the host routing guide in
references/handoff-gate.md
before classifying.
Flow
- Read the full user message, not just . Any prose accompanying the invocation is a directive list; execute or answer it before — and where it conflicts, instead of — the flow's defaults and any handoff protocol. The handoff file restores state; the user's live message overrides it.
- Think first (silent). Model the problem internally per — restate the ask, list candidate targets, name the deciding signal. Output is the classification that drives step 2.
- Classify — match against the intent shapes in
references/classification.md
. Pick the highest-confidence shape; below the threshold, route to (handled by the tier-3 escalation in step 4).
- Clarity check (implementation intents only). Run cook's fast-path check for and . Direct intents bypass it.
- Escalate (if needed). Tier 1 dispatches the chosen target (writing a mini-spec via 's agent-invoked mode when the dispatch is and no spec path was supplied). Tier 2 autonomously invokes and/or in internal mode, then re-runs the clarity check. Tier 3 blocks on a single targeted host-routed question and re-enters classification on the answer. See .
- Wiki grounding (when hallouminate is present). Derive a search query from the dropped-in input, ground it against the wiki corpus — at most one
mcp__hallouminate__ground
call, corpus resolved via (probe shape: skills/mold/references/grounding.md
) — and fold the top hits into the dispatch packet as handoff_context.wiki_hits
(; see references/handoff-gate.md
§ Context payloads). When hallouminate is absent or no wiki corpus exists, skip and degrade per references/optional-plugins.md
.
- Announce — print a short block (Intent / Reason / Target, plus wiki hits when present) per the format in . Cite the signal that drove the routing decision.
- Self-check — run the coherence questions in
references/coherence-check.md
. If any fails, downgrade to (tier 3) or .
- Dispatch — without , run the chosen skill immediately with its exact dispatch command and context packet, in the same turn as the announce. With , issue a handoff gate per
references/handoff-gate.md
(recommended target pre-selected, at least one alternative, ) and wait for the user's selection before dispatching.
is a router, not a worker: it never edits files, runs tests, or opens PRs. Use only the host's read, search, and dispatch capabilities. The sole exception is invoking
's agent-invoked mini-spec mode in tier 1 when
needs a spec first; that write happens inside
's own capability scope, not the router's.
Portability reference:
references/harness-portability.md
. It covers helper resolution, sub-agent dispatch, GitHub operations, and handoff transitions; prefer the bundled or repo-local helper first, and treat
as optional host-provided fallback.
The handoff blocks below are the portable contract; slash commands are host renderings, not the control model.
Intent shapes
The full classification table — including all intent shapes, signals, disambiguation rules, and edge cases — lives in
references/classification.md
.
Escalation
For
and
intents,
runs cook's fast-path check (§ "Standalone fast-path" in
) and escalates through three tiers:
tier 1 (clear) dispatches immediately — reusing a matching spec via the spec-discovery check, or having
write a mini-spec, with no user interaction;
tier 2 (borderline) autonomously invokes
and/or
to fill missing context, then re-runs the fast-path check;
tier 3 (still borderline) blocks on one targeted host-routed question and re-enters classification on the answer.
does not skip the tiers, it only gates the final dispatch. Full tier mechanics and the spec-discovery check:
.
Non-implementation intents bypass the escalation entirely. Their target skills own their own internal escalation:
has its Phase 1 feedback-loop check,
clarifies missing version/scope inline,
and
work directly against the supplied diff or report.
Rejected-directions check
Before dispatching any
intent, scan
for rejection records whose
section's one-line description substantially matches the incoming request. If a match is found:
- Surface the previously-rejected direction and its rationale in one line.
- Ask the user whether to proceed with the new request or take a different angle.
- Do not suppress or re-propose the rejected direction silently.
This check is lightweight — a glob + keyword scan over
.cheese/.out-of-scope/*.md
. Skip silently when the directory does not exist. Non-
intents skip this check.
--continue
/cheese --continue <slug-or-note-path>
is the manual fresh-context resumption path — use it after compacting the conversation, after
's fan pathway halts, or whenever the user wants to drive the pipeline by hand from cleared context. Before dispatching anything on a
invocation, read the full resume flow — handoff discovery,
/
parsing, parallel-task dispatch, gated-status handling, and baseline treatment — in
references/continue-resume.md
.
does
not propagate
— dispatch
in its default interactive mode even with no
. The user can append
explicitly (
/cheese --continue <slug> --auto
) to opt back in.
Confidence and the clarify gate
Treat classification confidence qualitatively (
). Threshold for direct routing is
or better. Below that, route to tier 3 (
):
- Ask exactly one question through the host routing guide in
references/handoff-gate.md
.
- Offer the two most-likely targets as alternatives plus .
- Re-enter with the answer.
At
or above, dispatch directly. For implementation intents, the cook-fast-path clarity check adds a second layer (see
).
Preferred tools and fallbacks
When the input is a path or slug, call the selected source-code read or search backend directly according to
references/code-intelligence-routing.md
.
Beyond source-code routing there are router-specific tools:
| Need | Prefer | Fallback |
|---|
| PR / issue context | | the URL or numbers the user provided |
| Confirming routing target with the user (only under or ) | host-routed structured question per references/handoff-gate.md
| a numbered list with explicit dispatch commands |
keeps tool use light. Beyond the single wiki-grounding probe in
, treat anything heavier than a single-file read or one search call as a sign the work belongs in the downstream skill, not in the router.
Output
Always emit, in order:
- Detected intent — one line, e.g.
Intent: cook (clear single-file fix)
.
- Reason — one line citing the signal (
reason: spec path .cheese/specs/foo.md
).
- Target — the chosen skill, e.g.
Target: /cook .cheese/specs/foo.md
.
- Wiki hits — when
handoff_context.wiki_hits
is non-empty, one line per hit: wiki: <page>:<line> — <why>
— always rendered before dispatch so the user sees what memory informed the routing and can challenge stale hits. Omit the section when hallouminate is absent.
Then dispatch in the same turn (or, under
, via the handoff gate). If
is chosen, replace the dispatch with the single clarifying question.
Handoff
Without
, cheese propagates
to any target that supports it. Under
, dispatch waits for the user's selection via the handoff gate; the auto variant stays the pre-selected recommended target.
Default targets per intent:
- clarify — single targeted question; no skills run until the answer arrives.
- research — (recommended). No auto variant.
- rubber-duck — (recommended). Only reached when the user explicitly opted out of writes. No auto variant.
- mold — (recommended). Safe-mode alternative: when external evidence is missing.
- cook — default:
/cook --auto <slug-or-path>
. Safe-mode alternatives: (no auto), if scope is borderline. A high-blast-radius or decomposable spec triggers cook's own fan pathway automatically — no separate dispatch needed.
- ultracook (retired) —
/ultracook <slug-or-path>
resolves to , carrying forward //.
- plate — for commit-only work, ordinary PR publication, or stack publication/maintenance. New PRs infer an obviously cohesive single, recommend and ask for reviewable ordered stacks, and ask when shape is ambiguous; explicit choices win.
- debug — default:
/pasteurize --auto <input>
. Safe-mode alternatives: (no auto), only when the user explicitly wants no-write diagnosis.
- age — (recommended). Safe-mode alternative: when the user named a path glob.
- age-then-cure — (recommended). Safe-mode alternative: when a fresh report already exists.
Pre-select only the highest-confidence target. Without
, surface the target as a decision, not a question — dispatch the recommended option directly. With
, dispatch waits for the user's selection; the captured dispatch packet runs immediately on a non-stop choice.
Rules
- Never paraphrase or summarise downstream skill output — that is the downstream skill's job.
- A declined question gate is an answer. Do not re-raise it; state the open item as one line and wait for freeform input.
References
references/classification.md
— intent shapes, signals, disambiguation rules.
references/coherence-check.md
— pre-dispatch self-checks that downgrade misroutes.
references/handoff-gate.md
— cross-harness post-selection dispatch contract (shared across workflow skills).
- — full escalation-tier mechanics and the spec-discovery check.
references/continue-resume.md
— the resume flow.