agentsclimarketplace

Cure

Skill paulnsorensen/easy-cheese/skills/cure

Cheese your code πŸ§€ β€” high-quality results as easy as cheese. A portable, harness-agnostic Agent Skills toolkit.

Install
npx -y skills add paulnsorensen/easy-cheese --skill cure

Assembled 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

Apply fixes from an /age report, finding list, or CI failure, then run the project's test/lint/build gates and hand a clean cure to /plate for commit/publication. Use when the user wants selected findings resolved. Do NOT use for review (route to /age), test authoring (route to /press), or direct publication (route to /plate).

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

20.4 KB, as published. Nobody here has run it

/cure

Use this skill after /age, failed validation, or user-selected review findings need to be fixed and prepared for shipping.

Inputs

Accept any of: a /age slug (/cure <slug> reads .cheese/age/<slug>.md), a pasted findings list, a CI failure summary, or a scoped instruction like "fix the high-severity age findings". /age may also hand off with a pre-locked selection by passing the chosen ids in a structured handoff context (see references/selection.md#handoff-from-age for the canonical format); when that context is present, skip rendering the selection list and go straight to apply.

Age reports older than this severity-rubric revision lack the severity, location, fix-cost-now, and fix-cost-later sub-fields on each finding. Tolerate the older shape: when a finding has no severity field, infer it from the section header (## High-stake findings β†’ high, ## Medium-stake findings β†’ medium); when fix-cost-now is absent, the cheap selection verb resolves to the empty set per references/selection.md. Never reject a report for missing sub-fields; record any inference in the cure report under ### Notes. Reports predating the per-finding confidence: label simply lack it; treat missing confidence as unspecified β€” no inference, no rejection.

When /age or /affinage hands off a pre-locked selection, adopt it. When called bare without a pre-locked selection, apply the recommended composite (all-medium, cheap) per references/selection.md, which also defines the gate conditions.

Optional flags:

  • --safe β€” re-introduce the selection and terminal publication handoff gates.
  • --open-pr β€” after a clean cure, allow terminal /plate publication when no PR exists.
  • --auto β€” autonomous mode (propagated from /cook --auto). Bypasses the user-selection step. Must be paired with --stake <floor> to set the inclusion threshold; /cook --auto always passes --stake medium+. See references/selection.md for the auto-selection rules and ## Auto mode below for the pass-cap and revert behaviour.
  • --stake <floor> β€” used only with --auto. Severity floor: blocker, high, medium+, or all. Floor definitions and the medium+ cheap-lows rule: references/selection.md Β§ Auto-mode selection. Without --auto this flag is ignored.
  • --hard β€” propagate the metacognitive-gate flag to terminal /plate; see ## --hard mode.

Portability reference: ../cheese/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.

Flow

  1. Load β€” read the findings (markdown, not JSON sidecars).

  2. Select β€” adopt any pre-locked handoff from /age//affinage; otherwise apply the recommended composite. See references/selection.md for the default rule, recognized verbs, and gate conditions. To expand a user-supplied verb to finding ids:

    python3 shared/scripts/findings_cli.py parse-selection --report <path> --selection "<verb>"
    

    If the host only ships the bundle, python3 ${CLAUDE_SKILL_DIR}/scripts/common.pyz findings_cli parse-selection ... is the fallback.

  3. Apply β€” fix one logical group at a time: re-confirm the anchor through a fresh bounded read, then apply a stale-safe write from a compatible backend family.

  4. Validate β€” run the narrowest tests that prove each fix, then any relevant project-wide gates (lint, typecheck, build). When the handoff carries a recorded baseline: block, classify gate failures against it per ../cook/references/quality-gates.md: identical failures do not block a clean cure or trigger a halt; only new or changed failures are cure's to fix.

  5. Taste-test (behavioural fixes only) β€” if this cure applied a behavioural fix (touched production logic or public surface), run the fresh-context taste-test before the handoff slug: dispatch the read-only reviewer phase-agent (named, no call-site model β€” its def pins model: opus) over the cure diff with the same lenses cook uses, or fall back to the inline self-check when no such reviewer sub-agent is available. Mechanical fixes β€” formatting, comment, import, no-logic rename β€” skip this and keep the current flow. Pipe any revise into a bounded corrective pass; a Locked-decision halt stops for a human. (A coder-nested cure cannot fan out; it defers the authoritative pass to the orchestrator.)

  6. Domain-model correction (diff-touched terms only) β€” after the cook's fixes land, correct the project domain model (ubiquitous language) for terms touched by the cook's diff (bounded β€” diff-touched terms only, never a free rewrite). Resolve the store with domain_model_target() (shared/scripts/paths.py, read-probe cascade wiki β†’ docs β†’ XDG; an existing model always wins). For a diff-touched entry whose definition or _Code_: referent no longer matches the code, update it and write a one-line change note per edit (entry format: **Term** β€” definition. / _Avoid_: syn1, syn2 / _Code_: file:line (or NEW ENTITY)). HARD rule β€” flag, don't reverse: if a correction would REVERSE a mold-decided canonical term (replace the term mold made authoritative, or contradict its definition), do not rewrite β€” flag it to the user (the term, mold's decision, the conflict) and leave the entry unchanged. mold DECIDES canonical terms at curdle; cure only APPLIES BOUNDED corrections and never overrules the authoritative writer.

  7. Re-review hand-off β€” recommend /age --scope <touched-path> so review runs through the proper skill rather than reimplementing it inline. /cure does not re-grade its own work. If the user picks re-age, the resulting report can feed a fresh /cure invocation.

  8. Ship report β€” what changed, checks run, deferred items, residual risks. Write the handoff slug at the top of .cheese/cure/<slug>.md (see ## Handoff slug below) so the chain (and /cook's fan pathway) can read the outcome without re-parsing the full report.

  9. Plate / hand off β€” on a clean cure, dispatch /plate per ## Handoff.

Preferred tools and fallbacks

Call source-code search, read, and write backends directly according to code-intelligence-routing.md.

Beyond source-code routing there are cure-specific tools:

NeedPreferFallback
Understanding findings/age report plus touched diff/test contextdiff, touched files, tests
CI and PR contextghlocal test output or user-provided logs
Diffsdeltaplain git diff
Conflict resolutionmergirafmanual resolution with targeted tests
Code navigationsemantic symbol search, then caller searchLSP or bounded native search; report precision loss
Read before editfresh bounded read from the write backend familyanother snapshot-capable bounded read; re-read if anchors are incompatible

If a preferred tool is missing, continue with the fallback. If a missing tool prevents safe application, stop and explain the blocker.

Validation

Run the narrowest tests that prove the fix, then any relevant existing wider gates. If a gate is unavailable, record why. Do not declare ready when selected findings remain unresolved.

Applied requires its proving test green (Iron Law β€” see references/cure-discipline.md).

clean cure β€” β‰₯1 fix applied, all gates green (identical recorded baseline: failures don't count against green β€” see ../cook/references/quality-gates.md), no false-premise halt. To map the post-cure gate booleans to a readiness verdict (agent judges the booleans; the CLI maps them):

python3 shared/scripts/gates_cli.py classify \
  --press-status <label> \
  [--hard-floor-met] [--has-open-level-1-or-2] [--has-open-level-3] [--has-open-level-4-or-5] [--any-spinning]

If the host only ships the bundle, python3 ${CLAUDE_SKILL_DIR}/scripts/common.pyz gates_cli classify ... is the fallback.

Handoff slug

Write the cure report to .cheese/cure/<slug>.md with a minimum handoff slug at the top so /cook's fan pathway and /cheese --continue can chain without re-parsing the full report:

status: ok | halt: <one-line reason>
next: age | done
artifact: <path-if-any>
baseline: none | <recorded baseline block copied from the upstream handoff β€” see ../cook/references/quality-gates.md>
<one-line orientation: what cure applied or deferred>

status: ok when at least one finding applied cleanly (or no findings met the severity floor in --auto mode); status: halt: <reason> when every selected fix failed the revert/keep evaluation or a project-wide gate cannot be made green. next: is age whenever re-review should follow β€” that is the autonomous-chain default and the standard interactive recommendation. next: is done only when invoked interactively without --auto and the user explicitly opts out of re-review. Cure does not track which pass it is on; the two-cure-pass cap is enforced by /age --auto's third invocation, not by cure.

Output

Cross-cutting house style and citation form: ../cheese/references/formatting.md.

The cure report body lives below the handoff slug in the same file at .cheese/cure/<slug>.md:

## Cure Report

### Applied
- <finding>: <fix summary>

### Deferred
- <finding>: <reason>

### Checks
- <command>: <pass|fail|skipped with reason>

### Re-review
- Remaining risk:
- Suggested next step: `/age --scope <touched-path>` to verify the fixes, or `/plate` to commit/publish.

Handoff

Pipeline: culture β†’ mold β†’ cook β†’ press β†’ age β†’ [cure] β†’ plate

After the cure report is rendered, cure decides whether to dispatch /plate or ask. On a clean cure (see Validation), the default carries work to an already-open PR without another gate. --safe re-introduces the handoff gate.

When the run was chained from /affinage (handoff_context.source_skill: /affinage), cure never dispatches /plate β€” it applies its fixes, runs the auto-mode /age --scope loop where applicable, and returns so /affinage can post its GitHub replies (final writes) before owning terminal /plate.

Default (no --safe) β€” plate the work:

  • Detect an open PR with gh pr view. If one exists, dispatch /plate to run its final writing gate, validation, named-file commit, topology-aware update, and publication. Rule 11 authorizes the update. Propagate --hard; /plate gives /hard-cheese the final artifact state before publishing.
  • If no open PR exists: with --open-pr, dispatch /plate [--hard]; explicit topology choices and obviously cohesive work proceed without asking, while stack-sized or ambiguous work asks before commit or branch-layout mutation. Without --open-pr, leave the remote untouched and finish with no open PR β€” pass --open-pr or run /plate.
  • After /plate's publication lands, run the Β§ Post-PR learnings write-back below.
  • If the cure was not clean, do not dispatch /plate; mention the blocker and stop.

--safe β€” ask via the shared handoff gate in ../cheese/references/handoff-gate.md. Default options:

  • Re-review the touched code (recommended when fixes escaped the finding hunk) β€” /age --scope <touched-path>.
  • Plate it β€” commit and open or update the PR β€” /plate [--hard].
  • Checkpoint & stop β€” /wheypoint.
  • Stop β€” dispatch none.

Pre-select Plate it only when all selected findings applied cleanly and gates passed. Never dispatch before selection; run the selected command immediately.

Post-PR learnings write-back

After any path that publishes to a PR β€” the default /plate dispatch, an --open-pr new PR, the --safe Plate it selection, or the auto-mode terminal publication β€” record the session's implementation-time learnings to the wiki. This is the second wiki write moment; curdle owns the design-time write, this owns what only surfaces while building: constraints discovered in /cook, /age findings that changed the design, and any domain terms the diff introduced or redefined.

  • Candidates β€” upstream durable_flags + new-since-curdle ADRs. Read durable_flags: from the upstream /cook and /age handoff slugs (.cheese/cook/<slug>.md, .cheese/age/<slug>.md); every non-none line is a write-back candidate alongside the new ADRs + domain-model deltas. Upstream phases record flags only β€” cure/plate/affinage remain the only wiki writers.
  • Writer β€” /wiki-ingest, detect-and-degrade. When the hallouminate plugin is available, dispatch /wiki-ingest with the candidate list above; its dedup/route/merge/contradiction handling ensures only rationale new since curdle lands (say "new since curdle" in the dispatch so it does not re-add design-time ADRs). When hallouminate is absent, write docs/adr/<slug>-NNN.md + the domain-model file fallback and emit a loud one-line note that the write-back went to files, not the wiki β€” never a silent degrade. Detection and the degrade contract: ../cheese/references/optional-plugins.md.
  • Every publication path. Fires from the frame that dispatched terminal /plate β€” manual cookβ†’cure and --auto alike β€” after publication lands.
  • Publication-owner exception. When cure does not own terminal /plate β€” the /cook fan-pathway no-publish cases below, or the /affinage chain where affinage owns terminal /plate β€” cure does not write back; the skill that owns the /plate dispatch owns the write-back at its publish boundary.
  • Nothing to record β€” all upstream durable_flags are none (or absent), no new ADR-worthy decision, and no domain-model delta β€” skip with a one-line "no post-PR learnings" note. Do not manufacture an entry.

[TBD] The write-back trigger lives at this cure boundary today; /plate (the dedicated commit/PR skill) now exists, so the deferred follow-up is to move the trigger onto /plate so publication and learnings-capture are wired at one seam (see the post-pr-wiki-writeback wiki page). Upstream durable_flags feed whichever skill owns this single publish-boundary write, so if the trigger moves to /plate, flag consumption moves with it.

--hard mode

/cure --hard propagates --hard to /plate at the share-for-review boundary. /plate first completes and verifies every durable write, then gives /hard-cheese that final artifact inventory and proceeds only on pass. Re-review, checkpoint, and stop choices do not fire the gate. The mechanism lives in skills/hard-cheese/SKILL.md; composition details live in ../hard-cheese/references/composition.md.

Auto mode

When invoked with --auto --stake <floor>:

  • Skip the selection-list rendering and the handoff gate.
  • Auto-select every finding that meets the severity floor. Floor definitions: references/selection.md Β§ Auto-mode selection.
  • Apply findings one at a time. After each fix, run the narrowest test that proves it. If the fix breaks a previously-passing test or any project-wide gate, revert that single finding's edit and record it under ### Deferred in the cure report with the test name and the failure summary. Continue with the remaining findings.
  • After all selected findings are processed, skip the handoff gate and invoke /age --scope <touched-paths> --auto (forward --open-pr when it is in scope) so the chain can re-review.
  • /age --auto enforces the two-pass cap. Cure does not need to track passes itself β€” it just keeps applying when invoked.
  • Terminal publication. When the age child returns next: done, dispatch /plate once. It updates an existing PR automatically or, with --open-pr, applies the explicit-choice and review-shape policy before committing a new PR layout. After the publication lands, run the Β§ Post-PR learnings write-back in ## Handoff.
  • Orchestrated sub-agent exception. A phase-only cure dispatched by /cook's fan pathway never invokes /plate; the orchestrator owns commit and publication.
  • /affinage chain exception. When handoff_context.source_skill is /affinage, suppress this terminal /plate β€” affinage posts its GitHub replies (final writes) and then owns terminal /plate.

--auto --hard puncture clause. When age returns next: done, dispatch /plate --hard rather than firing /hard-cheese directly. /plate's final writing gate makes the completed artifact inventory visible to the metacognitive check. A failed hard gate halts publication; a non-TTY environment reports that --hard needs an interactive TTY.

If no findings meet the floor, write an empty cure report with ### Applied: (none β€” no findings meet <floor>) and skip straight to the auto handoff with a one-line "auto chain clean" note.

Within cook's own fan pathway (single-curd chain or a wave curd)

When /cook's fan pathway (its retired-/ultracook mechanics, now self-hosted β€” see skills/cook/SKILL.md ## Fan pathway) spawns cure as a phase-only sub-agent and owns the chain itself, honour the no-chain / no-push override:

  • Single-curd chain β€” the spawn prompt says "for THIS PHASE ONLY" and "do not chain forward to the next phase." Apply the auto-selected findings, write .cheese/cure/<slug>.md (handoff slug at the top, next: age), and stop. Do not invoke /age --scope <touched-paths> --auto. The orchestrator reads the cure slug and spawns the next age itself.
  • Wave curd worker β€” apply findings, write the cure slug, and stop. Do not invoke /plate or touch the remote; the fan pathway owns final commit and publication.

In both cases terminal /plate dispatch is suppressed β€” the orchestrator owns it.

Rules

  • Default to the recommended composite (all-medium, cheap), or the selection /age / /affinage locked in. --safe re-introduces the selection gate. A finding resting on a false premise, or a sprawling/structural fix, still pauses for a decision regardless of mode.
  • Keep fixes scoped to selected (or auto-selected) findings.
  • Do not re-halt or re-flag gate failures identical to the handoff's recorded baseline: block; only new or changed failures are cure's to fix β€” see ../cook/references/quality-gates.md.
  • Do not hide failed or skipped checks. In auto mode, reverted findings go under ### Deferred, never silently dropped.
  • Publication contract β€” existing PR authorization, --open-pr, --safe, and never publishing an unclean cure: see ## Handoff.
  • If a selected finding rests on a false premise (the /age claim is wrong, or the diff already addresses it), stop and surface the premise before applying. Disagreeing with the report is allowed; silently working around it is not.
  • Apply the shared voice kernel (lives at ../age/references/voice.md): lead the cure report with what was applied, flag residual risk as certain | speculating | don't know, agree when the diff is fine without manufacturing follow-ups.
  • Verification before status: ok: before writing status: ok in the handoff slug, (1) identify the gate command, (2) run it fresh in the same turn, (3) read the full output, (4) only then claim. Hedging words (should, probably, I think) are banned in completion claims β€” state what the gate output showed, not what you expect it to show.

Discipline

Iron Law, Red Flags, and the fix-application Rationalization table live in references/cure-discipline.md.

Agent resolution

Resolve fix application through ../cheese/references/agent-resolution.md.

WorkPreferred typesPermissions/isolationMinimum powerEffortFallback
Apply selected findingscoderwrite, isolated-worktreedefaulthighcompatible coder, then general

The canonical cure handoff carries the shared agent_resolution block.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.