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-prompting rules 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
--go flag. 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 yet is 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 faster doesn'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 files or Apply 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-principles is 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-prompting is 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-refactor rules govern. If it produces commits, /kanso-commit rules govern. If it ends with a PR, /kanso-pr rules govern. Don't reimplement those — invoke them or let them auto-load.
- Maintain a running
implementation-notes.md file (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
--go both format silently.
- Re-introduce the noise patterns
kanso-prompting warns 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-principles or kanso-prompting during 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-principles is 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.
1---2name: kanso-task3description: 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.4---56# kanso-task78The 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.910Three phases:1112- **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.13- **Phase B — Rewrite.** Apply the `kanso-prompting` rules to produce a sharp version of the prompt. Show it to the user. Wait for approval.14- **Phase C — Execute.** Run the rewritten prompt inline in the current chat. Any code produced during execution follows `kanso-principles`.1516## Always run inline1718This 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.1920## Phase A — Clarify2122A 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.2324### The skip valve — check this first2526Two ways an input skips questioning entirely:27281. **Explicit.** The user signalled skip. The unambiguous form is the `--go` flag. 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 yet` is 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.292. **Inferred.** The input is high-confidence — a trained reader could produce a sharp prompt from it without inventing anything load-bearing. Format silently.3031Only when neither applies do you run the triggers below.3233### Ambiguity triggers3435Ask when any one is genuinely true. If none are, don't ask — formatting a clear request is the default, not the exception.36371. **Acceptance criteria unclear** — "done" has no observable shape. `make search faster` doesn't say how much faster or how you'd know.382. **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?393. **Unstated technical choice** — a decision is being assumed rather than stated. `add caching` — where, what eviction, in-memory or shared?404. **Undefined term or referent** — a word or pointer with no fixed meaning here. `fix the thing we discussed`, `the legacy path`.4142A missing file/module target usually surfaces as trigger 2 or 4 — treat "which code?" as an ambiguity, not a separate checklist item.4344### The questioning rules4546- **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.47- **Cap at three. Fewer is better.** One sharp question beats three padded ones. If only one trigger fired, ask one thing.48- **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.49- **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.5051If the input is still unworkable after one round, say so plainly rather than formatting a vague request into a vague-but-prettier one.5253## Phase B — Rewrite5455Apply `kanso-prompting` to produce the sharp version. The rewrite should reliably:5657- **Lead with the verb and the artefact.** `Audit`, `Refactor`, `Write`, `Implement`, `Explain`. Name what the model should produce.58- **State the target precisely.** File paths, function names, line ranges, branches. Not "the auth module" but `src/auth/session.ts`.59- **Carry the *why*.** A one-sentence reason. The model generalises better with motivation than without.60- **State constraints explicitly.** Frameworks, dependencies, things-not-to-touch, output shape.61- **State the stopping condition.** When is the model done? `Stop after the report and do not edit files` or `Apply the fix and run the existing tests`.62- **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.63- **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.6465The rewritten prompt earns its length the same way code does. Don't pad. A two-line rewrite is fine if two lines is enough.6667## The approval gate6869Always end Phase B with this block and stop:7071```72Original:73 <one-line echo of what the user typed>7475Rewritten:76 <the sharp version, as it would be sent>7778Proceed?79 y — execute the rewritten prompt inline, with kanso-principles loaded80 edit — amend the rewritten prompt81 send-original — execute the original instead (rare; only when the rewrite drifted)82 n — stop, leave the rewrite in the transcript83```8485If 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.8687## Phase C — Execute8889Run the prompt in the current chat. During execution:9091- `kanso-principles` is 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.92- `kanso-prompting` is standing context for any *meta* prompts produced during execution (e.g. asking a subagent for research — though this skill itself does not dispatch subagents).93- Existing kanso skills apply where they fit. If the rewritten task is a refactor, `/kanso-refactor` rules govern. If it produces commits, `/kanso-commit` rules govern. If it ends with a PR, `/kanso-pr` rules govern. Don't reimplement those — invoke them or let them auto-load.94- Maintain a running `implementation-notes.md` file (see below) for any non-trivial execution.95- 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.9697When execution finishes, report what changed. One short summary block. No marketing. If a notes file was written, point at it.9899## Implementation notes during execution100101No 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.102103During 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.104105Append (don't overwrite) a timestamped section per `/kanso-task` run:106107```markdown108## 2026-05-25 14:32 — <one-line task description>109110### Decisions made outside the spec111- <choice, with the reasoning in one sentence>112113### Things changed from what the prompt implied114- <deviation and why it was needed>115116### Tradeoffs taken117- <what was given up, what was gained>118119### Anything else you should know120- <surprises, follow-ups worth doing, things you may want to revisit>121```122123Rules:124125- **Append, never overwrite.** If the file exists, add a new dated section at the bottom.126- **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.127- **One sentence per entry.** The notes are a log, not a reflection. Long entries belong in the commit body.128- **Omit empty sections.** If no tradeoffs were taken, the heading goes too.129- **Reference the notes in the final summary.** `Notes: implementation-notes.md (3 decisions, 1 tradeoff)` so the user sees there's something to read.130131The 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.132133## What this skill never does134135- Run via the Agent or Task tool, or dispatch any phase to a subagent or parallel runner.136- Execute the rewritten prompt without showing it to the user first.137- Pad the rewrite to look more rigorous. Length is not signal.138- Ask more than three clarifying questions, or spread them across more than one round. The pre-flight is a single batch.139- Question a concrete input, or one where the user waved the skip valve. High-confidence input and an explicit `--go` both format silently.140- Re-introduce the noise patterns `kanso-prompting` warns against (`CRITICAL`, ALL CAPS, anti-laziness scaffolds).141- Silently change the user's intent under cover of "sharpening". The rewrite is faithful — only the wording improves.142- Edit `kanso-principles` or `kanso-prompting` during execution. Those are reference docs, not work targets.143- Skip the approval gate. The user always sees the prompt before it runs.144145## Failure modes to avoid146147- Rewriting a vague prompt into a longer vague prompt. If the source is empty of intent, ask — don't pad.148- Asking clarifying questions the user already answered in the original request.149- 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.150- Re-stating the original request in the rewrite. The rewrite is a different artefact, not a paraphrase.151- 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.152- Treating "execute inline" as licence to skip the principles. `kanso-principles` is the whole point of routing through this skill rather than typing the prompt directly.153- Producing a beautiful rewrite and then running it via a subagent. The whole loop is in-chat, every time.154- 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.155- Writing implementation notes that read like marketing or apology. They're a log: one short sentence per entry, factual, no hedging.