Every decision you've ever made, in one graph — and every agent working on it can see the others. One server holds the reasoning behind every project on your machine, one workspace per repository. Agents on different branches write to it at the same time, watch each other's writes land, and record what they took from whom. What one session decided survives the next session's memory.
At 04:47 UTC on 22 September 2026, agent-7 implemented step reset for lock delay. The idea was agent-8's, and agent-8 had not written the code yet. It had logged a decision; agent-7 read it in the shared graph, wrote its own version, and recorded where it came from. Ten Claude Code sessions, ten git worktrees of one repository, one workspace, and a rules file that said reading each other's work was the point. Twenty-six minutes later: ten playable Tetris games, 386 graph nodes, 170 borrowed ideas with provenance. The write-up has the numbers, the borrow matrix, and what broke.
Those four lines are real nodes from the arena's graph, in the order they landed. One finding
(agent-3: some SRS kicks lift a piece two rows, so two hidden rows refuse a legal rotation at
the ceiling) reached eight of the nine other branches in eighteen minutes (agent-1 started with a forty-row board and never needed it), and two of the agents that took it
used it to find the same silent bug in their own merge().
Agents that work alongside each other. Every write claims an advisory lock on
(workspace, branch), so ten agents on ten branches never wait for each other and two
on one branch are told who is there. check_activity reports who holds what and the
last node on each of the twenty most recently written branches. Postgres triggers push every write over a WebSocket the moment it
lands; deciduous remote watch sits on it. A took_from edge records a
borrow across branches as a query, not a sentence.
Memory that survives the session. The graph is what /recover reads
when a new session starts or context compacts: goals, the options that were rejected, the
outcomes, the attached documents. Far richer than what compaction keeps, and it is the same graph
the other agents are writing to.
Discovery over what was already decided. query_nodes with
workspace: "*" finds the auth decision you made in a repository you have not opened in a
year. ask_graph answers in prose grounded in the nodes. /decision-graph
builds the graph backwards from a commit history that predates the tool.
What the arena found wanting, 1.0 fixes. Zero of its 471 edges crossed a branch, because nothing
said a borrow was an edge: took_from is that edge, and log_observation
writes it in the same call. Agents polled query_nodes to see what was new:
check_activity now carries the last node per branch. A watcher summarised from a tally
and invented a convention that did not exist: remote watch quotes the title of every
write instead of counting them. And the event socket that fed the watcher was closed by the server
every sixty seconds; it is not any more.
Point every repository at one server and the reasoning behind all of them lives in a single Postgres — one workspace per repo, queryable alone or all at once. Your agent reaches it from any directory over MCP. So does the CLI. The local database becomes a cache; the server is the truth.
Read tools take workspace: "*" for the cross-project view — find the auth decision you made in a repo you haven't opened in a year. Writes refuse it, because a node has to land somewhere specific. A repository can pin itself with a header, and then nothing can write its nodes anywhere else.
The token is never written to a config file. It lives in a credentials file outside every repository, so committing your config leaks a hostname and nothing else. You run the server yourself — it is an Elixir app and a Postgres database, and it ships in the repo.
The pulse skill is what makes deciduous a living document. As you work, Claude logs goals before implementing, tracks which options you considered, records what you chose and why, and links outcomes to commits. Run deciduous pulse anytime to see the health of your graph.
Give Claude (Code or Desktop) direct structured access to your decision graph via the Model Context Protocol. 31 tools for creating, querying, analyzing, and reporting on decisions — no shell commands needed. Each conversation gets its own decision tree. (Cowork support coming soon — tracking issue.)
{"mcpServers": {"deciduous": {"command": "deciduous", "args": ["mcp"]}}} to your config
New session? Context compacted? /recover reads the decision graph, checks attached documents, audits for disconnected nodes, and gives Claude full context — far richer than what compaction preserves.
Attach screenshots, PDFs, and architecture diagrams to decision nodes. Then ask questions — the built-in Q&A interface grounds answers in your actual decision history with full-text search across all stored interactions.
Before any implementation, /work creates the goal node with your verbatim request, then tracks actions and outcomes as Claude writes code. Commits get linked to the graph automatically.
Point it at any repository. Claude reads every commit, traces the narratives — what got built, what got replaced, where the pivots happened — and builds a connected decision graph. Grounded entirely in what's in the repo. No speculation.
The narratives skill helps maintain a living document (.deciduous/narratives.md) tracking how each subsystem evolved and where it pivoted.
The archaeology skill transforms those narratives into queryable graph structure — creating revisit nodes, superseding old approaches, and connecting the timeline.
Or download pre-built binaries for macOS, Linux, and Windows.
Working across several projects? Set up the shared graph so every repository reaches one server instead of a separate local database each.
Deploy to GitHub Pages with deciduous sync or run locally with deciduous serve.
Browse the actual graph from building deciduous — 1,100+ nodes across DAG, timeline, and archaeology views.
Ask questions in plain English via POST /api/ask. Answers grounded in your graph. Full-text search with FTS5.
Navigate narratives as card stacks. Keyboard navigation (j/k/g/G/Space). See pivots and superseded approaches.
One command creates slash commands, skills, and project instructions that teach your AI assistant the workflow.
deciduous initdeciduous init --windsurfdeciduous init --opencodeA vocabulary for how software actually gets built: goal → options → decision → actions → outcomes. Observations attach anywhere. Revisits connect old approaches to new.
What to achieve
Approaches considered
Choice made
Work implemented
Result observed
Insight captured
Pivot point
Via Homebrew, Cargo, or pre-built binaries.
Creates 9 slash commands, 3 skills, and project instructions.
Use /decision-graph to build from existing commits.
Then just work normally — Claude logs decisions as you go.
Use /recover at the start of every new session.
Everything deciduous init installs. Commands are slash commands (/recover). Skills are contextual guides Claude follows.
| Name | Type | What It Does |
|---|---|---|
/decision-graph |
command | Build a decision graph from an existing repo's commit history. Analyzes commits, traces narratives, creates backdated nodes grounded in real evidence. |
/recover |
command | Recover context at session start. Queries nodes, edges, documents, commands, and git state. Audits for disconnected nodes. Reports what's active and what's next. |
/work |
command | Start a work transaction. Creates goal node with verbatim prompt before any code is written. Tracks actions and outcomes through to commit. |
/decision |
command | Full decision graph management. Add nodes, link edges, manage documents, sync with teammates, export DOT/PNG, generate PR writeups. |
/document |
command | Generate comprehensive documentation for a file or directory. Shakes the tree — traces callers, finds tests, maps dependencies. |
/sync |
command | Multi-user sync. Pull teammate events, rebuild local DB, push your changes. Event-based, append-only, git-mergeable. |
/serve-ui |
command | Start the web viewer at localhost:3000. Auto-refreshes. DAG, timeline, chains, archaeology, and Q&A views. |
/sync-graph |
command | Export graph to docs/graph-data.json for GitHub Pages deployment. |
/build-test |
command | Build the project and run the test suite. |
deciduous remote watch |
cli | Connect to the shared server's event stream and print one line per write, quoting the node's title and branch. Reconnects on close. --types, --branch, --edges, --json; --url prints the socket URL for another client. |
check_activity |
mcp | Who is writing to this workspace right now, on which branch, and the last node on each of the twenty most recently written branches (branches: N for more). Call it before a burst of writes. |
pulse |
skill | Map the current state as decisions. Pick a scope, read the code, ask "what decisions define this?", build goal → options → decisions. deciduous pulse shows the summary. |
narratives |
skill | Maintain .deciduous/narratives.md — evolution stories for each subsystem. Identify pivots, track current state vs history, find evidence in commits. |
archaeology |
skill | Transform narratives into graph structure. Create backdated goals, use archaeology pivot to atomically create pivot chains, mark superseded paths, review timeline. |
New to deciduous? The tutorial walks through building a real decision graph from scratch, with live examples. Start the tutorial →
Deciduous was built with itself — 1,100+ decisions tracking its own development. Read the full story →