{
  "markdown": "<!-- markdownlint-disable MD013 -->\n\n# Global Agent Memory\n\n<!-- mcp-name: io.github.ozankasikci/global-agent-memory -->\n\n> Local-first, project-aware, durable memory for Claude Code, Codex, and other\n> MCP-compatible agents.\n\n[![Python 3.12+](https://img.shields.io/badge/Python-3.12%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/downloads/)\n[![PyPI](https://img.shields.io/pypi/v/global-memory-mcp?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/global-memory-mcp/)\n[![MCP contract](https://img.shields.io/badge/MCP-contract%20v1-5A67D8?style=flat-square)](docs/mcp-contract-v1.md)\n[![Local first](https://img.shields.io/badge/storage-local--first-2F855A?style=flat-square)](#security-model)\n[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](pyproject.toml)\n[![GitHub release](https://img.shields.io/github/v/release/ozankasikci/global-agent-memory?style=flat-square)](https://github.com/ozankasikci/global-agent-memory/releases/latest)\n\nGlobal Agent Memory gives multiple coding agents one shared, reviewable memory without\nhanding control of your knowledge base to a hosted service. Markdown files are\ncanonical, a hybrid local MCP runtime is the public agent interface, and the dashboard\nlets a human approve, edit, protect, or remove what agents remember. Agent commands work\nwithout a background server. The authenticated localhost server starts on demand for\nthe dashboard and can optionally run continuously for live file watching and shared\nembedding work.\n\n**One Vault. Multiple agents. Human-controlled memory.**\n\n![Global Agent Memory connects AI agents through a daemonless-capable hybrid MCP runtime to owner-controlled Markdown and dashboard surfaces](docs/assets/global-agent-memory-flow.svg)\n\n[Quick start](#quick-start) · [Obsidian Vault](#obsidian-vault) ·\n[Dashboard](#dashboard) · [How it works](#how-it-works) ·\n[Security](#security-model) · [MCP contract](#mcp-interface) · [Documentation](#documentation)\n\n## Why Global Agent Memory?\n\nCoding agents are useful inside a session, but important context is often lost between\nsessions or fragmented across individual clients. Global Agent Memory provides a durable\nlayer for knowledge such as:\n\n- architectural decisions and project conventions;\n- verified workflows and operational runbooks;\n- recurring problems and their proven solutions;\n- project preferences, entities, and handoff summaries;\n- bounded context for a new task or agent session.\n\nAgents propose memories as **candidates**. A human reviews them before they become\ndurable, controls their visibility, and can later update, supersede, archive, or\nhard-delete them.\n\n### How it compares\n\n| Approach | Shared across agents | Human-reviewable | Project-aware | Owner-controlled access | Portable source of truth |\n| --- | :---: | :---: | :---: | :---: | :---: |\n| `CLAUDE.md` / `AGENTS.md` | Limited | ✓ | ✓ | — | ✓ |\n| Basic memory MCP | ✓ | Varies | Varies | Varies | Varies |\n| Hosted agent memory | ✓ | Varies | ✓ | Provider-defined | — |\n| **Global Agent Memory** | **✓** | **✓** | **✓** | **✓** | **Markdown** |\n\nUse project instruction files for compact rules that always belong in a prompt. Use\nGlobal Agent Memory when knowledge should be searchable, shared between clients,\nreviewed by a person, updated over time, or hidden behind explicit permission.\n\n## Highlights\n\n- **Shared across agents** — Claude Code, Codex, and other MCP clients use the same\n  service and immutable memory IDs.\n- **Project-aware by default** — Git roots, remotes, aliases, and the project registry\n  keep retrieval scoped to the active project.\n- **Markdown is canonical** — the Vault remains readable, portable, backup-friendly, and\n  usable with Obsidian.\n- **Human review workflow** — agents create candidates; owners approve, edit, reject, or\n  resolve conflicts in the dashboard.\n- **Protected and sealed memory** — sensitive knowledge can be excluded from ordinary\n  retrieval and placed behind owner-controlled access.\n- **Hybrid local search** — SQLite FTS5 provides keyword retrieval; optional Ollama\n  embeddings and `sqlite-vec` add semantic ranking.\n- **Offline-friendly** — keyword search and lifecycle operations continue when Ollama is\n  unavailable.\n- **Rebuildable generated state** — SQLite, FTS, vectors, queues, and caches can be\n  recreated from Markdown.\n- **Frozen MCP V1 contract** — tools, resources, prompts, envelopes, and compatibility\n  rules are versioned in the repository.\n- **No required background server:** Claude Code, Codex, and CLI commands fall back to\n  the same MCP application services in-process when the optional daemon is offline.\n- **Local security boundary:** when the dashboard or HTTP MCP is active, the server\n  binds to `127.0.0.1` and requires a generated bearer token stored outside the Vault.\n\n### Built for real project vaults\n\nThe opt-in performance suite creates **10,000 synthetic memories** and exercises the\nsame indexing and retrieval paths used by both runtime modes. On the recorded macOS ARM64\nbaseline, a full rebuild takes 36.5 seconds, warm keyword search P95 is 56 ms, warm\nhybrid search P95 is 76 ms, and incremental stdio proxy overhead is 1.5 ms. Results vary\nby machine; the changed-note, search, and proxy budgets run as regression gates. See the\n[methodology and complete baseline](docs/performance-baseline.md).\n\n## Three surfaces, one memory system\n\nGlobal Agent Memory is more than an MCP server. Agents, owners, and knowledge workers\nuse the same canonical memories through three purpose-built surfaces:\n\n| Surface | Designed for | What it provides |\n| --- | --- | --- |\n| **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 |\n| **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 |\n| **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 |\n\nThe Vault is the durable source of truth. The dashboard is a complementary control\nplane, and the MCP interface is the safe automation layer used by agents. You can use\nObsidian, the dashboard, or both without creating separate copies of your memory.\n\n### Dashboard at a glance\n\n![Global Agent Memory dashboard overview showing the review queue, protected-memory access request, project conventions, solutions, preferences, and recent agent activity](docs/assets/dashboard-overview.png)\n\n<p align=\"center\"><sub>Real dashboard UI with synthetic Atlas project data. No private Vault content is shown.</sub></p>\n\n## Quick start\n\nThis is the shortest path to persistent memory for Claude Code, Codex, and other MCP\nclients. The guided installer creates the local service, Obsidian-compatible Vault,\ndashboard, MCP registrations, and agent skills together.\n\n### Requirements\n\n- macOS or Linux\n- Python 3.12 or newer\n- [`uv`](https://docs.astral.sh/uv/)\n- Claude Code or Codex for the managed client integrations\n- Optional: [Obsidian](https://obsidian.md/) for browsing the Markdown Vault\n- Optional: [Ollama](https://ollama.com/) for semantic retrieval\n\n### 1. Install\n\n```shell\nuv tool install global-memory-mcp\n```\n\nTo install the latest unreleased source, use\n`uv tool install git+https://github.com/ozankasikci/global-agent-memory.git`. For a\nlocal checkout, use `uv tool install .`.\n\n### 2. Run guided setup\n\n```shell\nglobal-memory setup\n```\n\nSetup shows one plan and asks once before it changes anything. It initializes the local\nVault, creates the protected token, detects Claude Code and Codex, installs their MCP\nintegrations and skills, verifies healthy clients, and opens the dashboard. Opening the\ndashboard starts its authenticated localhost server on demand. The command is\nidempotent, so running it again repairs or updates managed components without replacing\nunrelated client configuration.\n\nUse flags when you need a non-default setup:\n\n```shell\n# Non-interactive installation\nglobal-memory setup --yes\n\n# Choose a different Vault on first setup\nglobal-memory setup --vault \"$HOME/Memory\"\n\n# Install only one client, or no client yet\nglobal-memory setup --clients claude-code\nglobal-memory setup --clients none\n\n# Optional: install an always-on native service for live watching and shared indexing\nglobal-memory setup --service\n\n# Preview without changing files or services\nglobal-memory setup --dry-run\n```\n\n### 3. Use the installed agent shortcuts\n\nSetup installs five basic shortcuts for each detected client:\n\n| Shortcut | Purpose |\n| --- | --- |\n| `gam-context` | Load project-aware context for a task |\n| `gam-search` | Find a decision, fact, error, convention, or solution |\n| `gam-remember` | Propose explicitly supplied durable knowledge as a candidate |\n| `gam-review` | Show the candidate queue without changing it |\n| `gam-dashboard` | Open the authenticated dashboard |\n\nIn Claude Code, invoke them directly, for example `/gam-context fix the upload retry bug`.\nIn Codex, type `/skills` and choose one, or mention it directly, for example\n`$gam-context fix the upload retry bug`.\n\n### 4. Open the dashboard again\n\n```shell\nglobal-memory dashboard\n```\n\nYou can also ask a connected agent:\n\n> Open the Global Agent Memory dashboard.\n\nThe agent calls `memory_dashboard_open` and opens the same authenticated local\ndashboard.\n\n### Manual installation and repair\n\nThe individual commands remain available for advanced setups and troubleshooting:\n\n```shell\nglobal-memory init --vault \"$HOME/Documents/Global Agent Memory\"\nglobal-memory daemon install-service --kind launchd  # use systemd on Linux\nglobal-memory integrations install all\nglobal-memory integrations verify all\nglobal-memory doctor\n```\n\n## Using it with an agent\n\nAfter integration, you normally describe your intent instead of running memory commands\nmanually.\n\n### Retrieve context before work\n\n> Before you start, load the relevant memory for this project and summarize the\n> conventions and recent decisions.\n\n### Propose a durable memory\n\n> Remember that production ARM64 binaries must be built locally and uploaded to the\n> server. Add it as a project convention with the deployment discussion as evidence.\n\nThe agent creates a candidate. Nothing becomes active until it is approved.\n\n### Update existing knowledge\n\n> Find the deployment memory and update it with the new health-check command. Do not\n> create a duplicate.\n\n### Open the review surface\n\n> Open the memory dashboard so I can review the candidates.\n\nThe shared integration skill teaches supported agents when to retrieve, propose, update,\nand avoid duplicating memory.\n\n## Obsidian Vault\n\nThe configured Obsidian Vault is the human-readable, durable source of truth—not an\nexport of an opaque database. Every managed memory is a normal Markdown file with YAML\nproperties, a stable memory ID, lifecycle metadata, and project-aware links.\n\nInitialization adds an Obsidian workspace without replacing your existing files:\n\n- templates for decisions, facts, solutions, conventions, preferences, entities,\n  references, session summaries, and project overviews;\n- native Bases views for the candidate review queue, active knowledge, recent updates,\n  decisions by project, verified solutions, and lifecycle history;\n- project overview hubs that embed project memories and remain stable as notes move\n  through candidate, active, rejected, superseded, or archived folders;\n- wikilinks and reciprocal supersession links for backlinks and graph navigation;\n- request-time synchronization, so ordinary content and descriptive-property edits made\n  in Obsidian become searchable without a background service;\n- optional watcher synchronization for immediate indexing when the background service\n  is enabled.\n\nObsidian is optional: the same Markdown remains readable and editable with any text\neditor. Lifecycle and access-policy changes should still go through the dashboard, MCP,\nor CLI so validation, optimistic concurrency, and audit records remain intact.\n\n## Dashboard\n\nThe authenticated dashboard is the owner control plane for:\n\n- project overview and recent project activity;\n- one-at-a-time candidate review and editing;\n- duplicate and conflict comparison;\n- memory search and lifecycle management;\n- Standard, Protected, and Sealed classification;\n- access-request approval and active-grant revocation;\n- sealed-memory owner unlocks with audit records;\n- project switching, system health, reindexing, and backups;\n- opening canonical Markdown in Obsidian or the local file viewer.\n\n![Candidate review in the Global Agent Memory dashboard showing evidence, confidence, conflict detection, and owner approval actions](docs/assets/dashboard-review.png)\n\n<p align=\"center\"><sub>Candidate review keeps evidence and conflicts visible before an owner approves durable memory.</sub></p>\n\nDashboard launch URLs expire after 60 seconds, can be exchanged only once, and create a\nlocal HttpOnly session. Do not share a launch URL.\n\n## Memory visibility and access\n\n| Level         | Default agent behavior                                                           | Owner control                                                                     |\n| ------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |\n| **Standard**  | Included in ordinary scoped retrieval                                            | Normal candidate and lifecycle review                                             |\n| **Protected** | Excluded from default results; an agent receives only a neutral relevance signal | Owner selects exact memories, permission, duration, policy, and eligible projects |\n| **Sealed**    | Body is not indexed or returned through agent tools                              | One owner-unlocked dashboard view; every access is audited                        |\n\nProtected grants are scoped by purpose, project, agent, permission, exact memory IDs,\nand duration. Owners may downgrade a request but never elevate it. Agents may request\nand poll for access, but they cannot approve, deny, or revoke grants.\n\n> [!IMPORTANT]\n>\n> Protected and Sealed memory are not secret managers. Never store passwords,\n> credentials, private keys, API keys, or bearer tokens in Global Agent Memory.\n\n## How it works\n\n```mermaid\nflowchart LR\n    A[Claude Code] -->|stdio MCP| H[Hybrid MCP runtime]\n    B[Codex] -->|stdio MCP| H\n    C[CLI] -->|MCP| H\n\n    H -->|daemonless default| E[Application and domain services]\n    H -.->|optional localhost daemon| D[Watcher, shared indexing, dashboard]\n    D --> E\n    E --> V[Markdown Vault<br/>canonical state]\n    E --> I[SQLite FTS5 and sqlite-vec<br/>generated state]\n    E --> O[Ollama embeddings<br/>optional]\n    D --> W[Local dashboard<br/>owner control]\n```\n\nThe `global-memory-mcp` bridge prefers a healthy shared daemon and otherwise runs the\nsame MCP server and application services in-process. Both paths expose the same frozen\nMCP V1 contract and use the same canonical Markdown and generated SQLite state. The\noptional daemon owns real-time Vault watching, background embedding retries, HTTP MCP,\nand dashboard sessions. Agent memory operations do not depend on its availability.\n\nThe dependency direction is:\n\n```text\ntransport and client adapters → application services → domain\n```\n\nVault, SQLite, vectors, embeddings, Git, Watchdog, and client integrations are adapters.\nThe domain layer does not depend on them.\n\n## MCP interface\n\nThe MCP interface is the only public AI-facing API. Clients do not read the Vault,\nSQLite database, vectors, token, or runtime logs directly.\n\nThe frozen V1 discovery snapshot currently contains **17 tools**, **10 resources**, and\n**6 prompts**.\n\n| Capability                | MCP tools                                                                                                   |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| Retrieval                 | `memory_search`, `memory_context`, `memory_get`, `memory_status`                                            |\n| Candidate and lifecycle   | `memory_remember`, `memory_update`, `memory_approve`, `memory_reject`, `memory_supersede`, `memory_archive` |\n| Navigation and operations | `memory_open`, `memory_dashboard_open`, `memory_reindex`, `memory_projects`, `memory_tags`                  |\n| Protected access          | `memory_access_request`, `memory_access_status`                                                             |\n\nAll mutations are replay-safe through `request_id`. Updates use optimistic concurrency,\nand a stale version fails with `VERSION_CONFLICT` instead of silently overwriting newer\nknowledge.\n\nSee [MCP Contract V1](docs/mcp-contract-v1.md) and the generated\n[`contracts/mcp/v1/`](contracts/mcp/v1/) schemas for the complete contract.\n\n## CLI examples\n\nThe CLI uses the same MCP path as connected agents. It prefers the optional daemon and\notherwise invokes the frozen MCP contract through an in-memory transport. It never\nbypasses access control by reading Markdown or SQLite directly.\n\n```shell\n# Check health\nglobal-memory status\nglobal-memory doctor\n\n# Register and detect a project\nglobal-memory project add my-project --root \"$HOME/Projects/my-project\"\nglobal-memory project detect \"$HOME/Projects/my-project\"\n\n# Search and build bounded task context\nglobal-memory search \"deployment rollback\" --project my-project\nglobal-memory context \"Prepare the next release\" --project my-project --token-budget 3000\n\n# Create a review candidate\nglobal-memory remember \\\n  \"Release rollback procedure\" \\\n  \"Use the blue-green rollback task and verify both health endpoints.\" \\\n  --type reference \\\n  --scope project \\\n  --project my-project\n\n# Rebuild generated indexes\nglobal-memory reindex --full\n\n# Back up canonical Markdown\nglobal-memory backup \"$HOME/Backups/global-agent-memory.zip\"\n```\n\nRun `global-memory --help` or `global-memory <command> --help` for the complete command\nreference.\n\n## Security model\n\nGlobal Agent Memory is designed as a local service, not a remotely exposed memory API.\n\n- The optional HTTP and dashboard server is restricted to `127.0.0.1`.\n- Streamable HTTP requires a generated local bearer token.\n- The token, database, logs, locks, and generated state remain outside the Vault.\n- Token files use user-only permissions.\n- Dashboard sessions are short-lived, local, and HttpOnly.\n- Paths are confined to the configured Vault and checked against traversal and symlink\n  escape.\n- Ordinary logs redact bodies, prompts, embeddings, secrets, and authorization material.\n- Generated state can be removed and rebuilt from canonical Markdown.\n- Agent-facing retrieval is fail-closed for Protected and Sealed memories.\n\nPlease report security issues according to [SECURITY.md](SECURITY.md).\n\n## Development\n\nClone the repository, then install Python and dashboard dependencies:\n\n```shell\nuv sync\nnpm ci --prefix dashboard\n```\n\nRun the standard quality gate:\n\n```shell\nmake check\n```\n\nThe gate covers Ruff formatting and linting, strict MyPy, the TypeScript production\nbuild, unit/integration/contract/E2E tests, coverage, and deterministic MCP contract\nregeneration.\n\nUseful focused commands:\n\n```shell\nmake unit\nmake integration\nmake contract\nmake e2e\nmake dashboard-check\nmake performance   # opt-in 10,000-note performance suite\n```\n\nWhen changing the MCP contract:\n\n```shell\nmake contract-generate\nmake contract-check\n```\n\nContributions are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md), and keep\nchanges compatible with the frozen V1 contract unless a parallel major contract is\nintentionally introduced.\n\n## Community and roadmap\n\n- Ask usage questions and share agent workflows in\n  [GitHub Discussions](https://github.com/ozankasikci/global-agent-memory/discussions).\n- Pick up a scoped contribution from the\n  [`good first issue`](https://github.com/ozankasikci/global-agent-memory/labels/good%20first%20issue)\n  or [`help wanted`](https://github.com/ozankasikci/global-agent-memory/labels/help%20wanted)\n  queues.\n- Follow planned distribution, security, and integration work on the\n  [public roadmap](https://github.com/ozankasikci/global-agent-memory/issues?q=is%3Aissue%20state%3Aopen%20label%3Aroadmap).\n- If the project is useful, starring the repository helps other agent-tooling users\n  discover it.\n\n## Documentation\n\n| Guide                                                                 | Purpose                                                                               |\n| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| [Operations](docs/operations.md)                                      | Installation, daemon management, diagnostics, backup, restore, upgrades, and recovery |\n| [Claude Code](docs/claude-code.md)                                    | Managed skill and MCP registration for Claude Code                                    |\n| [Codex](docs/codex.md)                                                | Managed skill and MCP registration for Codex                                          |\n| [Hermes Agent](docs/hermes-agent.md)                                  | Manual stdio MCP registration and verified retrieval smoke test                       |\n| [Architecture](docs/architecture.md)                                  | Dependency direction and hybrid runtime ownership model                               |\n| [Configuration](docs/configuration.md)                                | Platform-native locations, environment variables, and security defaults               |\n| [MCP Contract V1](docs/mcp-contract-v1.md)                            | Public compatibility and response-envelope rules                                      |\n| [Testing](docs/testing.md)                                            | Standard, performance, and live acceptance strategy                                   |\n| [Performance baseline](docs/performance-baseline.md)                  | 10,000-note benchmark methodology and budgets                                         |\n| [Release checklist](docs/release-checklist-v1.md)                     | Current V1 acceptance evidence and remaining release gates                            |\n| [Implementation plan](<docs/global-memory-implementation-plan(1).md>) | Original product requirements and phased implementation plan                          |\n\n## Project status\n\nGlobal Agent Memory is under active V1 development and is distributed through\n[GitHub Releases](https://github.com/ozankasikci/global-agent-memory/releases) and\n[PyPI](https://pypi.org/project/global-memory-mcp/). The current GitHub release and\nsource package version is `0.1.7`; the MCP contract version is `v1`.\n\nThe product name is **Global Agent Memory**. The technical identifiers `global-memory`,\n`global-memory-mcp`, `global-memoryd`, `global_memory`, and `product: global-memory`\nremain stable for V1 compatibility.\n\nSee the [V1 release checklist](docs/release-checklist-v1.md) for verified scenarios and\nremaining live acceptance work.\n\n## License\n\nGlobal Agent Memory is available under the MIT license declared in\n[pyproject.toml](pyproject.toml).\n",
  "bytes": 23697,
  "sha": "514c988a0500768a113c77934791e46a137f79012bf38a2b05db1534a682fc10",
  "repo_slug": "ozankasikci/global-agent-memory",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ozankasikci_global_agent_memor_3bc789cb/readme"
}