Every conversation with Claude gets its own decision tree. When a session starts, a root goal node is created. Every node added during that conversation is automatically associated with the session – no manual bookkeeping. When the conversation ends, an optional summary captures what was accomplished.
The result: each conversation produces a self-contained, queryable record of what was discussed, decided, and built.
Start – start_session creates a root goal node and returns a session ID
Work – all add_node calls auto-associate with the active session
End – end_session marks the session complete with an optional summary
Session lifecycle
Claude
start_session({
name: "auth refactor",
goal_title: "Refactor authentication to use OAuth2",
goal_prompt: "I need to replace our custom JWT auth with OAuth2..."
})
Pick up where you left off. Use list_sessions to find previous conversations, then resume_session to reconnect. New nodes continue building on the same decision tree.
The active session ID is written to .deciduous/active_session on disk. When the MCP server starts (or restarts – Claude Desktop and Claude Code may kill and re-spawn the server process), it reads this file and automatically resumes the active session. No manual intervention needed.
If the session was already ended, the stale file is cleaned up automatically.
Claude Desktop users get a persistent decision graph across every conversation. The MCP config points DECIDUOUS_DB_PATH at a single .deciduous/deciduous.db file. Every conversation – whether it runs for five minutes or five hours – writes to the same database.
This means you can ask Claude in a new conversation about decisions made in previous ones. The graph is the memory layer that outlasts any single chat.
The auth refactor (Session #3) considered two options: Auth0 and self-hosted Keycloak. Auth0 was chosen at 85% confidence because it's a managed service and faster to ship. The implementation included OAuth2 flow with PKCE, and all tests are passing.
The database is the single source of truth. Sessions organize it by conversation. Search and trace work across all of them.
Returns all 7 nodes -- I can see the GitHub rate limit observation from Monday
Claude
I can see from the previous session that NextAuth is set up with Google working, and there was a GitHub OAuth rate limit issue. Now that you've registered the app, let me update the config and add email/password support.
Node #8 created -- automatically part of session #1
Claude
add_node({ node_type: "action", title: "Add NextAuth CredentialsProvider for email/password" })
Node #9 created
Claude
add_node({ node_type: "outcome", title: "All three auth methods working - Google, GitHub, email/password" })
Node #10 created
Claude
end_session({ summary: "GitHub OAuth fixed with registered app. Email/password added via CredentialsProvider. All three auth methods tested and working." })
The decision tree now contains the full story: what was tried, what worked, what needed a second pass, and why. Any future session can query this history without having been part of either conversation.