Skip to main content
Glama

🐠 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

goldfish_search

"did we ever discuss X" — cited, never hallucinated

brain-mcp's DuckDB + append-only JSONL lake

Session context

goldfish_context

"what was I just doing" — recent auto-generated summaries

claude-mem's SQLite store (read-only)

Curated notes

goldfish_remember / goldfish_recall

"what do we know about this user/project" — small, hand-picked, durable

plain frontmatter markdown, this repo

Chat summaries

goldfish_save_chat

"what did we talk about last week" in chat apps that keep no transcripts on disk

same markdown store, type: chat

Everything

goldfish_status

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_reflect pulls 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 specific focus you 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 plain user facts specifically because insights are interpretive and should be revisited over time, not treated as settled truth.

  • Every insight note also gets folded into PERSONA.md, one evolving, plain-English document that accumulates everything noticed this way. goldfish_persona reads 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 persona prints 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 an insight note — 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.md and every insight note live in the same memory_notes store as everything else (~/.goldfish/memory by default) — never inside this repo, never committed, never sent anywhere. goldfish_reflect only 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 bash

That 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 via goldfish_remember, conversation summaries via goldfish_save_chat, both found again by goldfish_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 serve

Or 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.md

Repo 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/ only

Roadmap

Rough priority order, none of this started yet unless marked:

  • One-command install (install.sh — clone, sync, hooks, claude mcp add)

  • install.sh also registers goldfish for Codex (~/.codex/config.toml), not just Claude Code

  • uninstall.sh — clean removal (hooks, scheduler, Claude Code + desktop registration); notes and history are kept

  • goldfish uninstall as a CLI subcommand, so it works without the script

  • Package goldfish as an installable Claude Code plugin (marketplace .mcp.json + hooks.json) instead of raw MCP config editing

  • Optional claude-mem auto-install path in install.sh, for people who want goldfish_context populated out of the box

  • goldfish_remember commits memory_notes/ to a local git repo automatically, so curated notes get real version history

  • Semantic (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_status more prominently — the data's already there, just under-exposed

  • A 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-context

  • Let goldfish_reflect run 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 insight notes 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 tools
goldfish_contextRecent session-compression summariesC
Read-only

Recent session-compression summaries from claude-mem, if installed.

Inputs: limit. Returns: object

goldfish_personaPersona evaluation — everything learned about the user so farA
Read-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 notesB
Read-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 languageA
Read-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_statusHealth across all three memory tiersB
Read-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

    A3.6/5.0

    Scored across 7 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Provides 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.
      18
      34 npm
      1
      AGPL 3.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Gives 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 PyPI
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Gives 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 npm
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      A 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.
      5
      2
      MIT