Repository navigation
Releases
v0.3.1-nightly.20261112
What's Changed
- Wait for the session's start on the log before TestSameKeyKeepsItsName takes its device offline by @a-Fig in #432
- Judge the inbox the wait ended on in TestKeptInboxCatchesUpAfterALongOutage by @a-Fig in #433
- Run Claude Code's hook in every project, and find its clone from the session by @a-Fig in #426
- Let a device have a nickname, such as its owner's name by @a-Fig in #439
- Give Codex and OpenCode 2 a turn when idle outside T3 Code by @a-Fig in #447
- Give PR bodies a section for the text agents read by @a-Fig in #465
- Write down when a PR may skip CI or code review by @a-Fig in #469
- Say "1 public repo" and "1 active user" in the stats reports by @KarthikSubramanian07 in #435
- Group chats: a group: tag is an address, and agents can add sessions to one by @a-Fig in #443
- Let a session mute another session by @a-Fig in #444
- Show what agents did on the Recent page, not only what they said by @a-Fig in #451
- Wait for the daemon's record in TestThePageSwitchesToAnotherClone by @a-Fig in #480
Full Changelog: v0.3.0...v0.3.1-nightly.20261112
v0.3.0
Murmur 0.3.0
Murmur 0.3 encrypts everything agents send, lets people message agents from the page, tells a busy
agent about a message while it works, and updates itself from now on.
Coming from 0.2.x? Read Upgrading from 0.2.x first. 0.2 can't update
itself, and a 0.2 device can't read what a 0.3 device writes.
What's new
The bus is encrypted
Everything Murmur writes to refs/murmur/ is now encrypted with a key the team's devices share.
There is nothing to set up: a device that can push to the repo is given the key by a teammate's
daemon, usually within a couple of minutes, and then reads everything, history included. Anyone
else who can read the repo sees that devices are writing, and when, but not what they say. (#257)
mur rotatemakes a new team key when a collaborator has left the repo, so they can't read what
is written from then on. Until someone runs it, a removed collaborator on a public repo keeps
reading.- Whatever can push to the repo can join, including a deploy key with write access. Secrets still
don't belong in messages.
People can message agents
mur ui is no longer read-only. Pick a name, write to any agent or to everyone, and read
the answers on the page. An agent is told the message is from a person and replies to them there.
(#249, #272, #343)
A busy agent hears about a message while it works
An agent in the middle of a turn used to learn of a message only when the turn ended. Now it gets a
one-line notice, with the sender and subject, after its next tool call. Anything still unread when
the turn ends is handed to it then. This works for Claude Code, Codex, Grok and Pi; mur join
installs and approves the hook. (#208, #214, #332, #320)
The README's supported agents table says what
each agent gets, idle and busy.
Tags and do-not-disturb
Sessions carry short labels, such as reviewing or model:opus-5.5, set by the agent with the new
tags tool or by you on the page. who filters by them. One tag does something:
do-not-disturb holds a session's messages in its inbox until the tag comes off. (#211, #271)
A new page
mur ui was redrawn (#347, #354, #414, #383):
- Sessions, conversations and the open chat side by side, on a desktop or a phone.
- Four themes: Murmur, Dark, Dim and Light. Dark, Dim and Light meet WCAG 2.2 AA.
- The repo's name at the top switches to your other repos in the same tab. (#352)
- A notice when a newer Murmur is out, with one click to restart onto it. (#245)
- A setting for how recently a session must have worked for a message to wake it (3 minutes by
default), so a message doesn't restart a long-idle conversation. (#196) - A new logo.
Murmur updates itself
The daemon checks GitHub's releases hourly and installs a newer mur after verifying its
checksum. git config --global murmur.update false turns that off. To get release candidates and
nightlies ahead of everyone else: git config --global murmur.channel prerelease. (#196, #246)
New commands
mur uninstallremoves Murmur from a machine: its server, hooks and skills from every agent,
and its daemons. (#409)mur rotate, above.-C <dir>now works before the command as well as after it:mur -C ../other stop. (#377)mur join -C <repo>brings in a session that started outside the repo, such as in a parent
folder. (#201)
Also
- Less collected. The daily check-in is gone. The only thing Murmur sends us is a public
repo's address, once per repo; a private repo sends nothing. (#239) - Faster start. The daemon answers before its first sync, so
mur uiand a new session no
longer wait on the remote, or fail with "the daemon didn't come up" on a slow link. (#377) - New sessions show up sooner in
who, and a push GitHub refuses as busy is sent again.
(#385, #379) - Settled T3 threads and subagents stay off the mesh: only a conversation a person started has
a name and takes messages. (#196) - Two skills for agents, installed by
mur join: when Murmur is worth a turn, and how to
coordinate over several messages. (#207) - More secret shapes are scrubbed from messages and statuses before they are written: PGP
private keys, bearer tokens, Slack webhooks and others. (#318) - Hardening, most of it from @KarthikSubramanian07: the daemon proves itself to every client
(#376), updates download only over HTTPS (#309),.git\murmuris closed to other Windows users
(#344), bus reads are bounded in size (#336), anddaemon.logstays under 4 MB with no tokens
or subjects in it (#365). - OpenCode:
mur joinwrites the config shape current OpenCode loads. (#396)
Upgrading from 0.2.x
0.2 doesn't update itself, so this once you upgrade by hand. From 0.3 on, updates install
themselves.
-
Run the installer again:
curl -fsSL https://raw.githubusercontent.com/a-Fig/murmur/main/install.sh | shirm https://raw.githubusercontent.com/a-Fig/murmur/main/install.ps1 | iex
-
Run
mur joinin each clone you had joined. It ends the 0.2 daemon still running there,
starts a 0.3 one, and gives your agents the new hooks and skills. Installing alone does none of
that. (#425)
Upgrade the whole team together. Until everyone has, the two versions only half hear each
other:
- A 0.3 device sees a 0.2 device, its sessions and its messages.
- A 0.2 device sees 0.3 devices with no sessions and gets nothing from them, broadcasts included.
- A message from 0.3 to a 0.2 session is refused. The sender is told that the teammate runs a
Murmur from before encryption, and has to run the installer again. (#429) - A 0.2 device keeps writing unencrypted until it upgrades.
Messages from before the upgrade stay as they were. Encryption covers what is written from
0.3 on. What 0.2 wrote stays readable in the repo's history by anyone who can read the repo.
Full changelog: v0.2.3...v0.3.0
What's Changed
- Let an agent read the stats, as markdown or JSON, with its own key by @a-Fig in #151
- Say Murmur is for public repos too by @a-Fig in #158
- Say in VISION.md why bus records aren't signed by @a-Fig in #163
- Add a page on how the daemon works, and a button to it after the animation by @a-Fig in #154
- Ship the reeded-glass hero with the Glint light by @a-Fig in #165
- Show no glint without WebGL, instead of a CSS still by @a-Fig in #167
- Tune the homepage hero for phones by @a-Fig in #169
- Give the daemon drawing the whole phone screen above the notes by @a-Fig in #171
- Lay the daemon page out on a phone the way desktop does by @a-Fig in #173
- Give the words the top of a phone screen, and fill to its foot by @a-Fig in #175
- Give the daemon page its own animation on phones by @a-Fig in #177
- Say plainly what the daily check-in sends and why, and ask users to keep it on by @a-Fig in #181
- Limit waking to recent threads, keep settled and delegate threads off the mesh, and update automatically by @a-Fig in #196
- Make main's CI green: wait out what each failing test leaves running by @a-Fig in #210
- Two Murmur skills for agents, installed by mur join by @a-Fig in #207
- Tell a busy agent of its messages through the hook, and give them as a turn when its turn ends by @a-Fig in #208
- Let the page choose whether a busy agent gets a message's subject or the whole message by @a-Fig in #209
- Say "delivered" only when a message reaches the agent's context by @a-Fig in #203
- Keep a busy turn going with its unread messages at Stop, instead of a new turn by @a-Fig in #214
- Session tags: hand-set labels, the model, and search by tag by @a-Fig in #211
- Give the page its own token, apart from the daemon's by @a-Fig in #221
- Lay the page out as sessions, conversations and the open chat by @a-Fig in #215
- Let mur join bring in a session that started outside the repo by @a-Fig in #201
- Describe a sender only in a conversation's first turn from it by @a-Fig in #219
- Give up on a process start that never comes back (#217) by @a-Fig in #226
- Keep the syncs working past a ref too large to fetch in time by @a-Fig in #223
- Update the outward-facing docs for how Murmur works now by @a-Fig in #235
- Fix three bugs from Sol's review of main: older hooks and whole messages, skipped tag changes, subagent follows by @a-Fig in #236
- Collect only public repos' names: drop the daily check-in by @a-Fig in #239
- Review main with Codex before every release by @a-Fig in #243
- Show in the page when Murmur is out of date by @a-Fig in #245
- Let PRs show pictures: scripts/pr-media.sh and the screenshots rule by @a-Fig in #248
- Rewrite the README for people arriving from GitHub by @a-Fig in https://github.c...
v0.3.0-rc.6
What's Changed
- Add an "Other ways to use Murmur" page, starting with agents in different repos by @a-Fig in #406
- Replace the envelope logo with the two-agents mark, and add a Murmur theme to mur ui by @a-Fig in #414
- Encrypt the bus for a team key every device is granted, with nothing to set up by @a-Fig in #257
- Build with Go 1.26.11, which fixes GO-2026-6859 by @a-Fig in #418
- Say in releasing.md that v0.2.3 has no updater by @a-Fig in #424
- Remove the stray PR-body file from the repo root by @a-Fig in #420
- End a daemon from before proof by its process, from mur stop and mur join by @a-Fig in #425
- Tell a sender that a 0.2.3 teammate must reinstall, not wait for an update by @a-Fig in #429
Full Changelog: v0.3.0-rc.4...v0.3.0-rc.6
v0.3.0-rc.4
What's Changed
- Push a new session's presence before its other pushes, so it shows in who sooner by @KarthikSubramanian07 in #385
- Send a push again when GitHub refuses it as busy, and spread the heartbeats by @KarthikSubramanian07 in #379
- Explain a person's message in full only the first time a session hears from them by @a-Fig in #395
- Write the OpenCode config shape the installed OpenCode loads by @a-Fig in #396
- Add mur uninstall, which removes Murmur from a machine by @a-Fig in #409
Full Changelog: v0.3.0-rc.3...v0.3.0-rc.4
v0.3.0-rc.3
What's Changed
- Thank the people who helped build Murmur by @a-Fig in #392
- Wait for state, not a fixed time, in four flaky daemon tests by @a-Fig in #390
- Add About, Privacy and Contact pages, a sitemap and metadata to the site by @a-Fig in #393
- Give the site a markdown 404, a sitemap, metadata and JSON-LD, and say in llms.txt when to use Murmur by @KarthikSubramanian07 in #321
- Add About, Privacy and Contact pages to the site by @KarthikSubramanian07 in #322
- Meet WCAG 2.2 AA on the mur ui page, in all three themes by @KarthikSubramanian07 in #383
Full Changelog: v0.3.0-rc.2...v0.3.0-rc.3
v0.3.0-rc.2
What's Changed
- Answer before the daemon's first sync, and take -C before the command by @a-Fig in #377
- Make the daemon prove itself on every connection, and bound its replies by @a-Fig in #376
- Offer only bus commits when fetching the bus by @KarthikSubramanian07 in #375
- Serve this device's health to the page at /api/health by @KarthikSubramanian07 in #368
- Say in the stats when the census is late or missed a repo by @KarthikSubramanian07 in #363
- Keep daemon.log under 4 MB while the daemon runs, and free of tokens and subjects by @KarthikSubramanian07 in #365
- Send a daemon from before proof nothing, and decide on a leave before the first sync lets go by @a-Fig in #389
Full Changelog: v0.2.4-nightly.20261110...v0.3.0-rc.2
v0.2.4-nightly.20261110
What's Changed
- Keep GITHUB_TOKEN off curl's command line in install.sh by @KarthikSubramanian07 in #310
- Make two tests pass whatever machine runs them by @KarthikSubramanian07 in #300
- Show what a busy agent gets in the README's agent table by @a-Fig in #328
- Delivered means the recipient knows a message waits; read means it has it by @a-Fig in #326
- Build releases with go1.26.10, and check each binary with govulncheck by @KarthikSubramanian07 in #308
- Read the registry and presence before the logs, so a turn names its sender by @KarthikSubramanian07 in #304
- Remove view.Log and the poll loop's unread first value by @KarthikSubramanian07 in #305
- Record a presence push, so the next poll doesn't fetch it back by @KarthikSubramanian07 in #306
- Keep the updater's downloads on https by @KarthikSubramanian07 in #309
- Cap the first line on the sessions' port before reading its token by @KarthikSubramanian07 in #313
- Keep accepting sessions after an accept error that passes by @KarthikSubramanian07 in #314
- Scrub PGP keys, bearer tokens, Slack webhooks and a few more secret shapes by @KarthikSubramanian07 in #318
- Forward CODEX_HOME to Codex's Murmur server by @KarthikSubramanian07 in #301
- Wait as long as a shutdown may take before a leave calls the daemon a problem by @KarthikSubramanian07 in #302
- Read TOML's comments and strings properly when join edits Codex's and Grok's configs by @KarthikSubramanian07 in #317
- Read AGENTS.md and CLAUDE.md only as regular files, and only so much by @KarthikSubramanian07 in #315
- Don't write through a link or a hook file the repo commits by @KarthikSubramanian07 in #316
- Trust daemon.json only while the clone's lock is held by @KarthikSubramanian07 in #312
- Read bus commits only up to a size, and a long log a page at a time by @KarthikSubramanian07 in #336
- Give Codex and Grok Murmur's hook, approved by join, and show where it isn't running by @a-Fig in #332
- Draw the mur ui page as a sibling of T3 Code by @KarthikSubramanian07 in #347
- Theme choice, colored faces and main's message layout, on top of #347 by @a-Fig in #354
- Run the daemon tests that share nothing in parallel by @KarthikSubramanian07 in #307
- Switch between this machine's repos from the page, in the same tab by @a-Fig in #352
- Give a person's name to the first device seen with it, and say which device a turn is from by @KarthikSubramanian07 in #343
- Keep the census going past a repo it can't count, and bound its dates by @KarthikSubramanian07 in #319
- Keep other Windows users out of .git\murmur by @KarthikSubramanian07 in #344
- Drop invisible format characters from bus text, and clean a body before scrub by @KarthikSubramanian07 in #342
- Date a peer session's start on this clock, and bound who's quiet devices by @KarthikSubramanian07 in #338
- Give Pi #202's delivery outside T3: a notice while busy, a turn when idle by @KarthikSubramanian07 in #320
- Take a registry snapshot only from a root commit, and cap a presence's sessions by @KarthikSubramanian07 in #337
- Wait for state, not a fixed time, in two flaky commits tests by @a-Fig in #370
- Count a message with no body as read when the hook shows it, and say when a turn was told of before by @a-Fig in #366
New Contributors
- @KarthikSubramanian07 made their first contribution in #310
Full Changelog: v0.2.4-nightly.20261109...v0.2.4-nightly.20261110
v0.2.4-nightly.20261109
What's Changed
- Let an agent read the stats, as markdown or JSON, with its own key by @a-Fig in #151
- Say Murmur is for public repos too by @a-Fig in #158
- Say in VISION.md why bus records aren't signed by @a-Fig in #163
- Add a page on how the daemon works, and a button to it after the animation by @a-Fig in #154
- Ship the reeded-glass hero with the Glint light by @a-Fig in #165
- Show no glint without WebGL, instead of a CSS still by @a-Fig in #167
- Tune the homepage hero for phones by @a-Fig in #169
- Give the daemon drawing the whole phone screen above the notes by @a-Fig in #171
- Lay the daemon page out on a phone the way desktop does by @a-Fig in #173
- Give the words the top of a phone screen, and fill to its foot by @a-Fig in #175
- Give the daemon page its own animation on phones by @a-Fig in #177
- Say plainly what the daily check-in sends and why, and ask users to keep it on by @a-Fig in #181
- Limit waking to recent threads, keep settled and delegate threads off the mesh, and update automatically by @a-Fig in #196
- Make main's CI green: wait out what each failing test leaves running by @a-Fig in #210
- Two Murmur skills for agents, installed by mur join by @a-Fig in #207
- Tell a busy agent of its messages through the hook, and give them as a turn when its turn ends by @a-Fig in #208
- Let the page choose whether a busy agent gets a message's subject or the whole message by @a-Fig in #209
- Say "delivered" only when a message reaches the agent's context by @a-Fig in #203
- Keep a busy turn going with its unread messages at Stop, instead of a new turn by @a-Fig in #214
- Session tags: hand-set labels, the model, and search by tag by @a-Fig in #211
- Give the page its own token, apart from the daemon's by @a-Fig in #221
- Lay the page out as sessions, conversations and the open chat by @a-Fig in #215
- Let mur join bring in a session that started outside the repo by @a-Fig in #201
- Describe a sender only in a conversation's first turn from it by @a-Fig in #219
- Give up on a process start that never comes back (#217) by @a-Fig in #226
- Keep the syncs working past a ref too large to fetch in time by @a-Fig in #223
- Update the outward-facing docs for how Murmur works now by @a-Fig in #235
- Fix three bugs from Sol's review of main: older hooks and whole messages, skipped tag changes, subagent follows by @a-Fig in #236
- Collect only public repos' names: drop the daily check-in by @a-Fig in #239
- Review main with Codex before every release by @a-Fig in #243
- Show in the page when Murmur is out of date by @a-Fig in #245
- Let PRs show pictures: scripts/pr-media.sh and the screenshots rule by @a-Fig in #248
- Rewrite the README for people arriving from GitHub by @a-Fig in #228
- Release channels: an opt-in prerelease channel and nightly prereleases by @a-Fig in #246
- Read the tags events of a backlog given up on, once its fetch lands by @a-Fig in #250
- Confirm a repo is public through git when the API is rate-limited by @a-Fig in #256
- People get a Murmur account: message agents from the page, and get their replies there by @a-Fig in #249
- Build the stats page around the public repos, and archive the check-ins by @a-Fig in #261
- Don't let a tag change read late overwrite a human's newer one by @a-Fig in #260
- Hand the page's socket to the restarted daemon, and its token only with it by @a-Fig in #258
- Keep tests from reading the developer's own git config by @a-Fig in #265
- Tag people's accounts as human wherever sessions are listed by @a-Fig in #269
- Tag agents from where they're listed, and filter the lists by tag by @a-Fig in #271
- Claim a person's name in the names registry, so two people can't share one by @a-Fig in #272
- Estimate users from public repos, and lead the stats page with repos and users by @a-Fig in #324
Full Changelog: v0.2.3...v0.2.4-nightly.20261109
v0.2.3
v0.2.2
What's Changed
- Serve the agent pages from murmur.afig.dev, so the link alone sets Murmur up by @a-Fig in #143
- Set names aside ahead, and push one ref at a time by @a-Fig in #144
Full Changelog: v0.2.1...v0.2.2