memory-boost

io.github.arnaugonzalezPublished by GitHub account arnaugonzalezv0.2.1Updated Nov 11, 2026

Markdown memory for coding agents that audits itself: drift reports and session digests.

The publisher's own server: Memory.fit

VerifiedSTDIODesktop onlyKnowledge & MemoryDeveloper Tools

Overview

AI-generated overview

Local markdown memory wiki for coding agents, with search, session checkpoints and drift reports on what the memory got wrong.

What you can do
  • Orient and search memory: load a cheap project brief, full-text search wiki pages and log entries, read a page or one section
  • Record sessions and ideas: save a session event plus log entry, append a dated one-line idea to a page
  • Track working state: save a checkpoint that survives context compaction, resume it and see other active sessions on the project
  • Audit memory: report expired decisions, superseded decisions without a successor, silent projects and open checkpoints
  • Share lessons across projects: record a lesson with stack tags so matching projects get it in their brief
When to use it
Useful when an agent works on several projects over time and you want durable, hand-editable notes it can recall, plus a periodic check of which recorded decisions have gone stale or which projects went quiet.
Requirements
Runs locally as a stdio process from the PyPI package memory-boost, launched with uvx or installed with uv or pipx; uv must be on PATH for the plugin. Data lives under a memory home directory by default. Optional semantic recall needs the semantic extra and a local Ollama model. Linux and macOS; Windows untested.
Before you install
The wiki is read by agents as instructions, so only point it at a wiki you trust. The optional HTTP mode binds to loopback and has no authentication. Session hooks write automatic checkpoints from transcripts, including your prompts minus private-tagged spans. The transcript mining reads local Claude Code transcripts, though it reports aggregates only. Some tools and fields are marked experimental and may change.

Installation

In SourceWeft

  1. Open memory-boost in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[memory-boost: memory for coding agents that reviews itself. A markdown wiki your agents read and write over MCP, plus drift reports on what went stale]

memory-boost

Memory for coding agents that reviews itself.

[CI] [License: MIT] [Python 3.11+]

Try it · What it answers · Connect your agent · How it works · vs. alternatives

Your agents write everything down. Nobody reads it back.

Every memory tool for coding agents helps them remember more. None of them mention that half of what they remember expired in July. memory-boost keeps a plain-markdown memory your agents read and write over MCP, and then does the unglamorous part: it audits that memory and your own sessions, and tells you what drifted. Politely, with numbers.

Think of it as a code review for what your agents remember and a fitness tracker for how you work with them. Mostly the fitness tracker: mine told me my most-failed command was cd. Sixty-nine times.

What it answers

You wonder…memory-boost answers
Which decisions quietly expired while we were busy shipping?drift: review_by 2026-07-08, 78 days ago
Which "active" projects actually died months ago?drift: last session 161 days ago; still listed as live
We fixed this exact bug in another repo. How?lessons: the fix follows you to every project with the same stack
Why does my agent keep re-reading the same file?mine: one file, read 18 times
Is my agent spawning 20 subagents behind my back?mine: yes, and in which session
Where was I before /compact ate my context?The session-start hook puts your checkpoint back

Using an AI agent? Point Claude Code, Codex, Cursor or Gemini CLI at this repo: AGENTS.md tells it how to install memory-boost, seed a wiki and run the reports for you.

Try it in 30 seconds

No install needed; the wiki lands in ~/.local/share/memory-boost:

bash
uvx memory-boost==0.2.1 init --example   # sample wiki with five kinds of rot + four synthetic transcriptsuvx memory-boost==0.2.1 drift            # what in that memory is stale, orphaned or never written downuvx memory-boost==0.2.1 mine             # now on your real ~/.claude/projects: aggregates only

To keep it in Claude Code, install the plugin. It brings the MCP server, the session-start brief and the skills in one step; it only needs uv on your PATH.

/plugin marketplace add arnaugonzalez/memory-boost/plugin install memory-boost@memory-boost

Other agents, or the CLI on its own: uv tool install memory-boost==0.2.1 (or pipx install memory-boost==0.2.1). Or let your agent do it: see Install from your agent.

Install from your agent

Paste this into Claude Code, Codex, Cline or Cursor:

