37 KiB
Memory System for AGENTS + Obsidian CODEX
TL;DR
Quick Summary: Build a dual-layer memory system equivalent to openclaw's — Mem0 for fast semantic search/auto-recall + Obsidian CODEX vault for human-readable, versioned knowledge. Memories are stored in both layers and cross-referenced via IDs.
Deliverables:
- New
skills/memory/SKILL.md— Core orchestration skill (auto-capture, auto-recall, dual-layer sync)- New
80-memory/folder in CODEX vault with category subfolders + memory template- Obsidian MCP server configuration (cyanheads/obsidian-mcp-server)
- Updated skills (mem0-memory, obsidian), Apollo prompt, CODEX docs, user profile
Estimated Effort: Medium (9 tasks across config/docs, no traditional code) Parallel Execution: YES — 4 waves Critical Path: Task 1 (vault infra) → Task 4 (memory skill) → Task 9 (validation)
Context
Original Request
Adapt openclaw's memory system for the opencode AGENTS repo, integrated with the Obsidian CODEX vault at ~/CODEX. The vault should serve as a "second brain" for both the user AND AI agents.
Interview Summary
Key Discussions:
- Analyzed openclaw's 3-layer memory architecture (SQLite+vectors builtin, memory-core plugin, memory-lancedb plugin with auto-capture/auto-recall)
- User confirmed Mem0 is available self-hosted at localhost:8000 — just needs spinning up
- User chose
80-memory/as dedicated vault folder with category subfolders - User chose auto+explicit capture (LLM extraction at session end + "remember this" commands)
- User chose agent QA only (no unit test infrastructure — repo is config/docs only)
- No Obsidian MCP server currently configured — plan to add cyanheads/obsidian-mcp-server
Research Findings:
- cyanheads/obsidian-mcp-server (363 stars) — Best MCP server: frontmatter management, vault cache, search with pagination, tag management
- GitHub Copilot's memory system: citation-based verification pattern (Phase 2 candidate)
- Production recommendation: dual-layer (operational memory + documented knowledge)
- Mem0 provides semantic search, user_id/agent_id/run_id scoping, metadata support,
/healthendpoint - Auto-capture best practice: max 3 per session, LLM extraction > regex patterns
Metis Review
Identified Gaps (addressed):
- 80-memory/ subfolders vs flat pattern: Resolved — follows
30-resources/pattern (subfolders by TYPE), not50-zettelkasten/flat pattern - Mem0 health check: Added prerequisite validation step
- Error handling undefined: Defined — Mem0 unavailable → skip, Obsidian unavailable → Mem0 only
- Deployment order: Defined — CODEX first → MCP config → skills → validation
- Scope creep risk: Locked down — citation verification, memory deletion/lifecycle, dashboards all Phase 2
- Agent role clarity: Defined — memory skill loadable by any agent, Apollo is primary memory specialist
Work Objectives
Core Objective
Build a dual-layer memory system for opencode agents that stores memories in Mem0 (semantic search, operational) AND the Obsidian CODEX vault (human-readable, versioned, wiki-linked). Equivalent in capability to openclaw's memory system.
Concrete Deliverables
AGENTS repo (~/p/AI/AGENTS):
skills/memory/SKILL.md— NEW: Core memory skillskills/memory/references/mcp-config.md— NEW: Obsidian MCP server config documentationskills/mem0-memory/SKILL.md— UPDATED: Add categories, dual-layer syncskills/obsidian/SKILL.md— UPDATED: Add 80-memory/ conventionsprompts/apollo.txt— UPDATED: Add memory management responsibilitiescontext/profile.md— UPDATED: Add memory system configuration
CODEX vault (~/CODEX):
80-memory/— NEW: Folder with subfolders (preferences/, facts/, decisions/, entities/, other/)templates/memory.md— NEW: Memory note templatetag-taxonomy.md— UPDATED: Add #memory/* tagsAGENTS.md— UPDATED: Add 80-memory/ docs, folder decision tree, memory workflowsREADME.md— UPDATED: Add 80-memory/ to folder structure
Infrastructure (Nix home-manager — outside AGENTS repo):
- Add cyanheads/obsidian-mcp-server to opencode.json MCP section
Definition of Done
- All 11 files created/updated as specified
curl http://localhost:8000/healthreturns 200 (Mem0 running)- [~]
curl http://127.0.0.1:27124/vault-inforeturns vault info (Obsidian REST API) — Requires Obsidian desktop app to be open ./scripts/test-skill.sh --validatepasses for new/updated skills- 80-memory/ folder exists in CODEX vault with 5 subfolders
- Memory template creates valid notes with correct frontmatter
Must Have
- Dual-layer storage: every memory in Mem0 AND Obsidian
- Auto-capture at session end (LLM-based, max 3 per session)
- Explicit "remember this" command support
- Auto-recall: inject relevant memories before agent starts
- 5 categories: preference, fact, decision, entity, other
- Health checks before memory operations
- Cross-reference: mem0_id in Obsidian frontmatter, obsidian_ref in Mem0 metadata
- Error handling: graceful degradation when either layer unavailable
Must NOT Have (Guardrails)
- NO citation-based memory verification (Phase 2)
- NO memory expiration/lifecycle management (Phase 2)
- NO memory deletion/forget functionality (Phase 2)
- NO memory search UI or Obsidian dashboards (Phase 2)
- NO conflict resolution UI between layers (manual edit only)
- NO unit tests (repo has no test infrastructure — agent QA only)
- NO subfolders in 50-zettelkasten/ or 70-tasks/ (respect flat structure)
- NO new memory categories beyond the 5 defined
- NO modifications to existing Obsidian templates (only ADD memory.md)
- NO changes to agents.json (no new agents or agent config changes)
Verification Strategy
UNIVERSAL RULE: ZERO HUMAN INTERVENTION
ALL tasks MUST be verifiable WITHOUT any human action. Every criterion is verifiable by running a command or checking file existence.
Test Decision
- Infrastructure exists: NO (config-only repo)
- Automated tests: None (agent QA only)
- Framework: N/A
Agent-Executed QA Scenarios (MANDATORY — ALL tasks)
Verification tools by deliverable type:
| Type | Tool | How Agent Verifies |
|---|---|---|
| Vault folders/files | Bash (ls, test -f) | Check existence, content |
| Skill YAML frontmatter | Bash (grep, python) | Parse and validate fields |
| Mem0 API | Bash (curl) | Send requests, parse JSON |
| Obsidian REST API | Bash (curl) | Read notes, check frontmatter |
| MCP server | Bash (npx) | Test server startup |
Execution Strategy
Parallel Execution Waves
Wave 1 (Start Immediately — no dependencies):
├── Task 1: CODEX vault memory infrastructure (folders, template, tags)
└── Task 3: Obsidian MCP server config documentation
Wave 2 (After Wave 1 — depends on vault structure existing):
├── Task 2: CODEX vault documentation updates (AGENTS.md, README.md)
├── Task 4: Create core memory skill (skills/memory/SKILL.md)
├── Task 5: Update Mem0 memory skill
└── Task 6: Update Obsidian skill
Wave 3 (After Wave 2 — depends on skill content for prompt/profile):
├── Task 7: Update Apollo agent prompt
└── Task 8: Update user context profile
Wave 4 (After all — final validation):
└── Task 9: End-to-end validation
Critical Path: Task 1 → Task 4 → Task 9
Parallel Speedup: ~50% faster than sequential
Dependency Matrix
| Task | Depends On | Blocks | Can Parallelize With |
|---|---|---|---|
| 1 | None | 2, 4, 5, 6 | 3 |
| 2 | 1 | 9 | 4, 5, 6 |
| 3 | None | 4 | 1 |
| 4 | 1, 3 | 7, 8, 9 | 5, 6 |
| 5 | 1 | 9 | 4, 6 |
| 6 | 1 | 9 | 4, 5 |
| 7 | 4 | 9 | 8 |
| 8 | 4 | 9 | 7 |
| 9 | ALL | None | None (final) |
Agent Dispatch Summary
| Wave | Tasks | Recommended Agents |
|---|---|---|
| 1 | 1, 3 | task(category="quick", load_skills=["obsidian"], run_in_background=false) |
| 2 | 2, 4, 5, 6 | dispatch parallel: task(category="unspecified-high") for Task 4; task(category="quick") for 2, 5, 6 |
| 3 | 7, 8 | task(category="quick", run_in_background=false) |
| 4 | 9 | task(category="unspecified-low", run_in_background=false) |
TODOs
-
1. CODEX Vault Memory Infrastructure
What to do:
- Create
80-memory/folder with 5 subfolders:preferences/,facts/,decisions/,entities/,other/ - Create each subfolder with a
.gitkeepfile so git tracks empty directories - Create
templates/memory.md— memory note template with frontmatter:--- type: memory category: # preference | fact | decision | entity | other mem0_id: # Mem0 memory ID (e.g., "mem_abc123") source: explicit # explicit | auto-capture importance: # critical | high | medium | low created: <% tp.date.now("YYYY-MM-DD") %> updated: <% tp.date.now("YYYY-MM-DD") %> tags: - memory sync_targets: [] --- # Memory Title ## Content <!-- The actual memory content --> ## Context <!-- When/where this was learned, conversation context --> ## Related <!-- Wiki links to related notes --> - Update
tag-taxonomy.md— add#memorytag category with subtags:Include usage examples and definitions for each category#memory ├── #memory/preference ├── #memory/fact ├── #memory/decision ├── #memory/entity └── #memory/other
Must NOT do:
- Do NOT create subfolders inside 50-zettelkasten/ or 70-tasks/
- Do NOT modify existing templates (only ADD memory.md)
- Do NOT use Templater syntax that doesn't match existing templates
Recommended Agent Profile:
- Category:
quick- Reason: Simple file creation, no complex logic
- Skills: [
obsidian]obsidian: Vault conventions, frontmatter patterns, template structure
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 1 (with Task 3)
- Blocks: Tasks 2, 4, 5, 6
- Blocked By: None
References:
Pattern References:
/home/m3tam3re/CODEX/30-resources/— Subfolder-by-type pattern to follow (bookmarks/, literature/, meetings/, people/, recipes/)/home/m3tam3re/CODEX/templates/task.md— Template frontmatter pattern (type, status, created, updated, tags, sync_targets)/home/m3tam3re/CODEX/templates/bookmark.md— Simpler template example
Documentation References:
/home/m3tam3re/CODEX/AGENTS.md:22-27— Frontmatter conventions (required fields: type, created, updated)/home/m3tam3re/CODEX/AGENTS.md:163-176— Template locations table (add memory row)/home/m3tam3re/CODEX/tag-taxonomy.md:1-18— Tag structure rules (max 3 levels, kebab-case)
WHY Each Reference Matters:
30-resources/shows that subfolders-by-type is the established vault pattern for categorized contenttask.mdtemplate shows the exact frontmatter field set expected by the vaulttag-taxonomy.mdrules show the 3-level max hierarchy constraint for new tags
Acceptance Criteria:
Agent-Executed QA Scenarios:
Scenario: Verify 80-memory folder structure Tool: Bash Steps: 1. test -d /home/m3tam3re/CODEX/80-memory/preferences 2. test -d /home/m3tam3re/CODEX/80-memory/facts 3. test -d /home/m3tam3re/CODEX/80-memory/decisions 4. test -d /home/m3tam3re/CODEX/80-memory/entities 5. test -d /home/m3tam3re/CODEX/80-memory/other Expected Result: All 5 directories exist (exit code 0 for each) Evidence: Shell output captured Scenario: Verify memory template exists with correct frontmatter Tool: Bash Steps: 1. test -f /home/m3tam3re/CODEX/templates/memory.md 2. grep "type: memory" /home/m3tam3re/CODEX/templates/memory.md 3. grep "category:" /home/m3tam3re/CODEX/templates/memory.md 4. grep "mem0_id:" /home/m3tam3re/CODEX/templates/memory.md Expected Result: File exists and contains required frontmatter fields Evidence: grep output captured Scenario: Verify tag-taxonomy updated with memory tags Tool: Bash Steps: 1. grep "#memory" /home/m3tam3re/CODEX/tag-taxonomy.md 2. grep "#memory/preference" /home/m3tam3re/CODEX/tag-taxonomy.md 3. grep "#memory/fact" /home/m3tam3re/CODEX/tag-taxonomy.md Expected Result: All memory tags present in taxonomy Evidence: grep output capturedCommit: YES
- Message:
feat(vault): add 80-memory folder structure and memory template - Files:
80-memory/,templates/memory.md,tag-taxonomy.md - Repo:
~/CODEX
- Create
-
2. CODEX Vault Documentation Updates
What to do:
- Update
AGENTS.md:- Add
80-memory/row to Folder Structure table (line ~11) - Add
#### 80-memorysection in Folder Details (after 70-tasks section, ~line 161) - Update Folder Decision Tree to include memory branch:
Is it a memory/learned fact? → YES → 80-memory/ - Add Memory template row to Template Locations table (line ~165)
- Add Memory Workflows section (after Sync Workflow): create memory, retrieve memory, dual-layer sync
- Add
- Update
README.md:- Add
80-memory/to folder structure diagram with subfolders - Add
80-memory/row to Folder Details section - Add memory template to Templates table
- Add
Must NOT do:
- Do NOT rewrite existing sections — only ADD new content
- Do NOT remove any existing folder/template documentation
Recommended Agent Profile:
- Category:
quick- Reason: Documentation additions to existing files, following established patterns
- Skills: [
obsidian]obsidian: Vault documentation conventions
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2 (with Tasks 4, 5, 6)
- Blocks: Task 9
- Blocked By: Task 1 (needs folder structure to reference)
References:
Pattern References:
/home/m3tam3re/CODEX/AGENTS.md:110-161— Existing Folder Details sections to follow pattern/home/m3tam3re/CODEX/AGENTS.md:75-108— Folder Decision Tree format/home/m3tam3re/CODEX/README.md— Folder structure diagram format
WHY Each Reference Matters:
- AGENTS.md folder details show the exact format: Purpose, Structure (flat/subfolders), Key trait, When to use, Naming convention
- Decision tree shows the exact
├─ YES →format to follow
Acceptance Criteria:
Scenario: Verify AGENTS.md has 80-memory documentation Tool: Bash Steps: 1. grep "80-memory" /home/m3tam3re/CODEX/AGENTS.md 2. grep "Is it a memory" /home/m3tam3re/CODEX/AGENTS.md 3. grep "templates/memory.md" /home/m3tam3re/CODEX/AGENTS.md Expected Result: All three patterns found Evidence: grep output Scenario: Verify README.md has 80-memory in structure Tool: Bash Steps: 1. grep "80-memory" /home/m3tam3re/CODEX/README.md 2. grep "preferences/" /home/m3tam3re/CODEX/README.md Expected Result: Folder and subfolder documented Evidence: grep outputCommit: YES
- Message:
docs(vault): add 80-memory documentation to AGENTS.md and README.md - Files:
AGENTS.md,README.md - Repo:
~/CODEX
- Update
-
3. Obsidian MCP Server Configuration Documentation
What to do:
- Create
skills/memory/references/mcp-config.mddocumenting:- cyanheads/obsidian-mcp-server configuration for opencode.json
- Required environment variables:
OBSIDIAN_API_KEY,OBSIDIAN_BASE_URL,OBSIDIAN_VERIFY_SSL,OBSIDIAN_ENABLE_CACHE - opencode.json MCP section snippet:
"Obsidian-Vault": { "command": ["npx", "obsidian-mcp-server"], "environment": { "OBSIDIAN_API_KEY": "<your-api-key>", "OBSIDIAN_BASE_URL": "http://127.0.0.1:27123", "OBSIDIAN_VERIFY_SSL": "false", "OBSIDIAN_ENABLE_CACHE": "true" }, "enabled": true, "type": "local" } - Nix home-manager snippet showing how to add to
programs.opencode.settings.mcp - Note that this requires
home-manager switchafter adding - Available MCP tools list: obsidian_read_note, obsidian_update_note, obsidian_global_search, obsidian_manage_frontmatter, obsidian_manage_tags, obsidian_list_notes, obsidian_delete_note, obsidian_search_replace
- How to get the API key from Obsidian: Settings → Local REST API plugin
Must NOT do:
- Do NOT directly modify
~/.config/opencode/opencode.json(Nix-managed) - Do NOT modify
agents/agents.json
Recommended Agent Profile:
- Category:
quick- Reason: Creating a single reference doc
- Skills: [
obsidian]obsidian: Obsidian REST API configuration knowledge
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 1 (with Task 1)
- Blocks: Task 4
- Blocked By: None
References:
Pattern References:
/home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md:156-166— Existing API reference pattern/home/m3tam3re/.config/opencode/opencode.json:77-127— Current MCP config format (Exa, Basecamp, etc.)
External References:
- GitHub:
https://github.com/cyanheads/obsidian-mcp-server— Config docs, env vars, tool list - npm:
npx obsidian-mcp-server— Installation method
WHY Each Reference Matters:
- opencode.json MCP section shows exact JSON format needed (command array, environment, enabled, type)
- cyanheads repo shows required env vars and their defaults
Acceptance Criteria:
Scenario: Verify MCP config reference file exists Tool: Bash Steps: 1. test -f /home/m3tam3re/p/AI/AGENTS/skills/memory/references/mcp-config.md 2. grep "obsidian-mcp-server" /home/m3tam3re/p/AI/AGENTS/skills/memory/references/mcp-config.md 3. grep "OBSIDIAN_API_KEY" /home/m3tam3re/p/AI/AGENTS/skills/memory/references/mcp-config.md 4. grep "home-manager" /home/m3tam3re/p/AI/AGENTS/skills/memory/references/mcp-config.md Expected Result: File exists with MCP config, env vars, and Nix instructions Evidence: grep outputCommit: YES (groups with Task 4)
- Message:
feat(memory): add core memory skill and MCP config reference - Files:
skills/memory/SKILL.md,skills/memory/references/mcp-config.md - Repo:
~/p/AI/AGENTS
- Create
-
4. Create Core Memory Skill
What to do:
- Create
skills/memory/SKILL.md— the central orchestration skill for the dual-layer memory system - YAML frontmatter:
--- name: memory description: "Dual-layer memory system (Mem0 + Obsidian CODEX). Use when: (1) storing information for future recall ('remember this'), (2) auto-capturing session insights, (3) recalling past decisions/preferences/facts, (4) injecting relevant context before tasks. Triggers: 'remember', 'recall', 'what do I know about', 'memory', session end." compatibility: opencode --- - Sections to include:
- Overview — Dual-layer architecture (Mem0 operational + Obsidian documented)
- Prerequisites — Mem0 running at localhost:8000, Obsidian MCP configured (reference mcp-config.md)
- Memory Categories — 5 categories with definitions and examples:
- preference: Personal preferences (UI, workflow, communication style)
- fact: Objective information about user/work (role, tech stack, constraints)
- decision: Architectural/tool choices made (with rationale)
- entity: People, organizations, systems, concepts
- other: Everything else
- Workflow 1: Store Memory (Explicit) — User says "remember X":
- Classify category
- POST to Mem0
/memorieswith user_id, metadata (category, source: "explicit") - Create Obsidian note in
80-memory/<category>/using memory template - Cross-reference: mem0_id in Obsidian frontmatter, obsidian_ref in Mem0 metadata
- Workflow 2: Recall Memory — User asks "what do I know about X":
- POST to Mem0
/searchwith query - Return results with Obsidian note paths for reference
- POST to Mem0
- Workflow 3: Auto-Capture (Session End) — Automatic extraction:
- Scan conversation for memory-worthy content (preferences stated, decisions made, important facts)
- Select top 3 highest-value memories
- For each: store in Mem0 AND create Obsidian note (source: "auto-capture")
- Present to user: "I captured these memories: [list]. Confirm or reject?"
- Workflow 4: Auto-Recall (Session Start) — Context injection:
- On session start, search Mem0 with user's first message
- If relevant memories found (score > 0.7), inject as
<relevant-memories>context - Limit to top 5 most relevant
- Error Handling — Graceful degradation:
- Mem0 unavailable:
curl http://localhost:8000/healthfails → skip all memory ops, warn user - Obsidian unavailable: Store in Mem0 only, log that Obsidian sync failed
- Both unavailable: Skip memory entirely, continue without memory features
- Mem0 unavailable:
- Integration — How other skills/agents use memory:
- Load
memoryskill to access memory workflows - Apollo is primary memory specialist
- Any agent can search/store via Mem0 REST API patterns in
mem0-memoryskill
- Load
Must NOT do:
- Do NOT implement citation-based verification
- Do NOT implement memory deletion/forget
- Do NOT add memory expiration logic
- Do NOT create dashboards or search UI
Recommended Agent Profile:
- Category:
unspecified-high- Reason: Core deliverable requiring careful architecture documentation, must be comprehensive
- Skills: [
obsidian,mem0-memory]obsidian: Vault conventions, template patterns, frontmatter standardsmem0-memory: Mem0 REST API patterns, endpoint details
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2 (with Tasks 2, 5, 6)
- Blocks: Tasks 7, 8, 9
- Blocked By: Tasks 1, 3
References:
Pattern References:
/home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md— Full file: Mem0 REST API patterns, endpoint table, identity scopes, workflow patterns/home/m3tam3re/p/AI/AGENTS/skills/obsidian/SKILL.md— Full file: Obsidian REST API patterns, create/read/update note workflows, frontmatter conventions/home/m3tam3re/p/AI/AGENTS/skills/reflection/SKILL.md— Skill structure pattern (overview, workflows, integration)
API References:
/home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md:13-21— Quick Reference endpoint table/home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md:90-109— Identity scopes (user_id, agent_id, run_id)
Documentation References:
/home/m3tam3re/CODEX/AGENTS.md:22-27— Frontmatter conventions for vault notes/home/m3tam3re/p/AI/AGENTS/skills/memory/references/mcp-config.md— MCP server config (created in Task 3)
External References:
- OpenClaw reference:
/home/m3tam3re/p/AI/openclaw/extensions/memory-lancedb/index.ts— Auto-capture regex patterns, auto-recall injection, importance scoring (use as inspiration, not copy)
WHY Each Reference Matters:
- mem0-memory SKILL.md provides the exact API endpoints and patterns to reference in dual-layer sync workflows
- obsidian SKILL.md provides the vault file creation patterns (curl commands, path encoding)
- openclaw memory-lancedb shows the auto-capture/auto-recall architecture to adapt
Acceptance Criteria:
Scenario: Validate skill YAML frontmatter Tool: Bash Steps: 1. test -f /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 2. grep "^name: memory$" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 3. grep "^compatibility: opencode$" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 4. grep "description:" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md Expected Result: Valid YAML frontmatter with name, description, compatibility Evidence: grep output Scenario: Verify skill contains all required workflows Tool: Bash Steps: 1. grep -c "## Workflow" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 2. grep "Auto-Capture" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 3. grep "Auto-Recall" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 4. grep "Error Handling" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 5. grep "preference" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md Expected Result: At least 4 workflow sections, auto-capture, auto-recall, error handling, categories Evidence: grep output Scenario: Verify dual-layer sync pattern documented Tool: Bash Steps: 1. grep "mem0_id" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 2. grep "obsidian_ref" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 3. grep "localhost:8000" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md 4. grep "80-memory" /home/m3tam3re/p/AI/AGENTS/skills/memory/SKILL.md Expected Result: Cross-reference IDs and both layer endpoints documented Evidence: grep outputCommit: YES (groups with Task 3)
- Message:
feat(memory): add core memory skill and MCP config reference - Files:
skills/memory/SKILL.md,skills/memory/references/mcp-config.md - Repo:
~/p/AI/AGENTS
- Create
-
5. Update Mem0 Memory Skill
What to do:
- Add "Memory Categories" section after Identity Scopes (line ~109):
- Table: category name, definition, Obsidian path, example
- Metadata pattern for categories:
{"category": "preference", "source": "explicit|auto-capture"}
- Add "Dual-Layer Sync" section after Workflow Patterns:
- After storing to Mem0, also create Obsidian note in
80-memory/<category>/ - Include mem0_id from response in Obsidian note frontmatter
- Include obsidian_ref path in Mem0 metadata via update
- After storing to Mem0, also create Obsidian note in
- Add "Health Check" workflow: Check
/healthbefore any memory operations - Add "Error Handling" section: What to do when Mem0 is unavailable
Must NOT do:
- Do NOT delete existing content
- Do NOT change the YAML frontmatter description (triggers)
- Do NOT change existing API endpoint documentation
Recommended Agent Profile:
- Category:
quick- Reason: Adding sections to existing well-structured file
- Skills: [
mem0-memory]mem0-memory: Existing skill patterns to extend
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2 (with Tasks 2, 4, 6)
- Blocks: Task 9
- Blocked By: Task 1
References:
/home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md— Full file: current content to extend (preserve ALL existing content)
Acceptance Criteria:
Scenario: Verify categories added to mem0-memory skill Tool: Bash Steps: 1. grep "Memory Categories" /home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md 2. grep "preference" /home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md 3. grep "Dual-Layer" /home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md 4. grep "80-memory" /home/m3tam3re/p/AI/AGENTS/skills/mem0-memory/SKILL.md Expected Result: New sections present alongside existing content Evidence: grep outputCommit: YES
- Message:
feat(mem0-memory): add memory categories and dual-layer sync patterns - Files:
skills/mem0-memory/SKILL.md - Repo:
~/p/AI/AGENTS
- Add "Memory Categories" section after Identity Scopes (line ~109):
-
6. Update Obsidian Skill
What to do:
- Add "Memory Folder Conventions" section (after Best Practices, ~line 228):
- Document
80-memory/structure with 5 subfolders - Memory note naming: kebab-case (e.g.,
prefers-dark-mode.md) - Required frontmatter fields for memory notes (type, category, mem0_id, etc.)
- Document
- Add "Memory Note Workflows" section:
- Create memory note: POST to vault REST API with memory template content
- Read memory note: GET with path encoding for
80-memory/paths - Search memories: Search within
80-memory/path filter
- Update Integration table to include memory skill handoff
Must NOT do:
- Do NOT change existing content or workflows
- Do NOT modify the YAML frontmatter
Recommended Agent Profile:
- Category:
quick - Skills: [
obsidian]
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 2
- Blocks: Task 9
- Blocked By: Task 1
References:
/home/m3tam3re/p/AI/AGENTS/skills/obsidian/SKILL.md— Full file: current content to extend
Acceptance Criteria:
Scenario: Verify memory conventions added to obsidian skill Tool: Bash Steps: 1. grep "Memory Folder" /home/m3tam3re/p/AI/AGENTS/skills/obsidian/SKILL.md 2. grep "80-memory" /home/m3tam3re/p/AI/AGENTS/skills/obsidian/SKILL.md 3. grep "mem0_id" /home/m3tam3re/p/AI/AGENTS/skills/obsidian/SKILL.md Expected Result: Memory folder docs and frontmatter patterns present Evidence: grep outputCommit: YES
- Message:
feat(obsidian): add memory folder conventions and workflows - Files:
skills/obsidian/SKILL.md - Repo:
~/p/AI/AGENTS
- Add "Memory Folder Conventions" section (after Best Practices, ~line 228):
-
7. Update Apollo Agent Prompt
What to do:
- Add "Memory Management" to Core Responsibilities list (after item 4):
- Store memories in dual-layer system (Mem0 + Obsidian CODEX)
- Retrieve memories via semantic search (Mem0)
- Auto-capture session insights at session end (max 3, confirm with user)
- Handle explicit "remember this" requests
- Inject relevant memories into context on session start
- Add memory-related tools to Tool Usage section
- Add memory error handling to Edge Cases
Must NOT do:
- Do NOT remove existing responsibilities
- Do NOT change Apollo's identity or boundaries
Recommended Agent Profile:
- Category:
quick - Skills: []
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3 (with Task 8)
- Blocks: Task 9
- Blocked By: Task 4
References:
/home/m3tam3re/p/AI/AGENTS/prompts/apollo.txt— Full file (47 lines): current prompt to extend
Acceptance Criteria:
Scenario: Verify memory management added to Apollo prompt Tool: Bash Steps: 1. grep -i "memory" /home/m3tam3re/p/AI/AGENTS/prompts/apollo.txt | wc -l 2. grep "Mem0" /home/m3tam3re/p/AI/AGENTS/prompts/apollo.txt 3. grep "auto-capture" /home/m3tam3re/p/AI/AGENTS/prompts/apollo.txt Expected Result: Multiple memory references, Mem0 mentioned, auto-capture documented Evidence: grep outputCommit: YES (groups with Task 8)
- Message:
feat(agents): add memory management to Apollo prompt and user profile - Files:
prompts/apollo.txt,context/profile.md - Repo:
~/p/AI/AGENTS
- Add "Memory Management" to Core Responsibilities list (after item 4):
-
8. Update User Context Profile
What to do:
- Add "Memory System" section to
context/profile.md:- Mem0 endpoint:
http://localhost:8000 - Mem0 user_id:
m3tam3re(or whatever the user's ID should be) - Obsidian vault path:
~/CODEX - Memory folder:
80-memory/ - Auto-capture: enabled, max 3 per session
- Auto-recall: enabled, top 5 results, score threshold 0.7
- Memory categories: preference, fact, decision, entity, other
- Obsidian MCP server: cyanheads/obsidian-mcp-server (see skills/memory/references/mcp-config.md)
- Mem0 endpoint:
Must NOT do:
- Do NOT remove existing profile content
Recommended Agent Profile:
- Category:
quick - Skills: []
Parallelization:
- Can Run In Parallel: YES
- Parallel Group: Wave 3 (with Task 7)
- Blocks: Task 9
- Blocked By: Task 4
References:
/home/m3tam3re/p/AI/AGENTS/context/profile.md— Current profile to extend
Acceptance Criteria:
Scenario: Verify memory config in profile Tool: Bash Steps: 1. grep "Memory System" /home/m3tam3re/p/AI/AGENTS/context/profile.md 2. grep "localhost:8000" /home/m3tam3re/p/AI/AGENTS/context/profile.md 3. grep "80-memory" /home/m3tam3re/p/AI/AGENTS/context/profile.md 4. grep "auto-capture" /home/m3tam3re/p/AI/AGENTS/context/profile.md Expected Result: Memory system section with all config values Evidence: grep outputCommit: YES (groups with Task 7)
- Message:
feat(agents): add memory management to Apollo prompt and user profile - Files:
prompts/apollo.txt,context/profile.md - Repo:
~/p/AI/AGENTS
- Add "Memory System" section to
-
9. End-to-End Validation
What to do:
- Verify ALL files exist and contain expected content
- Run skill validation:
./scripts/test-skill.sh memory - Test Mem0 availability:
curl http://localhost:8000/health - Test Obsidian REST API:
curl http://127.0.0.1:27124/vault-info - Verify CODEX vault structure:
ls -la ~/CODEX/80-memory/ - Verify template:
cat ~/CODEX/templates/memory.md | head -20 - Check all YAML frontmatter valid across new/updated skill files
Must NOT do:
- Do NOT create automated test infrastructure
- Do NOT modify any files — validation only
Recommended Agent Profile:
- Category:
unspecified-low- Reason: Verification only, running commands and checking outputs
- Skills: []
Parallelization:
- Can Run In Parallel: NO
- Parallel Group: Wave 4 (final, sequential)
- Blocks: None (final task)
- Blocked By: ALL tasks (1-8)
Acceptance Criteria:
Scenario: Full file existence check Tool: Bash Steps: 1. test -f ~/p/AI/AGENTS/skills/memory/SKILL.md 2. test -f ~/p/AI/AGENTS/skills/memory/references/mcp-config.md 3. test -d ~/CODEX/80-memory/preferences 4. test -f ~/CODEX/templates/memory.md 5. grep "80-memory" ~/CODEX/AGENTS.md 6. grep "#memory" ~/CODEX/tag-taxonomy.md 7. grep "80-memory" ~/CODEX/README.md 8. grep -i "memory" ~/p/AI/AGENTS/prompts/apollo.txt 9. grep "Memory System" ~/p/AI/AGENTS/context/profile.md Expected Result: All checks pass (exit code 0) Evidence: Shell output captured Scenario: Mem0 health check Tool: Bash Preconditions: Mem0 server must be running Steps: 1. curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health Expected Result: HTTP 200 Evidence: Status code captured Note: If Mem0 not running, this test will fail — spin up Mem0 first Scenario: Obsidian REST API check Tool: Bash Preconditions: Obsidian desktop app must be running with Local REST API plugin Steps: 1. curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:27124/vault-info Expected Result: HTTP 200 Evidence: Status code captured Note: Requires Obsidian desktop app to be open Scenario: Skill validation Tool: Bash Steps: 1. cd ~/p/AI/AGENTS && ./scripts/test-skill.sh memory Expected Result: Validation passes (no errors) Evidence: Script output capturedCommit: NO (validation only, no file changes)
Commit Strategy
| After Task | Message | Files | Repo | Verification |
|---|---|---|---|---|
| 1 | feat(vault): add 80-memory folder structure and memory template |
80-memory/, templates/memory.md, tag-taxonomy.md | ~/CODEX | ls + grep |
| 2 | docs(vault): add 80-memory documentation to AGENTS.md and README.md |
AGENTS.md, README.md | ~/CODEX | grep |
| 3+4 | feat(memory): add core memory skill and MCP config reference |
skills/memory/SKILL.md, skills/memory/references/mcp-config.md | ~/p/AI/AGENTS | test-skill.sh |
| 5 | feat(mem0-memory): add memory categories and dual-layer sync patterns |
skills/mem0-memory/SKILL.md | ~/p/AI/AGENTS | grep |
| 6 | feat(obsidian): add memory folder conventions and workflows |
skills/obsidian/SKILL.md | ~/p/AI/AGENTS | grep |
| 7+8 | feat(agents): add memory management to Apollo prompt and user profile |
prompts/apollo.txt, context/profile.md | ~/p/AI/AGENTS | grep |
Note: Two different git repos! CODEX and AGENTS commits are independent.
Success Criteria
Verification Commands
# CODEX vault structure
ls ~/CODEX/80-memory/ # Expected: preferences/ facts/ decisions/ entities/ other/
cat ~/CODEX/templates/memory.md | head -5 # Expected: ---\ntype: memory
grep "#memory" ~/CODEX/tag-taxonomy.md # Expected: #memory/* tags
# AGENTS skill validation
cd ~/p/AI/AGENTS && ./scripts/test-skill.sh memory # Expected: pass
# Infrastructure (requires services running)
curl -s http://localhost:8000/health # Expected: 200
curl -s http://127.0.0.1:27124/vault-info # Expected: 200
Final Checklist
- All "Must Have" present (dual-layer, auto-capture, auto-recall, categories, health checks, error handling)
- All "Must NOT Have" absent (no citation system, no deletion, no dashboards, no unit tests)
- CODEX commits pushed (vault structure + docs)
- AGENTS commits pushed (skills + prompts + profile)
- User reminded to add Obsidian MCP to Nix config and run
home-manager switch - User reminded to spin up Mem0 server before using memory features