Track current session work as a checklist.
TopicDescriptionGuideantigravitytask.md artifact-based checklist for Antigravity sessionsantigravity.mdclaudeTodoWrite/TaskCreate API for Claude Code sessionsclaude.mdresumeEnvironment-agnostic task cleanup + remaining-work workflowresume.md
text
wip (entry — /wip or "task cleanup + remaining work")
└─→ resume (environment-agnostic workflow)
├─→ claude (Claude Code: TaskList/TaskCreate/TaskUpdate/AskUserQuestion)
└─→ antigravity (Antigravity: task.md artifact + ask.md emulation)
Record in-progress work via at least one of:
checklist.md, fix_plan.md and similar markdown files — persists across sessionsWIP: tag for later amend/squashEmitting only a text summary without persistent recording does not satisfy /wip.
Before dispatching to any topic, classify the args intent. The /wip skill has two mutually-exclusive dispatch paths — resume workflow vs new-task registration — and the wrong choice wastes user time and misapplies the resume gate.
Read args + call TaskList (Claude Code) or read task.md (Antigravity). Then classify:
SignalModeDispatchargs contains new-work instructions (verbs like write / create / add / record / draft, referring to concrete deliverables), AND (existing tasks are 0 OR the new work is clearly independent)Registration modeRegister new tasks via TaskCreate (Claude) / append lines to task.md (Antigravity). Skip resume workflowargs empty, or contains cleanup/resume keywords only (cleanup / remaining / resume / continue), AND existing tasks ≥1Resume modeFollow 3 steps in resume.mdargs contains new-work instructions AND existing tasks ≥1 with unclear directionMixed mode(a) TaskCreate new work first, (b) then resume workflow on the combined listargs contains new-work instructions AND 0 existing tasksRegistration mode (0-task early exit)TaskCreate only. Do NOT enter resume Step 1 (nothing to clean)
Self-check (before proceeding) — answer all 5:
TaskList / read task.md to count existing tasks?TaskCreate directly, not resume Step 1?TaskCreate first, then resume?AskUserQuestion before dispatching?Follow the 3 steps in resume.md in order:
fix_plan.md / checklist.md to recover their state before askingdefer-to-checklist follows todowrite's file medium convention ( fix_plan.md/ checklist.md) — write the deferred item there rather than leaving it as an orphaned session taskRegister BEFORE execute (HARD STOP): TaskCreate must run before any deliverable work — no Read / Edit / Write / Bash on the target artifact until the task exists. "The edit is small / one file / ≤2 steps" is not an exception: an explicit /wip means the user asked for the work to be tracked first. Registering after the edit (or not at all) is the exact violation this path prevents. Reading a file solely to compose the task's registration is fine; editing/producing the deliverable before the task exists is not.
TaskCreate (Claude) or append lines to task.md (Antigravity) — one entry per item — as the first execution tool call, before touching the deliverableAskUserQuestion for start priority; else mark the sole item in_progress and execute#Don'tDo1Enter resume Step 1 (Cleanup) blindly on every /wip invocationRun Step 0 classification first. 0-task + new-work args = skip resume, go to Registration path2Interpret "3 steps in resume.md must follow" as unconditionalThe 3-step chain applies only when Resume mode is selected (Step 0). Registration mode has its own 3-step path (parse → register → execute)3Force resume workflow onto args that request new deliverablesNew-work verbs → Registration mode. Resume workflow does not apply to work that does not exist yet4Skip TaskList before deciding modeTaskList is the primary source for existing-task count. Guessing from context memory is unreliable5Mixed mode: register new tasks + immediately mark in_progress without resume Step 2 direction ask on existingMixed mode: (a) register new, (b) then run resume on the combined list — old tasks may still need per-item direction6Treat an explicit /wip <small edit> as a Skip-Condition case and go straight to Read/ Edit of the deliverableExplicit /wip = registration requested. Run Step 0 → Registration/Resume path → TaskCreate first, then execute. Skip Conditions gate self-invocation, not explicit calls7Interrupt-stacked instructions arrive right after a registration-mode /wip (a newer directive: reword, investigate, etc.) → pivot to the newest instruction and never register the original /wip argsThe original /wip args still require TaskCreate first. Register them before pivoting to any interrupt-stacked instruction — including Bash investigation for the newer directive. The register-before-execute guard hook only covers the case where /wip is the last user turn; the interrupt-stacked case (a newer non- /wip turn follows) is caught only by this discipline
Environment implementations:
Prior violations: see ~/.claude/skills/cleanup/data/failed-attempts.md under keywords "wip resume dispatch", "wip cleanup skip", "wip registration vs resume".
/wip or "task cleanup + remaining work" → Step 1 cleanup → Step 1.5 checklist state recovery (context-opaque tasks) → Step 2 per-item direction ask → Step 3 execute. Per-environment tooling lives in claude / antigravity.
See detailed guide.
Use TodoWrite for sequential steps, TaskCreate for parallel tasks with dependencies.
After compact, restore prior work: show summary → multiSelect → re-register via TodoWrite.
See detailed guide.
Use task.md artifact with standard markdown checkboxes ( - [ ], - [/], - [x]).
Do NOT wrap checkboxes in backticks.
See detailed guide.
Scope (HARD STOP) — these gate the auto-decision of whether to reach for /wip unprompted. They do NOT override an explicit /wip invocation. When the user explicitly types /wip (or "task cleanup / remaining work / register task"), registration is already requested → run Step 0 classification and the Registration/Resume path; do NOT skip TaskCreate because the work "looks trivial / is one file / is ≤2 steps". "Tasks with 2 or fewer steps" is a reason not to self-invoke /wip, never a reason to skip registration once /wip was invoked.
WIP tracking is unnecessary (do not self-invoke /wip) for: