AgentLoop provides four tools with explicit JSON Schema definitions and annotations. Tool naming follows verb_noun convention (agentloop_status, dispatch_task, start_loop, send_message), which is good. However, descriptions are terse (range: 34-76 chars), falling below the production baseline of 194 chars average. More critically, NO parameter descriptions are provided, the inputSchema objects define constraints (enums, min/max, required fields) but lack description fields on individual parameters. This forces LLMs to infer meaning from parameter names alone, violating pattern:tool-description. Structured output is present via structuredContent in toolResult(), and tool annotations (readOnlyHint) are implemented correctly. Error handling returns actionable messages via daemonError() and toolFailure(), which is good. The composition is sound, four distinct single-purpose tools with clear responsibilities.
Read the current AgentLoop status.
Dispatch a task to AgentLoop.
Post short progress updates, questions for the human, and final result summaries to the AgentLoop dashboard.
Start an AgentLoop project loop.
All input parameters lack descriptions. The inputSchema declares types, enums, and constraints but no 'description' field on any parameter (title, prompt, engine, project, maxCycles, taskRetries, polish, autoCommit, text, kind). LLMs cannot infer parameter semantics from names alone.
Tool descriptions are too brief (34-76 chars, below the 194 char production baseline). agentloop_status is 'Read the current AgentLoop status.', lacks context on what 'status' includes or when to call it. dispatch_task is 'Dispatch a task to AgentLoop.', does not explain prerequisites or what happens next.
dispatch_task accepts 'engine' enum [claude, codex] but codex (OpenAI Codex) is deprecated and no longer available. This will cause runtime failures when an LLM selects 'codex'.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2025-06-18+ | v2 |
start_loop has multiple interdependent parameters (maxCycles, taskRetries, polish, autoCommit) with no description of how they interact or what combinations are valid. taskRetries description is in the schema but should be in parameter docs visible to the LLM.
No output schema documentation. Tools return structured JSON via toolResult() and structuredContent, but the possible response structures are not documented. An LLM cannot plan downstream calls or extract the right fields.