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.
context(hold=["src/routes/login.ts"])
thread login limiter
held src/routes/login.ts
stale 1 note to re-checkcontext#
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.
| Argument | Use |
|---|---|
repo_path | Optional. The project folder. Defaults to the folder the agent started ACM in. |
hold | Optional. Repo-relative paths to claim, added to what you hold. [] releases yours. |
thread | Optional. Join that thread, from open threads or your brief. |
done | Optional. 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.
| Argument | Use |
|---|---|
text | Required. The note to share with the project. |
tier | Optional. "short" (default, kept 7 days) or "long" for decisions and conventions. |
supersedes | Optional. The note this one replaces, confirms, or corrects. |
repo_path | Optional. The project folder. |
note_add(text="Chose Postgres over SQLite", tier="long")note_search#
Finds notes and delegated jobs' results.
Search before asking someone to repeat a decision. Results include notes and the results of delegated jobs.
| Argument | Use |
|---|---|
query | Required. Text to search for. |
repo_path | Optional. The project folder. |
note_search(query="database")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.
| Argument | Use |
|---|---|
limit | Optional. Maximum chats to return; defaults to 20. |
repo_path | Optional. 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.
| Argument | Use |
|---|---|
source | Optional. One agent: codex, cursor, claude, or opencode. |
chat | Optional. The chat id the user chose. |
repo_path | Optional. 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.
| Argument | Use |
|---|---|
summary | Required. The problem, understandable without this chat. |
tasks | Required. Briefs with to and task. done_when, context, and wait are optional. |
repo_path | Optional. 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.
| Argument | Use |
|---|---|
repo_path | Optional. The project folder. |
delegate_wait()