MCP lets agents connect. ACP tells them how to enter a project safely.
Every AI coding agent loses context between sessions. ACP gives agents shared project context — what was decided, what must not change, and how to hand off work safely. Local-first, file-based, open source.
Agent forgets what was decided. Every session starts from zero. You become a courier of information between your own tools.
Agent doesn't know where it is. It "discovers" your infrastructure from scratch and reaches wrong conclusions. Your agent tried to deploy on the wrong server because it didn't know the architecture.
Agent breaks frozen decisions you set last week. Architectural constraints, security policies, team conventions — all forgotten. You repeat the same warnings every session.
No existing tool solves all three. MCP gives tools. CLAUDE.md is static. Cursor Rules don't carry memory. ACP fills the gap.
npx acp init
Creates .acp/ directory with rules.yaml, environment.yaml, and config. Rules are committed to git. Journal stays local.
npx acp start
Local REST server on localhost:3075. No cloud, no signup, no config.
POST /session/start
Agent gets full context on entry: rules, recent discoveries, blockers, last session summary, environment snapshot.
POST /session/end
Agent writes a summary. Next agent starts and sees everything. No manual copy-paste. Context lives in the project.
Source: .acp/rules.yaml — committed to git. Agent must respect, cannot override.
Source: .acp/journal.jsonl — local, in .gitignore. Agent reads previous work, publishes new findings.
Source: .acp/environment.yaml — committed to git. Agent knows where things are without guessing.
# 1. Initialize ACP in your project cd your-project npx acp init # 2. Define your project rules cat >> .acp/rules.yaml << 'EOF' frozen: - id: arch-001 text: "Never modify the database schema without review" source: team-policy never: - id: sec-001 text: "Never commit secrets or API keys" always: - id: qa-001 text: "Run tests before committing" EOF # 3. Start ACP server npx acp start # → ACP Server v0.1.0 on http://127.0.0.1:3075 # 4. Connect your agent curl -X POST http://localhost:3075/session/start \ -H "Content-Type: application/json" \ -d '{ "agent": {"id": "claude-code"}, "scope": {"task": "fix-auth-bug"}, "intent": {"summary": "Fix token expiry in auth middleware"} }' # 5. Agent gets full context — rules, memory, environment
Works with Claude Code, Cursor, Copilot, or any agent with HTTP access.
Add .acp/journal.jsonl to your .gitignore.
| ACP | MCP | CLAUDE.md | Cursor Rules | Mem0 | |
|---|---|---|---|---|---|
| Project rules | ✓ | — | ✓ | ✓ | — |
| Session memory | ✓ | — | — | — | ✓ |
| Environment snapshot | ✓ | — | — | — | — |
| Cross-agent handoff | ✓ | — | — | — | — |
| Tool execution | — | ✓ | — | — | — |
| Local-first | ✓ | ✓ | ✓ | ✓ | △ |
| Git-native | ✓ | — | ✓ | ✓ | — |
ACP is complementary to MCP, not competitive.
MCP is the execution plane — agents can do things.
ACP is the context plane — agents know things.
They work together.
Agent joins and receives full project context.
{
"agent": { "id": "claude-code", "kind": "coding-agent" },
"scope": { "task": "fix-auth-bug" },
"intent": { "summary": "Fix token expiry in auth middleware" }
}
{
"session": { "session_id": "sess_20260405_a1b2", "started_at": "..." },
"rules": { "frozen": [...], "never": [...], "always": [...] },
"memory": { "recent": [...], "blockers": [...], "last_session": {...} },
"environment": { "services": [...], "important_files": [...] }
}
Agent publishes a finding during work.
{
"session_id": "sess_20260405_a1b2",
"type": "discovery",
"text": "Bug is in middleware auth.ts line 42 — missing token expiry check",
"confidence": "high"
}
Agent leaves and writes a summary for the next agent.
{
"session_id": "sess_20260405_a1b2",
"summary": "Fixed token expiry. Tests pass. Blocked on Redis config.",
"files_changed": ["src/middleware/auth.ts"],
"result": "partial"
}