πŸ§€ easy-cheese πŸ§€

CI License: MIT Latest release OpenSSF Scorecard CodeQL skills.sh Conventional Commits Agent Skills PRs welcome Buy Me a Coffee

Don't know what to do? Just /cheese it.

"The cheese must flow."

A portable, harness-agnostic Agent Skills toolkit β€” self-contained SKILL.md files any Agent Skills-compatible harness can load. No agents, no compiled bundles, no repo-wide MCP requirement. The vocabulary (mold, culture, cook, press, age, cure) reads as a workflow you can dip into anywhere.

Contents

Why cheese? Two reasons

  1. From gaming slang: a "cheese" win is cheap, easy, and disproportionately effective β€” exactly the design center (correctness, token efficiency, quality).
  2. What's life without whimsy? πŸ§€

Skill layout

This repo follows the Agent Skills spec:

skills/
└── <skill-name>/
    β”œβ”€β”€ SKILL.md          # required: name + description + body
    β”œβ”€β”€ references/       # optional: detail pulled in on demand
    β”œβ”€β”€ scripts/          # optional: executable helpers
    └── assets/           # optional: templates / static resources

Each SKILL.md is self-contained markdown with YAML frontmatter. There are no nested sub-skills; deeper material lives in references/<topic>.md so the harness can load it progressively.

Content shared across skills lives in the always-installed cheese skill's references/ directory (e.g. skills/cheese/references/handoff-gate.md), so both installers ship it as part of cheese. Skills reference it by sibling-relative path (../cheese/references/<file>.md from a SKILL.md, ../../cheese/references/<file>.md from a references/*.md) β€” a form that resolves identically in the repo tree and any installed skills directory.

Skills

Workflow skills

Skill path Command Purpose
skills/cheese/SKILL.md /cheese Unified entry point. Classifies any input (idea, spec path, PR, stack trace, file path), announces the routing decision as a short three-line block (Intent / Reason / Target), and dispatches the chosen target immediately with --auto propagated downstream. Add --safe to gate dispatch behind a confirmation prompt and surface non-auto alternatives.
skills/briesearch/SKILL.md /briesearch Research technical questions across docs, web, codebase, and GitHub examples with confidence-capped synthesis.
skills/mold/SKILL.md /mold Shape fuzzy ideas into grounded specs through dialogue, validate cycles, and a two-key handshake.
skills/culture/SKILL.md /culture The agent's internal-thinking skill β€” invoked silently by /cheese and other workflow skills to model a problem before dispatching. Surfaces to the user only when they explicitly opted out of writes ("no writes", "rubber-duck this"). Hard invariant: writes only the opt-in .cheese/notes/<slug>.md handoff at session end, and only when the user asks for notes.
skills/pasteurize/SKILL.md /pasteurize Diagnose hard bugs, flaky failures, and performance regressions with a feedback-loop-first investigation, then hand off into /cook β†’ /press β†’ /age β†’ /cure.
skills/cook/SKILL.md /cook Implement clear specs via cut β†’ cook β†’ taste-test with scoped edits and tests.
skills/press/SKILL.md /press Harden cooked changes with coverage, assertion, and boundary checks.
skills/age/SKILL.md /age Review diffs across ten staff-engineer dimensions and produce a severity-grouped findings report.
skills/affinage/SKILL.md /affinage Triage external PR claims β€” review comments and CI failures β€” through the /age lens, hand the chosen fixes to /cure, then post replies back on GitHub.
skills/cure/SKILL.md /cure Fix user-selected findings, validate, and prepare the branch for shipping.
skills/plate/SKILL.md /plate Final writing, validation, commit, and ordinary-or-stacked PR publication gate. Explicit topology choices win; obvious cohesive work opens as one PR, while stack recommendations and ambiguous shapes ask before mutation.
skills/hard-cheese/SKILL.md /hard-cheese (or --hard flag) Metacognitive vibecheck gate before review β€” asks the author to explain the diff's causal logic, grades the explanation against the SOLO Taxonomy. Standalone or via --hard propagation through the pipeline.
skills/ultracook/SKILL.md /ultracook Autonomous fresh-context pipeline for high-blast-radius specs. Typed phase agents run each curd as sequential same-worktree spawns: coder (cook) β†’ coder (press) β†’ reviewer (age) β†’ coder (cure) β†’ reviewer (final age), followed by parent-owned commit-only /plate. Post-merge uses press β†’ age β†’ cure β†’ age; an indivisible spec keeps the seven-phase linear chain.
skills/melt/SKILL.md /melt Resolve merge / rebase / cherry-pick conflicts via the structural cascade (mergiraf β†’ rerere β†’ kdiff3) with batch, pick-side, and lockfile helpers.
skills/wheypoint/SKILL.md /wheypoint Mark a checkpoint: compact a mid-task conversation into a durable handoff document at .cheese/notes/<slug>.md (resumable slug + state-mapped suggested-skills + redacted secrets) so a fresh agent can resume via /cheese --continue <slug>.

