Local-first, governed AI agent runtime for Python — embed it in your app, or run it as a CLI or ACP server. Permissions, MCP, memory and audit replay built in.
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and error handling guidance. check_background_agent has a clear description (89 chars) and proper schema with agent_id parameter documented. cancel_background_agent similarly has good description (145 chars) and schema. However, both tools lack comprehensive error handling guidance, output schema documentation, and parameter constraints. No enum constraints, no recovery hints, no actionable error messages defined. Descriptions meet minimum length but lack WHEN/WHY context. No tool annotations (readOnlyHint/destructiveHint) despite clear semantic differences (READ_ONLY vs WRITE). Output structures not documented, LLMs cannot plan downstream calls or extract required fields.
Cancel a background sub-agent that was launched with run_in_background=true. Works on both pending (not yet started) and running agents. Completed or failed agents cannot be cancelled.
Check the status of a background sub-agent previously launched with run_in_background=true. Returns 'pending', 'running', 'completed' (with result), or 'failed' (with error). Pass agent_id='' to list all background agents.
No output schema documentation. LLMs cannot infer what fields are returned (e.g., for 'completed' status, what does 'result' contain? For 'failed', what is the error structure?). Downstream tool calls or data extraction will fail.
No error handling guidance. Descriptions do not explain what errors can occur, how to recover, or what the LLM should do next. E.g., 'agent_id not found', should the LLM retry, list agents, or fail?
Missing tool annotations. cancel_background_agent is destructive (WRITE risk) but has no destructiveHint annotation. check_background_agent is read-only but has no readOnlyHint. Agents cannot distinguish safe from unsafe calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Parameter descriptions lack constraints and format guidance. agent_id description says 'Pass empty string to list all' but does not specify: Is empty string the only way to list? What format is agent_id (UUID, alphanumeric)? What is the max length?
Descriptions lack WHEN/WHY context. 'Check the status of a background sub-agent' does not explain: When should I call this vs waiting? How often should I poll? What does each status mean for the user?