Skip to main content

Memory System

Status: built, not yet wired. The @xops/memory package (SQLite + vector search) exists, but recalled context is not yet injected into agent runs. Tracked as roadmap Phase 6. The description below is the target design.

xops remembers everything - solutions, runbooks, and context from past conversations.

Overview​

The memory system provides:

  • Persistent Storage - Information survives restarts
  • Semantic Search - Find content by meaning, not just keywords
  • Hybrid Search - Combines vector embeddings with keyword matching
  • Auto-Indexing - Watches your workspace for changes

How It Works​

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│ Workspace │────▶│ Chunking │────▶│ Embeddings │
│ (Markdown) │ │ (400 tokens)│ │ (OpenAI) │
└──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Query │────▶│Hybrid Search │◀────│ SQLite │
│ "Redis" │ │ 70% + 30% │ │ + Vec Ext │
└──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ Results │
│ (Ranked) │
└──────────────┘
  1. Indexing: Markdown files are chunked and embedded
  2. Storage: Chunks stored in SQLite with vector extension
  3. Search: Queries use hybrid vector + keyword matching
  4. Context: Top results are passed to the AI

Quick Start​

Memory is enabled by default. Add content to your workspace:

# Create a runbook
cat > ~/.xops/workspace/memory/runbooks/redis.md << 'EOF'
# Redis Troubleshooting

## Connection Timeout

When connections timeout:
1. Check Redis server is running: `redis-cli ping`
2. Verify network connectivity
3. Increase pool size if at capacity

## Memory Issues

If Redis is OOMKilled:
1. Check memory usage: `redis-cli info memory`
2. Set maxmemory policy: `CONFIG SET maxmemory-policy allkeys-lru`
EOF

Now xops can answer questions about Redis:

You: How do I fix Redis connection timeouts?

xops: Based on your runbook, here's how to fix Redis connection timeouts:

1. First, verify Redis is running: `redis-cli ping`
2. Check network connectivity between your app and Redis
3. If connections are maxed out, increase the pool size

Would you like me to check the current Redis status?

Workspace Structure​

~/.xops/workspace/
├── MEMORY.md # Quick notes (always indexed)
├── HEARTBEAT.md # Heartbeat checklist
└── memory/ # Additional memory files
├── runbooks/
│ ├── kubernetes.md
│ ├── redis.md
│ └── aws.md
├── incidents/
│ ├── 2024-01-15.md
│ └── 2024-02-20.md
└── notes/
├── architecture.md
└── contacts.md

Writing Good Memory Content​

Use Clear Headers​

# Kubernetes Troubleshooting

## Pod CrashLoopBackOff

Causes:
- Application error
- Missing configuration
- Resource limits

Solutions:
1. Check logs: `kubectl logs <pod>`
2. Describe pod: `kubectl describe pod <pod>`

Include Commands​

## Scaling a Deployment

To scale the api-service:
```bash
kubectl scale deployment api-service --replicas=5

Or with HPA:

kubectl autoscale deployment api-service --min=3 --max=10

### Add Context

```markdown
## AWS Cost Optimization

Last reviewed: 2025-01-15

### Unused Resources

We found these unused resources in production:
- 3 unattached EBS volumes ($45/month)
- 2 idle NAT gateways ($90/month)

### Reserved Instances

Consider RI for:
- production-db (m6i.xlarge) - 60% savings

Search Commands​

# Basic search
xops memory search "Redis connection"

# Limit results
xops memory search "deployment rollback" -n 10
curl -X POST http://localhost:18789/memory/search \
-H "Content-Type: application/json" \
-d '{"query": "Redis connection issues", "limit": 5}'

In Conversation​

Just ask naturally - xops automatically searches memory:

You: How did we fix the Redis issue last month?

xops: Based on your incident notes from January 15th:

The issue was Redis maxclients limit reached. The fix was:
1. Increased maxclients from 100 to 500
2. Implemented connection pooling in the API service
3. Added Redis connection monitoring

Do you want me to check current Redis connection counts?

Configuration​

memory:
enabled: true
provider: auto # Embedding provider
store:
driver: sqlite
path: ~/.xops/memory.db
chunking:
tokens: 400 # Chunk size in tokens
overlap: 80 # Overlap between chunks
search:
maxResults: 6 # Max results returned
minScore: 0.35 # Minimum relevance score
hybrid:
enabled: true
vectorWeight: 0.7 # 70% vector similarity
textWeight: 0.3 # 30% keyword match

Embedding Providers​

ProviderNotes
autoUses your AI provider's embeddings
openaiBest quality (text-embedding-3-small)
geminiGoogle's embeddings
localNo API needed (all-MiniLM-L6-v2)

Chunking Settings​

SettingDefaultDescription
tokens400Target chunk size
overlap80Overlap for context

Smaller chunks = more precise results, larger = more context.

Search Settings​

SettingDefaultDescription
maxResults6Results per search
minScore0.35Minimum relevance (0-1)

Manual Operations​

Sync Index​

Manually sync the index:

xops memory sync

Full Reindex​

Rebuild the entire index:

xops memory reindex

Check Status​

xops memory status

# Output:
📊 Memory Status

✓ Database: ~/.xops/memory.db
Chunks: 156
Files: 12
Last sync: 2 minutes ago

Best Practices​

1. Organize by Topic​

memory/
├── runbooks/ # How-to guides
├── incidents/ # Post-mortems
├── architecture/ # System design
└── contacts/ # Escalation paths

2. Use Markdown Formatting​

  • Headers for structure
  • Code blocks for commands
  • Lists for steps
  • Links to related docs

3. Keep Content Current​

  • Update after incidents
  • Remove outdated info
  • Add timestamps to notes

4. Be Specific​

# Bad
Redis issues - increase memory

# Good
## Redis OOMKilled in Production (2025-01-15)

Root cause: Memory limit too low for traffic spike.

Fix:
1. Increased maxmemory from 2GB to 4GB
2. Set eviction policy to allkeys-lru
3. Added memory alerts at 80% threshold

Troubleshooting​

"Memory search failed"​

Check database exists:

ls -la ~/.xops/memory.db

Reindex if corrupted:

xops memory reindex

Results not relevant​

  • Add more specific content
  • Use better keywords in questions
  • Lower minScore for broader results

Index not updating​

Check file permissions:

ls -la ~/.xops/workspace/

Manual sync:

xops memory sync