Repository navigation
Description
The CLI has a careful answer for the worst moment in a phone workflow, and none of the agent skills tell the agent it exists.
packages/cli/docs/cli-reference.md spells the protocol out:
If
run_callmay have been accepted but no stablerun_idwas received, the CLI reportscall_started: "unknown",retry_safe: false, an opaquerecovery_id, and a directly runnablenext_command. Run that recovery command instead of starting a new plan.
That is the right design. The plan id and confirm token stay in a 0600 file, recovery reuses that exact pair, and the record is removed once a stable run_id comes back.
Now the skills. I grepped every package for the pieces of that protocol:
recovery_id / recovery-id packages/cli/docs/cli-reference.md
packages/cli/README.md
That is the whole list. Not the Claude plugin, not Codex, not Cursor, not the OpenClaw skill. None of the four references/commands.md files mentions call recover. None mentions retry_safe, or call_started: "unknown", or that call run and call start hand back a recovery id at all.
What the Claude plugin's reference does say about call run is this:
call runcallsrun_call, then fetchesget_call_runonce. Read the latest call state fromstatus_result.structuredContent. If that status is not terminal, show a user-visible progress update
and it lists the supported options as --plan-id and --confirm-token. So an agent following that reference knows how to start a call and how to read a status. It has been told nothing about the case where it does not get a run id back.
The only retry guidance anywhere in that skill is about authentication:
auth login, then retry after login completes.
Which is the part that worries me. An agent that has been taught "when something fails, retry after fixing auth" and has never been taught about retry_safe: false is an agent that might retry a call. A lost response does not mean the call did not happen. It means you do not know, and the phone may already be ringing.
Reproduction
grep -rl "recovery_id\|recovery-id\|call recover\|retry_safe" packages/Two files come back, both under packages/cli.
Suggested fix
Put the ambiguous case in the four command references, next to call run, where an agent meets it.
Enough would be: call run and call start can return call_started: "unknown" with retry_safe: false and a recovery_id. When that happens, run calle call recover --recovery-id <id>. Do not plan a new call and do not run call run again, because the first one may already be dialling.
The CLI already prints a runnable next_command in that response, so the skills could simply say to run the command the CLI hands back. That is one sentence and it removes the guesswork.
Worth a line in the SKILL.md files too, since the readiness flow is where an agent forms its idea of what to do when something goes wrong, and right now that section only knows about auth.
Activity
Ray-56 commentedon Sep 5, 2026
Priority: P1 — real-world duplicate-call safety. Confirmed: the CLI documents and implements recovery for an uncertain
run_call, but the Codex, Claude, Cursor, OpenClaw, and root skills.sh guidance does not mentioncall_started,retry_safe,recovery_id,next_command, orcall recover. An agent that retriescall runor creates a new plan after a lost acknowledgement can cause a second real phone call.Recommended remediation:
SKILL.mdandreferences/commands.mdsource. Whencall startorcall runreturnscall_started: "unknown"andretry_safe: false, preserve the response, run the exact CLI-provided recovery command (orcalle call recover --recovery-id <id>), and never create a new plan or repeatcall run.call recoverautomatically. Treat the recovery identifier as local capability data and do not include it in user-facing prose or logs.docs/documentation-maintenance.md, includingskills/calleand the Codex, Claude, Cursor, and OpenClaw sources.Release decision: patch releases are recommended for the affected published plugin packages because this corrects existing safety guidance. The OpenClaw and skills.sh validation/distribution packages are private, so their release/tag treatment needs a maintainer decision, but their repository-delivered skill sources must change in the same PR.
JJasonSun commentedon Sep 10, 2026
The recovery guidance from #114 now ships on npm in
@call-e/[email protected],@call-e/[email protected], and@call-e/[email protected], through release #96.The release workflow passed. I verified the npm versions and installed package contents, including the recovery guidance and bundled launchers. The repository-delivered OpenClaw and skills.sh sources already contain the guidance; their private validation packages are not part of this npm release.