npm i -g decisionnode

One decision layer
for all your AI tools.

Record structured decisions once, search them from all your AI coding tools.
A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client.

Compatible with

Claude Code
Cursor
Windsurf
Antigravity
+ any MCP client

What happens under the hood

From recording a decision to the AI retrieving it in a future session.

1

A decision is made

During a conversation, you and your AI agree: "use our custom dropdown, not the native one." The AI records it via MCP, or you run decide add.

2

Stored as structured JSON

Not a line in a markdown file. A typed object with scope, rationale, and constraints.

{
id: "ui-009",
scope: "UI",
decision: "Use custom ScopeSelector instead of native datalist",
rationale: "Native datalists differ across browsers",
constraints: [ "Must match dark theme" ]
}
3

Embedded as a vector

The decision text is converted to a vector using Gemini's gemini-embedding-001 and stored locally in vectors.json.

4

Later: AI needs context

New session: "Build me a settings form with a dropdown." The AI calls search_decisions through MCP before writing code.

5

Cosine similarity match

The query is embedded and compared against stored vectors. Closest decisions come back with a similarity score.

ui-009: "Use custom ScopeSelector..." 94%
6

AI follows the decision

It sees ui-009 and uses ScopeSelector instead of a native datalist. The decision you made weeks ago is still there.

Retrieval is explicit — the AI calls the MCP tool to search. Decisions aren't injected into the system prompt.

What else it does

Beyond add and search — there's more under the surface.

Agent Behavior

Changes the search_decisions tool description sent to the AI. Strict makes it mandatory, relaxed leaves it to the AI's judgment.

Configurable Threshold

Set a minimum similarity score so irrelevant results get filtered out. Adjustable globally.

Global Decisions

Some decisions apply everywhere — "never commit .env files." Global decisions show up in every project's search.

History Tracking

Full audit log — what changed, when, and which tool did it. Shows the actual client name (e.g. claude-code, cursor) not just "MCP".

Conflict Detection

Before adding a decision, existing ones are checked at 75% similarity. Catches near-duplicates and contradictions.

Deprecate / Activate

Soft-delete a decision without losing its embedding. Reactivate it later and it's immediately searchable again.

Embedding Health

Check which decisions are missing embeddings and fix them. Keep your search index healthy.

Cross-Tool via MCP

Decisions are stored locally and exposed over MCP. Any compatible client reads the same data.

Setup guide →

Read the full docs →

Two interfaces, one store

The CLI is for you and your AI. The MCP server is for your AI and you. Both read and write to the same local data.

CLI

decide add, search, list, deprecate, export. Setup, maintenance, and direct interaction from your terminal.

CLI Reference →

MCP Server

9 tools over the Model Context Protocol. Works with Claude Code, Cursor, Windsurf, Antigravity, and more.

MCP Server docs →

Install

Install, initialize, and connect your AI.

1. Install the CLI
npm install -g decisionnode
2. Initialize in your project
cd your-project && decide init
3. Set up your Gemini API key (free)
decide setup
4. Connect to your AI (e.g. Claude Code)
claude mcp add decisionnode -s user decide-mcp

Restart your AI client after connecting.Setup for other clients →

Open source, MIT licensed

Everything runs locally. Decisions stay on your machine. The only external call is to Gemini's embedding API (free tier).

If you find it useful or have ideas, contributions are welcome.