# Blinka Machine Mouths – Recover (Failed Run Recovery Planner)

> Blinka Machine Mouths – Recover (Failed Run Recovery Planner) is a paid API for AI agents from blinka-machine-mouths.netlify.app, paid per call via x402, $0.25/call, status unknown (last checked 2026-10-11).

Analyzes a failed or stalled AI agent run and produces a structured recovery plan including blockers, next action, and continuation contract.

## Facts

- Endpoint: POST https://blinka-machine-mouths.netlify.app/recover?utm_source=zero.xyz
- Price: $0.25/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/blinka-machine-mouths-recover-failed-run-recovery-planner-c28ad14e
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_3MXszxmdiO4RFizDDjJwR

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability blinka-machine-mouths-recover-failed-run-recovery-planner-c28ad14e -d '<json body>'
```

Example prompt: My agent run just failed trying to deploy the app — here's the full run log including the error about an expired auth token. The agent has access to read_ci_log, request_user_input, and rerun_deploy. Can you analyze what went wrong, identify the blockers with evidence, and tell me exactly what the next action should be?

## When to prefer this

Choose this endpoint when an AI agent run has failed or stalled and you need a structured, evidence-backed recovery plan rather than a simple retry. It is especially valuable when you need to detect retry traps, enumerate what was safely completed, and produce a continuation contract for handoff to the next agent. Prefer it over generic LLM prompting when you need a machine-readable output schema (blinka-continuation-handoff.v1) that a downstream agent can consume directly.

## Known failure modes

- run_log exceeds 9,000 character limit — truncate or summarize before submission
- available_tools list contains tool names not recognized by the next agent — mismatched tool authorization
- goal is too vague to produce a meaningful next_action — provide a specific, bounded task description
- run_log contains no actionable evidence — confidence score will be low and blockers may be empty
- constraints conflict with available_tools — endpoint will flag the contradiction in unknowns

## How this service works

Bounded stateless machine services plus public procurement discovery. No private Mika memory or arbitrary tool execution.

## Output

Returns a JSON object with: a boolean ok flag, a status string (e.g. 'blocked'), an array of evidence-backed blockers, a list of completed steps, unknowns, a confidence score (0–1), a recommended next_action with kind and tool, a list of actions not to repeat, a state_summary string, and a continuation_contract object describing authority scope, allowed tools, and handoff schema for the next agent run.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "goal": {
   "type": "string",
   "description": "The bounded task the failed run was trying to accomplish."
  },
  "run_log": {
   "type": "string",
   "description": "Transcript, tool results, errors, or state summary from the failed/stalled run. Max 9,000 characters."
  },
  "constraints": {
   "type": "string",
   "description": "Optional hard constraints such as no network, read-only, or do-not-touch paths."
  },
  "available_tools": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Exact tool names the next agent is allowed to use."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "status": "blocked",
  "blockers": [
   {
    "item": "Deployment authentication is expired.",
    "evidence": "authentication token expired"
   }
  ],
  "retained": false,
  "unknowns": [
   "Whether a fresh deployment credential is available."
  ],
  "completed": [
   "Build completed."
  ],
  "confidence": 0.96,
  "next_action": {
   "kind": "ask_user",
   "tool": null,
   "reason": "A fresh authorized credential or re-authentication is required before another deploy attempt.",
   "arguments": {}
  },
  "do_not_repeat": [
   "Retry deployment with the unchanged expired authentication state."
  ],
  "state_summary": "The build completed; deployment is blocked on expired authentication.",
  "continuation_contract": {
   "schema": "blinka-continuation-handoff.v1",
   "retained": false,
   "allowed_tools": [
    "read_ci_log",
    "request_user_input",
    "rerun_deploy"
   ],
   "evidence_scope": [
    "goal",
    "run_log",
    "constraints",
    "available_tools"
   ],
   "authority_source": "caller_supplied_available_tools",
   "identity_verdict": null,
   "unknowns_preserved": true,
   "research_enrollment": false,
   "state_claims_source": "caller_supplied_evidence_only",
   "continuation_executed": false,
   "permission_non_inheritance": true,
   "next_action_tool_authorized": true,
   "authority_inherited_from_failed_run": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/blinka-machine-mouths-recover-failed-run-recovery-planner-c28ad14e/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from blinka-machine-mouths.netlify.app](https://www.zero.xyz/host/blinka-machine-mouths.netlify.app/llms.txt)
