Cheese
Cheese your code π§ β high-quality results as easy as cheese. A portable, harness-agnostic Agent Skills toolkit.
npx -y skills add paulnsorensen/easy-cheese --skill cheeseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Route any dropped-in input β idea, spec path, file path, PR or issue, stack trace, bug report, or bare `/cheese` β to the right workflow skill. Use as the unified entry point β phrases include "/cheese", "what should I do with this", "help me get started", "route this", or any opening message that does not already name a downstream skill.
The file declares its own license as MIT. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
22.0 KB, as published. Nobody here has run it
/cheese
Inputs
Accept anything the user supplies as $ARGUMENTS:
- A natural-language feature description, idea, or question.
- A spec path (
.cheese/specs/<slug>.md) 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 (
PR#142,#87, 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:
--safeβ gate dispatch behind a confirmation prompt.--open-prβ propagate through the implementation chain to terminal/plate; a new PR follows/plate's explicit-choice and review-shape policy.--continue <slug-or-note-path>β resume an in-flight pipeline from a handoff slug or note.--hardβ propagate to/plate, which runs the final artifact-writing gate before/hard-cheeseand publication.
If $ARGUMENTS 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
$ARGUMENTS. 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
skills/culture/SKILL.mdβ restate the ask, list candidate targets, name the deciding signal. Output is the classification that drives step 2. - Classify β match
$ARGUMENTSagainst the intent shapes inreferences/classification.md. Pick the highest-confidence shape; below the threshold, route toclarify(handled by the tier-3 escalation in step 4). - Clarity check (implementation intents only). Run cook's fast-path check for
cookandmold. Directplateintents bypass it. - Escalate (if needed). Tier 1 dispatches the chosen target (writing a mini-spec via
/mold's agent-invoked mode when the dispatch is/cook --autoand no spec path was supplied). Tier 2 autonomously invokes/cultureand/or/briesearchin 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## Escalation. - 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__groundcall, corpus resolved vialist_corpora(probe shape:skills/mold/references/grounding.md) β and fold the top hits into the dispatch packet ashandoff_context.wiki_hits([{page, line, why}]; seereferences/handoff-gate.mdΒ§ Context payloads). When hallouminate is absent or no wiki corpus exists, skip and degrade perreferences/optional-plugins.md. - Announce β print a short block (Intent / Reason / Target, plus wiki hits when present) per the format in
## Output. Cite the signal that drove the routing decision. - Self-check β run the coherence questions in
references/coherence-check.md. If any fails, downgrade toclarify(tier 3) orresearch. - Dispatch β without
--safe, run the chosen skill immediately with its exact dispatch command and context packet, in the same turn as the announce. With--safe, issue a handoff gate perreferences/handoff-gate.md(recommended target pre-selected, at least one alternative,Stop) and wait for the user's selection before dispatching.
/cheese 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 /mold's agent-invoked mini-spec mode in tier 1 when /cook --auto needs a spec first; that write happens inside /mold'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 ${CLAUDE_SKILL_DIR} 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 cook and mold intents, /cheese runs cook's fast-path check (Β§ "Standalone fast-path" in skills/cook/SKILL.md) and escalates through three tiers:
Tier 1 β clear (all three checks pass). First run the ## Spec-discovery check β if an existing spec in .cheese/specs/ substantially matches the request, dispatch /cook --auto against it and skip the mini-spec write. Otherwise the agent invokes /mold's agent-invoked mini-spec mode (see skills/mold/SKILL.md Β§ Agent-invoked mini-spec mode) to write .cheese/specs/<slug>.md, then dispatches /cook --auto <spec-path> in the same turn as the announce, where <spec-path> is the explicit mini-spec path returned by /mold. Do not collapse that path to a bare <slug>. No user interaction. When the input already names a spec path under .cheese/specs/, skip both the discovery scan and the mini-spec write and dispatch /cook --auto against the existing path directly.
Tier 2 β borderline (any check fails or is uncertain). Agent autonomously invokes /culture (internal thinking) and/or /briesearch (internal research), in any order, to fill the missing context. After the internal pass, re-run the cook fast-path check on the refined understanding. If all three checks now pass, drop into tier 1 (the mini-spec records the culture / briesearch synthesis under ## Provenance). Otherwise tier 3.
Tier 3 β still borderline after tier 2. Block on the human via a single targeted host-routed question whose answer closes the failing check. On the answer, re-enter classification with the augmented input. This is the only sanctioned user-facing prompt in the autonomous-by-default path; the clarify intent and the below-medium-confidence path both map here.
--safe does not skip the escalation logic β the tiers still run silently β but it inserts a handoff gate before the final dispatch in every tier. The recommended option stays auto-flavoured (/cook --auto <spec-path> etc., using the explicit mini-spec path); the non-auto variant is offered as the alternative.
Non-implementation intents bypass the escalation entirely. Their target skills own their own internal escalation: /pasteurize has its Phase 1 feedback-loop check, /briesearch clarifies missing version/scope inline, /age and /cure work directly against the supplied diff or report.
Rejected-directions check
Before dispatching any mold intent, scan .cheese/.out-of-scope/ for rejection records whose ## Direction 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-mold intents skip this check.
Spec-discovery check
Before minting a new mini-spec for a tier-1 cook or mold dispatch, look for an existing spec that already covers the request. Specs land in the durable XDG corpus (default_root_for_phase("specs")), not repo-local, so probe there:
- hallouminate present β
groundthe candidate spec text against thecheese-durablecorpus for a near-duplicate (semantic match across every project's durable specs). Detect-and-degrade perreferences/optional-plugins.md. - hallouminate absent β fall back to
resolve_slug(candidate_slug, phase_hint="specs")(the XDG-correctdifflibresolver inshared/scripts/paths.py), and note the degrade once: name-based rather than semantic matching. This keeps slug-level dedup on the headless/cron path where hallouminate is routinely unavailable.
Act on the result, do not guess:
- One clear match (high confidence) β surface the resolved spec path in one line and dispatch against it (
/cook --auto <resolved-spec-path>) instead of writing a duplicate. - Multiple plausible matches, or a weak best match β under
--safe, present the candidates in the handoff gate for the user to pick; without--safe, fall back to minting a fresh mini-spec rather than risk dispatching against the wrong spec.
Skip silently when no specs exist yet, and when the user already named a spec path (the path is authoritative).
--continue
/cheese --continue <slug-or-note-path> is the manual fresh-context resumption path. Use it after compacting the conversation, after /ultracook has stopped on a halt, or whenever the user wants to drive the pipeline by hand from a cleared context.
Flow:
- Read the full user message, not just the
--continueargument. Any prose accompanying the invocation is a directive list; execute or answer it before β and where it conflicts, instead of β the handoff protocol below. The handoff file restores state; the user's live message overrides it. - If the argument is a readable
.mdhandoff path, read that file directly and derive<slug>from its basename. If the path contains a.cheese/parent, treat the directory above.cheese/as the original repo root for any repo-relative paths in the handoff. - Otherwise, scan for the most recently modified handoff slug across
.cheese/{cook,press,age,cure,affinage,notes}/<slug>.md. - If none exist, offer to start the pipeline from scratch β
/moldfor fuzzy specs,/cookfor clear asks,/ultracookfor high-blast-radius specs β and stop. - If a handoff exists, read it and surface the orientation line so the user knows where they are. Parse
status:,next:, and optionalmode::- First parse optional
mode:. Missingmode:meansmode: single, preserving all existing handoffs. Inmode: single,next:remains the runnable phase and the existing bullets below apply. Inmode: parallel,next:is only the coarse resume category; prefernext: taskswhen the handoff may mix skills. Never dispatchnext:directly in parallel mode. Instead parse the handoff's optionalparallel:block and requiredtasks:list, where each item carries an explicitcommand:such as/ultracook .cheese/specs/kip-77-ai-test-server.md,/briesearch ..., or/affinage <pr>. - When
mode: parallelandtasks:is present β dispatch one isolated agent per task in the same response / same turn so the tasks run concurrently. Each agent receives the original handoff path, repo root, task name/slug if present, exactcommand:, any task-local branch/worktree notes, and an instruction to work only that task and not run sibling tasks. Use the taskcommand:as authoritative even when tasks name different skills or intents. For write-capable commands (/cook,/ultracook,/cure,/affinage, or any command expected to edit a branch), requireslug,repo,branch:,branch_from, and a checkout-isolation plan. Supportedparallel.worktree_strategyvalues areexisting(every write task declares a distinctworktree:),create(create one git worktree per task underworktree_rootfrombranch_from), andharness(ask/create one harness-managed isolated thread or worktree per task). Never run parallel write tasks in the same checkout or a shared checkout. Iftasks:is missing, any task lackscommand:, write tasks lack branch/worktree isolation, branches collide, worktrees collide, or the strategy is unsupported, stop and ask for a corrected handoff instead of guessing. Under--safe, offer the parallel dispatch as the pre-selected option, withStoplast. - When
status:starts withhaltandnext:names a phase (mold | cook | press | age | cure | affinage | ultracook) β surface the halt reason, then treat/cheese --continue <slug>as the user's explicit permission to dispatch the next phase.affinageis the exception: it takes a PR ref, not a slug, so read the PR from the slug'sartifact:field (PR#<n>or its URL) and dispatch/affinage <pr>; fall back to a bare/affinage(branch auto-detect) only whenartifact:carries no PR. Under--safe, offer the dispatch as the pre-selected option, with/ultracook \<slug\>as an alternative andStoplast. - When
status:isokandnext:names a pipeline phase (mold | cook | press | age | cure | affinage) β dispatch/\<next\> \<slug\>directly, with the sameaffinageexception above. Under--safe, offer it as the pre-selected option, with/ultracook \<slug\>as an alternative andStoplast. - When
status:isokandnext:names a read-only kickoff (briesearch | culture) β auto-dispatch it directly (/briesearch \<arg\>,/culture), taking\<arg\>from the handoff's orientation line. These are read-only and low-risk, so frictionless dispatch is the goal; do not gate them behind a question. Under--safe, offer the dispatch as the pre-selected option withStoplast. - When
status:starts withgated:β do not auto-dispatchnext:, whatever it names. If the accompanying message contains directives or already answers the gate, execute them and surface the gate as one line of plain text β do not raise the structured question. Otherwise, surface the one-line decision fromstatus:plus the body's open-questions/blockers, then ask the user which direction: research / decide / build. First classify each open gate item as mechanical or design perreferences/ask-user-question.mdΒ§ When to structure: a mechanical item may go straight to that structured question, but a design item whose weighing was not already shown this session must not β re-establish the weighing in prose first (both ends, code-grounded evidence, pushback invited), converge conversationally, then ask at most one structured confirm, and never bundle multiple design forks into one prompt. Dispatch nothing until the user picks; on the pick, route research β/briesearch, build β the named phase, decide β resolve the decision with the user, then re-read the handoff. Never fire a binary design popup that presumes the user wants to decide. - When
next:is a list (next: [<skill> "<arg>", ...]) βorder:is required; if it is missing, stop and ask for a corrected handoff. The inline list accepts only read-only skills (briesearch | culture); if any item names a write or pipeline skill, reject it and point at the heavyweightmode: parallel+tasks:block (which carries the worktree/branch isolation those skills need). Withorder: parallel, dispatch one read agent per item in the same turn so they run concurrently; withorder: sequential, dispatch the items in listed order. Under--safe, offer the batch dispatch as the pre-selected option withStoplast. - When
next:isholdβ surface the orientation line and stop without dispatching.holdmeans restore context and wait for instruction; it is not a runnable command. Distinct fromdone(terminal record) βholdis a live session paused for input. - When
next:is missing entirely β flag the handoff as malformed (malformed handoff: next: required) and stop. Do not guess a next step or default to a phase;holdis the author's value for "no action." - When
next:is terminal (donefrom a phase or culture-notes slug) β report the terminal state and stop. Ifstatus:starts withhalt, call it a non-resumable halt (per cook/press's slug contract a resumable halt carries a runnablenext:, sohalt+next: donecan only mean non-resumable); otherwise call it pipeline completion. The terminal value surfaces state to the user, not a runnable command; never construct/done <slug>. - When the handoff carries a recorded
baseline:block β treat it as settled state, not an open question: never re-ask about or re-halt on the failures it records, whether in this reader or in the dispatched phase. See../cook/references/quality-gates.md.
- First parse optional
Under --safe, gate the resumption through the handoff gate in references/handoff-gate.md; otherwise run the named phase immediately with the slug. The slug files are the resumability contract: they tell the router where the pipeline is and how to move it forward.
--continue does not propagate --auto β dispatch /<next> <slug> in its default interactive mode even with no --safe. The user can append --auto explicitly (/cheese --continue <slug> --auto) to opt back in.
Confidence and the clarify gate
Treat classification confidence qualitatively (low | medium | high). Threshold for direct routing is medium or better. Below that, route to tier 3 (clarify):
- Ask exactly one question through the host routing guide in
references/handoff-gate.md. - Offer the two most-likely targets as alternatives plus
Stop. - Re-enter
/cheesewith the answer.
At medium or above, dispatch directly. For implementation intents, the cook-fast-path clarity check adds a second layer (see ## Escalation).
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 | gh | the URL or numbers the user provided |
Confirming routing target with the user (only under --safe or clarify) | host-routed structured question per references/handoff-gate.md | a numbered list with explicit dispatch commands |
/cheese keeps tool use light. Beyond the single wiki-grounding probe in ## Flow, 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_hitsis 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 --safe, via the handoff gate). If clarify is chosen, replace the dispatch with the single clarifying question.
Handoff
Without --safe, cheese propagates --auto to any target that supports it. Under --safe, 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 β
/briesearch(recommended). No auto variant. - rubber-duck β
/culture(recommended). Only reached when the user explicitly opted out of writes. No auto variant. - mold β
/mold(recommended). Safe-mode alternative:/briesearch firstwhen external evidence is missing. - cook β default:
/cook --auto <slug-or-path>. Safe-mode alternatives:/cook <slug-or-path>(no auto),/mold firstif scope is borderline. - ultracook β
/ultracook <slug-or-path>(recommended for a high-blast or decomposable spec). The decomposer picks the mode: parallel curd fan-out when the spec decomposes into 2+ file-disjoint curds, else the linear 7-phase chain. - plate β
/platefor 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:/pasteurize <input>(no auto),/cultureonly when the user explicitly wants no-write diagnosis. - age β
/age <ref>(recommended). Safe-mode alternative:/age --scope <path>when the user named a path glob. - age-then-cure β
/age <slug>(recommended). Safe-mode alternative:/cure <slug>when a fresh report already exists.
Pre-select only the highest-confidence target. Without --safe, surface the target as a decision, not a question β dispatch the recommended option directly. With --safe, 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).