Explainable memory operating system for AI agents with temporal reasoning, conflict awareness, and local-first operation.
CortexOS defines 7 tools with basic schemas and descriptions. All tools have names starting with action verbs (add_, search_, answer_, list_, get_) and descriptions present. However, descriptions are terse (avg ~60 chars, well below the 194-char baseline), parameter descriptions lack detail on constraints and formats, and output schemas are not formally documented. No error handling guidance, no enum constraints on optional parameters (wing, room), and no pagination support despite search_memory potentially returning large result sets. Tool composition is reasonable (single responsibility), but descriptions do not explain WHEN to use each tool or what downstream tools expect.
Add a memory to the system with optional wing and room classification
Answer a query using memory retrieval and optional LLM synthesis
Retrieve all conflicting memories in the system
Retrieve all superseded memories in the system
List all available rooms, optionally filtered by wing
List all available wings in the memory system
Search memories by query with optional wing and room filters
Descriptions are too brief (avg 60 chars vs 194-char baseline). Missing WHEN to use each tool, prerequisites, and downstream dependencies. E.g., 'search_memory' does not explain when to call it vs 'answer_with_memory', or what fields the LLM should extract from results.
Optional parameters (wing, room) lack constraints and format guidance. No enum values, no documentation of valid wing/room names, no guidance on how to discover them. LLMs will guess or pass invalid values.
Output schemas not formally documented. Tool responses return model_dump() dicts, but LLMs cannot see the field structure, types, or required fields. E.g., what does search_memory return? Is it {results: [...], total: int, next_cursor: string}?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No pagination support. search_memory and get_conflicts/get_superseded may return unbounded lists. Large result sets will blow context windows. Missing limit, offset, and total_count fields.
No error handling guidance. If add_memory fails (e.g., invalid wing), the LLM receives a raw exception. No recovery hints, no actionable error messages, no classification (retryable vs user-fixable).