{
  "markdown": "<p align=\"center\">\n  <img src=\"./assets/banner.svg\" alt=\"ACMI v1.5 banner\" width=\"960\">\n</p>\n\n# ACMI - Agentic Context Memory Interface\n\n[![npm](https://img.shields.io/npm/v/@madezmedia/acmi.svg)](https://www.npmjs.com/package/@madezmedia/acmi)\n[![Protocol v1.5](https://img.shields.io/badge/Protocol-v1.5-2d4a3e)](./SPEC.md)\n[![MCP v1.5.0](https://img.shields.io/badge/MCP-v1.5.0-2d4a3e)](./mcp/README.md)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white)](https://nodejs.org)\n[![Conformance: 36/36](https://img.shields.io/badge/Conformance-36%2F36-2d4a3e)](./tests)\n\n> The coordination backbone for AI agent fleets. Three Redis keys - Profile, Signals, Timeline.\n\nACMI is the open protocol for persistent agent context. Version `v1.5` formalizes **Fleet Comms Protocol**: atomic pre/post events, wake-directives, handoff-ack chains, and correlation-aware timelines that make multi-agent work auditable instead of anecdotal.\n\nEvery entity stores exactly three things an LLM needs to make decisions:\n\n```text\nProfile  -> who   (identity, preferences, stable facts)\nSignals  -> now   (current state, blockers, next action)\nTimeline -> then  (append-only event log from every source)\n```\n\nThe shape is intentionally small:\n\n- **Profile**: stable identity and configuration.\n- **Signals**: mutable state and synthesized working memory.\n- **Timeline**: immutable history, ordered by time.\n\nThis repo ships the public ACMI package, the MCP server subpackage, and the docs that keep the fleet aligned:\n\n- `@madezmedia/acmi` - the TypeScript SDK, CLI, and conformance suite.\n- `mcp/` - `@madezmedia/acmi-mcp`, the MCP server for hosts that need direct ACMI access.\n- `SPEC.md` - canonical protocol spec.\n- `CHANGELOG.md` - release history, including the `v1.5.0` fleet-comms update.\n- `docs/` - operator guide, cheatsheet, and protocol notes.\n\n## What v1.5 adds\n\nThe `v1.5.0` release aligns the fleet around a shared event language:\n\n- atomic commit pre/post events\n- roundtable coordination and wake-directives\n- `source`, `kind`, `correlationId`, `summary` event envelope discipline\n- signal freshness checks before action\n- `agent:<id>` source naming across the fleet\n\n## Install\n\n```bash\nnpm install @madezmedia/acmi\n```\n\n## Quick start\n\n```ts\nimport { createAcmi } from \"@madezmedia/acmi\";\nimport { InMemoryAdapter } from \"@madezmedia/acmi/adapters/in-memory\";\n\nconst acmi = createAcmi(new InMemoryAdapter());\n\nawait acmi.profile.set(\"user:mikey\", {\n  name: \"Michael Shaw\",\n  role: \"operator\",\n  location: \"Charlotte, NC, USA\",\n});\n\nawait acmi.signals.set(\"user:mikey\", \"current_focus\", \"ACMI v1.5 fleet sync\");\n\nawait acmi.timeline.append(\"user:mikey\", {\n  ts: Date.now(),\n  source: \"user:mikey\",\n  kind: \"coord-note\",\n  correlationId: \"acmiReadmeRefresh-0001\",\n  summary: \"[coord-note @fleet] README aligned to v1.5 and local assets.\",\n});\n```\n\n## Production adapters\n\n```ts\nimport { createAcmi } from \"@madezmedia/acmi\";\nimport { UpstashAdapter } from \"@madezmedia/acmi/adapters/upstash\";\n\nconst acmi = createAcmi(\n  new UpstashAdapter({\n    url: process.env.UPSTASH_REDIS_REST_URL!,\n    token: process.env.UPSTASH_REDIS_REST_TOKEN!,\n  })\n);\n```\n\n| Adapter | Use case | Edge-compatible |\n|---|---|---|\n| `@madezmedia/acmi/adapters/in-memory` | tests, examples, local dev | n/a |\n| `@madezmedia/acmi/adapters/upstash` | Vercel, Workers, edge runtimes | yes |\n| `@madezmedia/acmi/adapters/redis` | self-hosted Redis / Node | no |\n\n## Fleet protocol\n\nACMI v1.5 uses a shared event format so every significant action can be traced:\n\n```json\n{\n  \"ts\": 1780000000000,\n  \"source\": \"agent:codex\",\n  \"kind\": \"handoff-ack\",\n  \"correlationId\": \"codexGrantDraft-1780000000000\",\n  \"summary\": \"[handoff-ack @ops-center] Draft ready for review.\"\n}\n```\n\nRules that matter in practice:\n\n- use `[kind-tag @recipient]` in summaries\n- keep `source` prefixed with `agent:`, `user:`, or `system:`\n- link follow-up events with `parentCorrelationId`\n- keep the timeline append-only\n- verify signals before acting when the workflow depends on current state\n\n## Related surfaces\n\n- [ACMI Product / live demo](https://v3-ten-beta.vercel.app/acmi/)\n- [ACMI Operator Surface](https://swarm.madezmedia.com)\n- [ACMI MCP server README](./mcp/README.md)\n- [Operator Guide](./docs/OPERATOR-GUIDE.md)\n- [ACMI Cheatsheet](./docs/ACMI-CHEATSHEET.md)\n- [Changelog](./CHANGELOG.md)\n\n## The fleet\n\nACMI is used across the Mad EZ Media fleet as the common context layer for:\n\n- `ops-center` - orchestration and routing\n- `bentley` - comms and governance\n- `codex` - coding and implementation support\n- `hermes` - deep scans and guardian checks\n- `android-worker` - mobile bridge and notifications\n\n## License\n\n[MIT](./LICENSE) - Copyright Michael Shaw / Mad EZ Media\n",
  "bytes": 4848,
  "sha": "7e02115efcf2c786b62c19511d58ef454d43c05c9ebc509c95326eae3ae0577b",
  "repo_slug": "madezmedia/acmi",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_madezmedia_acmi_mcp_a81331f9/readme"
}