goldfish
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@goldfish did we ever discuss the caching strategy?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š Goldfish
Start here (non-technical)
Easiest: open Claude Code and paste this:
Install goldfish for me from https://github.com/lucasjamesss/goldfish. Run its install.sh, then confirm it worked by running goldfish_status.
Or by hand (Mac, with the Claude app opened once): open Terminal (Cmd+Space, type "Terminal"), paste the install command from Install, press Enter, then quit Claude (Cmd+Q) and reopen it.
Check it worked: in a new chat, ask "Run goldfish_status." Each tier should report healthy or tell you what is missing.
Where your data lives: on your computer only. Curated notes are plain markdown files in ~/.goldfish/memory. Nothing is uploaded by goldfish. Whatever you ask Claude to save goes into those files, so don't ask it to save passwords or card numbers.
Platforms: macOS is supported. Linux works for Claude Code. Windows is not supported yet.
Remove it: bash ~/.local/share/goldfish/uninstall.sh. This unregisters goldfish and removes the install. Your notes and history are never deleted.
Unified memory for AI coding agents. One MCP server, three tiers, no more guessing which tool remembers what:
āāāāāāāāāāāāāāāāāāāāāāāā
your agent āāāāŗ ā goldfish (MCP) ā
āāāāāāāāāāāā¬āāāāāāāāāāāā
ā
āāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāā
ā¼ ā¼ ā¼
āāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāā
ā brain ā ā claude-mem ā ā memory_notes ā
ā full history ā ā session context ā ā curated facts ā
ā cited search ā ā auto-compressed ā ā hand-written ā
ā (vendored) ā ā (vendored) ā ā (new) ā
āāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāThree different jobs, three different tools, one thing you actually call:
Tier | Tool | What it answers | Backing store |
Transcript history |
| "did we ever discuss X" ā cited, never hallucinated | brain-mcp's DuckDB + append-only JSONL lake |
Session context |
| "what was I just doing" ā recent auto-generated summaries | claude-mem's SQLite store (read-only) |
Curated notes |
| "what do we know about this user/project" ā small, hand-picked, durable | plain frontmatter markdown, this repo |
Chat summaries |
| "what did we talk about last week" in chat apps that keep no transcripts on disk | same markdown store, |
Everything |
| is each tier actually installed and healthy | aggregates all three |
Goldfish doesn't replace brain-mcp or claude-mem ā it vendors them as-is and gives you one server to point an agent at instead of three. See ATTRIBUTION.md for full upstream credit and licenses.
Related MCP server: akasha-mcp
Noticing patterns (optional, and deliberately hands-off)
Goldfish can also help notice your own recurring patterns over time ā frustrations, habits, stated drives, things you keep saying you should do more or less of. The goal is that file is worth reading yourself: given enough real sessions, it should eventually surface something about your own patterns you hadn't consciously put together before. An agent using goldfish can also draw on it, when it's genuinely relevant, to let that shape how it talks to you ā but you reading it directly is just as much the point as any AI doing so. This isn't a hidden feature; here's exactly how it works and where the line is:
goldfish_reflectpulls raw, cited excerpts of things you've said (role="user"only ā never the agent's own words) across your full history. It runs a small default battery of angles (frustration, habit, drive, goal language), or one specificfocusyou give it.It never concludes anything itself ā no keyword-matched "you seem stressed" heuristics. Turning evidence into an actual observation is left to whichever LLM is using the tool, because that's the only part of this that requires real judgment.
If a pattern holds up across real evidence, the agent can write it with
goldfish_remember(type="insight", ...)ā a note type distinct from plainuserfacts specifically because insights are interpretive and should be revisited over time, not treated as settled truth.Every
insightnote also gets folded intoPERSONA.md, one evolving, plain-English document that accumulates everything noticed this way.goldfish_personareads it back in one call for an agent ā but it's just a markdown file at~/.goldfish/memory/PERSONA.md, so open it yourself whenever you want (uv run goldfish personaprints it straight to your terminal). That's exactly why it's held to a higher bar than a plain fact: tentative, cited, and meant to be pruned as it ages, never treated as a verdict ā it has to be worth you reading, not just an agent.Whether and when to draw on any of this ā
goldfish_reflect,goldfish_persona, or aninsightnote ā is left entirely to the calling agent's judgment. The server's own instructions say so explicitly: rare, well-placed, tied to real evidence, never a running commentary on who you are. Nothing here is forced into every response.Everything stays local.
PERSONA.mdand everyinsightnote live in the samememory_notesstore as everything else (~/.goldfish/memoryby default) ā never inside this repo, never committed, never sent anywhere.goldfish_reflectonly ever runs when an agent decides to call it; there's no background job scanning your history for this.
Don't want this at all? Just don't use goldfish_reflect, goldfish_persona,
or type="insight" ā everything else works exactly the same without it.
Install
Paste this repo's link to Claude Code and say "use this" ā it'll run the installer itself. Or run it yourself:
curl -fsSL https://raw.githubusercontent.com/lucasjamesss/goldfish/f897e40512b9cd6fd025ea0001bd7aa5837ed8b9/install.sh | GOLDFISH_REF=f897e40512b9cd6fd025ea0001bd7aa5837ed8b9 bashThat command is pinned to one exact, reviewed version of goldfish (the long code in it), so later edits to this repo can't change what you install. It clones goldfish, syncs its Python env, and registers it with every Claude client it finds ā restart Claude afterward and the tools are live. Re-running it is safe (idempotent).
Claude Code: turns on brain-mcp's transcript-capture hooks and runs
claude mcp add. Full cited history search works.Claude desktop app (any plan, free included): merges goldfish into
claude_desktop_config.json(old file backed up as.json.bak). The chat app keeps no transcripts on disk, so memory there is what Claude saves: facts viagoldfish_remember, conversation summaries viagoldfish_save_chat, both found again bygoldfish_search. The installer prints a line to paste into Settings > Profile so Claude does this every chat.
Handing it to a friend who doesn't code
They need a Mac with the Claude app installed and opened once. Have them open Terminal (Cmd+Space, type "Terminal"), paste the command above, press Enter, then quit Claude (Cmd+Q) and reopen it. That's it.
Prefer to wire it up by hand instead? See manual setup below.
claude-mem's own hooks/worker aren't installed by the script ā that's a
separate project with its own setup. goldfish_context just reads its
database read-only if you've already installed it yourself; see
packages/claude-mem/README.md.
Manual setup
git clone https://github.com/lucasjamesss/goldfish.git
cd goldfish
git checkout f897e40512b9cd6fd025ea0001bd7aa5837ed8b9
uv sync
uv run --directory packages/brain brain-mcp install cc # optional: transcript capture hooks
claude mcp add goldfish -s user -- uv run --directory "$(pwd)" goldfish serveOr hand-edit your MCP config (e.g. ~/.claude.json or a project .mcp.json):
{
"mcpServers": {
"goldfish": {
"command": "uv",
"args": ["run", "--directory", "/path/to/goldfish", "goldfish", "serve"]
}
}
}CLI
uv run goldfish status # health across all 3 tiers
uv run goldfish remember my-note "one-liner" --type project --content "..."
uv run goldfish recall --query "my-note"
uv run goldfish reflect --focus "decisions I keep reversing" # raw cited evidence, no synthesis
uv run goldfish persona # print the accumulated PERSONA.mdRepo layout
goldfish/
āāā goldfish/ # the unifying MCP server + CLI (new)
āāā memory_notes/ # curated-note store: frontmatter .md + index (new)
āāā packages/
ā āāā brain/ # vendored from mordechaipotash/brain-mcp (MIT)
ā āāā claude-mem/ # vendored from thedotmack/claude-mem (Apache-2.0)
āāā ATTRIBUTION.md
āāā LICENSE # MIT, covers goldfish/ + memory_notes/ onlyRoadmap
Rough priority order, none of this started yet unless marked:
One-command install (
install.shā clone, sync, hooks,claude mcp add)install.shalso registers goldfish for Codex (~/.codex/config.toml), not just Claude Codeuninstall.shā clean removal (hooks, scheduler, Claude Code + desktop registration); notes and history are keptgoldfish uninstallas a CLI subcommand, so it works without the scriptPackage goldfish as an installable Claude Code plugin (marketplace
.mcp.json+hooks.json) instead of raw MCP config editingOptional claude-mem auto-install path in
install.sh, for people who wantgoldfish_contextpopulated out of the boxgoldfish_remembercommitsmemory_notes/to a local git repo automatically, so curated notes get real version historySemantic (embedding) search over curated notes and recent context, not just brain's BM25 over raw transcript
Surface brain's other capture lanes (Cursor, ChatGPT, Pi) through
goldfish_statusmore prominently ā the data's already there, just under-exposedA small local dashboard to browse all three tiers side by side, for people who don't want to think in tool calls
goldfish_reflect+type="insight"ā cited evidence of the user's own recurring language, synthesized only by the calling agent, surfaced rarely and only in-contextLet
goldfish_reflectrun on an opt-in schedule instead of only when an agent calls it (still local-only, still no auto-surfacing)Auto-expire or flag stale
insightnotes so pattern-observations don't calcify into permanent "truth"
Have an idea or a use case this doesn't cover? Open an issue.
Why
Most setups end up with two or three memory tools installed for different reasons (a transcript recorder, a session-compression plugin, some markdown notes) and no single place to ask "what do we know." Goldfish is that single place ā a thin, honest layer on top of tools that already do the hard parts well.
Available Tools
7 toolsgoldfish_contextRecent session-compression summariesCRead-only
Recent session-compression summaries from claude-mem, if installed.
Inputs: limit. Returns: object
goldfish_personaPersona evaluation ā everything learned about the user so farARead-only
The cumulative persona file: every insight note, aggregated into one document.
Entirely optional and at your own discretion ā nothing requires you to call this or to use what it returns. It exists so a capable agent can occasionally draw on real, evidence-linked patterns about the user built up over goldfish_reflect calls over time ā to shape tone, or catch something worth mentioning ā the way a good long-term collaborator would.
Every entry traces back to cited evidence (see goldfish_reflect); nothing here is a diagnosis, and entries are meant to be revisited as they age, not treated as permanent truth. Use judgment about whether and when surfacing something from this file actually helps the user in the moment ā this is not a mandate to comment on who they are.
Inputs: no named parameters. Returns: object
goldfish_recallRead or search curated memory notesBRead-only
Read a curated memory note by name, or search/list curated notes.
Inputs: name, type, query. Returns: object
goldfish_reflectGather raw cited evidence of the user's own recurring languageARead-only
Evidence for behavioral/preference patterns ā never this tool's own conclusion.
Searches role='user' only (their words, not the agent's) across full transcript
history via brain. Pass focus for one specific angle (e.g. "decisions I keep
reversing"); omit it to run a default battery covering frustration, habit, drive,
and goal language.
This tool does not diagnose, summarize, or conclude anything about the user ā it hands back excerpts with citations, same as goldfish_search. Turning that into an actual observation ā and judging whether it's even worth keeping ā is the calling agent's job. If a real pattern shows up across multiple citations, write it with goldfish_remember(type="insight", ...), phrased as tentative pattern-noticing anchored to the evidence, never as a firm psychological claim. Mention it in conversation rarely, only when it's genuinely useful in the moment ā this is not a running personality commentary.
Inputs: focus, limit_per_query. Returns: object
goldfish_rememberWrite a curated, durable memory noteA
Write a curated, durable memory note (user/feedback/project/reference/insight).
Use this for facts worth carrying into future sessions ā not for raw transcript (that's captured automatically by brain) or session summaries (that's claude-mem's job) ā only hand-picked, still-true facts.
type="insight" is for tentative, evidence-linked pattern observations about the user (see goldfish_reflect) ā distinct from type="user" (settled facts) because insights are interpretive and should be revisited/pruned over time, not treated as permanent truth.
Inputs: name (required), type (required), content (required), description (required). Returns: object
goldfish_searchSearch full transcript history (cited or abstained)BRead-only
Search full AI conversation history (Claude Code, Codex, etc.) via brain-mcp.
Every result is a citation (file, line span, sha256) verifiable with the underlying brain-mcp toolset ā never a synthesized/paraphrased claim.
Inputs: query (required), agent, limit. Returns: object
goldfish_statusHealth across all three memory tiersBRead-only
Health summary across all three memory tiers.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogā¦
TDQS
Scored across 7 tools
The seven tools map onto three distinct memory tiers (raw transcript, session summaries, curated notes), and read/write roles for notes are cleanly split between goldfish_recall and goldfish_remember. The main overlap is goldfish_search vs goldfish_reflect, which both query brain transcript history; descriptions differentiate them (reflect is restricted to role='user' and pattern-oriented), but an agent could still misselect between them.
All tools use a consistent goldfish_ prefix with snake_case, which is highly predictable. However, the suffix is a mix of verbs (search, recall, remember, reflect) and resource nouns (context, persona, status), so it is not a strict verb_noun pattern.
Seven tools is well-scoped for a three-tier memory server, with each tool earning its place across search, summarization, note read/write, reflection, aggregation, and health. No obvious redundancy or bloat.
The surface covers read/search, write, aggregation, and health across all three memory tiers. The one notable gap is the absence of a delete/prune or update operation for curated notes, despite the descriptions explicitly saying insights should be revisited and pruned over time.
Maintenance
Related MCP Connectors
Team memory for AI coding agents and code reviews, reviewed by humans and served over MCP.
shared AI-context layer for teams ā persistent memory your agents search and update over MCP
Long-term memory for AI coding agents: durable project facts, recalled by every MCP client.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides persistent memory for AI coding agents via MCP, enabling teams to share and recall facts across sessions. Automatically captures, classifies, and curates knowledge from supported transcript sources.1834 npm1AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceGives coding agents a persistent memory by searching a local, read-only index of existing markdown and letting them write findings back as notes that the next session can retrieve. It serves ranked, context-sized results over MCP, injects standing conventions at session start, and keeps data on your machine with secret redaction and archive-only deletion.151 PyPIMIT
- AlicenseNot gradedqualityAmaintenanceGives AI agents persistent, shared memory by ingesting notes, code, transcripts, and session captures, then serving token-optimized context and hybrid keyword/semantic search over MCP and REST. Agents can classify, promote, and synthesize stored material so each session builds on prior work instead of starting from zero.10 npmMIT
- AlicenseAqualityCmaintenanceA local MCP server that lets coding agents persist decisions, conventions and gotchas across sessions and recall them with ranked search. Each memory is anchored to the files it describes, so recall flags it as stale when that code changes, and secrets are redacted before anything is stored.52MIT