Install memory-boost 0.2.1 by following https://github.com/arnaugonzalez/memory-boost/blob/main/llms-install.md : install the CLI with uv tool install memory-boost==0.2.1, run memory-boost init, register memory-boost serve as a stdio MCP server named memory, check that it answers with nine memory_* tools, then run memory-boost drift and show me the output. Ask me before writing outside the memory home (~/.local/share/memory-boost) or editing any global agent config.

The agent-oriented steps (stdio and serve --http, per harness, with checks) are in llms-install.md.

Example: back on a project after two months

[On the bundled example wiki: memory-boost drift lists 8 findings, including an expired Postgres pin on acme-api; page shows that decision; lessons brings an idempotent-retries lesson over from pixel-notes]

You come back to acme-api and the agent still trusts everything it wrote down. drift says which of it no longer holds: a Postgres pin whose review date passed in June, a superseded decision that points nowhere, projects that went silent. page shows why the pin was made, so you can decide in a minute. lessons brings over what pixel-notes learned about retrying jobs, because both projects run background jobs. Bundled example data (memory-boost init --example), recorded with vhs from docs/demo.tape.

On a real machine

Five weeks of the author's own daily use: 29 decisions, 24 projects, 657 Claude Code transcripts. Output as produced; only project and file names are replaced.

$ memory-boost drift# Drift report — 2026-09-2429 decisions · 24 projects · 204 log entries · 33 open checkpoints · **20 findings**
## decision-expired (9)- deploy-via-bastion — review_by 2026-07-08 (78 days ago); revisit or mark historic- bot-guardrails — review_by 2026-07-08 (78 days ago); revisit or mark historic  …## project-no-decisions (2)- thesis-solver — 20 sessions logged, 0 decisions tagged 'thesis-solver': the learning lives only in transcripts## project-silent (5)- mood-api — last session 2026-04-16 (161 days ago); still listed as live  …
$ memory-boost mine# Session digest — 2026-09-24sessions      80 with ≥20 turnstools         Bash 5956 · Edit 860 · Read 692 · Write 493 · Agent 203 · ToolSearch 138bash          5956 calls, 159 failed (2.7%); most failed: cd (69), sleep (12), ssh (9), pkill (8), ls (7)bash/edit     4.4x; extreme: worktree-a 107.5x, sandbox 70.0x, sandbox 54.0xreads         692 calls, 131 re-reads of a file already read (19%); top: …/apply_email.py ×18discipline    62 long sessions (≥60 turns): 47 never checkpointed, 29 never savedsubagents     203 spawned in 44 sessions; max in one session: 20

Every line is a habit to change, a decision to revisit, or a rule worth writing down. None of it needed a new tool: the data was already on disk. It needed a reader.

