UNPKG

opencode-agent-kit

Version:

Multi-stack OpenCode agent toolkit — 33+ specialized AI agents, 200+ skills, 46 commands, 8 MCP servers (Nuxt, React, Node.js, Laravel, CI3, Android, Flutter, DevOps, SEO, SonarQube, and more)

178 lines (131 loc) 7.08 kB
--- name: agent-memory-workflow description: 'Consistent cross-session memory protocol: mandatory recall at session start, structured save at session end, memory categories, auto-save triggers, and memory audit procedures.' --- # Agent Memory Workflow Protocols for persistent cross-session memory using the agentmemory MCP server. This skill turns agentmemory from an optional tool into a disciplined, reliable memory layer. ## Core Principle Treat agentmemory as the agent's **external hippocampus** — it stores what the agent should know across sessions, not what it can re-derive from the codebase. The goal is continuity: the user should never have to repeat preferences, past decisions, or discovered conventions. ## Memory Categories Organise memories into 5 stable categories. Every save MUST specify exactly one `type`: | Category | `type` field | What goes in | Retention | |----------|-------------|--------------|-----------| | User Preferences | `preference` | Style choices (verbose/minimal), framework versions, component lib, naming conventions | Permanent | | Architecture | `architecture` | Technology decisions, library choices, data flow design, why-X-over-Y | Permanent | | Project Convention | `convention` | Code patterns, folder structure, naming rules, import style, error handling pattern | Permanent | | Bug / Lesson | `lesson` | Non-obvious bugs found, debugging strategies, specific pitfalls, workarounds | Permanent | | Session Log | `session` | What was done this session, files touched, current state | Volatile (overwritten) | ### Example saves per type ```javascript // preference memory_save( content: "User prefers minimal console output, one-line status per change.", concepts: ["preference", "output-style", "verbose-level"], files: [], type: "preference" ) // architecture memory_save( content: "Chose Zod over Yup because Zod has better TypeScript inference and edge runtime support.", concepts: ["validation", "zod", "typescript", "edge-runtime"], files: ["src/lib/validation.ts"], type: "architecture" ) // convention memory_save( content: "All API service files go under src/services/ with singular names (auth.service.ts, market.service.ts).", concepts: ["convention", "folder-structure", "services"], files: ["src/services/auth.service.ts"], type: "convention" ) // lesson memory_save( content: "Nuxt 4 auto-imports: components in components/ are auto-imported but NOT recursively. Nested dirs need manual export.", concepts: ["nuxt4", "auto-import", "components"], files: ["nuxt.config.ts"], type: "lesson" ) // session — always overwrite the same concept key so only one session entry exists memory_save( content: "Session 2025-03-21: Implemented market card component, refactored auth middleware. Next: notification system.", concepts: ["session-log", "current-state"], files: [], type: "session" ) ``` ## Session Start Ritual (MANDATORY) Every new session (or after `/reset`) MUST execute this sequence before any productive work: ```markdown ## Memory Recall Protocol 1. memory_smart_search(query: "user preferences", limit: 5) 2. memory_smart_search(query: "project conventions", limit: 5) 3. memory_smart_search(query: "architecture decisions", limit: 5) 4. memory_smart_search(query: "lessons learned", limit: 10) 5. memory_sessions(limit: 5) — to see what was done recently 6. memory_recall(query: "current-state") — to check session log ``` If the project has been worked on before, also call: ```javascript // Get file-level history for any files you're about to touch memory_file_history(files: ["src/middleware/auth.ts", "src/lib/api.ts"]) ``` ### Synthesise Findings After recall, produce a one-paragraph context summary: ``` Previous context: 3 sessions found. User prefers minimal output. Architecture: Zod validation, JWT auth with jose library. Conventions: services under src/services/, singular names. Last session: MarketCard component created, auth refactor pending. ``` If no context found, report: "No prior memory found — starting fresh." ## Session End Ritual (MANDATORY) Before the session ends (user says "done", "bye", or after completing a significant task), execute: ```markdown ## Memory Save Protocol 1. Save session log (overwrite `session-log` + `current-state` concepts) 2. Save any new user preferences discovered 3. Save any new conventions observed 4. Save any lessons/bugs encountered 5. Save any architecture decisions made 6. memory_consolidate() — run the 4-tier consolidation pipeline ``` Use `memory_smart_search` first to check if you're about to duplicate something already saved. ## Auto-Save Triggers (Mid-Session) Save immediately (don't wait for session end) when these occur: | Trigger | Action | Example | |---------|--------|---------| | User states a preference | Save `type: preference` | "I prefer tabs over spaces" | | Decision with trade-offs | Save `type: architecture` | "We chose X because Y" | | Non-obvious bug found | Save `type: lesson` | "Remember to validate JWT expiry before payload" | | Custom convention discovered | Save `type: convention` | "All mutations go through service layer" | | User corrects your approach | Save `type: preference` + `type: convention` | "Don't use barrel exports" | The heuristic: **if the user would be annoyed repeating this next session, save it now.** ## Memory Audit & Hygiene Periodically (or when user says "organise memory" / "memory review"): ```javascript // 1. Find duplicate or stale entries memory_patterns() // 2. Delete what's no longer relevant (requires user confirmation) memory_governance_delete(memory_id: "...") // 3. Re-consolidate memory_consolidate() ``` ### Duplicate Prevention Before every `memory_save`, check with `memory_recall` or `memory_smart_search` whether the same information already exists. Overwrite if the old version is stale, skip if it's identical. ## Edge Cases ### No agentmemory server If agentmemory MCP is unavailable (tools don't appear in the tool list), fall back to: - Save a JSON file at `.opencode/memory/memory-<type>.json` using Write tool - Recall by reading `.opencode/memory/` directory - Report: "agentmemory server offline — using file-based fallback" ### First session ever If `memory_sessions` returns empty, skip the full recall ritual and note: "Fresh project — no prior memory. Starting clean." ### Conflict between memory and codebase Codebase is always the source of truth. If memory says one thing but the code shows another, trust the code and save a correction. ## Cross-Agent Memory Discipline When the IT Leader delegates to a subagent, the subagent does NOT have direct agentmemory access. Instead: 1. **IT Leader recalls** relevant memory before delegating 2. **IT Leader includes** the synthesis in the delegation contract (see agent-delegation-contract skill) 3. **Subagent reports** any new findings at the end 4. **IT Leader saves** the subagent's findings to agentmemory This prevents memory pollution from subagents running in shared or unclear contexts.