Install
openclaw skills install agent-step-sequencerMulti-step scheduler for in-depth agent requests. Detects when user needs multiple steps, suggests plan and waits for confirmation, persists state, and runs heartbeat-aware flow. Use when requests have 3+ actions, sequential dependencies, output dependencies, or high scope/risk.
openclaw skills install agent-step-sequencerMulti-step scheduler for in-depth requests. Enables step-based actions with heartbeat integration—survives gateway reset mid-step.
scripts/step-sequencer-check.py immediately (no wait for heartbeat)Critical: If gateway resets mid-step, next heartbeat reads state and resumes correctly.
Agent builds a plan when user approves. During approval, agent asks: Use 2-minute delay between steps? Recommended for rate-limit–sensitive API calls. User chooses; agent sets stepDelayMinutes (0 or 2) in state. Each step has title, instruction, and optionally requiredOutputs (paths relative to workspace that must exist before the step is marked DONE):
{
"plan": {
"steps": {
"step-1": { "title": "Research topic X", "instruction": "Research topic X and produce a concise summary", "requiredOutputs": ["study/summary.md"] },
"step-2": { "title": "Write paper", "instruction": "Using the summary from step 1, write a research paper..." }
}
},
"stepQueue": ["step-1", "step-2"],
"currentStep": 0,
"stepRuns": {},
"stepDelayMinutes": 0,
"status": "IN_PROGRESS"
}
step-sequencer-runner.py): Invokes agent with step instruction, waits for exit, marks DONE/FAILED. Applies stepDelayMinutes. On retry, agent gets troubleshoot prompt.step-sequencer-check.py): If work to do, invokes runner. Handles FAILED → retry (reset PENDING, invoke runner).Do not stop mid-step to ask the user. When executing a step, if something fails (empty fetch, API error, source unavailable):
Do not stop silently. If you cannot complete the step after retry and alternatives: actively prompt the user—post a short message that you hit a snag, what failed, and what you tried (e.g. "Step 2 (research Meteora) failed: CoinMarketCap fetch empty, tried CoinGecko—also empty. Need another source or skip this token."). Then exit non-zero so the runner marks FAILED and the scheduler can retry or add to blockers. Never just stop without telling the user.
Agent must suggest before proceeding. When MULTI_STEP, propose the step plan and wait for confirmation before executing.
MULTI_STEP =
(action_count >= 3)
OR has_sequential_language
OR has_output_dependency
OR high_scope_or_risk
OR user_requests_steps
OR contains_setup_keywords
SINGLE_STEP =
(action_count == 1)
AND NOT has_output_dependency
AND immediate_execution
DECISION =
IF MULTI_STEP THEN suggest_multi_step → wait for confirm → proceed
ELSE single_step
Definitions:
| Criterion | Meaning |
|---|---|
action_count | Number of distinct actions (file edits, commands, etc.) |
has_sequential_language | "then", "after", "first...then", "step 1" |
has_output_dependency | Step B needs output from step A |
high_scope_or_risk | Many files, destructive ops, migration |
user_requests_steps | "step by step", "break this down", "one at a time" |
contains_setup_keywords | "set up", "migrate", "implement from scratch", "full X", "complete Y" |
See references/state-schema.md. Key fields:
plan.steps: step definitions (title, instruction, optional requiredOutputs)stepQueue, currentStep, stepRunsstepDelayMinutes: 0 = no delay; 2 = 2 min between stepsblockers, lastHeartbeatIso, artifactsHeartbeat invokes scripts/step-sequencer-check.py. Agent also invokes it right after persisting state.
Runner invokes agent (configurable via STEP_AGENT_CMD). Runner applies stepDelayMinutes.
flowchart TD
A[Heartbeat or Agent] --> B[step-sequencer-check.py]
B --> C{Work to do?}
C -->|No| D[Do nothing]
C -->|Yes| E[Invoke runner]
E --> F[step-sequencer-runner.py]
F --> G[Invoke agent with instruction]
G --> H{Agent exit}
H -->|Success| I[Mark DONE]
H -->|Fail| J[Mark FAILED, invoke check script]
I --> K[Check advances or done]
J --> B
flowchart TD
U[User Request] --> V{Complex enough?}
V -->|No| W[Execute directly]
V -->|Yes| X[Propose step plan]
X --> Y[User confirms]
Y --> Z[Persist state.json with plan]
Z --> AA[Agent invokes step-sequencer-check]
AA --> AB[Runner invokes agent - step 1]
AB --> AC[Heartbeat also invokes on schedule]
| Env | Description |
|---|---|
STEP_AGENT_CMD | Required. Command to invoke agent (space-separated). Prompt appended as last arg. Example: openclaw agent --message |
STEP_RUNNER | Path to step-sequencer-runner.py (optional) |
STEP_MAX_RETRIES | Max retries on FAILED before adding to blockers. Default: 3 |
OpenClaw: Wire STEP_AGENT_CMD to OpenClaw's agent invocation (e.g. openclaw agent --message).
Security: Set STEP_AGENT_CMD only to your trusted agent binary. Do not use shell interpreters (bash, sh, etc.) or -c/-e—the runner rejects these to prevent command injection. The instruction from state.json is passed as a single argument; it is never executed by a shell.
When all steps complete:
clawhub install agent-step-sequencer
Manual copy:
cp -r agent-step-sequencer ~/.openclaw/skills/agent-step-sequencer
Heartbeat integration — Add this to your heartbeat (or have the agent add it):
# Agent Step Sequencer check (add to heartbeat cycle)
python3 ~/.openclaw/skills/agent-step-sequencer/scripts/step-sequencer-check.py ~/.openclaw/workspace/state.json
Or if skill is in workspace: python3 ~/.openclaw/workspace/skills/agent-step-sequencer/scripts/step-sequencer-check.py ~/.openclaw/workspace/state.json
Set STEP_AGENT_CMD to your agent invocation before running. Agent should invoke the check script immediately after persisting state.