A knowledge store for coding agents that persists across sessions.
Modern coding agents are capable: they read code, grep what they need, and build knowledge on the fly. However, they forget between sessions. Even with /compact, knowledge gets summarized, some details are lost and there's no more trace of causality, historical evolution, fixes learned the hard way, and other aspects that may be retained over the time.
Dory captures what would otherwise disappear: learnings from experience you can't grep for, the rationale behind decisions that isn't in the code, project-specific details learned through several sessions and hours, and session state so the next agent knows where you left off. To do so, Dory stores structured knowledge in Doryfile: an append-only storage format consisting of two files: knowledge.dory (the event log) and index.yaml (a snapshot with items and a log offset).
One may ask: why should I use Dory instead of writing one single markdown file? First of all, I built Dory to meet my needs... and to have fun and play with agents! Besides of that: for small, short-lived projects a single markdown file works fine. Dory helps when knowledge grows. Doryfile is queryable, this means you can just do dory list --tag auth instead of scrolling through one big file. You can create relations and reference items with each other with refs, with the possibility of even having some fancy visualizations directly on the terminal. Agents can load the index and fetch full content only when needed, categorizing type, topic, severity for each item. And should you need something specific, Dory offers a minimalist yet powerful plugin system.
I made Dory for myself, hope you enjoy it as much as I do!
dory init # once per project
# During work, capture what matters:
dory create "Why we chose Postgres over SQLite" --kind decision --tag database
dory create "Auth tokens expire silently—always check error response" --tag auth
# At session end, leave a note for the next agent:
dory context --goal "Add user auth" --progress "Login done" --next "Implement logout"For the full command reference, see DORY.md.
Query by tag instead of scrolling through a giant file:
$ dory list --tag architecture
D-01KGJ5XFHD1R0B decision architecture Complete Phase 1 plugin lifecycle...
D-01KGJ5XFHD3T05 decision architecture Adopt single-file storage format...
D-01KGJ5XFHD5PQ5 decision architecture Defer graph export formats...Visualize how decisions connect:
$ dory show D-01KGJ5... --graph
┌────────────┐ ┌────────────┐
│D-01KGJ5XFHD│ │D-01KGJ5XFHD│
└────────────┘ └────────────┘
│ │
└──────┬───────┘
▼
╔══════════════════════════════════════════════════╗
║ D-01KGJ5XFHD1R0BDD9NVCARY3BH ║
║ Complete Phase 1 plugin lifecycle and proto... ║
╚══════════════════════════════════════════════════╝
│
┌────────────┼────────────┐
▼ ▼ ▼
┌────────────┐┌────────────┐┌────────────┐
│D-01KGJ5XFHD││D-01KGJ5XFHD││D-01KGJ5XFHD│
└────────────┘└────────────┘└────────────┘Get a session briefing with what matters:
$ dory context
╭─────────────────────────────────────────╮
│ CONTEXT: my-project │
╰─────────────────────────────────────────╯
SESSION STATE
Goal: Add user authentication
Progress: Login endpoint done, JWT working
Next: Implement logout, add refresh tokens
CRITICAL/HIGH LESSONS (3)
L-01KGJ5...: [critical] Never store tokens in localStorage
L-01KGJ5...: [high] Auth tokens expire silently—check responseHere's what a typical agent session looks like with Dory:
# Session start — agent reads context
$ cat .dory/index.yaml
session:
goal: "Add password reset flow"
progress: "Email service integrated, templates ready"
next: "Implement reset endpoint, add rate limiting"
updated: "2026-02-03T18:30:00Z"
items:
L-01KGJ5XFHD7520: { type: lesson, oneliner: "SendGrid requires domain verification first", ... }
D-01KGJ5XFHDSMFY: { type: decision, oneliner: "Use JWT tokens for reset links, 15min expiry", ... }
# Agent works, encounters an issue, records it
$ dory create "Rate limiter must be per-user, not per-IP—VPN users share IPs" --tag auth
Created L-01KGJX7...
# Agent makes an architectural choice
$ dory create "Store reset tokens in Redis with TTL instead of DB" --kind decision --tag auth
Created D-01KGJX8...
# Session end, agent updates context
$ dory context --progress "Reset endpoint done, rate limiting done" --next "Add password validation rules, write tests"
Updated session context
# Other agents work on it, or a new session starts, and everything is already recordedWhen you run dory init, Dory automatically appends instructions to your CLAUDE.md or AGENTS.md if they exist, and will create a DORY.md with instructions on how to use Dory.
Agents will know to check .dory/index.yaml at session start and update context before ending.
Dory has a minimal plugin system for when you need something specific. Plugins can add custom commands, hooks, and item types. They run as separate processes, so a broken plugin won't corrupt your knowledge base.
dory plugin list # see available plugins
dory plugin enable my-plugin # enable for this project
dory plugin run my-plugin # run a plugin commandSee PROTOCOL.md for details.
With Go (any OS):
go install github.com/sibellavia/dory/cmd/dory@latestDownload binary (macOS/Linux/Windows):
Download from releases, extract, and add to your PATH:
# macOS (Apple Silicon)
curl -sL https://github.com/sibellavia/dory/releases/latest/download/dory_Darwin_arm64.tar.gz | tar xz
sudo mv dory /usr/local/bin/
# macOS (Intel)
curl -sL https://github.com/sibellavia/dory/releases/latest/download/dory_Darwin_x86_64.tar.gz | tar xz
sudo mv dory /usr/local/bin/
# Linux (x86_64)
curl -sL https://github.com/sibellavia/dory/releases/latest/download/dory_Linux_x86_64.tar.gz | tar xz
sudo mv dory /usr/local/bin/Verify installation:
dory --version
dory init && dory context