What it is

  1. A wiki you own. projects/*.md, decisions/*.md, concepts/*.md, log.md. Plain markdown; edit by hand, keep it in git. SQLite FTS5 index as a disposable cache. Nine MCP tools for any harness: memory_brief, memory_recall, memory_page, memory_save, memory_checkpoint, memory_resume, memory_drift, memory_lesson, memory_shelf. memory_shelf (CLI: memory-boost shelf "idea") appends a dated one-line idea to concepts/idea-shelf.md without the agent reading the page back.
  2. Freshness as data. Decisions carry status: and review_by:. Search results are tagged current / unclassified / review / historic / superseded, current first.
  3. Session checkpoints that survive /compact, with one line per other active session on the same project so parallel agents don't collide.
  4. drift reads the wiki and reports what expired, what went silent, what was never written down and what was left half-done. The current project's top findings go into every session brief.
  5. mine reads your local Claude Code transcripts and reports tool usage, failed commands, re-reads, subagent fan-out and checkpoint discipline. Aggregates only: no prompt, command or file content is stored or printed, so the digest is safe to paste anywhere.
  6. lessons: concepts/ pages with applies_when: [tags]. A project page that lists matching tags: gets those lessons in its brief, so what worked in one repo reaches the next. The /retro skill writes them at session end.

Connect your harness

MCP server (all harnesses): command memory-boost, args ["serve"].

To share one server between several sessions, run it over streamable HTTP (stateless, JSON responses) and point each harness at http://127.0.0.1:8765/mcp:

bash
memory-boost serve --http                      # --host 127.0.0.1 --port 8765 are the defaultsclaude mcp add --transport http memory -s user http://127.0.0.1:8765/mcp

It binds to loopback by default and has no authentication: keep it there.

HarnessMCP registrationContext at session start
Claude Code (plugin)/plugin install memory-boost@memory-boostIncluded: hook, MCP server, skills
Claude Code (manual)claude mcp add memory -s user -- memory-boost serveHook below (startup, resume, compact); mine reads its transcripts
Codex CLIcodex mcp add memory -- memory-boost serveAGENTS.md: "call memory_brief first"
Cursor / VS Code / Gemini CLIstdio entry in their mcp.json / settings.jsonSame line in rules (hook adapters: roadmap)

Manual Claude Code hooks (~/.claude/settings.json), not needed with the plugin:

json
{ "hooks": {  "SessionStart": [ { "hooks": [ { "type": "command", "command": "memory-boost hook session-start" } ] } ],  "Stop":         [ { "hooks": [ { "type": "command", "command": "memory-boost hook stop", "timeout": 10 } ] } ],  "PreCompact":   [ { "hooks": [ { "type": "command", "command": "memory-boost hook pre-compact", "timeout": 20 } ] } ]} }

On startup/resume it injects ~1k tokens: catalog, the project's context and last sessions, its drift, open pending items, lessons from other projects, your open checkpoint. On compact only this session's checkpoint. It never blocks session start: on any error it prints nothing.

stop and pre-compact write an automatic checkpoint from the transcript, with no LLM call: your prompts (minus <private>…</private>), files edited and git commits, under the checkpoint's auto key. What the agent wrote (task, done, next) is never overwritten. stop writes only when something changed and 10 minutes or 4 prompts passed; pre-compact always writes, so the post-compact re-injection has something to show even if the agent never called memory_checkpoint.

Skills: /memory-boost (router: when to run what), /save-session, /restore-session, /retro. The plugin installs them as /memory-boost:retro and so on; without it, copy skills/* into ~/.claude/skills/. The first session after installing the plugin takes a few extra seconds while uv fetches memory-boost==0.2.1 and its dependencies from PyPI (the only network access the plugin makes); later sessions start in about 0.2 s.

CLI contract for agents: data on stdout, errors on stderr with a fix: line, --json on every reading command (with a version field), exit 0 = trust stdout, 1 = not found, 2 = bad input. Reports end with a next: line naming the exact command to run.

How it works

[Agents talk to memory-boost serve over MCP; the hook injects the brief; drift reads the wiki and checkpoints; mine reads local transcripts; both feed reports and the brief]

Source: docs/architecture.mmd

The project is resolved from the working directory name (~/work/acme-api → projects/acme-api.md); map other names in aliases.json. Under 1,900 lines of Python, one dependency (mcp), no embeddings unless you opt into semantic recall, no daemon unless you run serve --http.

Session events v2

Every memory_save (or memory-boost save) writes one event to $MEMORY_BOOST_HOME/events/<agent>/<YYYY-MM-DD>.jsonl and one entry to wiki/log.md. The v2 fields are all optional: a v1 call (project, action, result, detail, pending as text) keeps working and writes the same log.md header. Each event now carries "schema": "memory-boost/session@2", a server date_local, a per-session seq and the assigned pending ids; v1 readers ignore the extra keys.

  • outcome: done | progress | blocked | waiting | research | abandoned.
  • pending: a list of {text, owner, severity, due?, waiting_on?}. The server assigns each item a stable id <project>#<n> (counter per project in events/pending-seq.json), shown in the brief under open pending.
  • closes / drops: ids the session finished or no longer needs. Open items are what remains after folding them.
  • session and metrics: optional blocks stored as given. The caller computes them, for example with a session summary tool; the save itself does not read transcripts.
json
{  "schema": "memory-boost/session@2",  "project": "acme-api",  "action": "Moved the job queue to Postgres and added retries",  "result": "ok",  "outcome": "progress",  "session": {"id": "3f9c2a1e-…", "harness": "claude-code", "cwd": "/home/me/work/acme-api",              "segment_start": "2026-10-28T10:00:03Z", "segment_end": "2026-10-28T14:45:12Z"},  "metrics": {"source": "ledger session-summary@1", "minutes": {"acme-api": {"attention": 182, "agent": 160, "gross": 230}},              "commits": [{"repo": "acme-api", "sha": "f2c1114", "pushed": false}],              "tests": {"runs": 6, "passed": 1180, "failed": 0}, "cost_usd": 14.2},  "pending": [{"text": "Run the batch import", "owner": "user", "severity": 3},              {"text": "Push main to origin", "owner": "user", "severity": 2}],  "closes": ["acme-api#12", "acme-api#14"]}

date_local is set by the server from MEMORY_BOOST_TZ (an IANA zone such as Europe/Madrid; UTC by default). Events written before v2 have no pending ids, so memory-boost pending [--project] (and closes) cannot see them.

Semantic recall (optional)

Off by default: memory_recall is full-text only and the base install stays one dependency. To also match paraphrases and other languages, run a local embedding model:

bash
pip install "memory-boost[semantic]==0.2.1"   # adds sqlite-vecollama pull embeddinggemmaexport MEMORY_BOOST_SEMANTIC=1memory-boost index                       # embeds the wiki once; later runs embed only changes

The first index of a large wiki on CPU can take minutes: as a rough guide, about 15 minutes for some 850 documents on a laptop without a GPU (one measurement, not a benchmark). memory-boost index and recall show embedding N/M chunks… on stderr while it runs; later runs re-embed only what changed.

Default mode when on is hybrid (full-text and vectors fused by weighted reciprocal rank); override with MEMORY_BOOST_RECALL_MODE=fts|semantic|hybrid or memory-boost recall --mode. If Ollama is down, recall falls back to full-text and logs a warning. On a private 64-query set (39 literal, 25 paraphrase) with a warm index on CPU: paraphrase nDCG@10 0.46 to 0.76, literal 0.80 to 0.85, p50 about 110 ms per query. The query set is not published.

Configuration

VariableDefaultPurpose
MEMORY_BOOST_HOME$XDG_DATA_HOME/memory-boostWiki, events, checkpoints, aliases.json
MEMORY_BOOST_WIKI$MEMORY_BOOST_HOME/wikiPoint at an existing wiki (e.g. a git repo)
MEMORY_BOOST_INDEX$XDG_CACHE_HOME/memory-boost/index-<hash>.dbSearch index
MEMORY_BOOST_CHECKPOINTS$MEMORY_BOOST_HOME/checkpointsCheckpoint directory
MEMORY_BOOST_TRANSCRIPTS~/.claude/projectsWhere mine looks (several dirs: a:b)
MEMORY_BOOST_TODAYtoday (UTC)Pin the date for reproducible reports
MEMORY_BOOST_TZUTCIANA zone for date_local in events (e.g. Europe/Madrid)
MEMORY_BOOST_AUTOSAVE_SECS600hook stop: minimum seconds between automatic checkpoints
MEMORY_BOOST_AUTOSAVE_TURNS4hook stop: or this many new prompts, whichever comes first
MEMORY_BOOST_SEMANTICunset1 enables vector recall (needs memory-boost[semantic] + Ollama)
MEMORY_BOOST_RECALL_MODEfts (hybrid with semantic)fts, semantic or hybrid
MEMORY_BOOST_EMBED_MODELembeddinggemmaOllama embedding model
MEMORY_BOOST_OLLAMA_URLhttp://localhost:11434Ollama endpoint

Status values: current, review, historic, superseded; accepted/active read as current and proposed as review.

Experimental (shipped, little real use yet): memory_shelf, memory-boost friction and the lesson fields cue/evidence/confidence. Their output format may still change.

vs. alternatives

memory-boostbasic-memoryclaude-memagent-retro
StoreMarkdown wiki you editMarkdownCaptured observationsNone (prompt skill)
SearchFTS5 (+ optional local vectors)FTS + vectorsFTS + vectors—
Freshness / review datesYesNoNo—
Drift report over memoryYesNoNoNo
Session analyticsYes (aggregates, local)NoNoLLM reads the conversation
Parallel-session awarenessYesNoNo—
LicenseMITAGPL-3.0Apache-2.0?

Want better search, more integrations and a community? Use basic-memory. Want everything captured automatically? claude-mem. Use memory-boost if you want to learn from what your agents already wrote down.

Limits / non-goals

  • Full-text search by default; embeddings only with the optional [semantic] extra and a local Ollama.
  • mine understands Claude Code transcripts today. Codex is on the roadmap.
  • Reports are as good as the wiki: an empty wiki yields an empty drift.
  • Single user, local files. Linux and macOS; Windows untested.
  • The wiki is read by your agents as instructions. Only use a wiki you trust; see SECURITY.md.

License

MIT

Source: README.md at commit bf318a4

Tools

9

memory_brief

Cheap orientation (~1k tokens): wiki catalog, the project's stable context and its latest sessions. Call it at the start of a session in harnesses without a SessionStart hook, or to reload a project's context mid-session. `project` is a project name or a directory path.

Parametersbudgetproject

memory_recall

Full-text search over wiki pages and log entries. Each hit is tagged [kind | date | freshness]; current knowledge is listed before historic and superseded. Historic hits are omitted unless include_historic=true.

Parameterslimitqueryrequiredprojectinclude_historic

memory_page

Read a wiki page by name (e.g. 'my-api'), or one section of it (a heading or the anchor returned by memory_recall). Prefer this over reading the whole file.

Parametersnamerequiredsection

memory_save

Record what was done in a session: one raw JSONL event plus one compiled entry in wiki/log.md (creates the project page if it does not exist yet). Does not commit to git. action: one line, at most 120 characters. detail: a self-contained paragraph, at most 600 characters; the next session's brief reads it. outcome: done | progress | blocked | waiting | research | abandoned. pending: what is left to do. Either a string split on ';' (each part is the user's, severity 3), or a list of {text, owner, severity, due?, waiting_on?, done_check?} where owner is user | agent | client | third_party, severity is 1-3, due is YYYY-MM-DD, and waiting_on is org:<slug> or person:<slug> when the owner is client or third_party. Severity 1: production down or data loss, a hard deadline within 72 hours, or a client waiting on something that depends on the user. Severity 2: a known open bug, a deadline within 7 days, or an unmitigated risk (exposed secret, work unpushed for more than 3 days). Severity 3: the rest. done_check: how to tell it is finished (a command, or an observable condition); stored and shown, never run. The server assigns each item an id <project>#<n>; the brief shows open items with their ids. closes: ids of open pending items (as shown in the brief) that this session finished. Ids that are unknown, already closed or repeated are not written and come back as `ignored` in the reply. drops: [{id, why}] open pending items that no longer apply. decisions: [{slug, new}] pages in wiki/decisions created or cited. deadlines: [{what, at, hard, pending_ref?}]. orgs: organisations involved that are not the project's client (prospects, suppliers). touches: other project slugs affected. uses: "bip:<capability>" (background IP reused) or "proj:<slug>". billable: whether it counts toward billing a client. money: [{kind, status, ref, amount?, currency?}] with kind quote | invoice | payment | co

Parametersorgsusesagentdropsmoneyactionrequiredclosesdetailresultstatedmetricsoutcome+8 more

memory_shelf

Append a dated one-line idea to a wiki page without reading it.

Parameterstotextrequiredproject

memory_checkpoint

Save this session's working state (a small JSON, no indexing) so it survives context compaction and parallel sessions on the same project can see it. Call it after each milestone: task = current goal (1 line), done = finished steps (accumulated), next_step = the concrete next step, files = files touched. session_id: the `checkpoint_session=` value injected at session start, or any stable id. Set status=done when the session ends (after memory_save).

Parametersdonetaskrequiredagentfilesnotesstatusprojectrequiredplan_refnext_stepsession_idrequired

memory_resume

Return this session's checkpoint (if session_id is given) plus one line per other active session on the project. Use after a compaction or when picking up unfinished work; much cheaper than memory_recall.

Parametersprojectrequiredsession_id

memory_drift

What in the memory has drifted: decisions past review_by, superseded decisions without a successor, project pages with no session for weeks, busy projects with no recorded decisions, checkpoints left open. Whole wiki, or one project's findings.

Parametersproject

memory_lesson

Record a lesson that should reach other projects: what worked (or failed), the tools involved and when it applies. `applies_when` are stack/situation tags (e.g. ["fastapi", "celery", "e2e-tests"]); projects whose page lists matching `tags:` get this lesson in their session brief. `learned_on` = this project's slug. cue: the shape of situation it fires on (the pattern, not this task's facts). evidence: the observed contrast it rests on (before/after, A vs B, with numbers or the moment it diverged); "it looked like good practice" is not evidence. confidence: high | medium | low, only with evidence. If nothing observed supports a transferable lesson, do not record one: no lesson is a valid outcome.

Parameterscuebodyrequirednamerequiredtitlerequiredevidenceconfidencelearned_onapplies_whenrequired

Version history

3
  1. v0.2.1LatestNov 8, 2026
  2. v0.2.0Oct 18, 2026
  3. v0.1.1Sep 26, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Memory integrations