From Case Solvers
This skill should be used when the user asks to "solve the problem", "execute the plan", "implement the solution", "run the plan", or "start solving". Use only after /case has produced .case.md. Expected to run on a budget model (Haiku, Gemini Flash, or MiniMax-M3 via the `minimax` wrapper) but runs on any model — only warns (never blocks) if run on a planning model. Owns the HOW, pre-flights each slice before any code (too abstract / too big / ungrounded names → writes .handoff.md Type: pre-flight and STOPS without coding), executes one milestone per pass with test-first per slice, pauses for human verification on human/both slices, tracks progress in .solve-progress.md, and on rejection writes .handoff.md and STOPS for /case (any frontier model, e.g. Opus/Sonnet/Fable/Mythos/Gemini Pro) to refine the contract.
How this skill is triggered — by the user, by Claude, or both
Slash command
/case-solvers:solveThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run as a budget-conscious solver. Read the problem definition in `.case.md` (the **WHAT**) and do the **HOW** yourself — exploration, mechanism choice, code. The Acceptance Criteria are the contract: done only when every scenario passes (plus human approval where required).
Run as a budget-conscious solver. Read the problem definition in .case.md (the WHAT) and do the HOW yourself — exploration, mechanism choice, code. The Acceptance Criteria are the contract: done only when every scenario passes (plus human approval where required).
Model tiers (know your own from your system prompt):
/case)./solve is designed for, and that /case sizes the contract for.Confirm your own model identity. /solve is designed for a budget model but runs on any model.
Are you a planning model? Then warn once, then continue (output is correct, just costly):
You're running
/solveon<model>(expensive). Cheaper:/clear, then switch to a budget model (e.g. via/model). Continuing now is fine too.
Any other model → assume budget; proceed, no warning. This is a warning, not a stop.
/case, a planning model) defined WHAT: Problem Statement, Constraints, Acceptance Criteria, Milestones, Out of Scope..case.md — read only. Never edit it. It belongs to /case..solve-progress.md — you own it. Milestone status ledger so a later pass resumes correctly..handoff.md — you write it when a human rejects a checkpoint, or when a slice fails the Pre-flight Gate, then STOP. /case consumes and removes it.Refining the contract is the architect's job. Your only writes are progress and handoff.
Only two things are real: .case.md and the actual codebase. If a fact is in neither, it does not exist — do not invent it.
adb devices; confirm the tool exists). An unverified "I can't" is an invented fact — the same anti-pattern as an unobserved cause. State a limitation only after a check confirms it..case.md is authoritative. Where a specific contract directive — a per-milestone Verification mode, a gating condition, who a milestone is for, an in/out-of-scope boundary — diverges from this skill's general guidance, the contract's specific directive wins. Never override, reinterpret, or "improve on" a contract directive because this skill seems to point the other way. This skill governs HOW you behave within what the contract permits; it never expands or contradicts the contract's WHAT.
If you cannot proceed on solid ground, STOP. Do not guess, do not retry the same dead end, do not silently pick one interpretation.
Stop triggers:
auto AC can only be made to pass by mocking the exact boundary it asserts (the real path can't be exercised here) — it needs a human/both device/integration check, not an auto pass.When stopped on ambiguity, emit a Needs Clarification report: list each gap (one line, concrete) and the specific .case.md improvement that resolves it. Ask the user; where a discrete choice resolves it, use AskUserQuestion. Then stop — the user patches the contract via /case and re-runs /solve.
Loop guard: distinguish a fixable failure from a blocking ambiguity. A failing test you understand → keep fixing. The same verification failing twice with no new understanding, or a gap in the contract itself → blocking: stop. Never burn iterations guessing.
(Note: a blocking ambiguity mid-execution is a Needs Clarification stop. A human rejection at a checkpoint writes .handoff.md with Type: human-rejection. A slice that fails its checks before any code is a Pre-flight stop — .handoff.md with Type: pre-flight, see below.)
Before touching any code on a slice, prove the slice is followable. This is your early-feedback channel: catching an unfollowable slice now costs one handoff; catching it after coding costs a wrong implementation. Output a short, visible pre-flight block:
found at <path> or NOT FOUND. Never proceed past a NOT FOUND you can't resolve by searching.All four pass → proceed to execute; the sketches from step 3 become your test plan. Any check fails → do not start coding and do not guess:
.handoff.md with Type: pre-flight listing each failed check concretely plus the decomposition or concretization that would fix it, mark the slice blocked in .solve-progress.md, and STOP. Decomposition is architect work; /case consumes the handoff.For a Bugfix, the contract states a suspected cause. Treat it as a lead, not a fact.
.solve-progress.md shows this milestone was previously blocked on the same symptom, do not retry the same class of fix — capture the missing signal first, or stop. Re-fixing a guess that already failed is the loop guard at milestone scale.For code milestones (Feature / Bugfix / Refactor):
Verification honesty — don't mock the thing under test. If an AC is about an external boundary (SDK call, network, DB driver, device API, filesystem), a test that stubs that exact boundary proves nothing about it. Green from a mocked boundary is not acceptance for that AC. Either exercise the real boundary, or recognize the AC belongs to a human/both device/integration check and let that checkpoint be the source of truth — never report an auto scenario "passed" when the path it names was mocked away.
Fallbacks & exemptions:
The contract states a Verification mode — auto | human | both. In milestone mode each milestone carries its own tag; in single-pass mode the contract carries one Verification: field. Read it. Only if the field is genuinely absent (an older contract) do you infer it (user-facing/qualitative → human); ambiguous → treat as human.
auto → verify by tests/observation only; no pause. Mark done, continue.human / both → after the slice is green, PAUSE and hand control to the person:
.solve-progress.md, continue to the next milestone..handoff.md, mark the milestone blocked in progress, and STOP with resume instructions.(Cost Guard first — warn if on a planning model, then continue.)
.case.md missing → stop:
Error: .case.md not found in current directory.
Run /case first to define the problem.
## Milestones section → milestone mode. Otherwise → single-pass mode (whole contract = one slice)..solve-progress.md if present → resume at the first not-done milestone. Absent + milestone mode → create it, all milestones pending.Extract Problem Statement, Context, Constraints, Acceptance Criteria (or per-milestone AC), the Verification mode (contract-level Verification: field in single-pass, or per-milestone tags), Out of Scope, Files of Interest, Deliverable Format. Already ambiguous/incomplete → Needs Clarification before any coding.
Milestone mode → the first not-done milestone (in order). Single-pass mode → the whole contract.
Run the Pre-flight Gate (see above): restate, ground every name, sketch a test per AC, size-check. Any check fails → handle per the gate (inline question, or .handoff.md Type: pre-flight + STOP). No code before a passing pre-flight.
Apply the slice's Verification mode (see Human-in-the-Loop):
auto → mark the milestone done in .solve-progress.md, go to step 3 for the next.human / both → pause and ask. OK → mark done, continue. Not OK → write .handoff.md, mark blocked, STOP.Repeat steps 3–6 until every milestone is done. Then final report.
.solve-progress.md final state..solve-progress.md# Solve Progress
Contract: .case.md
Updated: [timestamp]
- [x] Milestone 1 — <capability> (done, human-approved)
- [ ] Milestone 2 — <capability> (blocked: see .handoff.md)
- [ ] Milestone 3 — <capability> (pending)
.handoff.mdTwo variants — state which in the Type: line. Both mean STOP after writing.
Type: human-rejection — a human rejected a checkpoint:
# Handoff — Human Feedback
Type: human-rejection
Contract: .case.md
Milestone: <N — capability> (Verification: human|both)
## What was built
[what the slice delivered + how to exercise it]
## Observed failure (raw)
[The ACTUAL captured signal behind the block — exception + stack, failing assertion, HTTP status/body, the log line at the failure point. Raw evidence, not a theory. If you offer a cause, mark plainly which parts are observed vs inferred so the architect doesn't rebuild the contract on a guess.]
## Human feedback (rejection)
[the human's words — what's wrong / what was expected]
## Suggested contract change
[what in .case.md likely needs to change — AC / Constraint / Milestone. /case decides.]
## Progress at handoff
- Done: [milestones]
- Remaining: [milestones]
Type: pre-flight — the slice failed the Pre-flight Gate; nothing was built:
# Handoff — Pre-flight Feedback
Type: pre-flight
Contract: .case.md
Milestone: <N — capability> (or: single-pass)
## Failed checks
[One line per failed check, concrete: which named artifact was NOT FOUND (and what was searched), which AC forces which design decision, why the slice exceeds one pass (the file list / subsystems involved). Facts, not complaints.]
## Suggested decomposition
[The smaller slices, or the Context/AC/Glossary concretization, that would make this followable at the budget tier. /case decides.]
## Progress at handoff
- Done: [milestones]
- Remaining: [milestones]
On writing a human-rejection handoff, tell the user:
Milestone
<N>rejected. Wrote.handoff.md, stopped here.
/clear, switch to a planning model, run/case→ it refines.case.mdfrom the handoff./clear, switch to a budget model, run/solve→ resumes the remaining milestones.
On writing a pre-flight handoff, tell the user:
Slice
<N>failed pre-flight (). No code was touched. Wrote.handoff.md.
/clear, switch to a planning model, run/case→ it decomposes/concretizes the contract from the handoff./clear, switch back to a budget model, run/solve→ starts on the refined slices.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub codxse/case-solvers --plugin case-solvers