
No Mistakes
FreeAutomated validation for safe code changes.
Free ยท Opens the source repo
What No Mistakes does
No Mistakes is a powerful local gate that ensures your code changes are validated through a comprehensive pipeline before they are pushed to your target repository. This tool automates the process of code review, testing, documentation, linting, and continuous integration (CI) to help you maintain code quality and prevent errors from reaching your production environment. By using the no-mistakes axi command family, you can easily manage and monitor the validation process, receiving machine-readable output to track progress and outcomes.
The validation process is structured into distinct phases, allowing you to inspect, fix, and validate your changes methodically. When you invoke the /no-mistakes command, you can choose between a validate-only mode or a task-first mode, where you can specify a task for the tool to execute before validating the results. This flexibility makes it suitable for various workflows, whether you are working on a new feature or fixing a bug. The tool emphasizes the importance of committing your changes on a feature branch, ensuring that only relevant modifications are validated and pushed.
One of the standout features of No Mistakes is its focus on behavior-driven testing. It discourages superficial tests that merely check for the presence of strings or tokens in the code. Instead, it advocates for tests that assert observable behaviors and outcomes, aligning with best practices in software development. This approach not only helps catch regressions but also ensures that your code behaves as intended in real-world scenarios.
No Mistakes is ideal for developers who prioritize code quality and want to implement a rigorous validation process in their development workflow. It is particularly beneficial for teams practicing continuous integration and delivery, as it integrates seamlessly into existing pipelines, enhancing the overall reliability of the codebase.
When to use it
Use No Mistakes when you want to validate code changes before pushing them to a repository, especially in CI/CD workflows.
When not to use it
This skill is not suitable for quick, unreviewed changes or in environments where automated validation is not required.
What you can build with it
Validating Code Changes
Use No Mistakes to validate your code changes before pushing them to ensure they meet quality standards.
Integrating into CI/CD Pipelines
Incorporate No Mistakes into your CI/CD pipeline to automate the validation of code changes during the development process.
Ensuring Code Quality
Leverage No Mistakes to maintain high code quality by enforcing rigorous testing and validation practices.
How to install No Mistakes
View source1. Install with the skills CLI
npx skills add kunchenguid/no-mistakes/no-mistakes --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by kunchenguidno-mistakes
no-mistakes is a local gate that validates your code changes through a pipeline
(intent, rebase, review, test, document, lint, push, PR, CI) before they reach
the configured push target. You drive it through the no-mistakes axi command family, which prints
machine-readable TOON to stdout and progress to stderr.
Active validation-step boundary
A no-mistakes validation-step agent is already inside an active outer run. It must inspect, fix, and return only its assigned phase. It must never initialize, start, reattach, rerun, respond to, synchronize, abort, eject, or directly push a no-mistakes pipeline. Delivery requirements in user intent remain acceptance context, but the outer executor alone performs the other validation, push, PR, and CI phases.
NO_MISTAKES_GATE is fast diagnostic evidence, not authorization by
itself. The runtime combines managed Git identity with authenticated process
ancestry. If a pipeline-control command returns
error.code: nested_gate_context, stop immediately and
return control to the outer executor. Safe inspection remains available through
no-mistakes axi status, no-mistakes axi logs, help, and
no-mistakes doctor.
When the user invokes /no-mistakes, report the outcome at the end. If the user
asks for something specific, translate that request into the matching axi run
flags yourself - for example, "skip the lint step" becomes --skip=lint. Run
no-mistakes axi run --help to see the available flags.
Two ways to invoke
/no-mistakes works in two modes, depending on whether the user hands you a
task along with the command:
- Validate-only - bare
/no-mistakes(optionally with flag-style requests like "skip the lint step"). The user's code changes are already committed; validate them and report the outcome. - Task-first -
/no-mistakes <task>, e.g./no-mistakes add a --json flag to the status command. First carry out the task yourself, then validate the result through the pipeline:- Check scope. Inspect
git statusbefore you change or commit anything. Preserve unrelated pre-existing uncommitted changes, and when you commit, commit only the changes that belong to the user's task. - Do the work. Make the changes the task describes, then commit them on a feature branch. If the user is on the repository's default branch, create a feature branch first - the gate validates committed history on a non-default branch, so the work must land there before you run.
- Then validate, passing the user's task as your
--intent. The task text is exactly what the user set out to accomplish, in their own words, so it is the intent - preserve requirements stated directly by the user, including constraints, exclusions, acceptance criteria, and later decisions; do not condense them into a diff summary or drop them while adding implementation context. Enrich it with the decisions and tradeoffs you made while doing the work (see Intent is required).
- Check scope. Inspect
Test-quality rule
Never add a test whose only evidence is that it opens, reads, greps, parses, or snapshots implementation source code and finds or omits particular strings, tokens, lines, commands, function names, prompt phrases, regex matches, AST shapes, or incidental snapshots. That does not prove behavior: matching text can be dead or commented out, and a behavior-preserving refactor can change it.
Instead execute a public or executable interface and assert observable behavior, state, output, side effects, and failure modes. For machine-consumed declarative artifacts such as workflow YAML, JSON, policy, .gitignore, or generated configuration, invoke the real consumer when feasible or parse into a typed or normalized semantic model and assert meaning. A raw substring or regex over the file is still the anti-pattern.
Reading a file is legitimate when the file is itself generated public output, a serialized protocol, persisted state, an intentional snapshot, or another explicitly owned text or byte contract. Name that contract, and do not use its contents as a proxy that unrelated code works. A natural-language prompt or instruction is not proven effective because its source contains a sentence. Deterministic CI may test the final emitted prompt delivered to an agent as an intentional generated interface; model interpretation belongs in development-only evaluation, not live-LLM CI.
For a regression, reproduce the reported failure when feasible: the test should fail before the fix and pass after it.
Everything below - preconditions, intent, the validate-and-decide loop - applies the same way once the work is committed on a feature branch.
Before you start
- The work you want validated must be committed on a branch. The gate validates committed history, not your uncommitted working tree.
- You must be on a feature branch, not the repository's default branch.
- The repository must already be initialized with
no-mistakes init. - The daemon must have a runnable configured pipeline agent: a supported native
agent binary, the
agent: cursorACP alias, or an explicitacp:<target>throughacpx. You are the AXI driver, not an implicit pipeline-agent backend. If none is available, the run fails before its first step;no-mistakes doctorreports the configuration problem.
If any of these is not met, axi run returns an error: with the exact command
to fix it - read it and act on it (commit your work, or create a branch). If the
repository is not initialized, run no-mistakes init first; if the no-mistakes
command itself is missing or misbehaving, no-mistakes doctor reports what is
wrong.
Before starting, run no-mistakes axi (home view).
If it shows an active run on your current branch, inspect it with no-mistakes axi status.
If it is parked at a gate, drive it with no-mistakes axi respond.
Reattach an in-flight run by re-running no-mistakes axi run when it still matches your current HEAD - either as the submitted head or as the current pipeline head.
Only no-mistakes axi abort it when you mean to discard that run before starting over; aborting is a between-runs action, never a way to take over or bypass a gate while a run is still going (see Validate and decide).
If it shows an active run on another branch, leave that run alone and start validation for your current branch with no-mistakes axi run --intent "...".
Intent is required
When you start a run you must pass --intent: what the user set out to
accomplish - the goal or request behind this work, in their terms. This is not
a description of the diff or the files you changed; it is the objective the
change is meant to achieve. You know it from the conversation, so pass it
directly - no-mistakes uses it verbatim instead of inferring it from local agent
transcripts (slower and flakier).
Err on the side of completeness, not brevity. The review step uses --intent
to tell a deliberate decision apart from a mistake, so a thin one-line summary
makes it flag things the user already chose. Capture the nuance: the user's
goal, the specific decisions and tradeoffs they made along the way, any
constraints or approaches they ruled in or out, and anything they explicitly
asked for that might otherwise look surprising in the diff. A few sentences to a
short paragraph is normal - write down what you learned from the conversation
that a reviewer reading only the diff would not know.
Validate and decide
Run the pipeline and decide on its findings as they come up:
-
Start the run. It blocks until the first decision point or the end:
no-mistakes axi run --intent "<what the user set out to accomplish>"axi runand everyaxi respondblock synchronously - the review, test, and CI steps can each take several minutes, so a single call may not return for a while. That is normal; allow a long timeout and do not cancel or re-issue the command because it seems slow. To check progress without disturbing the run, useno-mistakes axi statusfrom a separate call. A long-running call is working, not stalled - background it if your harness needs to, but the run never advances past a gate on its own. Read every return; on agate:, respond; loop until anoutcome:. Never idle-wait for the run to move forward by itself. When that status output includesawaiting_agent: parked <duration>under the run, the run is parked at an approval or fix-review gate and waiting for you to sendaxi respond. The field is observability only: it does not change gate resolution, auto-resume the run, or make--yesthe default. While a step is activelyrunningorfixing,axi statusmay includeactive_stepswithactive_for,last_activity, a nativeagent_pidwhen a subprocess agent is running, and the current round such asround 1,auto-fix 1/3, orfix 2. Iflast_activityis prefixed withquiet, no step log or native-agent lifecycle activity has arrived for longer thanstep_quiet_warning. Treat that as a liveness clue, not as permission to cancel, rerun, or edit the worktree yourself. -
If the output contains a
gate:object, the pipeline is waiting on you. Read itsfindingstable. Each finding has anid,severity,file,description, and anactionthat tells you how the pipeline classified it:auto-fix- mechanical and low-risk; you can authorize the fix on your own judgment by responding with--action fix.no-op- informational only; nothing to do.ask-user- the finding challenges the user's deliberate intent or touches product behavior. This is a call only the user can make - see Escalateask-userfindings below.
Review auto-fix is disabled by default (
auto_fix.review: 0; a repo or globalauto_fix.review > 0override re-enables it), so blocking and ask-user review findings park for your decision rather than being silently self-fixed. (Other steps such as test and lint may auto-fix within the pipeline and re-run before they ever gate.)Choose one response:
# accept the step as-is and continue no-mistakes axi respond --action approve # have the pipeline fix specific findings, then continue no-mistakes axi respond --action fix --findings <id1,id2> --instructions "<optional guidance>" # skip this step no-mistakes axi respond --action skipWhile a run is active, never fix findings by editing the code yourself - the pipeline owns both the findings and the fixes. Your job at a gate is to decide and respond;
--action fixhas the pipeline apply the fix and re-review the result. For the same reason, while a run is active do notabortorrerunto go fix a finding yourself - even a real bug in your own code - because that discards the pipeline's in-flight work and forces a full re-validation.abortandrerunare for between runs (after afailedorcancelledoutcome), never to circumvent a gate.Each
respondblocks until the nextgate:,checks-passeddecision point, or final outcome.Two extra flags are available on
respondwhen you need them:--add-finding '<json>'(with--action fix) folds a finding you spotted yourself - one the pipeline did not surface - into the fix round, as a JSON finding object. Use it for a problem you noticed that is not in the gate's ownfindingstable.--step <name>responds to a specific step instead of the one currently awaiting approval. You rarely need this; omit it to answer the active gate.
-
Repeat step 2 until the output has an
outcome:instead of agate:. The outcomes are:checks-passed- the change is validated and CI is green (or the trusted default-branch config declaresno_ci: trueand no checks are registered - the help line names that declaration when it applies), but the PR is not merged yet. You are done driving the pipeline. Do not wait for the merge: tell the user the PR is ready and ask them to review and merge it (the PR link is in thehelpline). A generic empty forge check list without that declaration is not ready. no-mistakes keeps monitoring the PR in the background until it is merged, closed, or its configured idle timeout elapses, so a human can watch it in the TUI.passed- the changes cleared the gate and the PR was merged or closed.failedorcancelled- they did not; read the output and address it. Fix whatever the output points at (a failing test, a lint error, a finding you skipped), commit the fix on the same feature branch, then drive the pipeline again -no-mistakes axi run --intent "..."starts a fresh run, orno-mistakes rerunre-runs the pipeline for the current branch. This is the right place to start over: a fresh run orrerunis a between-runs action, correct only after a terminal outcome like this - never mid-run to circumvent a gate. Do not leave the user at afailedoutcome without either retrying or explaining what blocks it.
Before any post-pipeline local commit or fresh run, read the structured branch_sync object returned by AXI home, status, or a drive result.
Only when its next_action.code is sync, run no-mistakes axi sync first.
That guarded sync may be a strict fast-forward or a content-equivalent diverged advance that anchors the pre-sync head before moving the branch with reset semantics; genuine divergence stays blocked.
If it reports next_action.code is continue_active_run, the pipeline still owns the branch: run the reported command, keep driving the active run, and do not make local follow-up commits.
When next_action.code is recover_custody, a terminal run left unpublished pipeline commits preserved in the local gate: run no-mistakes axi sync --recover to return custody and take the preserved head, or no-mistakes rerun to resume validating it instead.
Recovery takes that head by fast-forward, or by adopting a diverged preserved head proven to carry every local change - the ordinary result of the pipeline rebasing your commits onto a newer base - after anchoring your pre-recovery head under refs/no-mistakes/recover-local/<run>.
That proof is deliberately narrow, so a rebase whose fix rounds also rewrote your own lines refuses instead of being adopted: when nothing can tell a deliberate pipeline fix from a dropped change, the decision is yours.
A branch_sync.state of user_owned means the run went terminal before changing the submitted head and cancellation released the branch: the exact branch and head are yours and immediately usable for whichever delivery path is authorized - no sync action is needed, and a repeated --recover there is a harmless no-op.
A dirty worktree, or divergence that cannot be proven contained, makes the recovery refuse with explicit choices; --keep-local keeps your current head while the preserved commits stay anchored under refs/no-mistakes/recover/<run>.
If synchronization is blocked, process that structured state instead of improvising reset, stash, merge, rebase, force, or branch replacement.
After synchronization, commit the follow-up on top and re-run no-mistakes axi run --intent "..." with the original user intent.
This preserves every prior gate-fix commit regardless of its configured subject.
The CI step deliberately keeps watching the PR after checks pass, so
axi run returns checks-passed the moment checks are green (or a trusted
no_ci: true declaration covers a zero-check repository) rather than
blocking on the human merge. Never poll or re-run waiting for the merge yourself.
Never treat "no CI checks reported" alone as green.
Because that monitor stays live, a PR that falls behind the default branch or
hits a merge conflict after checks pass - commonly because another PR merged
first - needs no command from you: never hand-rebase. When the CI monitor
sees an actual conflict it rebases onto the base, resolves it, and re-pushes
the branch itself; a PR that is merely behind but still clean needs nothing
either, since the platform merges it. The one exception is when that monitor is
no longer running - the PR was closed, the run was aborted or superseded, it
idle-timed-out, or its auto-fix attempts were exhausted - in which case recover
with no-mistakes rerun, which cancels the stale monitor and re-runs the full
pipeline including a deterministic rebase step. Do not reach for
no-mistakes axi run to refresh a still-active PR: after checks-passed it
reattaches to the running monitor (HEAD unchanged) and returns its output
without rebasing.
On a successful outcome (checks-passed or passed), close the loop with the
user: summarize what happened during the pipeline in a concise, easily readable
format - what was validated and what was found. If the output includes a
fixes table, the pipeline fixed findings your original change missed:
acknowledge those misses and explicitly list each fix so the user can easily
review them.
Escalate ask-user findings
A gate whose findings are all auto-fix or no-op is safe to drive on your
own judgment: respond with --action fix or --action approve as
appropriate. But a finding marked
ask-user is a decision that belongs to the user, not you - the pipeline
flagged it because it challenges their deliberate intent or changes product
behavior. Do not approve, fix, or skip it on your own. Instead, stop and bring
it to the user before you respond:
- Relay each
ask-userfinding to them as the pipeline wrote it - itsid,file, and fulldescriptionverbatim. Do not paraphrase, summarize away the detail, or pre-judge the answer. - Ask how they want to proceed, then translate their decision into the matching
respondcall:--action fix(pass their guidance through--instructions),--action approve, or--action skip.
The one exception is --yes (below): it is the user's standing consent to
drive every gate unattended, so under --yes you resolve ask-user
findings automatically instead of stopping to ask.
If you have clear consent to drive the run automatically, pass --yes to axi run
or axi respond. It treats every actionable finding - auto-fix and
ask-user alike - as consent to fix it, selects every current finding for one
fix round, accepts the resulting fix review, and approves gates with only
no-op findings. Only use it when the user has asked you to drive the whole
run without checking back.
Inspecting state
no-mistakes axi # home view: current branch, active runs, next steps
no-mistakes axi status # full detail plus cached branch_sync when relevant
no-mistakes axi sync --check # freshly verify an offered synchronization plan
no-mistakes axi sync # apply only an offered guarded synchronization
no-mistakes axi sync --recover # return custody after a terminal run left unpublished pipeline commits
no-mistakes axi logs --step <name> --full # full log output of one step
no-mistakes axi abort # cancel the current-branch active run
no-mistakes axi abort --run <id> # cancel a specific run by id (works outside its worktree)
Reading the output
- Output is TOON:
key: valuepairs,name[N]{cols}:tables, andhelp[N]:hints. - A non-terminal run object may include
awaiting_agent: parked <duration>immediately afterstatus; that means the run is parked at a gate awaiting youraxi respond. - A run object with a
runningorfixingstep may include anactive_stepstable. Use it to see the active duration, latest activity, native agent PID, and current execution or fix round. - The
helplist at the bottom of most responses tells you the next commands to run. - Errors are printed as
error: ...on stdout with ahelplist; act on the suggestion. - Exit codes:
0success, no-op, or normal decision gates,1failed or cancelled final outcomes,2bad usage.
A gate: waiting on you looks roughly like this - a gate: line naming the step, optional step-specific fields such as note, a findings[N]{...}: table with one row per finding, and a help[N]: list of next commands:
gate: review
note: Review auto-fix is disabled by default (auto_fix.review: 0; a repo or global auto_fix.review > 0 override re-enables it), so blocking and ask-user review findings park for your decision rather than being silently self-fixed.
findings[2]{id,severity,file,line,action,description}:
r1,warning,internal/pipeline/executor.go,,auto-fix,Error from os.Remove is ignored
r2,error,cmd/no-mistakes/main.go,,ask-user,New --force flag bypasses the confirm prompt
help[6]:
Run `no-mistakes axi respond --action approve` to accept this step and continue
Run `no-mistakes axi respond --action fix --findings <ids>` to have the pipeline fix the selected findings (do not edit files yourself)
Run `no-mistakes axi respond --action skip` to skip this step
Run `no-mistakes axi logs --step review --full` to read the full step log
A long-running call is working, not stalled - background it if your harness needs to, but the run never advances past a gate on its own. Read every return; on a `gate:`, respond; loop until an `outcome:`.
Commit post-pipeline follow-up work on top of the existing branch so every pipeline fix commit remains present. Never abort-and-restart, reset, or replace the branch in a way that drops prior gate-fix commits.
Read the action column per row: decide r1 (auto-fix) on your own
judgment - respond --action fix --findings r1 hands it to the pipeline to
fix - but stop and escalate r2 (ask-user) to the user before responding. A
final state
instead shows outcome: <checks-passed|passed|failed|cancelled> with no
findings table. Field names and exact columns can vary by step and version,
so read the actual findings header rather than assuming this layout.
Frequently asked questions about No Mistakes
Similar skills
Quality Playbook Generator
Run comprehensive quality audits on any codebase.
PR Draft Summary
Automate PR summary generation for openai-agents-python.
Final Release Review
Streamline your release candidate audits with ease.
Unit Test Vue Pinia
Efficiently write and review unit tests for Vue 3 applications.
Slang Shader Expert
Optimize and integrate Slang shaders with ease.
Telemetry Standards
Ensure consistent event tracking in Supabase Studio.
