Kanso task
Six Claude Code skills that keep AI-generated code tight. Audit, refactor, commit, PR, curate context.
npx -y skills add blakecyze/kanso --skill kanso-taskAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 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
Use when the user wants a task done well rather than fast, wants a rough or underspecified request sharpened before it runs, or asks for a careful, principled pass at a piece of work.
SKILL.md
11.7 KB, as published. Nobody here has run it
kanso-task
The user types /kanso-task <rough request>. This skill turns that rough request into a sharp prompt, then executes the task in the same chat with both kanso-prompting and kanso-principles standing as context. The output should be measurably better than what the user would have got from typing the same words into the chat directly.
Three phases:
- Phase A — Clarify (only if needed). Run the ambiguity pre-flight. If a trigger fires, ask one tight batch of questions and fold the answers in. If the input is already concrete — or the user waved the skip valve — go straight to formatting with no questions.
- Phase B — Rewrite. Apply the
kanso-promptingrules to produce a sharp version of the prompt. Show it to the user. Wait for approval. - Phase C — Execute. Run the rewritten prompt inline in the current chat. Any code produced during execution follows
kanso-principles.
Always run inline
This skill runs in the calling chat. Never dispatch the rewrite, the approval gate, or the execution via the Agent or Task tool. Never spawn a subagent. The user has to be able to see the rewritten prompt before it runs, intervene during execution, and inspect the result without switching windows. A subagent dispatch defeats the entire workflow.
Phase A — Clarify
A pre-flight ambiguity check that runs before formatting. Its only job is to catch the gaps that would force a guess. Concrete input passes through untouched — the yap-and-go feel survives; the pause is earned, not routine.
The skip valve — check this first
Two ways an input skips questioning entirely:
- Explicit. The user signalled skip. The unambiguous form is the
--goflag. A plain-language equivalent (just format it,no questions) counts only when it is a directive about the request rather than part of it — a trailing or standalone instruction to the skill, not a phrase inside the task being described./kanso-task format the users table, no questions about the schema yetis a task that happens to contain "no questions"; it is not a skip signal. When a plain-language form is genuinely ambiguous, treat it as task content and run the triggers. Honour a real skip without comment: format silently, even if a trigger would otherwise fire. The user has taken the wheel. - Inferred. The input is high-confidence — a trained reader could produce a sharp prompt from it without inventing anything load-bearing. Format silently.
Only when neither applies do you run the triggers below.
Ambiguity triggers
Ask when any one is genuinely true. If none are, don't ask — formatting a clear request is the default, not the exception.
- Acceptance criteria unclear — "done" has no observable shape.
make search fasterdoesn't say how much faster or how you'd know. - Scope boundaries fuzzy — what's explicitly out of scope is undefined, and the request could plausibly balloon.
tidy up the auth module— one function, or the directory? - Unstated technical choice — a decision is being assumed rather than stated.
add caching— where, what eviction, in-memory or shared? - Undefined term or referent — a word or pointer with no fixed meaning here.
fix the thing we discussed,the legacy path.
A missing file/module target usually surfaces as trigger 2 or 4 — treat "which code?" as an ambiguity, not a separate checklist item.
The questioning rules
- One batch, then format. Ask every question in a single round. No conversational back-and-forth, no follow-up interrogation. Take the answers, fold them in, format.
- Cap at three. Fewer is better. One sharp question beats three padded ones. If only one trigger fired, ask one thing.
- Aim at the ambiguity, not at a spec. Each question exists to sharpen the formatted prompt. This is a prompt optimiser, not a spec tool — no EARS, no acceptance-criteria tables, no ceremony. Keep it loose.
- No cosmetic or scope-creep questions. Never ask "would you like me to also…" — that negotiates scope under cover of clarifying. Ask only what removes a guess.
If the input is still unworkable after one round, say so plainly rather than formatting a vague request into a vague-but-prettier one.
Phase B — Rewrite
Apply kanso-prompting to produce the sharp version. The rewrite should reliably:
- Lead with the verb and the artefact.
Audit,Refactor,Write,Implement,Explain. Name what the model should produce. - State the target precisely. File paths, function names, line ranges, branches. Not "the auth module" but
src/auth/session.ts. - Carry the why. A one-sentence reason. The model generalises better with motivation than without.
- State constraints explicitly. Frameworks, dependencies, things-not-to-touch, output shape.
- State the stopping condition. When is the model done?
Stop after the report and do not edit filesorApply the fix and run the existing tests. - Drop the noise. No
CRITICAL, no ALL CAPS, no "please carefully think step by step". Modern Claude doesn't need it and it now degrades output. - Match the user's voice. If the user is terse, the rewrite is terse. If the user is conversational, the rewrite stays conversational. Don't impose a house style.
The rewritten prompt earns its length the same way code does. Don't pad. A two-line rewrite is fine if two lines is enough.
The approval gate
Always end Phase B with this block and stop:
Original:
<one-line echo of what the user typed>
Rewritten:
<the sharp version, as it would be sent>
Proceed?
y — execute the rewritten prompt inline, with kanso-principles loaded
edit — amend the rewritten prompt
send-original — execute the original instead (rare; only when the rewrite drifted)
n — stop, leave the rewrite in the transcript
If the user approves, move to Phase C. If they pick edit, take the amended prompt and re-emit the gate. If they pick send-original, use the original.
Phase C — Execute
Run the prompt in the current chat. During execution:
kanso-principlesis standing context. Any code written, modified, or reviewed follows the anti-dilution taxonomy. Deletion over addition, no defensive theatre, no filler variables, no tautological comments. The principles override default verbosity.kanso-promptingis standing context for any meta prompts produced during execution (e.g. asking a subagent for research — though this skill itself does not dispatch subagents).- Existing kanso skills apply where they fit. If the rewritten task is a refactor,
/kanso-refactorrules govern. If it produces commits,/kanso-commitrules govern. If it ends with a PR,/kanso-prrules govern. Don't reimplement those — invoke them or let them auto-load. - Maintain a running
implementation-notes.mdfile (see below) for any non-trivial execution. - The model executes the task the same way it would if the user had typed the rewritten prompt directly — with full tool access, in the current chat, with the user able to interrupt.
When execution finishes, report what changed. One short summary block. No marketing. If a notes file was written, point at it.
Implementation notes during execution
No matter how sharp the rewritten prompt is, ambiguities and unknown-unknowns surface during execution. The model has to make small judgment calls — a naming choice, a library version, a structural decision, a deviation from what the spec implied. Stopping to ask about each one breaks momentum; making them silently leaves the user blind.
During Phase C, maintain a running implementation-notes.md file in the working directory. This is the model's sanctioned way to make a call without interrupting, while keeping the user fully in the loop after the fact. The file is reviewable at the end and converts cleanly into a PR description or a commit body.
Append (don't overwrite) a timestamped section per /kanso-task run:
## 2026-05-25 14:32 — <one-line task description>
### Decisions made outside the spec
- <choice, with the reasoning in one sentence>
### Things changed from what the prompt implied
- <deviation and why it was needed>
### Tradeoffs taken
- <what was given up, what was gained>
### Anything else you should know
- <surprises, follow-ups worth doing, things you may want to revisit>
Rules:
- Append, never overwrite. If the file exists, add a new dated section at the bottom.
- Skip for trivial executions. If the task was a single one-line edit, a question that didn't touch the codebase, or anything where no judgment call was made, don't write the file. A notes file with empty sections is noise.
- One sentence per entry. The notes are a log, not a reflection. Long entries belong in the commit body.
- Omit empty sections. If no tradeoffs were taken, the heading goes too.
- Reference the notes in the final summary.
Notes: implementation-notes.md (3 decisions, 1 tradeoff)so the user sees there's something to read.
The file lives alongside the user's repo; it's their artefact, not a hidden one. They can keep it, paste it into a PR, delete it after review, or .gitignore it. The skill doesn't manage its lifecycle beyond writing to it.
What this skill never does
- Run via the Agent or Task tool, or dispatch any phase to a subagent or parallel runner.
- Execute the rewritten prompt without showing it to the user first.
- Pad the rewrite to look more rigorous. Length is not signal.
- Ask more than three clarifying questions, or spread them across more than one round. The pre-flight is a single batch.
- Question a concrete input, or one where the user waved the skip valve. High-confidence input and an explicit
--goboth format silently. - Re-introduce the noise patterns
kanso-promptingwarns against (CRITICAL, ALL CAPS, anti-laziness scaffolds). - Silently change the user's intent under cover of "sharpening". The rewrite is faithful — only the wording improves.
- Edit
kanso-principlesorkanso-promptingduring execution. Those are reference docs, not work targets. - Skip the approval gate. The user always sees the prompt before it runs.
Failure modes to avoid
- Rewriting a vague prompt into a longer vague prompt. If the source is empty of intent, ask — don't pad.
- Asking clarifying questions the user already answered in the original request.
- Running the ambiguity triggers when the input is plainly concrete. A pause that isn't earned kills the yap-and-go feel the skill exists to protect.
- Re-stating the original request in the rewrite. The rewrite is a different artefact, not a paraphrase.
- Drifting from the user's actual ask by adding plausible-sounding scope ("I'll also write tests for it"). Stay faithful; if you think more is needed, surface it as a follow-up after execution, not as a silent expansion.
- Treating "execute inline" as licence to skip the principles.
kanso-principlesis the whole point of routing through this skill rather than typing the prompt directly. - Producing a beautiful rewrite and then running it via a subagent. The whole loop is in-chat, every time.
- Skipping the implementation notes on a non-trivial execution because "nothing notable came up". If the task involved any decision the user didn't pre-approve, write it down.
- Writing implementation notes that read like marketing or apology. They're a log: one short sentence per entry, factual, no hedging.