Install
openclaw skills install durable-task-runnerRun long-running, multi-step work in OpenClaw without losing it to resets: durable state, progress updates, smart 'continue this' recovery, verification before completion, and optional worker-lane coordination for larger jobs. Use when work spans multiple phases, must survive agent or gateway resets, or should not depend on ad-hoc chat memory. Best fit for users who want explicit recovery after interruption rather than fragile background scheduler setup.
openclaw skills install durable-task-runnerUse this skill to run long work with durable state and deliberate recovery, not like a goldfish.
Act as the planner and verifier. Do not rely on conversational memory for active long-running work. Persist the working state to disk early and keep it updated.
Prefer this skill when any of these are true:
Do not use it for trivial one-shot tasks.
Before substantial execution:
scripts/task_ctl.py createDurable task files live under:
state/tasks/<task-id>.jsonstate/tasks/<task-id>.events.jsonlstate/tasks/<task-id>.progress.logCreate the durable task before real work starts. At minimum capture:
time or tokens)Prefer:
Each meaningful slice should end with a progress/event update.
For active long work, send informational progress updates:
Do not ask for permission to keep going unless the next action is risky, destructive, external, or ambiguous.
If the user pauses, stops, or steers the task:
After interruption or reset:
scripts/task_continue.py to select the most relevant durable task and resume it intelligentlyscripts/task_resume_bootstrap.py for restart analysis when you need to inspect the decision surface directlyscripts/task_resume_apply.py only for clearly low-risk follow-throughThe intended model is smart resume after reset, not endless ambient scheduler theater. By default, bootstrap should prefer asking whether to continue after reset/interruption; explicit user intent like "continue this" is what should flip the task back into active execution.
Before marking a task complete:
desired_state=completedUse worker lanes only when parallelism is worth the added control surface.
Default roles:
When using worker lanes:
Read references/subagent-return-protocol.md when using worker lanes.
Read only what the current task needs:
references/quickstart.md — minimal end-to-end usage patternreferences/task-schema.md — snapshot/event structurereferences/control-levels.md — how much process the task earnsreferences/subagent-return-protocol.md — worker return rulesUse these directly:
scripts/task_ctl.py — create/update/show/progress/event/control durable tasksscripts/task_continue.py — smart user-facing "continue this" recovery after reset/interruptionscripts/task_resume_bootstrap.py — analyze resumability after interruptionscripts/task_resume_apply.py — apply low-risk resume follow-throughscripts/task_reconcile.py — reconcile pending/idempotent action statescripts/task_subagent_ctl.py — manage worker-line state and structured returnsscripts/task_subagent_run.py — prepare a ready-to-use worker payloadscripts/task_report.py / scripts/task_ticker.py — render compact statusscripts/task_tick_all.py — run optional due status delivery across eligible running tasksscripts/task_install_tick_cron.sh — optional helper to print/install a current-user cron entry for recurring ticksKeep attribution explicit when ideas or adapted structures come from other skills.
If you borrow more than general inspiration, update ATTRIBUTION.md and note it near the relevant file.