Tool skills

The workflow skills can delegate code search, reading, and editing to these backend-aware skills when tilth or an equivalent native source-code backend is available:

Skill path Command Purpose
skills/cheez-search/SKILL.md /cheez-search AST-aware code/text/regex/caller search via tilth MCP, harness-native AST search, or LSP. Replaces grep / rg / find.
skills/cheez-read/SKILL.md /cheez-read Smart file/directory reading through a freshness-aware backend; tilth MCP is preferred because it emits stale-write-safe edit tags. Replaces cat / head / tail / ls.
skills/cheez-write/SKILL.md /cheez-write Anchored, surgical edits through tilth MCP or an equivalent harness-native stale-snapshot edit tool. Never rewrites whole files blindly.

Dispatching skills resolve agent type, power, permissions, isolation, and fallback through the shared agent-resolution.md contract.

The cheez-* skills tell the model which source-code backend to use when the harness has one. Prefer tilth MCP by name; use LSP for type-grounded definitions/references/renames/code actions, ast_grep/sg for structural patterns and codemods, and anchored/stale-checking edits for ordinary block changes. Plain text shell tools are fallback evidence only, not equivalent source-code backends.

cheez-* router protocol

The three cheez-* skills are designed to chain. The standard sequence:

  1. /cheez-search β€” locate the symbol, caller, content match, or file with tilth, AST search, or LSP.
  2. /cheez-read β€” read the target file or section with enough line/hash/snapshot context for a safe edit.
  3. /cheez-write β€” apply the change through tilth edit, LSP workspace edit, AST rewrite, or another stale-checking edit backend.

Workflow skills (/cook, /age, /cure) call into this chain when they need code intelligence. A skill should never search-then-edit without reading in between β€” the read is what produces the anchors that make the edit safe.

Source-code tool routing

For source code, route by capability instead of command name:

  • LSP wins for type-grounded definitions, references, renames, and code actions.
  • AST search / sg wins for syntax-shaped patterns and codemods.
  • tilth wins for broad source search/read/edit context, anchors, outlines, token estimates, and dependency context.
  • Anchored or stale-checking edits win for ordinary block/range changes.

Plain shell search/view/edit is fallback evidence only; use it for non-code paths, logs, generated output, or when no semantic backend exists, and name the downgrade.

Installing tilth MCP

See Installing MCP servers below β€” expand the tilth section for the preferred cheez-* backend. If tilth is unavailable, use equivalent native AST/LSP/anchored-edit tooling when the harness provides it; otherwise name the weaker fallback instead of pretending blind shell tools have the same safety.

Suggested flow

