Skip to content

the agent skills do not mention call recover, or the recovery id that call run returns #108

Description

@cnpierrepapi

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_call may have been accepted but no stable run_id was received, the CLI reports call_started: "unknown", retry_safe: false, an opaque recovery_id, and a directly runnable next_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 run calls run_call, then fetches get_call_run once. Read the latest call state from status_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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions