That is the feature that separates this from a log file. An agent reading a shared history is at risk of acting on a change someone else has since replaced; validating each file edit against the current file at retrieval time removes that class of error rather than documenting it. The token discipline is visible too — delta queries by cursor, three detail levels, and compact output — because a shared log is worthless if reading it costs the context you were trying to save.
A memory layer for the case where more than one agent is working on the same project — parallel subagents, or you switching between Claude, Copilot and Cursor mid-task. One universal `log` tool records every action type, sessions keep work isolated, and conflict detection tells you when two agents touched the same files. Its distinguishing behaviour is stale-event rejection: a logged file edit is validated against the current file state on retrieval, so an agent never acts on a change that has since been overwritten.
- One tool for every action type, tagged and searchable — `cmd_run`, `file_edit`, `decision`, `test_result`, `feedback`, `todos`, `plan_output` — `log`
- Recent events pulled back with the detail level you want (`minimal`, `normal`, `full`), filtered by file path, action type or tag, and with `since_cursor` for delta queries so you only fetch what is new — `get_recent`
- The tag vocabulary in use, with event counts — `get_tags`
- Durable learnings stored as decision, pitfall, convention or constraint, and retrieved by intent-aware search — `save_knowledge`, `search_project_knowledge`
- A check for whether another agent has touched the files you are about to edit — `check_conflicts`
- Named sessions started and ended with a summary — `start_session`, `end_session`
- Cleanup scoped to a project, a session or everything — `cleanup`
- Stale file edits filtered on the way out: an edit logged with a `diff` is validated against the current file, and the `diff` field is deliberately not truncated so validation stays accurate on large changes
- A local web UI over sessions, timeline and insights — `npx wormhole ui`
No account and no key. `npx wormhole-mcp` runs it with nothing installed; a global `npm install -g wormhole-mcp` or a source build are the alternatives. For Claude Code the config goes in `~/.claude/claude_code_config.json`, for GitHub Copilot in `.vscode/mcp.json` — the same server, two client files, which is the point. Claude Code users can install a bundled plugin that ships the server config together with a skill, or copy the standalone skill into `.claude/skills/`. The project describes itself as early-stage with APIs that may change.
One command — npx wormhole-mcp
