Skip to main content

Memory Workflow Tutorial

Master OWL's three-layer memory system.

Understanding the Layers​

Layer 1: Memory File​

  • Location: ~/.owl/memory.md
  • Purpose: Persistent facts always in context
  • Access: /memory, /remember, /forget

Layer 2: SQLite Database​

  • Location: ~/.owl/memory/owl.db
  • Purpose: Conversation history, learnings
  • Access: Automatic, background

Layer 3: Session Summaries​

  • Purpose: Compressed old conversations
  • Access: Automatic summarization

Using the Memory File​

Adding Memories​

/remember I prefer functional programming patterns

OWL auto-categorizes into:

  • Preferences: Coding style, tools, approaches
  • Notes: Project facts, technical details
  • Decisions: Architectural choices

Explicit Categories​

Be specific for better organization:

/remember [Preference] Always use type hints
/remember [Note] API rate limit is 100/minute
/remember [Decision] Chose PostgreSQL for ACID compliance

Viewing Memories​

/memory

Output:

# Preferences
- I prefer functional programming patterns
- Always use type hints

# Notes
- API rate limit is 100/minute

# Decisions
- Chose PostgreSQL for ACID compliance

Removing Memories​

/forget functional programming

Matches substring and removes.

Conversation Memory​

How It Works​

Every message is stored:

  • Indexed by session ID
  • Tagged with project path
  • Includes timestamp

Project Scoping​

# In project A
you: How does auth work?
# Stored with project_path = /path/to/project-a

# Switch to project B
/project ~/project-b
you: Show me the database schema
# Stored with project_path = /path/to/project-b

# History stays separate

Viewing History​

/history      # Last 10 messages
/history 20 # Last 20 messages

Automatic Learnings​

Reflection Process​

Every 3 exchanges (6 messages), OWL reflects:

Exchange 1: You ask about testing
Exchange 2: OWL suggests pytest, you agree
Exchange 3: You mention liking fixtures
→ Reflection triggers
→ Learning: "User prefers pytest fixtures"

Learning Categories​

CategoryExample
preference"Prefers short variable names"
project"Uses PostgreSQL database"
style"Likes descriptive function names"
technical"API uses JWT authentication"
feedback"Wants concise explanations"

Manual Teaching​

Bypass automatic extraction:

/teach
What did you observe? User was frustrated with long responses
What should I learn? Keep responses focused and concise

Session Summaries​

Automatic Summarization​

After 20 messages:

  1. Oldest 10 are summarized
  2. Summary replaces detailed messages
  3. Recent 10 stay fresh

What Gets Summarized​

Before:
- "Can you help with the login feature?"
- "Sure, I'll look at auth.py..."
- "The issue is in line 42..."
- ... 17 more messages ...

After:
Summary: "Discussed login feature, found bug in auth.py line 42,
implemented fix with proper error handling. User prefers
explicit error messages."

+ Recent 10 messages (fresh)

Best Practices​

1. Be Explicit with Preferences​

# Good
/remember Always use async/await, never .then()

# Vague
/remember I like modern syntax

2. Keep Memory Clean​

Periodically review:

/memory

Remove outdated:

/forget old framework preference

3. Document Decisions with Reasoning​

/remember Chose Redis over Memcached (need pub/sub)
/remember Using TypeScript strict mode (catch errors early)

4. Use Project Scoping​

Global preferences:

/remember I prefer 2-space indentation

Project-specific (learned automatically):

# While in project context
you: This project uses tabs
→ Learned as project-scoped

Debugging Memory​

View Raw Memory File​

cat ~/.owl/memory.md

Query SQLite​

sqlite3 ~/.owl/memory/owl.db

-- Recent messages
SELECT role, substr(content, 1, 50) FROM conversations
ORDER BY timestamp DESC LIMIT 10;

-- All learnings
SELECT category, learning FROM learnings;

-- Session info
SELECT * FROM sessions;

Reset Memory​

# Clear memory file
echo "" > ~/.owl/memory.md

# Or delete and restart
rm ~/.owl/memory.md
rm ~/.owl/memory/owl.db