Date: 2026-06-08 - Scope: PR #41, P009 tasks #38, #39, and #40.

P009 supervised runner user summary

PR #41 changes OpenClaw automation from "a prompt was triggered, assume it is running" to "a worker is only active after a run record shows it started, heartbeated, and has a recovery path." For a Telegram user, the practical change is that obot can now run small PM/Development checks and report concrete run ids, states, heartbeats, transcripts, artifacts, and failures instead of vague status.

Before PR #41

  • Cron or Telegram could trigger work, but startup failures were easy to miss.
  • A task could be described as active without durable liveness evidence.
  • Stalled workers required manual follow-up to discover.
  • PM and Development handoffs were documented, but not yet proven by a supervised PM to Dev to PR cycle.

After PR #41

  • Every supervised run gets a JSON record under .codex-runs/.
  • Runs move through triggered, started, completed, or failed.
  • Heartbeat, deadline, transcript, artifact, failure reason, and recovery note are captured.
  • Telegram smoke tests prove OpenClaw can invoke and summarize the runner.

What changed for the operator

WorkflowWhat you can ask nowWhat obot should report back
Runner smoke test Run the runner self-test from Telegram/OpenClaw. Branch, command status, run id, state, heartbeat timestamp, and transcript path.
Failure-injection test Run the watchdog failure test. Both synthetic failures marked failed, reasons shown, alert length under 500 chars, repeat alert suppressed.
Real watchdog check Check local run records with check --mark-failed --json. Number of records checked, number newly failed, and any alert strings.
PM to Development acceptance Run a PM audit, then a docs-only Development handoff, with PR evidence. PM audit run record, Development run record, PR link, issue comment artifact, and post-artifact Telegram summary.

New public script

scripts/run_codex_cycle.py is the thin runner. It starts one worker command, writes a run record, heartbeats while the worker is alive, captures output in a transcript, and records completion or failure.

It is not a scheduler, queue, agent company, or Paperclip replacement. It is the minimum execution proof layer.

New watchdog behavior

The same script has check mode. It detects records that were triggered but never started, or started records that passed their deadline or stopped heartbeating.

With --mark-failed, it writes state=failed, failure_reason, and a concise alert.

New safety guidance

The README now documents that run records and transcripts are local/private artifacts and that Telegram integrations must use allowlisted runner actions.

The important rule: do not forward arbitrary chat text into --command.

How this enables more automation through Telegram/OpenClaw

The runner gives OpenClaw a small, observable execution primitive. Telegram can ask obot to run a bounded action, and obot can answer with a durable state record instead of a guess. That makes higher-level automation safer because each step has a machine-checkable result.

Automation capabilityEnabled byWhy it matters
Reliable status replies Run id, state, heartbeat, transcript path. Jeremy can ask "what happened?" and get evidence, not a narrative.
Stall detection check --mark-failed and deadline/heartbeat logic. OpenClaw can surface a failed worker without waiting for manual discovery.
PM gating before Development Supervised PM audit run p009-40-pm-audit-r2. Development starts only after a PM artifact exists and reports no error-level blockers.
Docs-only Development handoff Supervised Development run p009-40-dev-docs-pr. OpenClaw can prove a safe Development task produced a PR artifact without merging.
Review-gated autonomy PR #41 stays unmerged until human review. Automation can prepare evidence and code, while final merge authority stays with Jeremy.

Evidence already collected

  • Passed #38 local runner dry run.
  • Passed #38 Telegram/OpenClaw runner smoke test.
  • Passed #39 local failure-injection test.
  • Passed #39 Telegram/OpenClaw failure-injection test.
  • Passed #40 PM audit and docs-only Development PR cycle.

What has not changed

  • No automatic merges.
  • No Paperclip installation.
  • No cron agentTurn executor path.
  • No broad Telegram shell access.
  • No public commit of local transcripts or run records.

End-user command model

For now, Telegram/OpenClaw should expose narrow commands that map to known runner actions:

Future PM or Development jobs should come from reviewed local templates or explicit operator-reviewed commands. Telegram should not become a general shell.

Recommended next step

Review gate PR #41 should be reviewed and merged as the P009 runner baseline. After merge, the next automation work should wire OpenClaw/Telegram to the allowlisted runner actions and then run future PM to Development cycles from main.