Local-first memory for AI

One memory.
Every AI.

Tell ChatGPT a decision today — Cursor knows it tomorrow. thinktank gives every AI you use one shared, private brain. No cloud. No account.

100% free & open-source · local-first · MIT · no account, no cloud
move your cursor — watch the memory light up
The proof

Decide once. Every agent remembers.

How a thinktank session plays out: a decision made in ChatGPT on Monday is recalled — semantically — by Cursor on Tuesday. Secrets are stripped before storage. A later, conflicting decision supersedes the old one.

~/.thinktank — one local brain
Why it matters

Your AI memory is trapped in silos.

Every tool has "memory" now — but it's locked inside that one tool. None of them talk to each other. You re-explain yourself all day.

cloud · claude only
Claude Projects
✕ isolated
file · one project
CLAUDE.md
✕ isolated
file · one project
.cursorrules
✕ isolated
cloud · chatgpt only
ChatGPT Memory
✕ isolated
sdk · you wire it
Memory SDKs
✕ dev work
thinktank is the one brain that connects all of them.
How it works

Capture once. Merged into one timeline.

Raw chat goes in; clean, deduplicated, conflict-resolved memory comes out — and any agent can retrieve it.

01

Capture

Coding agents write over MCP. Web chats import via a browser button or an export file — sent only to localhost.

02

Redact

Every ingest path strips API keys, tokens, and credentials before anything is embedded or stored.

03

Merge

Distilled into atomic memories — decision, fact, preference, constraint, state, code. Dupes removed, conflicts resolved.

04

Store

One local SQLite file at ~/.thinktank. Private by design.

05

Retrieve

Hybrid semantic + keyword search returns a small, token-budgeted set. Signal, not 50k tokens of history.

Built right

Private by default. Smart by design.

Local-first & private

The extension and server talk to 127.0.0.1 only. No telemetry, no account. Optional AES-256-GCM encryption at rest.

Every tool, one brain

Cursor, Claude Code, and Codex connect over MCP. ChatGPT and Claude.ai import via the browser button. New MCP tool? It just works.

Smart retrieval

On-device embeddings (all-MiniLM-L6-v2) + vector KNN + keyword FTS. Agents get a tight, token-budgeted slice — not your whole history.

No native build step

Built on Node's node:sqlite + sqlite-vec. No compilation, no C++ toolchain. Runs out of the box.

Merge, not pile

Conflicts resolve automatically — newest wins, older is marked superseded and logged. One clean timeline, not a junk drawer.

Secrets never leak

API keys, AWS keys, private keys, credentialed URLs, and KEY=secret pairs are redacted on every path before embedding or indexing.

Open source

100% free. 100% yours.

thinktank is fully open-source under the MIT license — the whole thing runs on your machine. No paid tier, no hosted lock-in, no account. Clone it, read it, fork it, ship it.

Quick start

Install in seconds. Every agent wired.

thinktank runs straight from the repo — no install, no account. Clone it, build once, point it at your agents, then run the local server for the browser button.

# clone + build (one time)
$ git clone https://github.com/ahkamboh/thinktank
$ cd thinktank && pnpm install && pnpm -r build
# point thinktank at your agents
$ node packages/cli/dist/cli.js setup --cursor --claude --codex
# run the local server for the browser button
$ node packages/cli/dist/cli.js serve --http → localhost:4319
# npm package (npx @thinktank/cli) — coming soon

Or paste this into Claude Code · Cursor · Codex — or any AI agent — and it sets thinktank up for you:

# paste me into your agent ↓ You are helping me set up thinktank — a local-first memory layer that gives all my AI tools one shared, private brain (github.com/ahkamboh/thinktank). It runs 100% on my machine; nothing leaves my device. Set it up: 1. clone + build: git clone https://github.com/ahkamboh/thinktank then cd thinktank && pnpm install && pnpm -r build 2. wire thinktank's MCP into my agents (drop any I don't use): node packages/cli/dist/cli.js setup --cursor --claude --codex 3. run the local server for the browser-extension button: node packages/cli/dist/cli.js serve --http (localhost:4319) 4. verify: save a test memory, then recall it in a fresh prompt. Ask me first if a step needs my input.
Stop repeating yourself

Stop re-explaining yourself to every AI.

Free forever · MIT · runs 100% on your machine