Unified Agent Memory

Unified memory for multiple coding agents — one private hub. Currently supports Cursor and Claude Code. Open threads, distill, search; secrets redacted. MIT.

Unified Agent Memory layers overview

What this is

Unified memory for multiple coding agents — one private local hub shared across environments. Currently supports Cursor and Claude Code. Not RAG, not a vector DB, not a notes app: a continuity system that turns chat sessions into durable project state.

Problem

Coding agents start every session blank. Repo rules help inside one project, but nothing carries cross-project conventions, rejected approaches, distilled history, or where work actually stopped — and once you use more than one agent tool, each silo forgets the other. Dumping everything into context is slow, expensive, and leaks secrets.

What I built

A portable MIT framework (public skills, scripts, hooks) plus a private hub outside the plugin bundle (default ~/.agent-memory/). Both Cursor and Claude write the same files under a shared lock. Routed layers, loaded INDEX-first — never the whole store:

  1. Global context — who, projects, rules, infra
  2. Preferences — how the user thinks and communicates
  3. Feedback — what worked (+) and what to stop proposing (−)
  4. Chat distill — per-project ## Decisions, ## Recent, merge-staging
  5. Forward pointer — ## Open threads (rolling 30-day, cross-hub): where each active direction stopped. ## Next step was retired in v0.29+

Env protocol: Cursor uses a launchd job every 30 minutes (hooks were dropped by Cursor in June 2026) plus an alwaysApply routing rule; Claude Code uses real hooks (SessionStart, UserPromptSubmit, Stop, PreCompact, SessionEnd) so memory survives compaction and hard kills. Secrets are redacted on every distill; push-time leak checks block personal names from leaving the machine.

Onboarding

One skill, either environment. Install order does not matter — the second tool inherits the existing hub through its anchor.

Claude Code: /plugin marketplace add raphael-batte/unified-agent-memory → /plugin install agent-memory (hooks ship with the plugin).

Cursor: clone the repo → bash scripts/install-local.sh → bash scripts/install-periodic-sync.sh → reload window. In chat: @agent-memory → set up agent memory / sync with agent memory.

That sync pass scans transcripts from installed environments, redacts secrets, batch-distills pending chats, seeds Recent / Open threads, and bootstraps global context. No MCP server, no manual jsonl import. Second machine: same hub path + re-link (ONBOARDING.md).

Session lifecycle

Claude: hooks on stop / preCompact / session end distill into the shared hub; session start and prompt submit inject Open threads.

Cursor: periodic sync (30m while Cursor is open) catches up transcripts; routing rule forces every chat to read the rolling Open-threads pointer first.

Next session → match the user’s topic to an Open threads **[label]** → Decisions / Recent → drill [title](uuid) in Recent if the thread is thin. Distill may draft [auto] threads; curated threads are never overwritten. ## Decisions stay agent-curated via the semantic-merge skill — scripts do bookkeeping; the LLM does meaning.

Key engineering decisions

  • One hub, many agents. Env-agnostic distill/search; per-environment adapters only for triggers and pointer delivery.
  • Public framework vs private data. MIT repo for skills/scripts; personal hub never committed. Anchors point at the hub and survive plugin updates.
  • Open threads as the only forward pointer (v0.29+) — rolling 30d union across the whole hub, not a single Next-step line and not per-repo handoff files.
  • Mechanical vs semantic. Scripts: manifest, staging, rotation, secret-scan, leak gate. Agent + semantic-merge: curated Decisions and Open threads.
  • Defense in depth for secrets. Regex at ingest, hub verify (regex + gitleaks), pre-commit / pre-push leak checks with a runtime denylist derived from the hub (never a personal-name list in git).
  • Pluggable transcript adapters. Cursor + Claude parsers normalize onto the same pipeline.
  • Markdown + routing over vectors. Portable, diff-able, multi-machine — intentional trade-off for personal-scale continuity.

Engineering practices

SemVer with pre-commit bump enforcement; 400+ automated tests (parsers, merge, hooks, env protocol, secrets, leak gate); GitHub Actions CI (tests + gitleaks + CodeQL); typed Python; hub-overridable configuration.

Outcome

A maintained end-to-end system — multi-agent transcript ingestion through one curated hub — with architecture, limitations, and migration paths documented for humans (ARCHITECTURE.md) and agents (INSTRUCTIONS.md).

Stack

Python 3.12, Bash, GitHub Actions, gitleaks, Cursor skills/rules + launchd sync, Claude Code plugin hooks.

Download

Next project

Grafana mobile app

OnCall and Incident response on the go, then expanded across Cloud with AI.

DevelopmentMobile appProduct design

Grafana mobile app