How to save decisions, bugs, patterns, and learnings to your EchoVault memory system
EchoVault captures important decisions, bug fixes, patterns, context, and learnings so future sessions can build on your work. Memories are stored as Markdown files in ~/.memory/vault/ and indexed in SQLite for fast search.
The minimum required fields are --title and --what:
memory save \ --title "Switched to JWT auth" \ --what "Replaced session cookies with JWT for stateless auth"
Output:
Saved: Switched to JWT auth (id: a3f7b2c1)File: /home/user/.memory/vault/my-project/2026-03-03-session.md
2
Add reasoning and impact
Use --why and --impact to capture context:
memory save \ --title "Switched to JWT auth" \ --what "Replaced session cookies with JWT" \ --why "Needed stateless auth for API" \ --impact "All endpoints now require Bearer token"
3
Categorize and tag
Use --category and --tags for better organization:
memory save \ --title "Switched to JWT auth" \ --what "Replaced session cookies with JWT" \ --why "Needed stateless auth for API" \ --impact "All endpoints now require Bearer token" \ --category "decision" \ --tags "auth,jwt,api"
memory save \ --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" \ --source "cursor" \ --details "Context:Mobile app was downloading entire user objects when only displaying name + avatar.Network payloads were 10x larger than needed.Options considered:- Option A: Add field filtering to REST endpoints- Option B: Migrate to GraphQLDecision:GraphQL lets mobile clients request exactly what they need.Tradeoffs:- Pro: Reduced network overhead, faster mobile load times- Con: Backend complexity increased, learning curve for teamFollow-up:- Monitor query performance in production- Add DataLoader to prevent N+1 queries"
Memories are stored as Markdown with YAML frontmatter. Here’s what the session file looks like:
---project: mobile-appsources: [cursor]created: 2026-03-03T14:32:18.123456+00:00tags: [api, graphql, mobile, performance]---# 2026-03-03 Session## Decisions### 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**Source:** cursor<details>Context:Mobile app was downloading entire user objects when only displaying name + avatar.Network payloads were 10x larger than needed.Options considered:- Option A: Add field filtering to REST endpoints- Option B: Migrate to GraphQLDecision:GraphQL lets mobile clients request exactly what they need.Tradeoffs:- Pro: Reduced network overhead, faster mobile load times- Con: Backend complexity increased, learning curve for teamFollow-up:- Monitor query performance in production- Add DataLoader to prevent N+1 queries</details>
EchoVault has 3-layer redaction to prevent secrets from reaching disk, but you should still be careful when saving memories that reference credentials.
If you need to reference a sensitive value, wrap it in <redacted> tags:
memory save \ --title "Updated Stripe API key" \ --what "Rotated Stripe API key after potential exposure" \ --details "Old key: <redacted>sk_live_abc123</redacted>New key stored in 1Password vault."