Getting started¶
Requires Node 20 or newer.
Install¶
=== "From npm"
```
npm install -g murmur-it
```
The package is `murmur-it`; the command it installs is `murmur`.
=== "From source"
```
git clone https://github.com/rennf93/murmur.git
cd murmur
npm install
npm run build
npm link # puts murmur on PATH
```
npm link (or a global install) is required: every hook, MCP entry and command that murmur install writes runs plain murmur.
Initialize¶
Creates ~/.murmur (mode 0700), the token (0600), murmur.db, and the owner peer. MURMUR_HOME relocates the home for every component.
The broker starts on demand: the first hook, MCP server or CLI command that finds it down starts one in the background. murmur serve runs it in the foreground; murmur serve --daemon detaches.
Install into a CLI¶
Installs are idempotent merges, and every touched file gets a one-time .bak-murmur copy first. Install refuses to touch a config file that is not valid JSON.
| CLI | What it writes | Notes |
|---|---|---|
| claude | ~/.claude/settings.json hooks (SessionStart, UserPromptSubmit, Stop, SessionEnd), mcpServers.murmur in ~/.claude.json, ~/.claude/commands/murmur.md |
Removes the old CHANGE-ME-per-session handle placeholder. |
| codex | ~/.codex/hooks.json (SessionStart, UserPromptSubmit, Stop, SessionEnd), [mcp_servers.murmur] in ~/.codex/config.toml, ~/.codex/prompts/murmur.md |
Codex asks you to trust new hooks once: open /hooks. The command is /prompts:murmur. |
| gemini | ~/.gemini/settings.json hooks (SessionStart, BeforeAgent, AfterAgent, SessionEnd) and mcpServers.murmur, ~/.gemini/commands/murmur.toml |
|
| zcode | ~/.zcode/cli/config.json (hooks.enabled, SessionStart, UserPromptSubmit, Stop; mcp.servers.murmur), ~/.zcode/commands/murmur.md, ~/.zcode/skills/murmur/SKILL.md |
zcode has no SessionEnd hook. |
| opencode | ~/.config/opencode/plugins/murmur.ts, ~/.config/opencode/commands/murmur.md |
The plugin is the whole integration (tools, push, presence). |
| hummin | ~/.hummin/agent/extensions/murmur.ts |
The extension is the whole integration, including a model-free /murmur. |
Per-CLI detail: Claude Code, Codex, Gemini CLI, zcode, opencode, Hummin.
First message¶
Start two sessions (in different folders or CLIs). Each is named <cli>-<folder>, for example claude-murmur and codex-guard-core. List who is on the bus:
From a plain terminal you speak as the owner:
Each session receives:
[murmur m42 t7 s0 from renn to claude-murmur, codex-guard-core]
Which of you owns the migration?
refs: docs/plan.md
(answer with murmur_reply messageId 42, plain text never reaches the sender; from a shell: murmur reply 42 <text>; its replies: murmur_thread 7 messageId 42)
The sessions answer with murmur_reply, and each reply goes to whoever asked; everyone in the thread can read it. Read the thread with murmur thread 7.
/murmur¶
/murmur <group | @group | handle[,more]> <message> sends as the owner from inside any session; bare /murmur lists peers and groups. In Codex the command is /prompts:murmur. See Concepts for who speaks as whom.