Are you the author? Sign in to claim
Local-first, project-aware memory MCP server for Claude Code, Codex, and other AI agents, with Obsidian and an owner das
Local-first, project-aware, durable memory for Claude Code, Codex, and other MCP-compatible agents.
Global Agent Memory gives multiple coding agents one shared, reviewable memory without handing control of your knowledge base to a hosted service. Markdown files are canonical, an authenticated local MCP daemon is the public agent interface, and the dashboard lets a human approve, edit, protect, or remove what agents remember.
One Vault. Multiple agents. Human-controlled memory.
Quick start · Obsidian Vault · Dashboard · How it works · Security · MCP contract · Documentation
Coding agents are useful inside a session, but important context is often lost between sessions or fragmented across individual clients. Global Agent Memory provides a durable layer for knowledge such as:
Agents propose memories as candidates. A human reviews them before they become durable, controls their visibility, and can later update, supersede, archive, or hard-delete them.
| Approach | Shared across agents | Human-reviewable | Project-aware | Owner-controlled access | Portable source of truth |
|---|---|---|---|---|---|
CLAUDE.md / AGENTS.md | Limited | ✓ | ✓ | — | ✓ |
| Basic memory MCP | ✓ | Varies | Varies | Varies | Varies |
| Hosted agent memory | ✓ | Varies | ✓ | Provider-defined | — |
| Global Agent Memory | ✓ | ✓ | ✓ | ✓ | Markdown |
Use project instruction files for compact rules that always belong in a prompt. Use Global Agent Memory when knowledge should be searchable, shared between clients, reviewed by a person, updated over time, or hidden behind explicit permission.
sqlite-vec add semantic ranking.127.0.0.1 and requires a generated
bearer token stored outside the Vault.The opt-in performance suite creates 10,000 synthetic memories and exercises the same indexing and retrieval paths used by the daemon. On the recorded macOS ARM64 baseline, a full rebuild takes 36.5 seconds, warm keyword search P95 is 56 ms, warm hybrid search P95 is 76 ms, and incremental stdio proxy overhead is 1.5 ms. Results vary by machine; the changed-note, search, and proxy budgets run as regression gates. See the methodology and complete baseline.
Global Agent Memory is more than an MCP server. Agents, owners, and knowledge workers use the same canonical memories through three purpose-built surfaces:
| Surface | Designed for | What it provides |
|---|---|---|
| MCP | Claude Code, Codex, and other agents | Project-aware context, search, candidate creation, safe updates, lifecycle actions, and permission requests through a frozen V1 contract |
| Obsidian Vault | Reading, writing, linking, and long-term knowledge ownership | Portable Markdown and YAML, templates, native Bases views, project overview hubs, wikilinks, backlinks, graph navigation, and direct-edit synchronization |
| Local dashboard | Fast owner review and administration | Candidate approval and editing, conflict comparison, visibility classification, protected-access decisions, search, projects, activity, backups, and system health |
The Vault is the durable source of truth. The dashboard is a complementary control plane, and the MCP interface is the safe automation layer used by agents. You can use Obsidian, the dashboard, or both without creating separate copies of your memory.