/cheese  ──►  classify intent  ──►  dispatch immediately (autonomous by default)
   β”œβ”€ need info / external evidence  ──►  /briesearch
   β”œβ”€ no-writes discussion only      ──►  /culture                  (user explicitly opted out of writes)
   β”œβ”€ fuzzy / multi-module idea       ──►  /mold        ──►  /cook --auto      ──►  /press  ──►  /age  ──►  /cure
   β”œβ”€ high-blast-radius spec          ──►  /mold        ──►  /ultracook        (fresh-context: cook β†’ press β†’ age β†’ cure β†’ age β†’ cure β†’ age)
   β”œβ”€ clear, scoped ask               ──►  /cook --auto                                                ──►  /press  ──►  /age  ──►  /cure
   β”œβ”€ debugging task                  ──►  /pasteurize --auto ──►  /cook --auto                        ──►  /press  ──►  /age  ──►  /cure
   β”œβ”€ PR comments / CI failures       ──►  /affinage    ──►  /cure
   β”œβ”€ running low on context          ──►  /wheypoint  ──►  /cheese --continue <slug>   (fresh session)
   β”œβ”€ resume in fresh context         ──►  /cheese --continue <slug>
   └─ review only                     ──►  /age         ──►  /cure

/cheese is the front door. It inspects whatever you drop in (idea, spec path, PR ref, stack trace, file path), announces its routing decision as a short three-line block (Intent / Reason / Target), and dispatches the chosen skill in the same turn β€” --auto propagates downstream so the chain runs all the way through. Use --safe when you want the chance to redirect before anything runs: it puts the confirmation prompt back in front of dispatch and surfaces non-auto variants as alternatives. Skip /cheese entirely when you already know the destination β€” a hard bug can go straight to /pasteurize, a known-scope fix can go to /cook, and an explicit no-writes design discussion goes to /culture. /melt cuts in whenever a merge step blocks /cook or /cure. Append --hard to any pipeline step to insert /hard-cheese as a metacognitive vibecheck gate before review.

Scope

Easy-cheese is intentionally a small surface. What that means in practice:

  • Skills only. No agents, commands, eta templates, or compiled harness bundles. Each capability is a single SKILL.md.
  • No repo-wide MCP requirement. Workflow skills suggest tools (tilth, Context7, Tavily) but have host-native fallbacks. The cheez-* tool skills require an AST-aware search/read path and stale-checking edit path; prefer tilth when present, but equivalent native AST/LSP/anchored-edit backends satisfy the contract.
  • One orchestrator skill, narrowly scoped. /ultracook is the only orchestrator. It resolves planner/coder/reviewer phase agents by capability and minimum power; harvest and /plate remain parent-owned. Parallel curds use sequential same-worktree phase spawns and a terminal reviewer pass before publication.
  • No automatic re-age loop in /cure. The skill describes the protocol; the human runs the next /age when ready.

Optional tools

Workflow skills name preferred tools when they help, with fallbacks for portability. Tool skills can be stricter when their purpose is to enforce a specific tool protocol.

Tool Helps with Fallback
tilth (MCP) AST-aware read/search/edit and dependency context Preferred for cheez-*; native AST/LSP/anchored-edit tools may satisfy the same contract
sg (ast-grep) Structural pattern matching and codemods (sg --rewrite) with metavariables LSP or tilth for symbol/caller questions; anchored edits for non-structural block changes
Context7 (MCP) Library and API documentation repo docs, package docs, vendor pages, web search
Tavily (MCP) Current web/vendor research host web search or user-supplied sources
LSP / Serena (MCP) Type-aware xrefs (find_referencing_symbols, find_implementations), symbol-bounded edits (rename_symbol, replace_symbol_body, safe_delete_symbol), and LSP diagnostics β€” concrete tools for the abstract "if your harness has an LSP" sections in cheez-* skills sg, tilth_search, targeted reads via tilth
hallouminate (MCP) Per-repo wiki for cross-session design rationale, ADR grounding, and /mold evidence Skip wiki grounding; proceed with diff + code evidence only; cap at speculating when design rationale is central
milknado (MCP) Mikado task-graph backend for /ultracook parallel-mode curd prerequisite tracking In-report curd decomposition in manifest YAML; no external task-graph backend needed
ripgrep Fast text search grep, find, editor search
gh GitHub issues, PRs, checks, examples local git commands or user-provided links/logs
delta Readable diffs plain git diff
mergiraf Structured merge conflict resolution manual conflict resolution plus tests
jq JSON inspection for reports or tool output manual inspection
fd Fast file discovery find
just Project task discovery package scripts or documented commands

