Building a Graph from Git History
Point your AI assistant at any repository. It reads the commits, traces the narratives, and builds a connected decision graph.
The /decision-graph Skill
This is deciduous's breakout feature. You type /decision-graph in Claude Code, and Claude does the rest. It reads your entire git log, identifies the major eras and architectural shifts in your project, and builds a fully connected decision graph with backdated nodes grounded in real commits.
No manual data entry. No forms to fill out. You point Claude at a repository, and it reconstructs the story of how that codebase came to be.
Let's watch it work on the snowflex project—an Elixir library for querying Snowflake databases that evolved through five major architectural shifts over 130 commits and four years.
b1c0e4e initial ODBC wrapper
8e4c0d4 add ConnectionPool
a7b2f1e module-based connection
...
Claude continues like this through the entire history, creating nodes for each major shift and connecting them with edges. The full snowflex graph ends up with 56 nodes and 66 edges, tracing every era from the first ODBC wrapper through the HTTP rewrite.
Under the Hood
Each step in the demo above is a real CLI command. Here's what each one does:
Creating Nodes with deciduous add
Every deciduous add command creates a typed node in the graph. The seven node types are:
| Type | Purpose | Example from Snowflex |
|---|---|---|
| goal | What you're trying to achieve | "Create an Elixir library for querying Snowflake" |
| option | A possible approach to explore | "Use Erlang ODBC driver to connect to Snowflake" |
| decision | Choosing which option to pursue | "How to connect Elixir to Snowflake?" |
| action | Implementation work | "Implement initial ODBC wrapper with single connection" |
| outcome | What resulted | "Working single-connection ODBC wrapper" |
| observation | Something noticed along the way | "Snowflake ODBC sessions expire after 4 hours idle" |
| revisit | Reconsidering a previous approach | "Reconsider ODBC as transport — switch to HTTP REST API" |
Metadata Flags
Each node can carry additional metadata through flags:
-c 90— Confidence score (0–100). How sure are you about this? Claude uses this to signal certainty when reconstructing history.--date "2019-06-15"— Backdate. For archaeology, this places the node at the right point in the timeline based on when the commit actually happened.--commit 3d3b8db— Commit link. Ties the node directly to a git commit. The web viewer will show the commit message, author, and date.-p "..."— Prompt. Captures the user's original request verbatim, useful for forward-logging sessions.
Connecting Nodes with deciduous link
Nodes alone are just a list. The graph's value is in its connections. Each deciduous link FROM TO creates a directed edge between two nodes:
deciduous link 1 2 -r "Goal leads to exploring ODBC approach"— connects the goal to the option it spawneddeciduous link 3 2 --edge-type chosen -r "ODBC was the only viable path"— marks the decision's chosen option with a rationale
The -r flag captures the rationale—the why behind the connection. This is what makes the graph useful for context recovery months later.
The /decision-graph skill reads your entire git history and identifies the major narratives—what got built, what got replaced, where the pivots happened. It creates backdated nodes grounded in real commits. Claude doesn't guess at motivations; it infers them from the code changes, commit messages, and the sequence of events in the log.