Production-grade agent framework with structured context management, compaction, tools, and MCP support
Cortex Mono defines 9 tools with mixed quality. Naming is generally verb-forward (recall, spawn_task, steer_task, cancel_task, quick_lookup, answer_ask, Deliver, SteerSubAgent, load_skill), though inconsistent capitalization (Deliver, SteerSubAgent vs snake_case others) violates naming conventions. Descriptions are present and contextual (avg ~120 chars), but several lack actionable guidance for LLM selection. Input schemas are visible and typed, but parameter descriptions are sparse or generic. Output schemas are undocumented, critical for tool chaining. Error handling is minimal; no recovery guidance or categorization. The tools exhibit composition issues: spawn_task, steer_task, and SteerSubAgent overlap in responsibility (task control), and recall/quick_lookup both perform lookups without clear differentiation.
Deliver content to the user through the conversation surface. wake: 'interrupt' only for things the user must hear now, 'when_idle' for finished results (default), 'silent' for milestones and progress notes. The conversation surface rephrases; deliver substance, not presentation.
Redirect a running sub-agent without cancelling it. The message is queued into the sub-agent's run and lands at its next turn boundary. Prefer this over cancel-and-respawn for changes of direction.
Relay the user's decision on the permission request you read out, after reading it to them. It applies to that request.
Stop a background task the user no longer wants. Speak to the user first, then call.
Load a skill's full instructions into your active context. Call this tool when you need detailed guidance for a specific task. The skill's instructions will be available in your context for the remainder of this loop.
Ask a small standalone factual question that needs no conversation context. Questions about the conversation or work in progress belong in steer_task instead.
Inconsistent tool naming: 'Deliver' and 'SteerSubAgent' use PascalCase while others use snake_case. LLMs expect consistent verb_noun patterns (e.g., deliver_content, steer_sub_agent). Mixed conventions increase parsing errors.
Output schemas undocumented for all 9 tools. LLMs cannot plan downstream calls or extract required fields (e.g., task_id from spawn_task, search results from recall). This breaks tool chaining and forces agents to guess response structure.
Overlapping task control tools: spawn_task, steer_task, SteerSubAgent, and cancel_task all manipulate background work. Unclear when to use steer_task vs SteerSubAgent (both redirect tasks). LLMs will waste reasoning cycles choosing between them.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Search through past conversation history for specific details. Use when your observations mention something but lack the detail needed, or when you need exact content (code, errors, quotes, URLs). Include a timeRange from your observation timestamps for precision.
Hand new work to the background agent. Speak to the user first, then call. Keep instructions to ONE sentence naming the task; the conversation itself is forwarded, so do not restate details.
Redirect or update background work in progress. Speak to the user first, then call. taskAlias picks a specific task when several run.
No error handling or recovery guidance. Tools lack descriptions of failure modes, retryability, or next steps. E.g., recall with no results, spawn_task with invalid instructions, answer_ask with malformed decision, no guidance for LLM recovery.
Parameter descriptions are minimal or generic. 'taskAlias' in steer_task lacks guidance on format or how to obtain it. 'question' in quick_lookup doesn't explain what 'standalone' means or when to use recall instead. Ambiguous descriptions force LLM guessing.