When a preferred tool is unavailable, workflow skills say so once, fall back, and lower confidence only if evidence quality suffers. The cheez-* skills should teach the strongest available backend shape, not break on a missing MCP.

Install

skills.sh (recommended)

Install every skill with the skills.sh installer. The skills form one pipeline (/cheese β†’ /mold β†’ /cook β†’ /press β†’ /age β†’ /cure), so install them together rather than cherry-picking:

npx skills@latest add paulnsorensen/easy-cheese --all --global

--all is shorthand for --skill "*" --agent "*" -y: every published skill, into every detected agent, no prompts. --global installs them user-wide, so they are available across every repo.

To scope the install to just the current repo instead (recorded under .agents/skills/), drop --global and run it from that repo:

npx skills@latest add paulnsorensen/easy-cheese --all

After install, start with /cheese if you're not sure which wheel to cut into first, or jump straight to a specific skill like /cook, /age, or /pasteurize. There is no required follow-up setup skill.

gh skill (GitHub CLI alternative)

Requires GitHub CLI v2.90.0 or later with the gh skill command.

Install all skills interactively:

gh skill install paulnsorensen/easy-cheese

Install every current skill in one shot:

for s in age affinage briesearch cheese cheez-read cheez-search cheez-write cook culture cure hard-cheese melt mold pasteurize press ultracook wheypoint; do
  gh skill install paulnsorensen/easy-cheese "$s"
done

Install one specific skill by name:

gh skill install paulnsorensen/easy-cheese cook

Pin to a specific release tag or commit SHA for reproducibility:

gh skill install paulnsorensen/easy-cheese [email protected]
gh skill install paulnsorensen/easy-cheese cook@abc123def

Control which agent and scope to install into:

# User-wide (recommended for personal toolkits)
gh skill install paulnsorensen/easy-cheese --agent claude-code --scope user

# Committed into the current project repo (default scope)
gh skill install paulnsorensen/easy-cheese --agent claude-code --scope project

Supported --agent values include github-copilot, claude-code, cursor, codex, gemini-cli, and others. Omit --agent to use the harness auto-detected from your environment.

Preview a skill's content before committing to an install:

gh skill preview paulnsorensen/easy-cheese cook

Keep installed skills up to date:

gh skill update --all

Claude Code (manual)

Copy the skills you want into your skills directory:

# Per-user
mkdir -p ~/.claude/skills
cp -r skills/age ~/.claude/skills/

# Per-project
mkdir -p .claude/skills
cp -r skills/cook .claude/skills/

Other harnesses

Copy skills/<name>/ into wherever the harness loads Agent Skills from. The format follows the agentskills.io spec and works in any compliant client.

Validate

The reference validator from agentskills/agentskills checks frontmatter and naming:

pip install skills-ref   # ships the `agentskills` CLI
agentskills validate ./skills/age

Each SKILL.md must have YAML frontmatter with at least name and description, and name must match the parent directory name.

Installing MCP servers

The cheez-* tool skills and several workflow skills benefit from MCP servers. Install the ones you need.

tilth provides AST-aware code search, smart file reading, and tag-anchored edits. It is the preferred backend for /cheez-search, /cheez-read, and /cheez-write; equivalent native AST/LSP/anchored-edit backends satisfy the same contract when Tilth is unavailable.

# Install tilth CLI via npm (Node.js v18+) β€” no Homebrew formula upstream
npm install -g @paulnsorensen/tilth-nightly@latest
# or run via npx β€” no global install needed:
#   npx -y @paulnsorensen/tilth-nightly@latest install claude-code --edit

# Register as an MCP server β€” include --edit only if you plan to use cheez-write
tilth install claude-code --edit   # Claude Code
tilth install cursor --edit        # Cursor
tilth install vscode --edit        # VS Code
tilth install codex --edit         # Codex CLI
tilth install gemini --edit        # Gemini CLI
tilth install zed --edit           # Zed

After registering, restart your harness and confirm these tools appear:

  • mcp__tilth__tilth_search
  • mcp__tilth__tilth_read
  • mcp__tilth__tilth_list
  • mcp__tilth__tilth_deps
  • mcp__tilth__tilth_write (only with --edit)

