Tabula Scripta
Working memory for Claude Code - never lose context between sessions

[!WARNING]
early alpha!
Tabula Scripta is a Claude Code plugin that gives Claude persistent, cross-session memory by integrating with Obsidian via the Model Context Protocol (MCP). Think of it as Claude's external brain - automatically capturing decisions, patterns, and context so you never have to repeat yourself.
The Problem
Every time you start a new Claude Code session:
- Claude has no memory of your previous work
- You spend time re-explaining context, decisions, and preferences
- Debugging insights and architectural patterns are lost
- Cross-project knowledge stays siloed
The Solution
Tabula Scripta automatically:
- Loads relevant context when you start a session (no manual /recall needed)
- Tracks your work in updateable session notes
- Extracts knowledge into persistent entity notes (decisions, patterns, gotchas)
- Builds a knowledge graph that grows smarter over time
- Works across projects by promoting reusable patterns to global knowledge
Features
Automatic Context Loading
When you start a session, Claude automatically recalls:
- Recent session notes and decisions
- Relevant entity notes (components, patterns, architectures)
- Cross-project patterns you've used before
Three-Layer Memory System
- Session Notes - Temporal scratchpad for current work (auto-compacted when >500 lines or 3 days old)
- Entity Notes - Persistent knowledge about components, patterns, and concepts
- Topic Notes - Maps of Content (MOCs) organizing related entities
Proactive Memory Updates
Claude automatically stores memories after:
- Code reviews complete
- Debugging sessions finish
- Architectural decisions are made
- Reusable patterns are discovered
Living Documentation
- Updates notes via patch operations (preserves human edits)
- Conflict detection prevents data loss
- Archives instead of deleting (full history preserved)
Cross-Project Intelligence
- Tracks when patterns are reused across projects
- Automatically promotes frequently-used patterns to global knowledge
- Semantic linking via wikilinks builds a knowledge graph
Quick Example
$ claude-code
[Session Start Hook Executing...]
Working Memory Loaded for Project: my-app
Summary:
Completed authentication system using JWT strategy. Currently implementing
rate limiting middleware. Open question: Redis vs in-memory cache for prod.
Last session: 2025-11-17 - Auth Implementation
Active entities: 3 loaded ([[JWT Auth]], [[Rate Limiting]], [[Redis Integration]])
Recent sessions: 2 reviewed
---
How can I help you today?
> Let's implement the rate limiting with Redis
I see we discussed this in the last session. Based on [[Rate Limiting]]
patterns and our [[Redis Integration]] setup, I'll implement a sliding
window counter approach...
[work happens]
[Session End Hook Executing...]
Finalizing session for project: my-app
Session note: 487 lines, 1 day old (below threshold)
Marking session as active (no compaction needed).
Updated [[Rate Limiting]] with implementation details.
Updated [[Redis Integration]] with connection pooling gotcha.
Session finalized successfully.
Installation
Prerequisites
- Obsidian - Download here
- Obsidian MCP Plugin - aaronsb/obsidian-mcp-plugin
- Claude Code - The official Anthropic CLI
Install Plugin
# Install via Claude Code plugin manager
claude-code plugins install tabula-scripta
# Or clone manually
git clone https://github.com/arittr/tabula-scripta.git ~/.claude/plugins/tabula-scripta
Setup Memory Vault
# Create Obsidian vault structure
mkdir -p ~/.claude-memory/claude/{projects,global}
mkdir -p ~/.claude-memory/claude/global/{entities,topics}
# Open ~/.claude-memory in Obsidian
Configure MCP Connection
Add to your ~/.config/claude-code/config.json:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp-plugin/dist/index.js"],
"env": {
"OBSIDIAN_VAULT_PATH": "/Users/yourusername/.claude-memory"
}
}
}
}
See setup-guide.md for detailed setup instructions and troubleshooting.
Usage
Automatic (No Commands Needed)
Tabula Scripta works automatically via session hooks: