aops-core/skills/task-lifecycle/SKILL.md
The shared queue-to-execution spine for claiming work. Selects the next queued task, runs the premise + freshness gates, then either DISPATCHES it to a background surface (`/dispatch`) or CLAIMS and runs it INLINE in the current interactive session (`/pull`). Owns the select/gate/claim/verify/complete lifecycle so the two commands stay thin and never duplicate it. Invoked with a leading mode token: `dispatch: …` or `execute: …`.
npx skillsauth add nicsuzor/academicops task-lifecycleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill is the single source of truth for advancing one task from the
queued set into work. Two commands consume it; the only difference between them
is the tail (where the work runs):
/dispatch → Skill(task-lifecycle, "dispatch: …") — route the selected
task to a background execution surface, then halt. Never executes inline./pull → Skill(task-lifecycle, "execute: …") — claim the selected task
and run it inline in this interactive session, asking the user questions
when needed, then verify and complete.Everything up to the mode split — Select and Gates — is identical for both. Author it once here; do not re-inline it in the command files.
The first token of args is the mode (dispatch or execute), optionally
followed by a task id:
dispatch: / execute: — select the highest focus-score queued task.dispatch: <task-id> / execute: <task-id> — select the specified task (or
its first queued leaf).If no mode token is present, default to dispatch (the safe, context-cheap path).
status: "queued".mcp__plugin_aops-core_pkb__list_tasks(status="queued") and pick the one with
the highest focus_score.These gates bind every path that pulls a task out of the queued set —
/pull, /dispatch, and the dispatch step of /supervisor. The whole point is
to refuse a bad task before compute is spent, whether that compute is an
inline run or a dispatched worker.
Apply the premise gate to the selected candidate leaf task: (1) ensure the
task carries a legible, real premise sentence — record one from the task's intent
if a hand-queued task left none, or bounce if it is too vague to state; (2) clear
it through /strategic-review <task>, which runs rbg (axiom/rig) and
pauli (worth/shape) as judges. Any BOUNCE → hard-refuse, do not spend compute,
bounce the task back to the promoter. This is the last spend-stopper before either
mode acts on the task.
The full procedure — ensuring the premise is legible, why the judgment is deployed
to two agents and never reduced to a regex/field/heading presence-check
(judgment-non-delegable), and the exact bounce-back mechanics — is owned by
[[../remember/references/premise-gate.md]] §2. Follow it there; do not restate it
here.
For the selected candidate leaf task:
Path Resolution Check: Read the task body and title and identify the paths
the brief is actually asking you to act on, distinguishing them from paths
merely mentioned in passing or as examples. Then, only if the task names a
project/repo you have checked out in this session, verify each identified
path resolves there (Read/ls); if no relevant checkout is available, skip
this check rather than warn on a path you cannot verify.
[WARNING] Task brief references non-existent path: <stale-path>
(warn, do not hard-block — the caller decides).Stale-leftover check: A superseded or dropped task is not selectable
because it is already out of the dispatchable set — supersession or a drop
decision moves the task to a terminal status (done / cancelled), so the
queued-only selection in §1 never surfaces it. No separate field check is
needed here. What the select step cannot see is a leftover from a completed
decomposition:
mcp__plugin_aops-core_pkb__get_task_children. If all siblings are
already done (a heuristic, not proof — parallel siblings legitimately
finish at different times), the task may be a leftover from a completed
decomposition. Print [WARNING] Task <id>'s siblings are all done — may be a stale leftover and flag it rather than proceeding silently; do not auto-skip
on this signal alone.dispatch — route to a background surface, then haltPerforms exactly one dispatch step and exits. Do not execute the task inline.
marsha, rbg, pauli, james, ida, qa, rbg,
polecat), dispatch using subagent_type="[name]".Task tool.Record and exit:
in_progress from this session — the executing surface
claims it.assignee and
add a dispatch note via mcp__plugin_aops-core_pkb__update_task.$AOPS_TASK_ID
environment variable and the git branch name; do not synthesise a filesystem
binding file.For surface mechanics (dispatch reflex, surface templates, compose-then-dispatch
separation) see the surface-neutral [[../supervisor/references/dispatch-rules.md]].
(The supervisor's richer, tick-scoped dispatch — pauli pre-flight, critic gate —
lives in [[../supervisor/instructions/worker-dispatch.md]] and builds on this spine;
the generic /dispatch tail here does not need it.)
execute — claim and run inline (interactive)Run the task in this session. Because this is interactive, you have explicit
licence to ask the user questions (AskUserQuestion) whenever a decision is
genuinely the user's to make — scope, ambiguous acceptance criteria, or a
hard-to-reverse step. Do not dispatch to a background worker.
status: in_progress and assignee to yourself via
mcp__plugin_aops-core_pkb__update_task. (On the Cowork surface this claim
step also drives the native-list mirror — see [[../cowork-sync/SKILL.md]].)done, or merge_ready / review if it ships through a PR). Capture
any follow-ups as new tasks. For a clean session close use [[../end_session/SKILL.md]]./pull, /dispatch, and /supervisorAll three verbs run on this one spine — Select → Gates → (Dispatch | Execute) — which lives here and is authored once:
/pull runs the spine in execute mode (claim + run inline)./dispatch runs the spine in dispatch mode (route to a surface, halt)./supervisor is the multi-tick delegate-and-verify process. Its
Dispatch phase reuses this skill's §§1–2 Select + Gates spine (the shared,
author-once part above), then layers on the discipline that is genuinely its own
and has no meaning here: the pauli pre-flight confirmation summary and critic
gate ([[../supervisor/instructions/worker-dispatch.md]]), proof, the ledger,
evaluation, and escalation across ticks.The dependency is one-way: §§1–2 (Select + Gates) is the shared spine every verb reuses; each verb's own tail (routing, or the supervisor's tick discipline) builds on it and is never referenced back by the spine.
data-ai
Canonical session close — commit, push, PR, release_task, reflection blocks, handover. Use /dump for emergency bail (no commit/PR/reflection).
data-ai
Emergency session bail — fast resume task + short handover, no commit/PR/reflection. For when you (or the user) need a clean context now. Use /end-session for canonical close.
data-ai
Daily note lifecycle — compose and maintain a factual daily note. Reports the state of the day; does not prioritise or recommend. SSoT for daily note structure.
testing
Launder supervisor/worker task-log output into a Nic-facing narrative — what happened, where things are headed, and what (if anything) is genuinely his to decide. Never relays raw process detail (worker IDs, thread pointers, log paths) or verbatim task-log stream-of-consciousness.