Deferred — Delete the lies. Then /bad.
SkillProductivityThe user invokes `/deferred` when the agent committed the most offensive bailout shape — shipped half-implementations, stubs, TODO-marked fake bodies, "out of scope for this task" framing, deferred-to-next-agent / deferred-to-next-iteration / follow-up-handles-this code, or any shape of *"this looks like progress but isn't"*. The skill forces the agent to (1) honestly enumerate EVERY deferred / partial / stub / TODO / out-of-scope item with file+line+rule citation, (2) DELETE that code in the same reply — wrong implementation is not what the user paid for, so the lie has to go before the implementation can exist, (3) execute the `/bad` skill's protocol on the underlying rule violation (§ "An instruction is ALWAYS implemented fully"). Distinct from `/bailout` / `/bad`: those skills guard WORKING code from destruction. `/deferred` mandates deletion of LYING code — code that was wrong from the moment it was written. Invoke when the user types `/deferred`.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Deferred — Delete the lies. Then /bad. skill
What this skill tells your AI
The instructions your AI receives, as published by gweslab/cerf in .claude/skills/deferred/SKILL.md and read by ahel’s review.
The user invoked /deferred because YOU shipped lying code: a stub pretending to be an implementation, a function body that returns a hardcoded value with // TODO next to it, a half-completed sweep marked "next iteration handles the rest", a peripheral handler that logs args instead of emulating the register, a comment that frames partial work as a deliberate scope decision ("out of scope for this task", "follow-up will integrate", "deferred to next agent"). The user did not pay for any of that. The user paid for the implementation. The half-implementation is a misrepresentation of what was delivered.
Per agent_docs/rules.md, every shape of this is a rule violation, not a degree of completion:
- § "An instruction is ALWAYS implemented fully" — "Unfinished new implementation are reverted and treated as rules violation"
- § "Code comments framing partial work as deferred are bailouts" — "Comments that present an incomplete port as an intentional choice are bombs, documented, not honest scoping"
- § "Documented-uncertainty sections are unfinished drafts"
- § "Stubs must fail honestly" — "return failure, not fake success"
- § "Never add transitional hacks" — "no 'keep it working between phases', no intermediate shims"
- § "Checklist defines task scope; the implementing agent does not"
- § "Do not delegate implementable work to 'next agent' or 'next session' when you have tool budget"
These exist because deferral-as-progress is the highest-value lie an agent can ship on this codebase: compile is green, function exists with the right name, no error surface — looks done. Weeks later something tries to call it, gets garbage or a fake-success, and the user pays again to discover the lie and pays AGAIN to write the implementation. The skill cuts that cycle at the source.
Step 1 — Enumerate every deferred / partial / stub / TODO / out-of-scope item
Honestly, exhaustively, no aggregation, no softening, no "minor cleanup":
"Deferral disclosure under
/deferred:
<file:line>—<symbol>:<the specific lie>(e.g. "returns hardcoded0; comment says// TODO: implement properly"). Violatesagent_docs/rules.md§<rule>.<file:line>—<symbol>:<the specific lie>. Violates §<rule>.- … (continue until every TODO / stub / fake-body /
// out of scope/// next iteration/// follow-up/// will be revisited/ partial-sweep / documented-uncertainty item in your recent stretch is named) Total: N items of deferred-as-progress."
If you cannot produce specific items, you have not honestly inventoried your own work. Re-read your recent diffs and find them. The bar is items, not categories — "some things are deferred" is not a valid Step 1 output.
Step 2 — DELETE the lying code
If the implementation is wrong, the code IS wrong. The user did not pay for stubs that lie about being implementations; the user paid for the implementation. Delete each item from Step 1's list via Edit / Write tool calls in this same reply.
Deletion here means FULL REVERSION to the state before the lying code existed. Not "replace with a less-broken variant". Not "downgrade to a CerfFatalExit-style honest-failure stub". Not "keep the salvageable 75% and remove just the broken 25%". A function that does 75% but is missing the critical 25% is NOT the function the user agreed to — it gets reverted, entirely. The function declaration, its body, and any callsites added during the same bad stretch to reference it all disappear; the file returns to the state it had before the lie was added. Build success on top of a lying implementation has zero meaning, so producing a "still-compiles but smaller lie" variant is not progress — it's the deferral pattern re-firing under fresh paint.
The ONLY next step (after Step 3's /bad) is the FULL implementation, written from scratch under the rules. Not a partial variant. Not a "phase 1 ships, phase 2 in next iteration" plan. The full implementation, in one body of work.
Specifically:
// TODO: implement properlynext to a fake-success return → REVERT the function entirely. The function and its declaration disappear; callsites added in the same bad stretch to reference it disappear too. The file returns to its pre-lie state.- Stub method returning hardcoded value → delete the stub entirely; the call site breaks loudly so the missing work is visible.
- Half-completed sweep (renamed N of M call sites, ported N of M handlers) → delete the partial work; the original state stands until the full sweep can be done in one body of work.
// out of scope for this task/// next iteration/// follow-up/// next agent will handle thiscomments excusing partial work → delete the comments AND the partial work they were excusing.- Documented-uncertainty section at the end of a deliverable ("§N — known gaps", "§N — things I could not verify", "§N — load-bearing assumptions") → delete the section AND the deliverable it purports to certify.
This is NOT the destruction pattern /bailout and /bad guard against. Those skills protect WORKING code from being destroyed under cleanup cover. /deferred removes code that never worked correctly — the lie was shipped as the implementation, the lie has to go before the implementation can exist. The distinction:
/bailout//baddestruction case: agent deleted an actual implementation of IMGFS → restore it, the destruction was the violation./deferreddeletion case: agent shipped a stub// TODO: real IMGFS implementationreturning fake-success → delete it, the shipping was the violation.
If a Step 1 item is ambiguous (the code partially works for some inputs and lies for others), it still goes. The contract was the full implementation; partial isn't a state the user purchased.
Step 3 — Execute /bad on the deferred-bullshit violation
After the deletion, invoke /bad's protocol on yourself for the underlying rule violations Step 1 enumerated. That means: re-anchor to the original task (which was the FULL implementation, not the partial one — the original task did not change while you drifted into deferral), articulate the violation specifically with rule citations (Step 1's enumeration IS the articulation), propose a path forward that delivers the full implementation properly OR explicitly negotiates a smaller scope with the user (never a hidden scope cut disguised as // out of scope), and resume work.
/bad's Mass-destruction section does NOT fire on the deletion you just did in Step 2, because Step 2 was removal of lying code, not destruction of working code. The two skills compose: /deferred Step 2 is sanctioned removal; /bad Step 3 is the violation-acknowledgment + course-correction on the deferral pattern that produced the lying code in the first place.
What the user gets back
The reply contains, in this exact order:
- Step 1 enumeration — exhaustive numbered list with file+line+rule citation per item.
- Step 2 deletion tool calls —
Edit/Writeremoving each lying piece from Step 1. - Step 3
/badprotocol — re-anchor to original task, articulate violation, name the path forward, resume work in the same reply.
No asking. No "should I delete this one?" / "which deferral should I keep?". All Step 1 items go. The user did not pay for choosing which lies survive.
Anti-patterns (forbidden in the /deferred reply)
- Step 1 with vague items. "Some things are deferred" / "a few TODOs" / "minor partial work" is not the enumeration this skill requires. The bar is file + line + specific lie + rule citation, per item.
- Salvaging "partial progress" from Step 1's items. "But function X is 80% done, let me keep that part" — the 80% is itself a lie if the contract said 100%. Delete it. The next attempt does it correctly.
- Asking which items to delete vs keep. No asking. All go. The user invoked
/deferredafter seeing the deferred-as-progress pattern; the invocation IS the authorization to remove every item. - Skipping Step 2 and going straight to
/bad. That turns/deferredinto a softer/badand preserves the lies. The deletion is the point — without it, the next agent re-discovers the lies under fresh framing. - Confusing
/deferreddeletion with/bailoutdestruction. They are distinct cases (named explicitly in Step 2 above)./bailoutguards working code;/deferredmandates removing lying code. If you find yourself reasoning "but/bailoutsays never delete" — re-read Step 2's distinction./bailout's rule is about working code under cleanup cover;/deferredis about lying code being removed so the honest implementation can exist. - Apology theater instead of deletion. "I see what I did, I'll be more careful next time" without the deletion is the deferral pattern continuing under cover of contrition. The deletion is required.
- Treating the deferred code as recoverable later ("we can resurrect this when we have time"). It cannot. The lie is gone; the next attempt writes the honest implementation from scratch. If parts of the deleted code were genuinely useful, the next implementation re-derives them — but it does so as part of a complete implementation, not as a salvaged-stub-promoted-to-real-code.
Why this skill exists
Deferral-as-progress is the highest-value lie an agent ships on this codebase, because it's the lie that looks indistinguishable from real progress at the moment of delivery. Every other rule violation has a tell — destruction leaves visible holes, hacks leave warning-shaped surface, guessed constants compile but break under known test inputs. Deferral leaves a green build with the right symbols and no obvious smell, and the cost only surfaces weeks later when something tries to use the code and gets garbage.
/deferred exists to remove the lie at the moment the user catches it. The deletion is not destruction in the /bailout / /bad sense — it is the precondition for the implementation to exist at all. The user did not pay for choosing which lies remain; the user paid for the implementation. Lies go; implementation gets written honestly on the next attempt.
If /deferred fires once in a session, the rule violations enumerated in Step 1 also fire /bad's second-strike clause for the next stretch — meaning if the same pattern (any new deferral-as-progress) appears in the work that follows, treat the next /bad or /deferred with maximum literal protocol adherence, not as a soft re-correction.
Signals
- GitHub stars
- 91
- Forks
- 9
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
deferred- Source
- github.com/gweslab/cerf