Deciduous
Decision graph tooling for AI-assisted development. Track every goal, decision, and outcome. Survive context loss. Query your reasoning.
See It In Action
Browse the Live Decision Graph — 970+ decisions from building deciduous itself
Interactive Tutorial — Learn the workflow in 15 minutes
Watch the Demo — Full session walkthrough
The Problem
You're building software with AI assistance. The LLM generates complex code fast. But then:
- Sessions end. Context compacts. The LLM loses memory of what was tried.
- Decisions evaporate. Six months later, no one remembers why you chose approach A over B.
- PRs become incomprehensible. A 50-file diff tells you what changed, not why.
- Onboarding is archaeology. New teammates reverse-engineer decisions from code.
The code tells you what. But decisions tell you why.
The Solution
Deciduous creates a persistent, queryable graph of every decision made during development. Log decisions in real-time—as they happen—and they survive session boundaries, context compaction, and human memory.
979 nodes • 838 edges • Real development history from building this tool
Both you and your AI assistant can:
- Query past reasoning before making new decisions
- See what was tried and what was rejected
- Trace any outcome back to the goal that spawned it
- Recover context after sessions end or memory compacts
This isn't documentation written after the fact. It's a real-time record of how software gets built.
Quick Start
# Install
# Initialize in your project
# Start logging decisions
# View the graph
That's it. Your first decision graph is live.
The Workflow
BEFORE you do something → Log what you're ABOUT to do
AFTER it succeeds/fails → Log the outcome
CONNECT immediately → Link every node to its parent
Example Session
# Starting a new feature
# Making a choice
# Considering options
# Implementing the chosen approach
# Recording the outcome
# Sync for GitHub Pages
Session Recovery
When context compacts or you start a new session:
The graph remembers what you don't.
Two Modes: Now & History
Every system has two stories:
| Mode | Question | Skill |
|---|---|---|
| Now | "How does this work?" | /pulse |
| History | "How did we get here?" | /narratives |
/pulse - Map Current Design
Take the pulse of a system - what decisions define how it works TODAY.
Output: Decision tree of the current model. No history, just the design.
/narratives - Understand Evolution
Understand how the system evolved. Narratives are conceptual, not tied to commits.
**Current state:** JWT for API, sessions for web.
**Evolution:**
1. 2.3.
**Connects to:** "Rate Limiting"
Output: .deciduous/narratives.md with evolution stories and pivots.
The Revisit Node
When a design approach is abandoned and replaced:
Revisit nodes connect old approaches to new ones, capturing WHY things changed.
Viewing the Graph
Web Viewer
Four visualization modes:
| View | Purpose |
|---|---|
| Chains | Decision chains by session—see the story of a feature |
| Timeline | Chronological view merged with git commits |
| Graph | Force-directed interactive visualization |
| DAG | Hierarchical goal→decision→outcome flow |
Features: branch filtering, node search, click-to-expand details, auto-refresh.
Terminal UI
Vim-style navigation with syntax-highlighted file previews:
| Key | Action |
|---|---|
j/k, gg/G |
Navigate |
Enter |
Toggle detail panel |
/ |
Search |
f |
Filter by type |
b |
Filter by branch |
o |
Open file in editor |
O |
View linked commit diff |
s |
Show goal story tree |
Node Types
| Type | Purpose | Example |
|---|---|---|
goal |
High-level objective | "Add user authentication" |
decision |
Choice point | "Choose auth method" |
option |
Approach considered | "Use JWT tokens" |
action |
Implementation step | "Added JWT middleware" |
outcome |
Result | "Auth working in prod" |
observation |
Discovery or insight | "JWT tokens too large for mobile" |
revisit |
Pivot point—connects old approach to new | "Reconsidering token strategy" |
Node Status
| Status | Meaning |
|---|---|
active |
Current truth—how things work today |
superseded |
Replaced by a newer approach |
abandoned |
Tried and rejected—dead end |
Edge Types
| Type | Meaning |
|---|---|
leads_to |
Natural progression |
chosen |
Selected this option |
rejected |
Did not select (with reason) |
requires |
Dependency |
blocks |
Preventing progress |
enables |
Makes possible |
supersedes |
New approach replaces old (via revisit) |
Graph Maintenance
Made a mistake? Fix it:
# Remove an edge
# Delete a node (cascades to connected edges)
# Preview before deleting
Multi-User Sync
Share decisions across teammates. Each node has a globally unique change_id (UUID):
# Export your branch's decisions
# Apply patches from teammates (idempotent)
# Preview before applying
PR Workflow
- Create nodes while working
- Export:
deciduous diff export -o .deciduous/patches/my-feature.json - Commit the patch file (not the database)
- PR includes the patch; teammates apply after merge
GitHub Pages Deployment
deciduous init creates workflows that deploy your graph viewer automatically:
Enable Pages: Settings > Pages > Source > gh-pages branch
Your graph is live at https://<user>.github.io/<repo>/
Keeping Claude Integration Updated
When deciduous releases new features, your existing projects can get the latest integration files:
# Check if an update is needed
# Update integration files
The update command overwrites the following files:
| Files | What's Updated |
|---|---|
.claude/commands/*.md |
Slash commands (/decision, /recover, /work) |
.claude/skills/*.md |
Skills (/pulse, /narratives, /archaeology`) |
.claude/hooks/*.sh |
Enforcement hooks |
.claude/agents.toml |
Subagent configurations |
CLAUDE.md |
Decision Graph Workflow section (preserves custom content) |
Not touched: .claude/settings.json, .deciduous/config.toml, docs/ - your configs stay intact.
Automatic Version Checking
The check-update command compares .deciduous/.version with the binary version:
Add this to your session start routine to catch updates automatically.
The Premises
-
Decisions are the unit of institutional knowledge. Code tells you what, but decisions tell you why. Six months from now, you won't remember why you chose Redis over Postgres for that cache. The graph will.
-
Structured thinking produces better outcomes. The act of logging a decision—naming it, assigning confidence, connecting it to goals—forces you to think it through.
-
Real-time logging beats retroactive documentation. Capture reasoning in the moment. By the time you write post-hoc docs, you've forgotten the options you rejected.
-
Graphs beat documents. Goals spawn decisions, decisions spawn actions, actions produce outcomes. A graph captures these relationships. You can trace any outcome to its origin.
-
Complex PRs tell a story. A 50-file diff is incomprehensible. A decision graph shows the goal, the key decisions, the rejected approaches, and how each change connects to purpose.
-
Context loss is inevitable. Sessions end. Memory compacts. The graph survives.
-
The graph is a shared workspace. Decisions flow between sessions, between humans and AI, between teammates. The graph doesn't care who's typing—it preserves the reasoning.
Commands Reference
# Initialize
# Add nodes
# Node options
|
# Connect and disconnect
# Delete nodes
# Query
# Visualize
# Export
# Multi-user sync
# Shell completion
Building from Source
macOS Note
The syntect crate requires libiconv:
Who Uses Deciduous
You, the developer:
- Think through decisions by structuring them
- Remember why you made choices months later
- Review PRs by understanding the decision flow
- Onboard to codebases by reading decision history
Your AI assistant:
- Recover context after compaction or session boundaries
- Build on previous reasoning instead of starting fresh
- Leave a queryable trail for future sessions
Your team:
- Share decision context via patch files
- Review PRs with full visibility into reasoning
- Build institutional knowledge that survives turnover
Why "deciduous"?
It almost has the word "decision" in it, and they're trees.