{"id":50869873,"url":"https://github.com/event4u-app/agent-memory","last_synced_at":"2026-06-15T04:03:49.904Z","repository":{"id":351412272,"uuid":"1210642589","full_name":"event4u-app/agent-memory","owner":"event4u-app","description":"Persistent, trust-scored project memory for AI coding agents — MCP server + CLI, backed by PostgreSQL + pgvector.","archived":false,"fork":false,"pushed_at":"2026-05-25T11:01:36.000Z","size":1125,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T13:04:00.849Z","etag":null,"topics":["agent-memory","ai-agents","llm-memory","mcp","pgvector","postgres","trust-scoring","typescript"],"latest_commit_sha":null,"homepage":"https://github.com/event4u-app/agent-memory","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/event4u-app.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-14T16:03:40.000Z","updated_at":"2026-05-25T11:01:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"c29144d6-00b6-48e6-96ec-145768574104","html_url":"https://github.com/event4u-app/agent-memory","commit_stats":null,"previous_names":["event4u-app/agent-memory"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/event4u-app/agent-memory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/event4u-app%2Fagent-memory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/event4u-app%2Fagent-memory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/event4u-app%2Fagent-memory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/event4u-app%2Fagent-memory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/event4u-app","download_url":"https://codeload.github.com/event4u-app/agent-memory/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/event4u-app%2Fagent-memory/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34346870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-memory","ai-agents","llm-memory","mcp","pgvector","postgres","trust-scoring","typescript"],"created_at":"2026-06-15T04:03:47.476Z","updated_at":"2026-06-15T04:03:49.898Z","avatar_url":"https://github.com/event4u-app.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @event4u/agent-memory\n\nPersistent, trust-scored project memory for AI coding agents — MCP server + CLI,\nbacked by PostgreSQL + pgvector.\n\n\u003e **Status:** V1 complete · 251 tests passing · Node ≥ 20 · Postgres 15+ with pgvector\n\n## 60-second quick-start\n\n\u003c!-- Regenerate with docs/media/record-demo.sh · instructions in docs/media/README.md --\u003e\n\u003c!-- demo.gif is intentionally NOT committed by default; uncomment the line\n     below once docs/media/demo.gif has been recorded. --\u003e\n\u003c!-- ![60-second setup demo](docs/media/demo.gif) --\u003e\n\n**What it is.** A durable, trust-scored memory store your coding agent can\nwrite to and query over MCP or HTTP-style CLI — so the LLM stops forgetting\nyour architecture decisions between sessions.\n\n**Run it** (no Node install on the host required):\n\n```bash\ncurl -o docker-compose.yml \\\n  https://raw.githubusercontent.com/event4u-app/agent-memory/main/docker-compose.yml\ndocker compose up -d agent-memory\n```\n\n**Prefer a ready-made reference stack?** Clone [`event4u-app/with-agent-memory`](https://github.com/event4u-app/with-agent-memory) — minimal Docker Compose + smoke test, zero editing required.\n\n**Check it.** One command verifies the DB, pgvector, and migrations:\n\n```bash\ndocker compose exec agent-memory memory doctor\n# → 4 ok · 1 warn · 0 fail · 0 skipped   (exit 0)\n```\n\n**Query it.** Every command emits JSON. Pipe it into `jq`, or into your\nagent:\n\n```bash\ndocker compose exec agent-memory memory retrieve \"how are invoices calculated?\"\n```\n\n**Integrate it.** `agent-memory` is **stack-agnostic** — it runs as a\nDocker sidecar next to any application, as a Node library when you want\ndirect calls, or as a standalone CLI from any language that can spawn a\nsubprocess. Pick the guide that matches how you want to talk to it:\n\n- **Any language / shell** → [`docs/consumer-setup-generic.md`](docs/consumer-setup-generic.md)\n- **Docker sidecar (recommended — works with any stack)** → [`docs/consumer-setup-docker-sidecar.md`](docs/consumer-setup-docker-sidecar.md)\n- **Node / TypeScript (programmatic API)** → [`docs/consumer-setup-node.md`](docs/consumer-setup-node.md)\n- **Any MCP client** (Claude Desktop, Cursor, Cline, Augment…) → point it at\n  `command: docker`, `args: [\"compose\", \"exec\", \"-i\", \"agent-memory\", \"memory\", \"mcp\"]`\n\n## Why\n\nLLMs forget. They hallucinate project facts. They restate preferences you\ncorrected last week. `agent-memory` gives your agent a durable,\n**trust-scored** memory of your project — architecture decisions, bug\npatterns, coding conventions — with automatic decay, evidence-gated\npromotion, and invalidation when code changes.\n\n## What you get\n\n- **26 MCP tools** — any agent that speaks MCP (Claude Desktop, Cursor, Cline, Augment…) can retrieve, ingest, invalidate, and promote memory.\n- **25 CLI commands** — pure JSON on stdout, safe for scripts and CI.\n- **4-tier memory** — Working → Episodic → Semantic → Procedural, auto-consolidated at session end.\n- **Evidence-gated promotion** — nothing enters `validated` without passing gate criteria (file/symbol exists, diff impact, tests linked).\n- **Ebbinghaus decay** — memories fade unless used; ADRs never decay.\n- **Privacy filter** — strips secrets, API keys, PII before anything hits the DB.\n\n## Non-goals\n\nTo keep expectations honest:\n\n- **Not a general-purpose vector database.** It is scoped specifically to\n  agent-facing project knowledge with trust scoring, decay, and\n  invalidation. If you need raw similarity search over arbitrary data,\n  use a dedicated vector DB.\n- **Not a pretrained model or dataset.** Memories are authored by your\n  agents and humans — nothing ships preloaded.\n- **Not a SaaS.** The whole thing runs in your infrastructure (Docker\n  sidecar, or embedded as a Node library). No hosted tier.\n- **Not a replacement for project documentation.** README, ADRs, and\n  architecture docs still belong in your repo. Memory complements them,\n  it does not replace them.\n\n## Integrate with your project\n\n`agent-memory` does not care what language your application is written\nin. Pick the transport that fits how your code already talks to external\ntools, then follow the matching guide.\n\n| Transport | Guide | Works for | Runnable example |\n|---|---|---|---|\n| **Docker sidecar + CLI** | [`docs/consumer-setup-docker-sidecar.md`](docs/consumer-setup-docker-sidecar.md) | any language that can shell out | [`examples/laravel-sidecar/`](examples/laravel-sidecar/) |\n| **Node programmatic API** | [`docs/consumer-setup-node.md`](docs/consumer-setup-node.md) | Node / TypeScript apps | [`examples/node-programmatic/`](examples/node-programmatic/) |\n| **MCP stdio** | [`docs/consumer-setup-generic.md`](docs/consumer-setup-generic.md) | any MCP-aware agent client | — |\n| **MCP over HTTP/SSE** | [`docs/mcp-http.md`](docs/mcp-http.md) | remote agents (GitHub Actions, Slack webhooks, browser playgrounds) | — |\n\n\u003e Need a quick language-neutral overview first? Start at\n\u003e [`docs/consumer-setup-generic.md`](docs/consumer-setup-generic.md).\n\u003e\n\u003e Both runnable examples boot with a single `docker compose up -d` and\n\u003e end with a working `memory health → status: ok`.\n\n## Installation\n\n### As a dev dependency (recommended)\n\n`agent-memory` is primarily a **development-time** tool — it stores what an\nAI coding agent learns about *your* repository, and its surface area (CLI,\nMCP server, Postgres sidecar) is scoped to engineers and their agents.\nInstall it as a dev dependency so it stays out of production bundles:\n\n```bash\nnpm install --save-dev @event4u/agent-memory\n```\n\nYou must also provide Postgres with pgvector. Easiest path — copy the bundled\ndocker-compose:\n\n```bash\ncurl -o docker-compose.yml \\\n  https://raw.githubusercontent.com/event4u-app/agent-memory/main/examples/consumer-docker-compose.yml\ndocker compose up -d postgres\n```\n\nSee [`examples/`](examples/) for ready-to-copy `docker-compose.yml` and\nGitHub Actions snippets.\n\n### Using it in production\n\nProduction use is supported but not the default target. If you ship\nagent-memory as part of a running service (e.g. a backend that queries its\nown memory at runtime), install it as a regular dependency instead:\n\n```bash\nnpm install @event4u/agent-memory\n```\n\nEverything documented in this README applies the same way — only the\ndependency scope changes.\n\n### From source (development)\n\n```bash\ngit clone https://github.com/event4u-app/agent-memory.git\ncd agent-memory\nnpm install\ndocker compose up -d postgres\nnpm run db:migrate\nnpm test\n```\n\n## Quick start\n\n```bash\n# 1. Start Postgres (local dev)\ndocker compose up -d postgres\n\n# 2. Run migrations\nnpm run db:migrate\n\n# 3. Smoke test — returns JSON { status: \"ok\", features: [...] }\nnpx tsx src/cli/index.ts health\n\n# 4. Ingest a memory\nnpx tsx src/cli/index.ts ingest \\\n  --type architecture_decision \\\n  --title \"Use event sourcing for orders\" \\\n  --summary \"All order state changes go through domain events.\" \\\n  --repository my-app\n\n# 5. Retrieve\nnpx tsx src/cli/index.ts retrieve \"how do orders work?\"\n```\n\nAfter `npm run build` + `npm install -g .` the `memory` binary is on your PATH.\n\n## Environment\n\nThe five variables most consumers touch in week one. Everything else has\nsane defaults — see [`docs/configuration.md`](docs/configuration.md) for\nthe full matrix.\n\n| Variable | Default | Purpose |\n|---|---|---|\n| `DATABASE_URL` | `postgresql://memory:memory_dev@localhost:5433/agent_memory` | Postgres connection string. |\n| `REPO_ROOT` | `process.cwd()` | Repo root the file/symbol validators resolve against. Inside the sidecar container this must match the volume mount (typically `/workspace`). |\n| `EMBEDDING_PROVIDER` | `bm25-only` | `openai`, `gemini`, `voyage`, `local`, or `bm25-only` — see [Embeddings](#embeddings) below. |\n| `MEMORY_TRUST_THRESHOLD_DEFAULT` | `0.6` | Minimum `trust_score` surfaced by retrieval. Lower to see low-trust entries during debugging. |\n| `MEMORY_TOKEN_BUDGET` | `2000` | Default progressive-disclosure budget per retrieval call. |\n| `MEMORY_ENTROPY_THRESHOLD` | `4.5` | Shannon-entropy cutoff (bits/char) for the residual `HIGH_ENTROPY_DETECTED` heuristic. Calibrated against the corpus in `tests/fixtures/entropy-corpus/` — see [`docs/security/entropy-calibration.md`](docs/security/entropy-calibration.md). |\n| `MEMORY_ENTROPY_MIN_LENGTH` | `20` | Minimum quoted-string length (chars) before the entropy heuristic fires. |\n| `MEMORY_AUTO_MIGRATE` | `true` (Docker image) | Container entrypoint runs `memory migrate` on startup. Set to `false` for ephemeral CLI containers or externally managed schemas. Host installs run `memory migrate` manually. |\n\nA ready-to-copy template lives in [`.env.example`](.env.example).\n\n## Embeddings\n\nRetrieval ranks results by fusing lexical (BM25) and semantic (vector)\nscores via RRF. The semantic half plugs in via `EMBEDDING_PROVIDER`:\n\n| Provider | Status | Leaves your network? | When to pick it |\n|---|---|---|---|\n| `bm25-only` (default) | implemented | no | Zero-config onboarding, air-gapped installs, or when lexical recall is enough. |\n| `openai` | implemented | **yes** — ingested text is sent to OpenAI | Best general-purpose quality; requires `OPENAI_API_KEY`. |\n| `gemini` | scaffolded, falls back to `bm25-only` | **yes** (when implemented) | Tracked for a future release. Set `GEMINI_API_KEY`; runtime currently logs a warning and uses `bm25-only`. |\n| `voyage` | scaffolded, falls back to `bm25-only` | **yes** (when implemented) | Same as `gemini`. Set `VOYAGE_API_KEY`. |\n| `local` | reserved for on-device model, not yet implemented | no | Placeholder today; currently resolves to `bm25-only`. |\n\nSee the [provider chain source](src/embedding/factory.ts) for the exact\nfallback rules. The privacy filter\n([`src/ingestion/privacy-filter.ts`](src/ingestion/privacy-filter.ts))\nstrips secrets, API keys, and detected PII **before** text is sent to\nany provider — but operators picking `openai` (or a future network-bound\nprovider) should treat memory content as \"leaves the network\". Full\nenv matrix in [`docs/configuration.md`](docs/configuration.md).\n\n## Connect to your AI agent\n\nEvery MCP-aware agent works. Two options, pick by what you already have:\n\n### Option A — Docker sidecar (recommended, no Node install)\n\nWorks for any project regardless of language. Assumes you ran\n`docker compose up -d agent-memory` from the\n[60-second quick-start](#60-second-quick-start).\n\n`~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"agent-memory\": {\n      \"command\": \"docker\",\n      \"args\": [\"compose\", \"-f\", \"/abs/path/to/your/project/docker-compose.yml\",\n               \"exec\", \"-i\", \"agent-memory\", \"memory\", \"mcp\"]\n    }\n  }\n}\n```\n\n\u003e **`REPO_ROOT` with the sidecar.** `docker-compose.yml` already sets\n\u003e `REPO_ROOT=/workspace` inside the container (matching the `.:/workspace`\n\u003e bind mount) — do **not** pass a host path here. If you want to override\n\u003e the host mount source, export `REPO_ROOT=/host/path/to/repo` on the\n\u003e host *before* `docker compose up -d`; compose substitutes it into the\n\u003e volume definition without ever reaching the container environment.\n\n### Option B — Installed npm binary\n\nAfter `npm install -g @event4u/agent-memory` (or `npm install --save-dev`\nin a Node-based project), run the MCP server directly:\n\n```json\n{\n  \"mcpServers\": {\n    \"agent-memory\": {\n      \"command\": \"memory\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"DATABASE_URL\": \"postgresql://memory:memory_dev@localhost:5433/agent_memory\",\n        \"REPO_ROOT\": \"/abs/path/to/your/project\"\n      }\n    }\n  }\n}\n```\n\n### Cursor / Cline / Augment\n\nEach agent has its own MCP config file, but the shape is identical to the\nClaude examples above. Check your agent's docs for the file path; keep\n`command`, `args`, and `env` as shown.\n\n## How it works\n\n### Trust lifecycle\n\n```mermaid\nflowchart LR\n    A[tool / agent] -- propose --\u003e Q[quarantine]\n    Q -- gate criteria --\u003e V[validated]\n    V -- decay / TTL --\u003e S[stale]\n    V -- signature drift --\u003e I[invalidated]\n    V -- confirmed wrong --\u003e P[poisoned]\n    S -.-\u003e|refresh on hit| V\n    S --\u003e I\n    I --\u003e AR[archived]\n    P -- cascade --\u003e AR\n    Q -- reject --\u003e R[rejected] --\u003e AR\n```\n\nEvery entry enters `quarantine`. Gate criteria (≥1 evidence ref, all\nvalidators green) promote it to `validated`. From there it decays on\nTTL, can be invalidated on code drift, or poisoned if confirmed wrong\n— with a cascade through entries derived from it.\n\n### 4-tier memory\n\n```mermaid\nflowchart TB\n    subgraph Working[Working · session]\n        O[observations]\n    end\n    subgraph Episodic[Episodic · ~30d]\n        E[session summaries]\n    end\n    subgraph Semantic[Semantic · 90d–∞]\n        M[validated entries]\n    end\n    subgraph Procedural[Procedural · ∞]\n        R[repeated workflows]\n    end\n    O -- session end --\u003e E\n    E -- consolidation --\u003e M\n    M -- recurrence --\u003e R\n```\n\nConsolidation from Working to Episodic happens at session end; promotion\nto Semantic is evidence-gated. Procedural entries are never decayed.\n\n### ASCII fallback (environments without Mermaid)\n\n```\npropose → quarantine ──gate criteria──▶ validated ──decay/TTL──▶ stale\n                                            │                      │\n                                         evidence               cascade\n                                            ▼                      ▼\n                                      invalidated ─────────▶ archived\n```\n\n- **Trust-scored, not boolean** — every entry has a `trust_score` (0–1). Retrieval filters by threshold (default `0.6`).\n- **Progressive disclosure** — L1 (index) / L2 (summary) / L3 (full) fits retrieval to your token budget.\n- **Auto-invalidation** — `git diff` between two refs marks linked memories stale; signature drift triggers hard invalidation.\n- **Rollback** — when a memory is confirmed wrong (`poison`), the cascade marks every derived task for review.\n\nFull details: [`docs/data-model.md`](docs/data-model.md). Unfamiliar\nterm? See the [glossary](docs/glossary.md).\n\n## Memory types\n\nNine canonical types cover most project knowledge:\n\n| Type | Example |\n|---|---|\n| `architecture_decision` | \"Use event sourcing for orders\" |\n| `domain_rule` | \"An invoice cannot be modified after issuance\" |\n| `coding_convention` | \"All services live in `src/services/*`, one per file\" |\n| `bug_pattern` | \"N+1 query when iterating `order.items` without `with()`\" |\n| `refactoring_note` | \"Migration from v1 API to v2 in progress — avoid v1 in new code\" |\n| `integration_constraint` | \"Stripe webhook timeout is 10s, not 30s\" |\n| `deployment_warning` | \"Run migration X before deploying service Y\" |\n| `test_strategy` | \"Auth module uses contract tests, not unit tests\" |\n| `glossary_entry` | \"'Dispatch' = external partner handoff, not internal queue\" |\n\n## Tools \u0026 commands\n\n### MCP tools (26)\n\n| Category | Tools |\n|---|---|\n| **Retrieval** | `memory_retrieve`, `memory_retrieve_details` |\n| **Ingestion** | `memory_ingest`, `memory_propose`, `memory_promote` |\n| **Trust** | `memory_validate`, `memory_verify`, `memory_invalidate`, `memory_poison`, `memory_deprecate`, `memory_explain`, `memory_history` |\n| **Session lifecycle** | `memory_session_start`, `memory_observe`, `memory_observe_failure`, `memory_session_end`, `memory_stop`, `memory_run_invalidation` |\n| **Quality** | `memory_health`, `memory_diagnose`, `memory_audit`, `memory_review`, `memory_contradictions`, `memory_resolve_contradiction`, `memory_merge_duplicates`, `memory_prune` |\n\n### CLI commands (25)\n\n`retrieve` · `ingest` · `propose` · `promote` · `validate` · `invalidate` ·\n`poison` · `rollback` · `verify` · `health` · `status` · `diagnose` ·\n`audit` · `explain` · `history` · `review` · `contradictions` · `policy` ·\n`export` · `import` · `migrate` · `init` · `doctor` · `serve` · `mcp`\n\nFull reference: [`docs/cli-reference.md`](docs/cli-reference.md).\n\n## Typical workflow\n\n```bash\n# Agent observes a bug fix — create a proposal with evidence\nmemory propose --type bug_pattern \\\n  --title \"N+1 on invoice list\" \\\n  --summary \"Iterating order.items without with('items') triggers N+1.\" \\\n  --repository my-app \\\n  --source \"PR#234\" --confidence 0.7 \\\n  --scenario \"invoice-export\"\n\n# After 3+ future decisions reference it and tests pass → promote\nmemory promote \u003cproposal-id\u003e\n\n# Later: code change may invalidate it (diff target is always HEAD)\nmemory invalidate --from-git-diff --from-ref main\n\n# A week later: entry turns out to be wrong — poison + rollback cascade\nmemory poison \u003cuuid\u003e \"reason the entry is wrong\"\nmemory rollback \u003cuuid\u003e\n```\n\n## Configuration\n\nAll settings have sensible defaults. Essentials:\n\n| Variable | Default | Notes |\n|---|---|---|\n| `DATABASE_URL` | `postgresql://memory:memory_dev@localhost:5433/agent_memory` | Postgres |\n| `REPO_ROOT` | `cwd` | for file / symbol validators |\n| `EMBEDDING_PROVIDER` | `bm25-only` | fallback chain to BM25 if no API key |\n| `MEMORY_TRUST_THRESHOLD_DEFAULT` | `0.6` | minimum score to be served |\n\nFull reference (all env vars, decay overrides, CI examples):\n[`docs/configuration.md`](docs/configuration.md).\n\n## Project structure\n\n```\nsrc/\n├── config.ts            # env → config\n├── types.ts             # types, enums, trust lifecycle\n├── db/                  # Postgres connection, migrations, repositories\n├── retrieval/           # BM25 + vector + RRF + progressive disclosure\n├── trust/               # scoring, transitions, validators, promotion, poison\n├── ingestion/           # privacy filter, candidate, pipeline, scanners\n├── consolidation/       # working → episodic → semantic promotion\n├── invalidation/        # git diff, drift, TTL, rollback\n├── quality/             # metrics, dedup, contradictions, archival\n├── embedding/           # provider abstraction + fallback chain\n├── infra/               # circuit breaker, retry\n├── mcp/                 # MCP server (stdio), 24 tools\n└── cli/                 # commander-based CLI\n\ndocs/\n├── data-model.md        # Postgres schema, trust lifecycle, tiers, decay\n├── glossary.md          # every term with source-of-truth pointer\n├── cli-reference.md     # all CLI commands with examples\n└── configuration.md     # every env var\n\nexamples/\n├── consumer-docker-compose.yml\n└── consumer-ci.yml\n```\n\n## Testing\n\n```bash\nnpm test                 # 251 tests, vitest\nnpm run test:watch       # watch mode\nnpm run typecheck        # tsc --noEmit (strict)\nnpm run lint             # biome check\n```\n\n## Compatibility\n\nRuntime dependencies only:\n\n| `agent-memory` | Node | Postgres | Docker |\n|---|---|---|---|\n| 1.1.x (unreleased) | ≥ 20 | 15+ with pgvector | 24+ with Compose v2 |\n\nEvery `retrieve()` and `health()` response carries `contract_version: 1`.\nCallers pinned to v1 MAY continue on a v2 response if they ignore unknown\nfields; breaking renames bump the major. See the\n[retrieval contract spec](agents/roadmaps/archive/from-agent-config/road-to-retrieval-contract.md).\n\nFor the full cross-axis matrix (runtime, contract, companion-package\npairings, breaking changes per release) see\n[`docs/compatibility-matrix.md`](docs/compatibility-matrix.md).\n\n### Optional companion — `@event4u/agent-config`\n\n`agent-memory` stands on its own. It can be paired with\n[`@event4u/agent-config`](https://github.com/event4u-app/agent-config) —\na separate package that ships agent behaviour (skills, rules, commands)\n— and both were designed to combine, but neither depends on the other.\nUse `agent-memory` with any agent that speaks MCP or any codebase that\ncan shell out to the CLI.\n\nSee [`docs/integration-agent-config.md`](docs/integration-agent-config.md)\nfor how the two packages combine, or\n[`examples/with-agent-config/`](examples/with-agent-config/) for a\nsmoke-tested reference setup.\n\n## Changelog\n\nRelease history, rename mappings, and upgrade notes live in\n[`CHANGELOG.md`](CHANGELOG.md) (Keep-a-Changelog format). Start there\nwhen upgrading across minor versions.\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for dev setup, coding\nconventions, commit format (Conventional Commits), and the full\nverification pipeline that CI runs.\n\n## Security\n\nReport vulnerabilities via GitHub's [private advisory form](https://github.com/event4u-app/agent-memory/security/advisories/new),\nnot public issues. Supported versions and disclosure policy are in\n[`SECURITY.md`](SECURITY.md).\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevent4u-app%2Fagent-memory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevent4u-app%2Fagent-memory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevent4u-app%2Fagent-memory/lists"}