Documentation

Keep the work moving.

Set up ACM once. Continue a chat in another agent, share a decision, or put the team to work.

Setup

You need Node 24 or newer. Run:

Setup adds ACM to Cursor, and to Codex, Claude Code, and OpenCode when they are installed. It says which it skipped. Installed one later? Run setup again. Restart your agents, and ACM is available in every project. Each agent starts ACM through npx, which runs the latest release when the npm registry answers within 3 seconds.

Coming from 0.2? 0.3 starts a fresh database (~/.agent-cowork-memory/acm.sqlite3). 0.2's notes stay in state.sqlite3, untouched, and are not carried over.

Configure the server manually

Register this stdio server in your agent's MCP settings, replacing codex with your agent's name:

Current harness names are codex, claude, cursor and opencode.

Watch delegated work in Herdr

With Herdr installed, delegated agents get their own terminal panes. Attach to ACM's session:

Without Herdr, delegated agents run in the background and ACM still reports their results.

Everyday use

Ask your agent in plain language. It calls the tools for you.

Continue another chat

Use ACM to continue from Codex.

If several chats match, pick one from the list your agent shows. It reads that chat and joins its thread.

Delegate work

Tell codex to add rate limiting to /api/login, cursor to write the tests, and opencode to update the docs.

Each agent gets a brief, claims the files it edits and reports back. ACM supports one agent of each kind per folder. The demo uses the current four integrations; that is not a permanent limit on compatibility.

If a job needs approval, the delegating agent brings the requested action back to you. If it asks a question in a Herdr pane, answer there. ACM's delegate_wait tool reports those states; it does not approve actions.

Remember a decision

Use ACM to remember we chose Postgres over SQLite.

Later, ask an agent to search ACM for the database decision. Durable notes use the long tier; short progress notes expire after seven days by default.

MCP tools

The seven tools below are calls your agent makes. ACM already knows which chat it is in, and repo_path defaults to the project folder. Preview results are abbreviated for readability.

Small surface,
shared memory.

examplecontext
context(hold=["src/routes/login.ts"])
thread  login limiter
held   src/routes/login.ts
stale  1 note to re-check
Read context usage

context#

Your thread, its timeline, the project's notes, open threads, recent jobs, and held files.

Call before working and again before editing a file. After the first call, notes include only what is new. A path in busy belongs to someone else; leave it. stale lists notes whose files changed: re-check each with note_add.

context arguments
ArgumentUse
repo_pathOptional. The project folder. Defaults to the folder the agent started ACM in.
holdOptional. Repo-relative paths to claim, added to what you hold. [] releases yours.
threadOptional. Join that thread, from open threads or your brief.
doneOptional. true closes your thread.
context(hold=["src/routes/login.ts"])

note_add#

Saves a note every agent sees, and shows notes it may contradict.

If the result has check, those notes are on the same topic. When yours makes one false, call again with supersedes set to its id. Job results are saved already; do not copy them into notes.

note_add arguments
ArgumentUse
textRequired. The note to share with the project.
tierOptional. "short" (default, kept 7 days) or "long" for decisions and conventions.
supersedesOptional. The note this one replaces, confirms, or corrects.
repo_pathOptional. The project folder.
note_add(text="Chose Postgres over SQLite", tier="long")

chats#

Lists recent chats from every agent in the project, and marks the ones ACM started.

Returns the agent, chat id, last update, folder, thread, first message, and job when ACM started the chat. Pass the chat the user picks to resume.

chats arguments
ArgumentUse
limitOptional. Maximum chats to return; defaults to 20.
repo_pathOptional. The project folder.
chats(limit=20)

resume#

Asks which chat to continue when there are several, then reads it and joins its thread.

If the result contains choose, show the choices and wait. Call resume again with that chat id. Never choose for them. A resolved chat returns its recent messages and puts you on that chat's thread.

resume arguments
ArgumentUse
sourceOptional. One agent: codex, cursor, claude, or opencode.
chatOptional. The chat id the user chose.
repo_pathOptional. The project folder.
resume(source="codex")

delegate#

Starts other agents with a brief, in Herdr panes or in the background, and waits.

Targets are codex, claude, cursor, and opencode, one of each kind per folder. A busy agent comes back busy: ask whether to wait or reassign, and never choose. If the result has next, keep calling delegate_wait. Copy the card at the start of the result into the reply.

delegate arguments
ArgumentUse
summaryRequired. The problem, understandable without this chat.
tasksRequired. Briefs with to and task. done_when, context, and wait are optional.
repo_pathOptional. The project folder.
delegate(
  summary="Add rate limiting to login",
  tasks=[{
    "to": "codex",
    "task": "Add the login limiter",
    "done_when": "Login returns 429 after 5 attempts"
  }]
)

delegate_wait#

Keeps waiting on this chat's delegated agents.

Waits up to 45 seconds more and reports each job. Call again while jobs are running. For needs_approval, bring the action back to the user. For blocked, tell them what needs an answer in the agent's Herdr pane. Copy the card into the reply.

delegate_wait arguments
ArgumentUse
repo_pathOptional. The project folder.
delegate_wait()