Real dashboard UI with synthetic Atlas project data. No private Vault content is shown.
This is the shortest path to persistent memory for Claude Code, Codex, and other MCP clients. The guided installer creates the local service, Obsidian-compatible Vault, dashboard, MCP registrations, and agent skills together.
uvuv tool install global-memory-mcp
To install the latest unreleased source, use
uv tool install git+https://github.com/ozankasikci/global-agent-memory.git. For a
local checkout, use uv tool install ..
global-memory setup
Setup shows one plan and asks once before it changes anything. It initializes the local Vault, creates the protected token, installs and starts the native per-user service, detects Claude Code and Codex, installs their MCP integrations and skills, verifies healthy clients, and opens the dashboard. The command is idempotent, so running it again repairs or updates managed components without replacing unrelated client configuration.
Use flags when you need a non-default setup:
# Non-interactive installation
global-memory setup --yes
# Choose a different Vault on first setup
global-memory setup --vault "$HOME/Memory"
# Install only one client, or no client yet
global-memory setup --clients claude-code
global-memory setup --clients none
# Preview without changing files or services
global-memory setup --dry-run
Setup installs five basic shortcuts for each detected client:
| Shortcut | Purpose |
|---|---|
gam-context | Load project-aware context for a task |
gam-search | Find a decision, fact, error, convention, or solution |
gam-remember | Propose explicitly supplied durable knowledge as a candidate |
gam-review | Show the candidate queue without changing it |
gam-dashboard | Open the authenticated dashboard |
In Claude Code, invoke them directly, for example /gam-context fix the upload retry bug.
In Codex, type /skills and choose one, or mention it directly, for example
$gam-context fix the upload retry bug.
global-memory dashboard
You can also ask a connected agent:
Open the Global Agent Memory dashboard.
The agent calls memory_dashboard_open and opens the same authenticated local
dashboard.
The individual commands remain available for advanced setups and troubleshooting:
global-memory init --vault "$HOME/Documents/Global Agent Memory"
global-memory daemon install-service --kind launchd # use systemd on Linux
global-memory integrations install all
global-memory integrations verify all
global-memory doctor
After integration, you normally describe your intent instead of running memory commands manually.
Before you start, load the relevant memory for this project and summarize the conventions and recent decisions.
Remember that production ARM64 binaries must be built locally and uploaded to the server. Add it as a project convention with the deployment discussion as evidence.
The agent creates a candidate. Nothing becomes active until it is approved.
Find the deployment memory and update it with the new health-check command. Do not create a duplicate.
Open the memory dashboard so I can review the candidates.
The shared integration skill teaches supported agents when to retrieve, propose, update, and avoid duplicating memory.
The configured Obsidian Vault is the human-readable, durable source of truth—not an export of an opaque database. Every managed memory is a normal Markdown file with YAML properties, a stable memory ID, lifecycle metadata, and project-aware links.
Initialization adds an Obsidian workspace without replacing your existing files:
Obsidian is optional: the same Markdown remains readable and editable with any text editor. Lifecycle and access-policy changes should still go through the dashboard, MCP, or CLI so validation, optimistic concurrency, and audit records remain intact.
The authenticated dashboard is the owner control plane for:

