Don't Stop
Drive an authorized change to a verified outcome. Do not make the user the
first-line tester for defects that can be found and repaired locally.
Completion invariant: “Don't stop” means do not abandon recoverable work;
it does not mean restart completed work or retry an unchanged action forever.
Progress requires a new state, new evidence, or a changed hypothesis.
Follow the operating contract
- Work directly in the active session unless the user explicitly requests
delegation or another applicable instruction requires it.
- Treat this skill as the outer completion loop. Use more specialized skills
for implementation, debugging, testing, documents, releases, or UI control
when they apply.
- Inspect current project and runtime truth before changing anything.
- Keep implementation, verification, repair, and delivery in the same task.
- For any multi-phase, long-running, context-compaction-prone, or externally
affecting task, maintain a compact durable checkpoint; do not use commentary
as the only record of progress.
- Treat checkpoint state and evidence as the source of truth for resuming.
- Continue through recoverable failures instead of handing the first failure
back to the user.
- Preserve unrelated worktree changes and existing user data.
- Do not broaden authorization. A request to implement does not authorize a
production publish, destructive migration, payment, live submission, or
external message unless the user included that action.
0. Persist and resume task state
Create a checkpoint before the first expensive action when the task has more
than one phase, may be compacted, or can affect external state. Prefer a
first-class plan/state that survives compaction (for example, update_plan).
If that persistence is not guaranteed, use a small non-deliverable workspace
checkpoint such as .codex-tmp/dont-stop/<task-id>/checkpoint.json or work/.
Never put secrets or giant raw outputs in it, and never stage it as a product
change unless the user explicitly requests that.
The checkpoint must contain:
- objective, scope, authorization boundary, and explicit non-goals;
- stable step and acceptance-criterion IDs with states:
pending, in_progress, verified, failed, unknown, superseded, or
blocked;
- the current step, the single next action, and evidence pointers/results;
- completed actions with an operation key, inputs or source fingerprint, and
outcome;
- failed actions with the changed hypothesis required for a retry;
- in-flight or unknown external operations, request IDs, and pre/post-snapshot
pointers when applicable;
- a no-repeat list and the current worktree/runtime baseline.
After context compaction or when inheriting a long task:
- Read the checkpoint and current plan first. Do not restart from the
original prompt or repeat the first step merely because context was lost.
- Reconcile only the current step with targeted current truth. Read an
immutable document or rerun a successful probe only if its source, inputs,
or freshness requirement changed. Read a selected skill once per task;
after compaction, use the checkpoint unless a new skill is selected or its
source changed.
- If the checkpoint is missing or contradictory, perform one bounded
inventory, record the result, and then resume; do not repeatedly rediscover
the whole task.
- When the user changes scope, append or revise the affected step while
preserving verified steps and their evidence. Do not reset the whole plan.
- Update the checkpoint after each material change, verification gate,
external request, or newly discovered blocker, before starting the next
expensive action.
Action-state gate
Use an operation key such as phase | target | operation | input-hash before
every expensive read, write, test, or deployment action:
| Recorded state |
Required next action |
verified |
Reuse the evidence; rerun only if an input or dependency changed. |
failed |
Diagnose and change the hypothesis or input before retrying. |
unknown |
Inspect logs, operation status, or readback before resending. |
in_progress |
Check whether the original operation is still running. |
blocked |
Complete safe independent work, then report the blocker. |
For external writes, change one variable per probe, save the pre-state first,
and record the operation/request ID if available. Classify a timeout,
interruption, or missing response as unknown, not failed; a transport or
business acceptance response is still in_progress until required readback
passes. Read back before retrying. Never blindly resend an operation whose
request may already have reached the provider.
Example: a provider returns HTTP 200 but the response is lost before the
readback. Keep the operation unknown, query logs/resource state, and only
then decide whether a changed request is safe.
1. Establish the completion contract
- Read the applicable repository instructions, current branch and worktree
state, relevant specifications, existing tests, and live runtime state.
- Translate the request into observable acceptance criteria.
- Identify the changed behavior, its adjacent regression surface, and the
strongest locally available proof.
- Separate required outcomes from optional improvements. Avoid unrelated
refactors.
- Resolve safe details from the repository and environment. Ask the user only
when a missing choice would materially change the result or require new
authority.
- Give each step and acceptance criterion a stable ID, set the initial
checkpoint, and record positive as well as negative constraints (for
example, “must not resend” or “must not publish”).
2. Implement a coherent change
- Implement the smallest complete behavior that satisfies the acceptance
criteria.
- Follow existing architecture, conventions, and ownership boundaries.
- Add or update regression coverage in the same change when behavior changes.
- Keep credentials and sensitive values out of source, logs, screenshots, and
delivery notes.
- Do not stop at scaffolding, a proposal, or a partial happy path when the
requested behavior can be completed.
- Do not weaken assertions, delete coverage, or change acceptance criteria
merely to make validation pass.
3. Run the applicable verification ladder
Start with fast focused checks, then broaden in proportion to risk. Run every
applicable layer:
- Inspect the diff and run formatting, syntax, lint, type, schema, or
diff --check checks.
- Run focused tests that exercise the changed behavior and important failure
paths.
- Run adjacent or broader regression suites for shared contracts and
cross-module changes.
- Build, package, migrate, render, or export when the deliverable depends on
that operation.
- Exercise the real user-facing surface when practical:
- Start the actual local app or service for UI and workflow changes.
- Verify the interaction and resulting state, not only page load.
- Read back API, database, file, job, release, or exported-artifact state.
- Open or render generated documents, spreadsheets, slides, PDFs, images,
and installers before delivery.
- Record exact commands or actions and their outcomes in the checkpoint as
they occur. Never claim a test, build, runtime flow, publish, or readback
that was not completed.
After each verification gate, mark the relevant criterion and evidence before
moving to the next gate. Do not rerun a passed gate solely because the context
was compacted; rerun it when its inputs, dependencies, or required freshness
changed.
Treat unit tests as necessary but not sufficient when the request concerns a
real interface, integration, packaged app, provider, browser workflow, export,
or release surface.
4. Close the repair loop
Whenever a check or real workflow fails:
- Capture the concrete symptom and reproduce it at the narrowest useful level.
- Find the root cause instead of patching only the visible symptom.
- Fix the issue within scope.
- Add or strengthen a regression test when feasible.
- Re-run the failed check.
- Re-run the adjacent and broader checks that could be affected by the fix.
- Repeat until the applicable gates pass or a genuine blocker remains. A
retry is valid only when it has a changed implementation, input, hypothesis,
or newly relevant evidence; an identical retry is not progress.
Do not hide failures, silently skip gates, or label a failing result
"non-blocking" without evidence. If a failure appears pre-existing or unrelated,
verify that distinction with baseline evidence where practical, leave unrelated
code untouched, and report it separately.
Record the failed check and next hypothesis before repairing it. If the repair
or verification changes no state and produces no new evidence, return to the
action-state gate instead of expanding the search or repeating the same probe.
5. Perform a final self-review
Before delivery, inspect the final diff and resulting runtime or artifact:
- Check every acceptance criterion against current evidence.
- Look for missed edge cases, error handling, state transitions, regressions,
security issues, accidental secrets, debug leftovers, and misleading UI or
documentation.
- Confirm that tests prove the intended behavior rather than only the
implementation detail.
- Confirm that generated artifacts open correctly and that externally visible
state reads back correctly.
- Confirm that unrelated files were not modified, staged, committed, or
published.
- Run another repair and verification loop for every in-scope issue found.
- Mark the checkpoint complete only after every applicable criterion has current
evidence and no operation is left
in_progress or unknown.
6. Enforce the delivery gate
Deliver only when all applicable statements are true:
- The requested behavior is implemented.
- The acceptance criteria have current evidence.
- Focused tests pass.
- Required regression, build, package, render, or runtime checks pass.
- The real surface was verified, or the handoff clearly states why that layer
was not applicable or could not be reached.
- No known in-scope blocking defect remains.
- The final diff and worktree state were reviewed.
- Any requested commit, push, release, upload, export, or readback was actually
completed and verified.
Do not create a commit, push, publish, release, upload, or live submission
unless the user requested it or it is an explicit required step of the
authorized workflow.
Prevent endless loops
The following are red flags that the task is being reinitialized rather than
continued:
- rereading all skills, handoffs, or immutable source files after every
compaction;
- repeating a page/API probe whose inputs and result are already recorded;
- treating “no response” as proof that an external write did not happen;
- retrying the same failed operation without a changed hypothesis;
- saying “continue from the previous state” without naming the current step,
evidence, and next action;
- interpreting “don't stop” as permission to ignore completion, scope, or a
no-progress blocker.
When the same operation key has the same inputs and outcome twice, do not make
a third identical attempt. Either change the hypothesis/input, wait for a
defined external state transition, or classify the issue as a blocker with the
evidence already collected.
Handle genuine blockers
Pause only when progress requires user authentication or 2FA, unavailable
credentials or source data, inaccessible hardware or services, a material
product decision, a destructive action, a production side effect, a
deterministic no-progress condition after the circuit breaker, or other
authority the user has not granted.
Before pausing:
- Complete every safe and independent part.
- Try reasonable non-destructive alternatives.
- Report the exact blocker, the evidence, what is already complete, and the
single action or decision needed from the user.
- Preserve the checkpoint with the current step, attempted operation keys, and
the exact state needed to resume without repeating completed work.
- Never describe the overall task as complete while an applicable delivery
gate remains unmet.
Deliver with evidence
Lead with the outcome, then provide:
- What changed.
- What was verified, including concrete commands, flows, or readbacks and
their results.
- What was self-corrected during validation when it materially affects
confidence.
- Any residual limitation or unverified external layer.
- Requested artifact paths, commit IDs, URLs, or release identifiers.
Before handoff, include the checkpoint's current step, completed criteria, open
blockers, and next action so a later continuation can resume directly.
Keep the report concise, but never replace evidence with "should work".
1---2name: dont-stop3description: Use when an authorized implementation, fix, build, workflow, UI, data, integration, or release task is multi-phase, long-running, likely to cross context compaction, resume later, touch external state, or require autonomous repair. Do not use for exploration-only, plan-only, review-only, diagnosis-only, status, or explanation requests that do not authorize changes.4---56# Don't Stop78Drive an authorized change to a verified outcome. Do not make the user the9first-line tester for defects that can be found and repaired locally.1011**Completion invariant:** “Don't stop” means do not abandon recoverable work;12it does not mean restart completed work or retry an unchanged action forever.13Progress requires a new state, new evidence, or a changed hypothesis.1415## Follow the operating contract1617- Work directly in the active session unless the user explicitly requests18 delegation or another applicable instruction requires it.19- Treat this skill as the outer completion loop. Use more specialized skills20 for implementation, debugging, testing, documents, releases, or UI control21 when they apply.22- Inspect current project and runtime truth before changing anything.23- Keep implementation, verification, repair, and delivery in the same task.24- For any multi-phase, long-running, context-compaction-prone, or externally25 affecting task, maintain a compact durable checkpoint; do not use commentary26 as the only record of progress.27- Treat checkpoint state and evidence as the source of truth for resuming.28- Continue through recoverable failures instead of handing the first failure29 back to the user.30- Preserve unrelated worktree changes and existing user data.31- Do not broaden authorization. A request to implement does not authorize a32 production publish, destructive migration, payment, live submission, or33 external message unless the user included that action.3435## 0. Persist and resume task state3637Create a checkpoint before the first expensive action when the task has more38than one phase, may be compacted, or can affect external state. Prefer a39first-class plan/state that survives compaction (for example, `update_plan`).40If that persistence is not guaranteed, use a small non-deliverable workspace41checkpoint such as `.codex-tmp/dont-stop/<task-id>/checkpoint.json` or `work/`.42Never put secrets or giant raw outputs in it, and never stage it as a product43change unless the user explicitly requests that.4445The checkpoint must contain:4647- objective, scope, authorization boundary, and explicit non-goals;48- stable step and acceptance-criterion IDs with states:49 `pending`, `in_progress`, `verified`, `failed`, `unknown`, `superseded`, or50 `blocked`;51- the current step, the single next action, and evidence pointers/results;52- completed actions with an operation key, inputs or source fingerprint, and53 outcome;54- failed actions with the changed hypothesis required for a retry;55- in-flight or unknown external operations, request IDs, and pre/post-snapshot56 pointers when applicable;57- a no-repeat list and the current worktree/runtime baseline.5859After context compaction or when inheriting a long task:60611. Read the checkpoint and current plan first. Do not restart from the62 original prompt or repeat the first step merely because context was lost.632. Reconcile only the current step with targeted current truth. Read an64 immutable document or rerun a successful probe only if its source, inputs,65 or freshness requirement changed. Read a selected skill once per task;66 after compaction, use the checkpoint unless a new skill is selected or its67 source changed.683. If the checkpoint is missing or contradictory, perform one bounded69 inventory, record the result, and then resume; do not repeatedly rediscover70 the whole task.714. When the user changes scope, append or revise the affected step while72 preserving verified steps and their evidence. Do not reset the whole plan.735. Update the checkpoint after each material change, verification gate,74 external request, or newly discovered blocker, before starting the next75 expensive action.7677### Action-state gate7879Use an operation key such as `phase | target | operation | input-hash` before80every expensive read, write, test, or deployment action:8182| Recorded state | Required next action |83| --- | --- |84| `verified` | Reuse the evidence; rerun only if an input or dependency changed. |85| `failed` | Diagnose and change the hypothesis or input before retrying. |86| `unknown` | Inspect logs, operation status, or readback before resending. |87| `in_progress` | Check whether the original operation is still running. |88| `blocked` | Complete safe independent work, then report the blocker. |8990For external writes, change one variable per probe, save the pre-state first,91and record the operation/request ID if available. Classify a timeout,92interruption, or missing response as `unknown`, not `failed`; a transport or93business acceptance response is still `in_progress` until required readback94passes. Read back before retrying. Never blindly resend an operation whose95request may already have reached the provider.9697Example: a provider returns HTTP 200 but the response is lost before the98readback. Keep the operation `unknown`, query logs/resource state, and only99then decide whether a changed request is safe.100101## 1. Establish the completion contract1021031. Read the applicable repository instructions, current branch and worktree104 state, relevant specifications, existing tests, and live runtime state.1052. Translate the request into observable acceptance criteria.1063. Identify the changed behavior, its adjacent regression surface, and the107 strongest locally available proof.1084. Separate required outcomes from optional improvements. Avoid unrelated109 refactors.1105. Resolve safe details from the repository and environment. Ask the user only111 when a missing choice would materially change the result or require new112 authority.1136. Give each step and acceptance criterion a stable ID, set the initial114 checkpoint, and record positive as well as negative constraints (for115 example, “must not resend” or “must not publish”).116117## 2. Implement a coherent change118119- Implement the smallest complete behavior that satisfies the acceptance120 criteria.121- Follow existing architecture, conventions, and ownership boundaries.122- Add or update regression coverage in the same change when behavior changes.123- Keep credentials and sensitive values out of source, logs, screenshots, and124 delivery notes.125- Do not stop at scaffolding, a proposal, or a partial happy path when the126 requested behavior can be completed.127- Do not weaken assertions, delete coverage, or change acceptance criteria128 merely to make validation pass.129130## 3. Run the applicable verification ladder131132Start with fast focused checks, then broaden in proportion to risk. Run every133applicable layer:1341351. Inspect the diff and run formatting, syntax, lint, type, schema, or136 `diff --check` checks.1372. Run focused tests that exercise the changed behavior and important failure138 paths.1393. Run adjacent or broader regression suites for shared contracts and140 cross-module changes.1414. Build, package, migrate, render, or export when the deliverable depends on142 that operation.1435. Exercise the real user-facing surface when practical:144 - Start the actual local app or service for UI and workflow changes.145 - Verify the interaction and resulting state, not only page load.146 - Read back API, database, file, job, release, or exported-artifact state.147 - Open or render generated documents, spreadsheets, slides, PDFs, images,148 and installers before delivery.1496. Record exact commands or actions and their outcomes in the checkpoint as150 they occur. Never claim a test, build, runtime flow, publish, or readback151 that was not completed.152153After each verification gate, mark the relevant criterion and evidence before154moving to the next gate. Do not rerun a passed gate solely because the context155was compacted; rerun it when its inputs, dependencies, or required freshness156changed.157158Treat unit tests as necessary but not sufficient when the request concerns a159real interface, integration, packaged app, provider, browser workflow, export,160or release surface.161162## 4. Close the repair loop163164Whenever a check or real workflow fails:1651661. Capture the concrete symptom and reproduce it at the narrowest useful level.1672. Find the root cause instead of patching only the visible symptom.1683. Fix the issue within scope.1694. Add or strengthen a regression test when feasible.1705. Re-run the failed check.1716. Re-run the adjacent and broader checks that could be affected by the fix.1727. Repeat until the applicable gates pass or a genuine blocker remains. A173 retry is valid only when it has a changed implementation, input, hypothesis,174 or newly relevant evidence; an identical retry is not progress.175176Do not hide failures, silently skip gates, or label a failing result177"non-blocking" without evidence. If a failure appears pre-existing or unrelated,178verify that distinction with baseline evidence where practical, leave unrelated179code untouched, and report it separately.180181Record the failed check and next hypothesis before repairing it. If the repair182or verification changes no state and produces no new evidence, return to the183action-state gate instead of expanding the search or repeating the same probe.184185## 5. Perform a final self-review186187Before delivery, inspect the final diff and resulting runtime or artifact:188189- Check every acceptance criterion against current evidence.190- Look for missed edge cases, error handling, state transitions, regressions,191 security issues, accidental secrets, debug leftovers, and misleading UI or192 documentation.193- Confirm that tests prove the intended behavior rather than only the194 implementation detail.195- Confirm that generated artifacts open correctly and that externally visible196 state reads back correctly.197- Confirm that unrelated files were not modified, staged, committed, or198 published.199- Run another repair and verification loop for every in-scope issue found.200- Mark the checkpoint complete only after every applicable criterion has current201 evidence and no operation is left `in_progress` or `unknown`.202203## 6. Enforce the delivery gate204205Deliver only when all applicable statements are true:206207- The requested behavior is implemented.208- The acceptance criteria have current evidence.209- Focused tests pass.210- Required regression, build, package, render, or runtime checks pass.211- The real surface was verified, or the handoff clearly states why that layer212 was not applicable or could not be reached.213- No known in-scope blocking defect remains.214- The final diff and worktree state were reviewed.215- Any requested commit, push, release, upload, export, or readback was actually216 completed and verified.217218Do not create a commit, push, publish, release, upload, or live submission219unless the user requested it or it is an explicit required step of the220authorized workflow.221222## Prevent endless loops223224The following are red flags that the task is being reinitialized rather than225continued:226227- rereading all skills, handoffs, or immutable source files after every228 compaction;229- repeating a page/API probe whose inputs and result are already recorded;230- treating “no response” as proof that an external write did not happen;231- retrying the same failed operation without a changed hypothesis;232- saying “continue from the previous state” without naming the current step,233 evidence, and next action;234- interpreting “don't stop” as permission to ignore completion, scope, or a235 no-progress blocker.236237When the same operation key has the same inputs and outcome twice, do not make238a third identical attempt. Either change the hypothesis/input, wait for a239defined external state transition, or classify the issue as a blocker with the240evidence already collected.241242## Handle genuine blockers243244Pause only when progress requires user authentication or 2FA, unavailable245credentials or source data, inaccessible hardware or services, a material246product decision, a destructive action, a production side effect, a247deterministic no-progress condition after the circuit breaker, or other248authority the user has not granted.249250Before pausing:251252- Complete every safe and independent part.253- Try reasonable non-destructive alternatives.254- Report the exact blocker, the evidence, what is already complete, and the255 single action or decision needed from the user.256- Preserve the checkpoint with the current step, attempted operation keys, and257 the exact state needed to resume without repeating completed work.258- Never describe the overall task as complete while an applicable delivery259 gate remains unmet.260261## Deliver with evidence262263Lead with the outcome, then provide:2642651. What changed.2662. What was verified, including concrete commands, flows, or readbacks and267 their results.2683. What was self-corrected during validation when it materially affects269 confidence.2704. Any residual limitation or unverified external layer.2715. Requested artifact paths, commit IDs, URLs, or release identifiers.272273Before handoff, include the checkpoint's current step, completed criteria, open274blockers, and next action so a later continuation can resume directly.275276Keep the report concise, but never replace evidence with "should work".