Agents forget. Poppy remembers.
Two commands give your AI memory: install Poppy, then connect your agent. Every coding agent on your machine reads the same store: capture a decision in your terminal, recall it in Cursor, keep it when you switch models. Free, local-first, Apache-2.0.
Install, connect, remember, recall
Nothing to configure. Poppy keeps its memory store in ~/.poppy. Cloud sync is one extra command, off by default.
$ pipx install poppy-memory
$ poppy setup claude-code
Poppy is ready. Restart claude-code to activate.
$ poppy remember --type preference "prefer pnpm in monorepos"
Remembered (preference): prefer pnpm in monorepos
$ poppy recall "monorepos"
prefer pnpm in monorepos
preference | 2026-09-28 | score: 2.47
# the same store, from every tool wired above.
$ poppy serveInstall. Installs via pipx. Python 3.11+. Isolated in its own virtualenv.
Connect. One command per tool. Safe to re-run, safe to commit to your dotfiles and run in CI.
Remember. Say it in plain prose. Override with --type or --project.
Recall. Recall from your shell, Claude Code, Cursor, or Codex, all reading one store.
Every record is one small row
Six fields that matter, and no schema to maintain. You write the sentence, and Poppy fills in the id, project, source and time. Provenance follows the memory wherever it goes.
The format. A memory as Poppy stores it. A memory is a decision you made and the reason, a fact that stays true, a preference for how you want work done, or a lesson that cost you once.
What Poppy added. You typed the sentence and picked its type. Poppy filled in the id, the project, the source and the time, so the provenance travels with the memory wherever it goes.
- id
- mem_512d64f6a1e8
- type
- lesson
- content
- Integration tests only go flaky when they share one seeded database. Give each test file its own schema and the random failures stop.
- project
- checkout
- source
- claude-code
- captured
- 2026-06-24
Eleven integrations, one command each
Poppy is MCP-native, so any agent that speaks MCP can read the memory. Below are the ones Poppy ships first-class setup for. The rest is one MCP entry away.
- Claude CodeAnthropic · CLI
poppy setup claude-codeMCP entry, lifecycle hooks, and a primer block in
~/.claude/CLAUDE.md. Memory survives /clear and /resume. - Claude DesktopAnthropic · macOS, Windows
poppy setup claude-desktopWrites the desktop MCP config, then prints a primer you paste into settings once.
- CodexOpenAI · CLI
poppy setup codexStdio entry in
~/.codex/config.toml, capture hooks, and anAGENTS.mdprimer. Codex asks you to trust the hooks once. - Copilot CLIGitHub · CLI
poppy setup copilot-cliMCP config plus the primer at
~/.copilot/copilot-instructions.md, the file Copilot CLI loads on its own. - CursorIDE
poppy setup cursorMCP entry into
~/.cursor/mcp.json, plus lifecycle hooks in~/.cursor/hooks.json. - Gemini CLIGoogle · CLI
poppy setup geminiAdds the Poppy server to
~/.gemini/settings.jsonand leaves the rest of that file alone. MCP only. - GooseBlock · agent
poppy setup gooseRegistered as a Goose extension plus a
.goosehintsprimer for tool discovery. - Hermes AgentNous Research
poppy setup hermes-agentDrops a memory provider plugin into
~/.hermes/plugins/poppyand points the config at it. - Pibadlogic · agent
poppy setup piWires MCP through the
pi-mcp-adaptershim, with anAGENTS.mdprimer beside it. - VS CodeMicrosoft · IDE
poppy setup vscodePoppy entry in the user-profile
mcp.json. MCP only, no primer. - WindsurfCodeium · IDE
poppy setup windsurfMCP only. One command writes
~/.codeium/windsurf/mcp_config.json, no primer. - Any MCP agentprotocol
poppy serveIf your agent speaks MCP, point it at
poppy serveand it can read or write the memory. No SDK required: MCP is the API.
The protocol. MCP is the open protocol AI tools use to reach software outside themselves. Poppy speaks it, so anything that does reads the same local store, without an SDK in between.
Safe to re-run. Every setup command can be re-run. It writes the same config it wrote last time, which is what makes it safe to commit to dotfiles and to run in CI.
Your memories live where you do.
Poppy reads and writes a single SQLite database at ~/.poppy/memories.db. Lexical recall through FTS5, semantic recall through an on-device embedding model, reranked by a local cross-encoder.
The cloud is opt-in. Run poppy setup trags to sync to your account on trags.ai and see the same memories on every machine, plus a web dashboard with edit and provenance views.
You can stop syncing whenever, and the local store keeps working unchanged. Delete the file and the local store is gone. Removing the agent integrations is a separate step, and anything you synced stays in Trags until you delete it there.
In short. Every query runs on your machine. No network, no API key, no per-query cost, and nothing leaves the file until you turn on sync.
L1Your machine~/.poppy/memories.dbSQLite + FTS5 + bge-smallL2MCP serverpoppy serveMCP over stdioL3Tragstrags.aiSupabase · device-code auth
Give your AI memory.
One line to install, local forever if you want. Turn on Trags sync the day you don't.
pipx install poppy-memory