Causal project memory for agents - corrections surface first; the ledger is a local file you own.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Site: pulse.strategic-innovations.ai, where the guard runs in the browser. Compare with Mem0, Zep, Letta and CLAUDE.md.
Corrections that outlive the session.
Your agent acknowledged the correction, then wrote the old value back next session. memory-pulse records it once, puts it at the top of every session, and blocks the edit that reintroduces it, quoting the line that retired it. For Claude Code, Codex, Cursor, any MCP client and GitHub Actions. The record is a file in your own repository.
Most memory tools stop at showing the correction to the model. The guard is the part that acts on it.
All four tool definitions come to ~3.3 KB, about 900 tokens, and a test in this repo fails the build if they grow past that. Independent measurements put a typical five to ten server MCP setup at 50-67k tokens of tool definitions before your first prompt, roughly a third of a 200k context window.
A session ends and everything it learned goes with it. memory-pulse keeps a ledger of cause β effect events in a local file, and gives the agent four tools over it:
| tool | what it does | runs |
|---|---|---|
remember | record a finding (or a correction) | locally, offline |
pulse | re-enter the project on a ranked brief, sized to a budget you set | hosted engine |
recall | what caused X? what did X cause? when was the link strongest? | hosted engine |
execute | run JS against memory in a sandbox, where only the return value enters context | hosted engine |
Two design decisions do the heavy lifting.
Corrections come first, always. An event recorded with
kind: "correction" outranks everything at every brief size and never decays.
The failure this prevents is your agent confidently quoting the benchmark
number you withdrew three sessions ago.
A weak answer returns nothing. When recall cannot clear its confidence floor it returns an empty result, and the brief says so.
One repo, two plugin hosts, any MCP client. Pick the row for your agent.
Claude Code, as a plugin. Skill, MCP tools and the two hooks, from this repo:
claude plugin details memory-pulse shows what you pay. About 120 tokens are
always on, which is the skill's description. The four tool schemas resolve at
runtime and the hooks are free. The hooks run the plugin's own server.mjs,
so what enforces your corrections is the version you installed.
Codex CLI, as a plugin. Same files, read from .codex-plugin/plugin.json:
Then, inside Codex, run /hooks and trust the two memory-pulse entries.
Codex runs no hook it has not shown you, and installing a plugin does not
trust its hooks. That is Codex's rule and a good one.
Any MCP client, in one line. Claude Code and Codex are shown, and Cursor and the rest take the same stdio command:
Automatic re-entry without the plugin. A SessionStart hook runs the brief before your first prompt and a PreToolUse guard checks edits. Both are idempotent, both merge into the settings file without clobbering it, and both stay silent in a project that has no ledger.
Add --project to either and the hooks are written into the repo, at
.claude/settings.json or .codex/hooks.json. Commit that and every clone is
re-entered and guarded with nothing for anyone to install.
A withdrawn number recorded with kind: "correction" outranks the history
that contained it, at every brief size and in every session.
Corrections are enforced, not only surfaced. Showing an agent a correction
is measurably not enough, because agents re-violate corrections they were just
shown. The PreToolUse guard sees every Edit and Write in Claude Code and
every apply_patch in Codex, where one patch may touch several files and each
is checked under its own path. An edit that writes back a withdrawn value is
blocked, and the agent is told which ledger line retired it and when. An
edit that names the replacement beside the old value passes, because "was $49,
now $29" is a comparison. Only a bare reintroduction is blocked. A shell
heredoc is not an edit tool and is not guarded, so check --ci on the pull
request is the layer that catches that case. Record corrections with the exact
terms:
The plugin also ships a skill at skills/memory-pulse/SKILL.md that
teaches the agent when to pulse, how to record corrections with withdrawn
terms, and how to respect the guard.
Every brief opens with one line of provenance, so a session can tell whether its memory loaded whole, truncated, or not at all:
Every CORRECTIONS line cites its ledger record as β¦ -> effect (t12) β note,
so a correction is evidence the agent can point at. recall and the guard name the same t.
Governance files drift. A CLAUDE.md written in June still says the price is
$49 after the ledger retired it in August, and every new session loads the
stale rule with full confidence. lint runs the guard's check over the files
a session will read and gives each of them one of the three verdicts. It
covers CLAUDE.md, AGENTS.md, .claude/rules/, .cursorrules,
.cursor/rules/, .github/copilot-instructions.md, .codex/AGENTS.md, and
any paths you pass:
Exit 2 on any blocked file. Under --ci it also exits 1 when it found nothing
to check, so an empty run is never reported as a pass. --json is there for
machines. It also names the corrections that carry no withdrawn terms, which
surface in the brief but which nothing can enforce.
Since 0.3.1 three mechanisms hold, each with its own job:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/memory-pulse)<a href="https://allmcps.com/mcp/memory-pulse"><img src="https://allmcps.com/api/badge/memory-pulse?style=directory" alt="Memory Pulse on AllMCPs" /></a>