Context7 fetches up-to-date, version-specific library docs into your session. Used by /briesearch and /cook when available.

Claude Code:

claude mcp add context7 -- npx -y @upstash/context7-mcp@latest

Other harnesses β€” add to your MCP config file:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp@latest"]
    }
  }
}

For higher rate limits, get a free API key at context7.com and append --api-key YOUR_API_KEY to the args array. A keyless hosted option is also available:

{
  "mcpServers": {
    "context7": {
      "url": "https://mcp.context7.com/mcp"
    }
  }
}

Requires Node.js v18+.

Tavily provides real-time web search and content extraction. Used by /briesearch when available.

Get a free API key at tavily.com, then:

Claude Code:

claude mcp add tavily -- npx -y tavily-mcp

Set your key in the environment or pass it inline:

TAVILY_API_KEY=your-key npx -y tavily-mcp

Other harnesses β€” add to your MCP config file:

{
  "mcpServers": {
    "tavily": {
      "command": "npx",
      "args": ["-y", "tavily-mcp"],
      "env": {
        "TAVILY_API_KEY": "your-key"
      }
    }
  }
}

Requires Node.js v18+.

Installing CLI tools

The optional tools listed under Optional tools are referenced by workflow skills. None are required, but having them available unlocks better fallbacks and richer output.

macOS bootstrap script (optional)

Use scripts/install.sh when you want the surrounding macOS toolchain and MCP servers set up for you. The recommended way to install the skills themselves is still the skills.sh flow above; this script is the fast lane for the wider ecosystem.

It does the following in one shot:

  1. Installs every CLI tool listed below β€” Homebrew for the eight brew-core formulas, plus npm install -g @paulnsorensen/tilth-nightly@latest for tilth, which has no Homebrew formula upstream.
  2. Auto-detects installed Claude Code, Cursor, and Codex CLIs, then installs every easy-cheese skill into each detected harness at user scope as a convenience bootstrap.
  3. Registers the tilth, context7, and hallouminate MCP servers with those harnesses where supported. hallouminate is delivered as a plugin: on claude-code and codex the installer adds the paulnsorensen/hallouminate plugin marketplace and installs the plugin (which ships its own MCP server and bootstraps the binary); on other harnesses it warns and you register the MCP manually. Other servers (tavily, milknado) are also selectable with --mcp.

Currently macOS only β€” it relies on Homebrew. Requires gh to be authenticated (gh auth login) before running.

Pipe straight from GitHub:

curl -fsSL https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh | bash

Or grab the script first if you'd like to read it:

curl -fsSL -o /tmp/easy-cheese-install.sh https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh
bash /tmp/easy-cheese-install.sh --help
bash /tmp/easy-cheese-install.sh --dry-run

Common flags:

# Install only ripgrep + jq, skip MCP registration
curl -fsSL https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh \
  | bash -s -- --tools ripgrep,jq --skip-mcp

# Register MCP servers only (assumes CLI tools and skills are already installed)
curl -fsSL https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh \
  | bash -s -- --skip-tools --mcp tilth,context7,tavily

# Pick a specific harness for skill + MCP registration
curl -fsSL https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh \
  | bash -s -- --harness cursor

# Or target a comma-separated harness list explicitly
curl -fsSL https://raw.githubusercontent.com/paulnsorensen/easy-cheese/main/scripts/install.sh \
  | bash -s -- --harness claude-code,cursor,codex

The script is idempotent β€” it skips any tool already on PATH β€” and accepts --dry-run so you can preview what it would do before letting it run. If no supported harness CLI is detected, it falls back to the historical claude-code target; pass --harness to override detection.

Heads-up: curl | bash runs whatever the URL serves at the moment of the request. If you want to audit before running, use the two-step form above.

If you'd rather install tools individually, the per-tool sections below cover macOS, Windows, and Linux.

GitHub CLI (gh)

brew install gh           # macOS/Linux via Homebrew
winget install GitHub.cli # Windows
# or see https://cli.github.com for other methods
gh auth login

