| name | memory |
| description | Use for knowledge sharing across sessions. Search memory before starting work, store memory after learning. Critical for avoiding repeated mistakes and maintaining context. |
Agent Memory - Knowledge Sharing
WHY Use Memory
Memory persists across ALL agent sessions. What you learn today helps other agents (and future you) tomorrow.
- Avoid repeating mistakes
- Reuse solutions that worked
- Maintain context across sessions
- Share knowledge between agents
WHEN to Search Memory
Before Starting Work
# Search for prior work on this ticket/topic
search_memory(query: "ticket #114", limit: 5)
search_memory(query: "daisyUI theme configuration", limit: 5)
When Stuck or Blocked
# Search for similar problems or solutions
search_memory(query: "Stacked PRs phase dependency", limit: 5)
search_memory(query: "rails credentials error", limit: 5)
Before Making Decisions
# Search for prior decisions on this topic
search_memory(query: "authentication", memory_type: "decision", limit: 5)
search_memory(query: "database schema", memory_type: "decision", limit: 5)
When Encountering Errors
# Search for previous solutions to this error
search_memory(query: "ActiveRecord not found error", memory_type: "error", limit: 5)
WHEN to Store Memory
After Learning Something New
store_memory(
content: "Learned that daisyUI themes are configured in application.tailwind.css with @plugin directive",
memory_type: "fact",
ticket_id: 89
)
After Fixing a Bug
store_memory(
content: "Fixed: Tailwind v4 requires @import 'tailwindcss' instead of @tailwind directives. Error: 'Unknown at rule @tailwind'",
memory_type: "error",
ticket_id: 89,
metadata: { error_message: "Unknown at rule @tailwind", solution: "Use @import 'tailwindcss'" }
)
After Making a Decision
store_memory(
content: "Chose daisyUI winter theme as default over emerald because better color contrast for accessibility",
memory_type: "decision",
ticket_id: 89
)
After Implementing a Pattern
store_memory(
content: "When fixing existing PRs, always checkout the PR's branch using 'gh pr view X --json headRefName' instead of creating new branch",
memory_type: "instruction",
ticket_id: 98
)
After Completing Work
store_memory(
content: "Implemented daisyUI theme polish with 3 themes: winter (default), dracula (dark), corporate. All AVO cards converted to daisyUI components (card, badge, progress, alert). Theme switcher component created with Stimulus controller.",
memory_type: "summary",
ticket_id: 89
)
Memory Types
| Type | When to Use | Example |
|---|---|---|
decision |
After making an architectural choice | "Chose PostgreSQL over MySQL for JSON support" |
error |
After fixing a bug or error | "Fixed: 'undefined method' for nil - add .presence check" |
instruction |
For reusable patterns/workflows | "Always test on mobile before submitting PR" |
fact |
For learned information | "Ruby 3.4 requires syntax it {} instead of lambda {}" |
summary |
After completing significant work | "Phase 1 of epic #79: Added daisyUI and converted cards" |
context |
For project-specific info | "This project uses AVO admin framework with custom cards" |
code_snippet |
For useful code patterns | store_memory(content: "Use find_or_create_by for upserts", memory_type: "code_snippet") |
Quick Reference
| Situation | Action |
|---|---|
| Starting work on ticket | search_memory(query: "ticket #X") |
| Encountering error | search_memory(query: "error message", memory_type: "error") |
| Fixed an issue | store_memory(content: "Fixed: ...", memory_type: "error") |
| Made a choice | store_memory(content: "Chose X because ...", memory_type: "decision") |
| Learned new info | store_memory(content: "Learned that ...", memory_type: "fact") |
| Completed task | store_memory(content: "Implemented ...", memory_type: "summary") |
Best Practices
BE SPECIFIC
# Good
store_memory(content: "daisyUI 5.5.14 requires Tailwind CSS 4.1.18+ for @plugin syntax", memory_type: "fact")
# Too vague
store_memory(content: "Check daisyUI version compatibility", memory_type: "fact")
INCLUDE CONTEXT
store_memory(
content: "For AVO cards, use daisyUI 'card' component with 'bg-base-100' for theme-aware backgrounds",
memory_type: "instruction",
ticket_id: 89,
metadata: { component: "avo_card", theme: "daisyui" }
)
LINK TO TICKETS
store_memory(
content: "git-workflow skill supports stacked PRs for phased development (Phase 1 → Phase 2 → Phase 3)",
memory_type: "fact",
ticket_id: 97
)
Examples by Memory Type
decision - Architectural Choices
# After choosing a library
store_memory(
content: "Chose bun over npm/yarn because 10x faster install times and native ESM support",
memory_type: "decision",
ticket_id: 81
)
# After choosing an approach
store_memory(
content: "Decided to use skills pattern (from ticket #98) instead of inline prompts for persistent workflows",
memory_type: "decision",
ticket_id: 114
)
error - Bugs and Solutions
# After fixing a specific error
store_memory(
content: "Fixed: 'ActionController::UnknownFormat' - Add 'format.js { render json: {...} }' to respond_to block",
memory_type: "error",
ticket_id: 105,
metadata: { error_class: "ActionController::UnknownFormat", solution: "Add format.js response" }
)
# After resolving configuration issues
store_memory(
content: "Fixed: daisyUI components not rendering - Needed to run 'bun run build:css' to compile Tailwind v4",
memory_type: "error",
ticket_id: 89
)
instruction - Reusable Patterns
# Workflow guidance
store_memory(
content: "When implementing epic subtasks, always check for auto-block dependencies via ticket.dependencies before starting work",
memory_type: "instruction",
ticket_id: 96
)
# Code pattern
store_memory(
content: "Use 'find_by(id:)' instead of 'where(id:).first' to avoid loading entire relation",
memory_type: "instruction",
ticket_id: 100
)
fact - Learned Information
# Technical fact
store_memory(
content: "Tailwind CSS v4 uses @import instead of @tailwind directives. CSS config moved to @plugin block in CSS file itself",
memory_type: "fact",
ticket_id: 89
)
# Project-specific fact
store_memory(
content: "This project uses Tinkered workflow: Workers implement → Reviewers audit → Orchestrators coordinate",
memory_type: "fact",
ticket_id: 98
)
summary - Completed Work
# After completing a ticket
store_memory(
content: "Ticket #89: Implemented daisyUI theme polish. 3 themes configured (winter, dracula, corporate). All AVO cards converted to daisyUI components. Created theme switcher controller and partial.",
memory_type: "summary",
ticket_id: 89
)
# After completing a phase
store_memory(
content: "Epic #79 Phase 1 Complete: daisyUI installed, theme configured, base components converted. Ready for Phase 2: Advanced features.",
memory_type: "summary",
ticket_id: 79
)
Search Patterns
Search by Ticket
search_memory(query: "ticket #89", limit: 10)
search_memory(query: "#114", limit: 5)
Search by Type
search_memory(memory_type: "decision", limit: 20)
search_memory(memory_type: "error", query: "daisyUI", limit: 10)
Search by Keyword
search_memory(query: "authentication", limit: 10)
search_memory(query: "Stacked PRs", limit: 5)
search_memory(query: "AVO card", limit: 10)
Search by Ticket Context
# Get all memories for current ticket
search_memory(ticket_id: 114, limit: 20)
Workflow Integration
Standard Work Pattern
# 1. Start: Search for context
search_memory(query: "ticket #114", limit: 5)
search_memory(query: "memory skill pattern", limit: 5)
# 2. Work: Implement solution
# ... code changes ...
# 3. Learn: Store discoveries
store_memory(content: "Memory skills use same directory structure as git-workflow", memory_type: "fact", ticket_id: 114)
# 4. Complete: Store summary
store_memory(content: "Created memory skill with search/store guidance, memory types, examples", memory_type: "summary", ticket_id: 114)
Memory Quality Checklist
When storing memory, ensure:
- ✅ Specific: Contains actionable details
- ✅ Typed: Uses correct memory_type
- ✅ Context: Includes ticket_id or metadata
- ✅ Searchable: Uses keywords others might search for
- ✅ Unique: Doesn't duplicate existing memories
When searching memory:
- ✅ Before starting: Check for prior work
- ✅ When stuck: Look for similar solutions
- ✅ Before deciding: Check prior decisions
- ✅ Use filters: Apply memory_type, ticket_id when relevant