trusty-memory
Persistent memory palace system with hierarchical storage (palace/wing/room/closet/drawer), progressive retrieval (L0-L3), and temporal knowledge graph for cross-session context
Works with
---
name: trusty-memory
description: Persistent memory palace system with hierarchical storage (palace/wing/room/closet/drawer), progressive retrieval (L0-L3), and temporal knowledge graph for cross-session context
license: Apache-2.0
---
# trusty-memory
Persistent memory system using the **Memory Palace** metaphor for organizing context across sessions. Replaces `mcp__kuzu-memory__*` tools.
## When to Use
- **Session start**: Recall relevant context for the current task
- **Decision moments**: Store key architectural/design decisions
- **Learning capture**: Remember new patterns, conventions, gotchas discovered
- **Relationship tracking**: Assert facts in the knowledge graph (X depends on Y, A replaces B)
- **Session end**: Persist outcomes and next steps
**Do NOT use for**: ephemeral scratch notes, code snippets (use trusty-search), or content that belongs in source files.
## Architecture
```
Palace (project) e.g. "claude-mpm"
└── Wing (area) e.g. "Backend"
└── Room e.g. "Backend", "Frontend", "Testing", "Planning",
"Documentation", "Research", "Configuration",
"Meetings", "General"
└── Closet (sub-category)
└── Drawer (memory item: uuid, content, tags, importance)
```
### Progressive Retrieval Layers
| Layer | Tokens | When | Trigger |
|-------|--------|------|---------|
| L0 | ~100 | Always | Identity / project context auto-loaded |
| L1 | ~800 | Always | Top-15 drawers by importance auto-loaded |
| L2 | variable | On topic match | `memory_recall` — metadata-filtered vector search |
| L3 | exhaustive | Explicit | `memory_recall_deep` — full HNSW deep search |
**Always try `memory_recall` first.** Escalate to `memory_recall_deep` only if results are insufficient.
## Tool Reference
### Retrieval
**`memory_recall`** — Fast progressive retrieval (L0+L1+L2). Use this first.
```
mcp__trusty-memory__memory_recall(
query="how does the migration registry work",
room="Backend", # optional filter
limit=10 # optional
)
```
**`memory_recall_deep`** — Full HNSW deep search (L3). Use when `memory_recall` insufficient.
```
mcp__trusty-memory__memory_recall_deep(
query="rare edge case in hook dispatcher",
limit=20
)
```
**`memory_list`** — Browse drawers by room/tag (no semantic query).
```
mcp__trusty-memory__memory_list(room="Planning", tag="release-workflow")
```
### Storage
**`memory_remember`** — Store a drawer.
```
mcp__trusty-memory__memory_remember(
content="The migration runner uses run_pending_migrations() at startup; state in ~/.claude-mpm/migrations.json",
room="Backend",
tags=["migrations", "startup"],
importance=0.8 # 0.0-1.0; higher = more likely to appear in L1
)
```
**`memory_forget`** — Delete by UUID.
```
mcp__trusty-memory__memory_forget(drawer_id="<uuid>")
```
### Palace Management
```
mcp__trusty-memory__palace_list()
mcp__trusty-memory__palace_info(palace="claude-mpm")
mcp__trusty-memory__palace_create(name="new-project")
```
### Knowledge Graph (temporal triples)
**`kg_assert`** — Assert a `(subject, predicate, object)` fact.
```
mcp__trusty-memory__kg_assert(
subject="trusty-memory",
predicate="replaces",
object="kuzu-memory"
)
```
**`kg_query`** — Query triples for a subject.
```
mcp__trusty-memory__kg_query(subject="trusty-memory")
```
## Room Type Selection
| Room | Use For |
|------|---------|
| **Backend** | Server-side logic, APIs, services, data layer |
| **Frontend** | UI, components, styling, client-state |
| **Testing** | Test patterns, fixtures, flaky test notes, coverage decisions |
| **Planning** | Roadmaps, architectural decisions, ticket plans |
| **Documentation** | Doc conventions, README structure, public API docs |
| **Research** | Investigations, spike findings, library evaluations |
| **Configuration** | Build setup, env vars, deploy config, tooling |
| **Meetings** | Decisions from sync calls, action items |
| **General** | Cross-cutting concerns, miscellaneous |
When unsure, prefer the most-specific room. Tags handle the rest.
## KG Triple Patterns
Use consistent predicates for queryable graphs:
| Predicate | Example |
|-----------|---------|
| `replaces` | `(trusty-memory, replaces, kuzu-memory)` |
| `depends_on` | `(release-publish, depends_on, gh-account-bobmatnyc)` |
| `implements` | `(migration_runner, implements, run_pending_migrations)` |
| `documented_in` | `(release_workflow, documented_in, CLAUDE.md)` |
| `owned_by` | `(planner-agent, owned_by, .claude/agents/planner.md)` |
| `version_of` | `(6.2.67, version_of, claude-mpm)` |
| `triggers` | `(SessionStart, triggers, model_tier_hook)` |
## Workflow Protocols
### Session Start Protocol
1. **Auto-loaded**: L0 identity + L1 top-15 drawers appear in context automatically.
2. **Targeted recall**: For task-specific context:
```
memory_recall(query="<current task domain>", limit=10)
```
3. **Check KG** for relevant entity relationships:
```
kg_query(subject="<entity being modified>")
```
### Session End Protocol
For each significant outcome, persist it:
1. **Decisions** → `memory_remember` with high importance (0.7-0.9)
```
memory_remember(
content="Decided to consolidate hook scripts under claude-hook-fast.sh; old per-event scripts deprecated",
room="Backend",
tags=["hooks", "decision"],
importance=0.85
)
```
2. **Relationships** → `kg_assert`
```
kg_assert(subject="claude-hook-fast.sh", predicate="replaces", object="per-event-hook-scripts")
```
3. **Gotchas / learnings** → `memory_remember` with tags for discoverability
```
memory_remember(
content="release-publish requires `claude-mpm gh switch` to bobmatnyc first; bob-duetto account causes auth failures",
room="Configuration",
tags=["release", "gotcha", "github-auth"],
importance=0.9
)
```
### Recall vs Recall-Deep Decision
| Situation | Use |
|-----------|-----|
| Standard context lookup | `memory_recall` |
| Top-N relevant results enough | `memory_recall` |
| `memory_recall` returned <3 hits | `memory_recall_deep` |
| Investigating obscure / rare topic | `memory_recall_deep` |
| Need exhaustive coverage of a concept | `memory_recall_deep` |
## Importance Scoring
| Score | Type |
|-------|------|
| 0.9-1.0 | Critical: release gotchas, security constraints, hard rules |
| 0.7-0.9 | Architectural decisions, major patterns |
| 0.5-0.7 | Useful conventions, common patterns |
| 0.3-0.5 | Project trivia, minor preferences |
| 0.0-0.3 | Ephemeral, rarely-useful |
L1 surfaces the top 15 by importance — score accordingly.
## Migration from kuzu-memory
| Old | New |
|-----|-----|
| `mcp__kuzu-memory__kuzu_recall` | `mcp__trusty-memory__memory_recall` |
| `mcp__kuzu-memory__kuzu_learn` | `mcp__trusty-memory__memory_remember` |
| `mcp__kuzu-memory__kuzu_remember` | `mcp__trusty-memory__memory_remember` |
| `mcp__kuzu-memory__kuzu_project_context` | Auto-loaded via L0 |
| `mcp__kuzu-memory__kuzu_stats` | `mcp__trusty-memory__palace_info` |
## Integration with trusty-search
Common pattern: search → understand → remember.
```
# 1. Find code with trusty-search
search_code(query="migration runner", query_type="Definition")
# 2. After investigating, persist the learning
memory_remember(
content="Migration runner pattern: registry.py registers each migrate_*.py module; run_pending_migrations iterates by version",
room="Backend",
tags=["migrations", "pattern"],
importance=0.75
)
```
## Best Practices
- **Be specific**: "Release workflow requires bobmatnyc gh account" beats "Check gh account before releasing"
- **Include WHY**: Decision rationale beats decision alone
- **Tag generously**: Tags enable cross-room discovery
- **Use KG for relationships**: Don't bury "X replaces Y" in prose — assert it
- **Update over duplicate**: Forget stale drawers when superseded
- **Prefer recall over recall_deep**: Save the expensive call for when you need itMore AI & ML skills
writing-shape
mattpocock/skills
Writing, exploit: shape raw material into an article, paragraph by paragraph.
writing-fragments
mattpocock/skills
Writing, explore: mine raw fragments, no structure yet.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.

