Description:Save a memory for future sessions. Agents MUST call this before ending any session where they made changes, fixed bugs, made decisions, or learned something.When to use:
Made an architectural or design decision (chose X over Y)
Fixed a bug (include root cause and solution)
Discovered a non-obvious pattern or gotcha
Learned something about the codebase not obvious from code
Set up infrastructure, tooling, or configuration
The user corrected you or clarified a requirement
Do NOT save: trivial changes (typos, formatting), info obvious from reading the code, or duplicates of existing memories.Schema:
{ "title": "Replaced REST with GraphQL for mobile API", "what": "Migrated mobile endpoints from REST to GraphQL", "why": "Mobile clients needed flexible queries to reduce overfetching", "impact": "Mobile API requests reduced by 60%, bundle size decreased", "tags": ["graphql", "mobile", "api", "performance"], "category": "decision", "related_files": ["src/graphql/schema.ts", "src/mobile/api.ts"], "details": "Context:\nMobile app was downloading entire user objects when only displaying name + avatar.\n\nOptions considered:\n- Option A: Add field filtering to REST endpoints\n- Option B: Migrate to GraphQL\n\nDecision:\nGraphQL lets mobile clients request exactly what they need.\n\nTradeoffs:\n- Pro: Reduced network overhead\n- Con: Backend complexity increased\n\nFollow-up:\n- Monitor query performance\n- Add DataLoader to prevent N+1 queries"}
Description:Search memories using keyword and semantic search. Returns matching memories ranked by relevance. Agents MUST call this at session start before doing any work, and whenever the user’s request relates to a topic that may have prior context.Schema:
Description:Get memory context for the current project. Agents MUST call this at session start to load prior decisions, bugs, and context. Do not skip this step — prior sessions contain decisions and context that directly affect your current task.Schema:
// Agent calls memory_context at the start of every session{ "tool": "memory_context", "arguments": { "limit": 10 }}
2
During work: Search for relevant memories
// User asks: "How did we decide to handle authentication?"// Agent calls memory_search before answering{ "tool": "memory_search", "arguments": { "query": "authentication decision", "limit": 5 }}
3
Session end: Save learnings
// Agent made a decision or fixed a bug// Agent calls memory_save before ending the session{ "tool": "memory_save", "arguments": { "title": "Fixed CORS error in production API", "what": "Added Access-Control-Allow-Origin header to Nginx config", "why": "Production API was rejecting browser requests from web app", "impact": "Web app can now call API from different origin", "category": "bug", "tags": ["cors", "nginx", "production"], "related_files": ["nginx/api.conf"], "details": "Context:\nWeb app deployed to app.example.com\nAPI deployed to api.example.com\nBrowser was blocking cross-origin requests\n\nOptions considered:\n- Option A: Enable CORS in app code\n- Option B: Enable CORS in Nginx\n\nDecision:\nNginx-level CORS is more efficient and centralized\n\nTradeoffs:\nNginx config now critical for web app functionality\n\nFollow-up:\nDocument CORS setup in deployment guide" }}
For Codex, if MCP isn’t available, EchoVault installs a fallback AGENTS.md file that instructs Codex to use the CLI directly:
# Local MemoryYou have access to a persistent memory system via the `memory` CLI.## At Session StartCheck available memories for this project:```bashmemory context --project
memory search "your query" # search all projectsmemory search "your query" --project # current project only
This allows Codex to use EchoVault even without MCP support.## Next Steps<CardGroup cols={2}> <Card title="Saving Memories" icon="floppy-disk" href="/guides/saving-memories"> Learn how to save decisions, bugs, and context </Card> <Card title="Searching Memories" icon="magnifying-glass" href="/guides/searching"> Search and retrieve memories effectively </Card></CardGroup>