Minimum version for gh skill: v2.90.0.

gh --version

gh skill ships as a built-in subcommand in GitHub CLI v2.90.0+. If your installation predates that release, upgrade gh rather than installing an extension. Check cli.github.com/manual/gh_skill for the current status.

ast-grep (sg)

Used by /cook, /age, and /cure for structural codemods when tilth is unavailable.

brew install ast-grep          # macOS/Linux
npm install -g @ast-grep/cli   # Node.js
cargo install ast-grep         # Rust/Cargo
scoop install ast-grep         # Windows (Scoop)

ripgrep (rg)

Fast text search used as a fallback when tilth is unavailable.

brew install ripgrep           # macOS/Linux
winget install BurntSushi.ripgrep.MSVC  # Windows
cargo install ripgrep          # Rust/Cargo

delta

Human-readable diffs used by /age and /cure.

brew install git-delta         # macOS/Linux
cargo install git-delta        # Rust/Cargo
winget install dandavison.delta # Windows

Add to ~/.gitconfig to enable globally:

[core]
    pager = delta
[interactive]
    diffFilter = delta --color-only

mergiraf

Structured merge-conflict resolution used by /melt.

cargo install mergiraf         # Rust/Cargo
brew install mergiraf          # macOS/Linux (if tap is available)

jq

JSON inspection used by various skills for structured output.

brew install jq                # macOS/Linux
winget install jqlang.jq       # Windows
apt-get install jq             # Debian/Ubuntu

fd

Fast file discovery used as a fallback when tilth is unavailable.

brew install fd                # macOS/Linux
cargo install fd-find          # Rust/Cargo
winget install sharkdp.fd      # Windows
apt-get install fd-find        # Debian/Ubuntu

just

Project task runner used by /cook and /press to discover and run project commands.

brew install just              # macOS/Linux
cargo install just             # Rust/Cargo
winget install Casey.Just      # Windows

Credits

The shared voice kernel at skills/age/references/voice.md β€” output discipline, reasoning posture, the certain | speculating | don't know confidence vocabulary, and the depth-vs-question split β€” adapts a Claude Opus 4.7 system-prompt experiment by Reebz, narrowed to the parts that earn their keep in a portable skills toolkit. Cross-referenced from briesearch, culture, mold, cook, and cure.

The /pasteurize skill β€” the six-phase diagnosis loop (feedback loop β†’ reproduce β†’ hypothesise β†’ instrument β†’ fix + regression test β†’ cleanup) and the "build a feedback loop first" insight β€” adapts Matt Pocock's diagnose skill. Easy-cheese-specific adaptations (cheez-* tooling, handoff slug schema, --auto chain, /cook handoff for Phase 5) are layered on top.

The /wheypoint skill β€” compacting a conversation into a handoff document (with a suggested-skills section, no-duplication of existing artifacts, and secret redaction) β€” adapts Matt Pocock's handoff skill. Easy-cheese-specific adaptations: the handoff lands as a durable, resumable artifact at .cheese/notes/<slug>.md (rather than the OS temp directory) carrying the standard handoff slug, the suggested-skills section is a state-to-skill mapping over the cheese pipeline expressed as the slug's next: field plus named skills, and resumption runs through /cheese --continue <slug>.

The Superpowers brainstorming skill β€” adapted into /mold's design dialogue. Easy-cheese-specific adaptations: the agent-introduced-scope grep gate, shape-check blast-radius numbers, the two-key handshake (curdle gating on the user verb plus the agent's coherence self-check), and ADRs captured as a durable curdle by-product are ahead of the borrowed brainstorming flow.

The grill-with-docs skill (Pocock) β€” adapted into /mold's Grill phase with grounded, cited claims: every critical claim is verified via cheez-search / briesearch before seams are locked.

The cumulative-domain-model feature β€” the cumulative ubiquitous-language discipline that grows a durable domain-model.md domain model across sessions β€” adapts Matt Pocock's domain-modeling skill. Easy-cheese-specific adaptations layer the cheese pipeline's grounding and artifact conventions on top.