Candidate review keeps evidence and conflicts visible before an owner approves durable memory.
Dashboard launch URLs expire after 60 seconds, can be exchanged only once, and create a local HttpOnly session. Do not share a launch URL.
| Level | Default agent behavior | Owner control |
|---|---|---|
| Standard | Included in ordinary scoped retrieval | Normal candidate and lifecycle review |
| Protected | Excluded from default results; an agent receives only a neutral relevance signal | Owner selects exact memories, permission, duration, policy, and eligible projects |
| Sealed | Body is not indexed or returned through agent tools | One owner-unlocked dashboard view; every access is audited |
Protected grants are scoped by purpose, project, agent, permission, exact memory IDs, and duration. Owners may downgrade a request but never elevate it. Agents may request and poll for access, but they cannot approve, deny, or revoke grants.
[!IMPORTANT]
Protected and Sealed memory are not secret managers. Never store passwords, credentials, private keys, API keys, or bearer tokens in Global Agent Memory.
flowchart LR
A[Claude Code] -->|stdio MCP proxy| D[global-memoryd]
B[Codex] -->|stdio MCP proxy| D
C[Other MCP clients] -->|Streamable HTTP| D
D --> E[Application and domain services]
E --> V[Markdown Vault<br/>canonical state]
E --> I[SQLite FTS5 and sqlite-vec<br/>generated state]
E --> O[Ollama embeddings<br/>optional]
E --> W[Local dashboard<br/>owner control]
The daemon is the single owner of the Vault watcher, generated indexes, embedding queue,
and MCP transport. Streamable HTTP clients connect directly on localhost; stdio-only
clients launch the thin global-memory-mcp proxy. Both paths expose the same MCP V1
contract. Requests are stateless because durable memory belongs to the shared daemon
rather than to an expiring client session, which keeps long-lived agent bridges reliable
across idle periods.
The dependency direction is:
transport and client adapters → application services → domain
Vault, SQLite, vectors, embeddings, Git, Watchdog, and client integrations are adapters. The domain layer does not depend on them.
The MCP interface is the only public AI-facing API. Clients do not read the Vault, SQLite database, vectors, token, or runtime logs directly.
The frozen V1 discovery snapshot currently contains 17 tools, 10 resources, and 6 prompts.
| Capability | MCP tools |
|---|---|
| Retrieval | memory_search, memory_context, memory_get, memory_status |
| Candidate and lifecycle | memory_remember, memory_update, memory_approve, memory_reject, memory_supersede, memory_archive |
| Navigation and operations | memory_open, memory_dashboard_open, memory_reindex, memory_projects, memory_tags |
| Protected access | memory_access_request, memory_access_status |
All mutations are replay-safe through request_id. Updates use optimistic concurrency,
and a stale version fails with VERSION_CONFLICT instead of silently overwriting newer
knowledge.
See MCP Contract V1 and the generated
contracts/mcp/v1/ schemas for the complete contract.
The CLI uses the same MCP path as connected agents; it does not bypass the daemon to read generated state.
# Check health
global-memory status
global-memory doctor
# Register and detect a project
global-memory project add my-project --root "$HOME/Projects/my-project"
global-memory project detect "$HOME/Projects/my-project"
# Search and build bounded task context
global-memory search "deployment rollback" --project my-project
global-memory context "Prepare the next release" --project my-project --token-budget 3000
# Create a review candidate
global-memory remember \
"Release rollback procedure" \
"Use the blue-green rollback task and verify both health endpoints." \
--type reference \
--scope project \
--project my-project
# Rebuild generated indexes
global-memory reindex --full
# Back up canonical Markdown
global-memory backup "$HOME/Backups/global-agent-memory.zip"
Run global-memory --help or global-memory <command> --help for the complete command
reference.
Global Agent Memory is designed as a local service, not a remotely exposed memory API.
127.0.0.1.Please report security issues according to SECURITY.md.
Clone the repository, then install Python and dashboard dependencies:
uv sync
npm ci --prefix dashboard
Run the standard quality gate:
make check
The gate covers Ruff formatting and linting, strict MyPy, the TypeScript production build, unit/integration/contract/E2E tests, coverage, and deterministic MCP contract regeneration.
Useful focused commands:
make unit
make integration
make contract
make e2e
make dashboard-check
make performance # opt-in 10,000-note performance suite
When changing the MCP contract:
make contract-generate
make contract-check
Contributions are welcome. Start with CONTRIBUTING.md, and keep changes compatible with the frozen V1 contract unless a parallel major contract is intentionally introduced.
good first issue
or help wanted
queues.| Guide | Purpose |
|---|---|
| Operations | Installation, daemon management, diagnostics, backup, restore, upgrades, and recovery |
| Claude Code | Managed skill and MCP registration for Claude Code |
| Codex | Managed skill and MCP registration for Codex |
| Architecture | Dependency direction and daemon ownership model |
| Configuration | Platform-native locations, environment variables, and security defaults |
| MCP Contract V1 | Public compatibility and response-envelope rules |
| Testing | Standard, performance, and live acceptance strategy |
| Performance baseline | 10,000-note benchmark methodology and budgets |
| Release checklist | Current V1 acceptance evidence and remaining release gates |
| Implementation plan | Original product requirements and phased implementation plan |
Global Agent Memory is under active V1 development and is published on PyPI as
global-memory-mcp. The package version
is 0.1.6; the MCP contract version is v1.
The product name is Global Agent Memory. The technical identifiers global-memory,
global-memory-mcp, global-memoryd, global_memory, and product: global-memory
remain stable for V1 compatibility.
See the V1 release checklist for verified scenarios and remaining live acceptance work.
Global Agent Memory is available under the MIT license declared in pyproject.toml.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows