logLABSCO SUMMARY
It refuses to hand back an edit that no longer exists.
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.
What it is
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.
What you get
- 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 withsince_cursorfor 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
diffis validated against the current file, and thedifffield is deliberately not truncated so validation stays accurate on large changes - A local web UI over sessions, timeline and insights —
npx wormhole ui
Requirements
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.
Setup effort
One command — npx wormhole-mcp
USE CASES
Switching tools mid-task without losing the thread
Start a session in one agent and log as you go; the next tool pulls the same recent events and knowledge rather than starting cold.
Avoiding two agents editing the same file
Check for conflicts before making changes, so you find out before the overwrite rather than after.
Keeping what you learned the hard way
Save the decision or pitfall as knowledge and let intent-aware search surface it next time, instead of rediscovering it.
Catching up without burning context
Fetch only events newer than your cursor, at minimal detail, filtered to the files you care about.
Clearing out a project's history
Clean by project or by session rather than wiping everything, when the log has outlived the work.
11 tools
Listed in project docs. Your client may show a different list.
get_recentget_tagssave_knowledgesearch_project_knowledgecheck_conflictscleanupstart_sessionend_sessionlist_sessionsswitch_sessionBEFORE YOU INSTALL
What to know first
Tools you get
11 tools named in the project's documentation.
Requires
npx on PATH
Where it runs
Both documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
npx wormhole-mcpMCP Clients
Claude Code
{
"mcpServers": {
"wormhole": {
"command": "npx",
"args": [
"-y",
"wormhole-mcp"
]
}
}
}GitHub Copilot
{
"servers": {
"wormhole": {
"command": "npx",
"args": [
"-y",
"wormhole-mcp"
]
}
}
}