Skip to content

Releases: hallettmiket/murmurent

murmurent 2026.11.0

Choose a tag to compare

@hallettmiket hallettmiket released this 02 Nov 19:57

To upgrade: uv tool upgrade murmurent, then murmurent install --hooks,
then restart Claude Code and the dashboard (⏻ Stop dashboard, then start
it again). From a copy of the repository: git checkout main && git pull
first, then the same two steps. The install re-links every ready repository
itself; nothing else to run.

This release is the outcome of a review of how repositories, projects and
membership work (docs/repos_and_projects_plan.md, issues 252 to 260, 269).
The rules it settles: a repository may belong to several projects; membership
of a project means access to every repository it lists, granted and revoked
together; readiness travels with the clone; each person sees exactly their
projects; a collaborator from another lab can finish joining from the message
they receive.

Added

  • A repository may belong to several projects (#253). A note about it
    goes to every project's channel; its data stays with its home project, the
    first that listed it, and the other projects read that folder. New
    murmurent project add-repo <project> <folder> [--role] [--home]; it and
    release-repo are for the PI or the project lead.
  • add-repo --create-remote (#269) creates a private <org>/<repo> on
    GitHub for a clone that has none, pushes it, records the remote and grants
    every member access in one step. project status shows each repository's
    remote.
  • Membership grants and revokes access on every repository (#255).
    Adding a member grants collaborator access on every GitHub repository the
    project lists; removing one revokes it everywhere, removes them from the
    channel and tells them by direct message. A lead who is not the PI can
    remove members; the PI's project reconcile --apply signs the revocation.
    Leaving the lab (group-remove-member, or deactivation on the dashboard)
    removes the person from every project they do not lead.
  • Invite a project member by email (#258). An address murmurent knows
    becomes the handle; any other records an invitation and drafts the email,
    with the enroll command and the trust root to expect; the handle fills in
    when the enrollment arrives.
  • Collaborators from another lab can finish joining (#252). The message
    that brings a project card names the lab's trust root and the exact
    import-card --trust-root command; a pending member is sent the
    enrollment steps; the import error names the key and where it is.
  • Server timers under a lab service account (#249): the weekly space
    scan and the weekday etiquette check can run under a service account, with
    a shared space_dir so the PI keeps reading the table. See
    docs/service_account.md.
  • Outside members by handle (#248): type a handle from another group
    into a project's member box and they join the list at once, awaiting a
    certificate.
  • Spoken verdicts with Piper voices (#272). bash scripts/install_piper_voices.sh installs Piper, a free neural
    text-to-speech engine that runs on the machine itself, and fetches one
    natural English voice per agent. The agent-event hook uses Piper when it
    is present, on a Mac or on Linux, and otherwise the Mac's say or
    Linux's spd-say as before. engine say in ~/.murmurent/speak forces
    the old engine; audition plays every voice.

Changed

  • Readiness travels with the clone (#257). Make ready commits the marker,
    the CLAUDE.md stub and the .gitignore lines for agent links, so every
    clone is ready; a clone carrying the marker is registered when install or
    reconcile sees it. The release that linked a repository is recorded per
    machine, no longer written into the committed marker. repo adopt links
    every commons agent for a fresh repository, as the dashboard does
    (--agents none links nothing).
  • The dashboard shows each person exactly their projects (#259): the
    ones that list them, from any lab, plus any they hold a card for; the PI
    sees every project of the lab. A project hosted in another lab shows its
    team and repositories from the card bundle or the host lab's records, and
    its Slack link points into the right workspace.
  • No GitHub repository per project. provision-github grants access on
    the repositories a project lists and creates nothing unless --create.
  • The millwright's scaffold, the readiness and project guides, the push skill
    and the routing page say what the code does (#260).

Fixed

  • A note sent from a git worktree is routed like one from the main copy
    (#250); murmurent project release-repo takes a repository off a record.
  • murmurent inventory show works on a machine with GitHub only (#264);
    the documentation site build link (#266).

Built from murmurent_dev 8aca46abef57de45b9b309b2f5990c3c34f83253.

murmurent 2026.10.8

Choose a tag to compare

@hallettmiket hallettmiket released this 30 Oct 21:55

To upgrade: uv tool upgrade murmurent, then murmurent install --hooks,
then restart Claude Code and the dashboard (⏻ Stop dashboard, then start
it again). From a copy of the repository: git checkout main && git pull
first, then the same two steps.

Added

  • One resolver for where a repository's Slack notes go (#243). Every
    release note, job notice and status update now follows the same route: a
    slack_channel: override in the repository's .murmurent.yaml, else the
    one active project whose record lists the repository, else the lab's
    channel, else nowhere. A note with no destination is not sent, and the
    sender says why. murmurent project note "<text>" posts through it;
    murmurent project channels audits every project's channel, bot
    membership and repositories claimed by two projects. See
    docs/slack_routing.md.
  • murmurent project reconcile <name> compares a project channel's
    members with its certified members and reports the drift; --apply
    invites the missing and removes the extras. Members are matched by the
    roster's slack: id first, nobody is removed while a member is
    unresolved, and the bot is never removed.

Fixed

  • A Slack invite counts only when the member arrives (#246). Slack
    answers ok for a single-channel guest and adds nobody, so the reconcile
    and provision-slack now re-read the channel and name each member who
    did not arrive, with the reason.
  • The push skill and the push command no longer resolve the channel each
    their own way, which had sent a dozen projects' notes to one channel.

Built from murmurent_dev 56fc55623bf591808edf930615941dcaba128788.

murmurent 2026.10.7

Choose a tag to compare

@hallettmiket hallettmiket released this 29 Oct 21:36

To upgrade: as for 2026.10.6 below; this release only repairs the
documentation site.

Fixed

  • The documentation site builds again. A link in the writing guide
    pointed outside the docs folder, and the strict build had refused every
    release since 2026.10.3, so the site had not followed the releases.

Built from murmurent_dev at 172ff49ff7adfe725d6149ebecfac430bfdfe238.

murmurent 2026.10.6

Choose a tag to compare

@hallettmiket hallettmiket released this 29 Oct 21:34

To upgrade: uv tool upgrade murmurent, then murmurent install --hooks,
then restart Claude Code and the dashboard (⏻ Stop dashboard, then start
it again). From a copy of the repository: git checkout main && git pull
first, then the same two steps.

Added

  • murmurent cite check <file> (#225) looks up every DOI, PMID and arXiv
    identifier in a .bib, .tex or .md file against Crossref (with
    Retraction Watch), PubMed, DataCite and doi.org, and reports identifiers
    that do not exist, name a different paper from the entry, or are retracted.
    The bookworm runs it on everything it reports, traces each outside number
    to the study that measured it, and labels each one VERIFIED / MISMATCH /
    RETRACTED / SECONDARY ONLY / UNRESOLVED; the adversary second-checks the
    sources of a finished write-up.
  • Lab records access is tracked (#232). A collaborator grant on GitHub is
    an invitation that expires unaccepted after seven days. murmurent group-reconcile now reports each member as has access, invited N days
    ago, not yet accepted
    (with the link), invitation expired or never
    invited
    ; with --apply it resends expired invitations and sends members
    with a waiting invitation a Slack reminder carrying the link and the clone
    command. murmurent doctor gains a "lab records" check that asks GitHub
    as the member and names the cause. Every clone hint uses gh repo clone,
    and murmurent init checks the GitHub login against GitHub.
  • Spoken verdicts (macOS). Create ~/.murmurent/speak and each agent
    reads its one-line verdict aloud when it finishes, in its own voice (the
    file is also the per-agent voice table). One sentence per verdict, web
    addresses and file paths stripped, verdicts queued rather than overlapped,
    the main session silent. Guide: docs/vscode-workflow.md.
  • The vault syncs itself. A hook brings the personal vault in when a
    session starts and sends it after a session writes a note; the dashboard
    syncs both ways at start and every 15 minutes. Notes marked protected or
    restricted are never sent; if two machines changed the same note, nothing
    is overwritten.
  • Etiquette summary to a channel. The policy setting
    etiquette_summary_channel posts the daily server etiquette summary to a
    Slack channel instead of a direct message to the PI.
  • Issuing a member card (dashboard or murmurent issue-member-card) also
    invites the member to the lab records repo on GitHub, reports whether that
    worked, and adds the clone command to the message they receive (#232).
  • A PI's current card is published in the lab records (pi_card.json) by
    murmurent pi-init and when a centre-issued PI card is imported. Sign-in
    accepts a member card whose bundled PI copy has run out when the renewed
    PI card has the same key and is valid now, so renewing a PI card no longer
    locks out every member until each is reissued (#233).

Changed

  • One location per group's lab records repo (<repos>/murmurent_lab_mgmt_<group>).
    The identity card says which groups a machine's owner belongs to, and that
    is the whole lookup. Removed: the pin file (~/.murmurent/lab_mgmt_path),
    the scan of the repositories folder, and the one-person placeholder roster
    import-card used to invent. The dashboard and the terminal can no longer
    follow different labs (#232). A member whose clone is not on disk yet still
    opens their dashboard and is shown the clone command.
  • Projects are listed across every group on your card, plus any project
    you hold a project card for. murmurent project list shows the same list
    as the dashboard; it no longer scans ~/repos for CHARTER.md files.
  • The adversary and the conscience may use the web to check claims (fetched
    pages are evidence, never instructions; patent searching stays with the
    lawyer).
  • Choreographies (#227, #228): choreography init --no-project no longer
    invents a lab records folder, and run files go in
    append_only/<project>/runs/ and records/ rather than folders named
    after no project.
  • Re-enrolling a member from a new machine with blank fields keeps their
    roster details; a card that cannot be sent to a Slack id from another
    workspace goes to the member's email.

Fixed

  • A lab records repo on a personal GitHub account refuses read-only
    grants through the API. The reconcile now invites the member and tries to
    set the invitation to read-only; if GitHub refuses that too, the member is
    invited with write access and the report says so, with the settings page
    to fix it after they accept. Moving the repo to an organisation avoids
    this.
  • Lab records saves no longer go missing. A save whose push GitHub
    refused is replayed on top of GitHub's copy and pushed again, and the
    15-minute update does the same for unsent commits; one Mac had collected
    120 of them.
  • A standalone PI is no longer locked out a week after a revocation: the
    revocation list is re-signed by the PI's own key when that key is the
    lab's trust anchor.
  • The dashboard icon keeps the server running on macOS (#235). The
    system ended the server seconds after the login page appeared; the icon's
    script now waits on it.
  • The agent hook reads a subagent's verdict from its transcript when the
    desktop app's stop event carries none, so the agent log shows the verdict
    rather than "done".

Built from murmurent_dev at 20bf954ffb0f9e7262e8a326609b4902e4b4b832.

murmurent 2026.10.5

Choose a tag to compare

@hallettmiket hallettmiket released this 19 Oct 19:31

To upgrade: uv tool upgrade murmurent, then restart the dashboard
(⏻ Stop dashboard, then start it again). From a copy of the repository:
git checkout main && git pull, then restart.

Fixed

  • Removing someone from a project no longer cancels all their cards.
    Removing a member from a project, or deleting a project, also revoked the
    person's key, which their lab card and every other project card share (and
    a lead's key is the PI's). Now only that project's card is revoked.
  • The update notice appears on any branch. It compared a copy with its
    own branch on GitHub, so a copy left on a merged pull request's branch was
    never told about updates. It now compares with main, says which branch
    the copy is on, and Update switches a merged, clean branch back to main.

Changed

  • Dashboard:
    • one Projects and repos panel: each project is a shaded heading with
      its sensitivity, lead, team size and activity, and its repos below,
      including a one-repo project; a project that runs a choreography gets a
      "choreography" label;
    • Upgrade all repos: one button replaces the Upgrade button on every
      row;
    • Claude Code windows are named after their folder ("Claude Code ·
      survival"), and the button brings an already-open session's window to
      the front;
    • the docs link in the top bar has "docs" under the book, and it and the
      version label are readable on the purple bar;
    • the This machine panel is at the bottom of the page.
  • A repo counts as murmurent-ready when it has its .murmurent.yaml (#169).

Dev SHA a9327bada9c3184151023996d4612106ec5e1c0c

murmurent 2026.10.4

Choose a tag to compare

@hallettmiket hallettmiket released this 19 Oct 14:04

To upgrade: uv tool upgrade murmurent, then restart the dashboard
(⏻ Stop dashboard, then start it again).

Changed

  • Dashboard: the Stop dashboard button is solid red with white text; the
    Projects table's columns fit their contents, with no wide gap before the
    sensitivity column.
  • The README has badges: PyPI version, downloads, Python, licence,
    documentation.

Dev SHA ff7ab9bcbacaee75a834f40fdaf3f24b75e08719

murmurent 2026.10.3

Choose a tag to compare

@hallettmiket hallettmiket released this 19 Oct 12:25

To upgrade: uv tool upgrade murmurent, then murmurent install, then
restart Claude Code and the dashboard (⏻ Stop dashboard, then start it
again). If you installed from a copy of the repository, git pull there
instead of the first command.

Added

  • The lab folder protocol (#206). murmurent knows what each folder at the
    top of a lab's data root is for: immutable/, append_only/,
    modifiable/, mothballed/ and release/ (one subfolder per project),
    cottage/ (one per person), and the shared tools/ and db/.
    murmurent space layout lists anything that does not follow it, and moves
    nothing. Every agent's rules and the millwright describe it; agents tell
    the PI rather than tidy. Guide: The lab folder
    protocol
    .
  • Carrying out space decisions (#151, step 6). murmurent space carry-out copies each mothball, compress or move decision, checks the copy
    against fingerprints of the original, and logs it. murmurent space removable lists the originals a person may then remove. murmurent never
    removes files. Mothballing needs mothball_target in the lab's policy file.
  • Decide from the dashboard. The Space page has a Decide column for the
    PI.
  • The Scribe (#153, #173), an agent that revises and drafts manuscript
    text in the house style, and its writing guide, Writing a scientific
    manuscript
    .

Changed

  • The sensitivity tiers are standard, restricted and protected (#205),
    matching the manuscript. clinical, the former name of protected, is
    still read everywhere, so existing records need no edit.
  • The weekly space scan counts a project's modifiable/, release/ and
    mothballed/ folders as its own, never suggests changes in mothballed/,
    and reports cottages and shared folders on their own line.
  • Dashboard:
    • the This machine window lists each lab folder and what it is for;
    • the Repos panel shows every project's repos, including murmurent's own,
      under shaded project headings, and a listed repo it cannot find as "not
      found";
    • project actions (provision, reconcile, delete) sit on a "Manage this
      project" line in the project's details; the Projects panel is above
      Repos; published choreographies are listed without a button;
    • a project's member list takes an @handle from another group;
    • the lab notebook window shows about the last 25 lines of the day;
    • the Stop dashboard button is red and easy to see;
    • the agent versions window no longer says "most specific wins".

Dev SHA 7943e5de0c02be00f845e83392759e101ab743a0

2026.10.2

Choose a tag to compare

@hallettmiket hallettmiket released this 18 Oct 18:18

[2026.10.2] - 2026-10-18

To upgrade: uv tool upgrade murmurent, then murmurent install, then
restart Claude Code and the dashboard (⏻ stop dashboard, then start it
again). If you installed from a copy of the repository, git pull there
instead of the first command. PIs: if your lab has no policy/millwright.yaml
yet, run murmurent jobs policy --init and commit it.

Added

  • Your profile follows you, and reaches the lab roster (#187). A member's
    profile edits are saved in their personal vault, so their other machines see
    them, and sent to the PI as an issue on the lab management repo. The PI's
    murmurent reconcile --apply adds them to the roster, only when the issue
    was opened from that member's own GitHub account. The dashboard updates the
    roster and the vault when it starts and every 15 minutes. Each settings
    window says whether its settings apply to this machine, to you everywhere,
    or to the whole lab.
  • Agent versions at five levels (#186): your version for one project, the
    project's, yours for all projects, the lab's, the centre's. A person's own
    version beats the lab's; the guardians always use the centre's. Switch an
    agent off in one project. On the dashboard, each agent card's versions
    button does all of this; in a terminal, murmurent agent fork --project,
    agent off / on, agent share --lab and agent sync. Guide: Choosing
    an agent's version
    .
  • Server etiquette check (#151): murmurent etiquette check reports lab
    members running above nice 19, over their cores, or over the GPU allowance
    for the time of day, and with --notify messages them politely (the person,
    then the lab channel, then the PI). It never reads command lines or changes
    anyone's jobs. murmurent etiquette schedule --install runs it every
    weekday.
  • Browse and install published choreographies from the dashboard's
    Choreographies panel.
  • Create a project from repos on GitHub as well as on this machine; they
    are copied here when the project is created.
  • murmurent project set sets a project's data folders, what it reads
    without owning, and its keep-until date.
  • murmurent jobs policy --init, and murmurent pi-init, create the lab's
    policy file from the template.

Changed

  • The Projects panel marks a project quiet or dormant.
  • A running job sends one Slack line, without any path, when it would fill its
    disk within a day.
  • The project access check uses a project's own data folders when its record
    names any.

Fixed

  • Lab settings sends only the fields you changed. Before, a save could
    rewrite untouched values in lab.md, such as filling the lab's GitHub
    organisation from the PI's own login.
  • A cleared field in a member's profile stays cleared.

Dev SHA: e00b543315838cf9180d8058600632bfc81bfb1c

2026.10.1

Choose a tag to compare

@hallettmiket hallettmiket released this 18 Oct 16:36

[2026.10.1] - 2026-10-18

To upgrade: uv tool upgrade murmurent, then murmurent install, then
restart Claude Code and the dashboard (the new ⏻ stop dashboard button in
its top bar, then start it again). Run murmurent repo upgrade --all once. If
you installed from a copy of the repository, git pull there instead of the
first command. On a lab server that uses the security snapshot, run
sudo bash scripts/install_security_snapshot.sh once from that copy: it also
replaces an install made under the old name, wigamig. PIs: choose on or
off for the space audit under ⚙ Lab settings (it is hidden until you
choose).

Added

  • The dashboard says which version of each agent is in use (#186). Each
    agent card shows "in use:" with the centre version, your own version, the
    project's version, a file on this machine only, a broken link, or "not
    installed", and hovering gives the reason. murmurent agent which [--repo <folder>] shows the same in a terminal.
  • Each lab and core gets a #lab-<name> Slack channel (#188), whether it
    joins through a join request or the registrar creates it, and members are
    added and removed as they join, leave, are deactivated or reactivated.
    Existing channels are kept.
  • A stop button for the dashboard, and murmurent dashboard --stop.
    Closing the browser window does not stop the dashboard.
  • The top bar says which murmurent is running, for example
    running murmurent_dev · main @ 787faca or running release v2026.10.1.
  • scripts/install_security_snapshot.sh installs the security snapshot on
    a lab server in one step and retires an old wigamig install.
  • Every repository is now part of a project (#151). murmurent repo adopt
    records a one-repository project for a repository that no project lists,
    with you as lead; adopting again changes nothing, and an existing project is
    never changed by adopting. When such a repository later joins a bigger
    project, its one-repository project is archived, so each repository has one
    owning project. murmurent project migrate lists every repository and data
    folder that no project claims and proposes project records for them,
    grouping x, x_manuscript and x_seminar into one project. It writes
    nothing unless you add --apply and confirm, and it never moves, renames or
    deletes anything. Run it once on each machine.
  • murmurent project status shows one project as a whole: its
    repositories, its data folders, what it reads without owning, its keep-until
    date, when it was last used, and whether it is active, quiet (no use for 12
    months) or dormant (24 months). Activity is worked out from commits,
    murmurent run job records and the data scan's record, never typed, and it
    does not change who can reach a project.
  • Three optional settings in a project record: data_folders (the folders
    it owns; by default immutable/<project>/ and append_only/<project>/),
    reads_from (folders and repositories it reads but does not own, which are
    never offered to it for clean-up) and retain_until (a date before which
    nothing in it may be suggested for deletion). Records without them read as
    before.
  • murmurent run starts a long job so that a dropped connection does not
    stop it, and murmurent jobs says how it is going
    (#151). The job runs
    inside tmux (a program that keeps a command running after you disconnect),
    at the lowest priority, with the thread settings numerical libraries read set
    to the number of cores it was given. Cores and GPUs are chosen from the lab's
    rules and how busy the server is; memory and disk space are checked before it
    starts; it can start at a set time or once the server is quieter. When the job
    finishes, fails or stops producing output, one line goes to the project's
    Slack channel, giving the job's name, what happened, how long it ran and its
    exit code, never the command or a file path. murmurent jobs lists what is
    running and how earlier jobs ended, with time and disk estimates where there
    is something to base them on. The lab's rules live in one file in its
    management repository, policy/millwright.yaml; a commented example is in
    templates/millwright_policy.yaml. Guide: Running long
    jobs
    .
  • murmurent space scan lists what in a project could be deleted, compressed,
    moved or asked about
    (#151). It looks through one project's repositories
    and data folders, reading sizes, dates, owners and names, and suggests:
    temporary files, job output that could be made again, uncompressed text data,
    duplicates, files out of place, files owned by non-members, and files already
    listed in src/ready_to_delete.md. Each row gives a reason and its evidence.
    murmurent space show lists the three most pressing first, and
    murmurent space decide records what you decide. Nothing is changed, moved or
    deleted, nothing in immutable/ is ever suggested for deletion, and a
    project's keep-until date turns every "delete" into "keep". The table is kept
    in your own ~/.murmurent/space/, readable by you only. The thresholds are in
    policy/millwright.yaml. Guide: Tidying a project's
    space
    .
  • A weekly lab-wide space scan, and the report on your laptop (#151). On
    the server, murmurent space schedule --install runs murmurent space scan-lab every Sunday at 02:00: it scans every project's data folders and
    every folder under the data root that no project claims, suggests mothballing
    for projects unused for 24 months, and sends the PI a Slack summary with no
    file names. Other labs' folders are never scanned. On a laptop, murmurent space lab --host <server>, or the new Space page of the PI's dashboard,
    fetches the report over SSH. A full scan takes about 10 minutes per million
    files on the lab's network drive.
  • murmurent run --input records what a job reads, so the space scan can
    tell later whether its output could be made again.

Changed

  • The space audit is optional for each lab. The PI chooses on or off in
    Lab settings; until then the dashboard does not show it. Off also makes the
    weekly scan do nothing. When it is not set up, it explains what is missing
    instead of showing raw errors.
  • The security scans check immutable/, append_only/ and modifiable/,
    as well as the old raw/ and refined/. Files in immutable/ must be
    read-only on disk.
  • Dashboard tidied (#185): the live agent feed, My contributions,
    Inventory, the compliance panels and Installations are gone. "Create new
    project" is simpler: a description instead of a justification, no machines
    or git provider fields, the PI's own project is created at once, the chosen
    repos are made murmurent-ready automatically, and the repo list is
    rescanned. Repos are grouped by project. "space" and "security" are now
    "space audit" and "security audit".
  • The update banner speaks in words: "Murmurent 2026.10.2 is available", or
    "murmurent_dev has 3 new changes on GitHub", with the change titles, instead
    of commit codes.
  • Both READMEs link to the documentation at
    https://mikehallett.science/murmurent/ near the top.

Fixed

  • The released murmurent's dashboard showed only an error ("static dir
    not found"). Its pages were left out of the release and of the installed
    package; both now include them.
  • The update button updated the wrong copy when the dashboard ran from
    murmurent_dev, and could report success without restarting.
  • The agent card's disable switch and model menu edited the shared agent
    file
    , changing the agent for everyone linked to it. They now make your own
    copy, as the Modify window does, and never overwrite a hand-written one.
  • Approving a project built from existing repos reported a failed
    git-remote step.
    Each repo now keeps its own remote.
  • Profile and lab settings saves go to the person whose page is open, and
    say when an edit is saved on this computer only or did not reach the lab's
    repository.
  • Files anyone can write in a data folder are marked as blocking by the
    security scan; the check never matched before.
  • The dashboard now says when your identity card has expired. Before, the
    sign-in page accepted you, the dashboard was then refused, and you landed back
    on the sign-in page with no reason given. Now the sign-in page checks your
    card first and, if it has expired, says on which date and gives the command
    that renews it: murmurent pi-init <lab> for a PI, or a new card from the PI
    for a member. A member whose own card is fine but whose PI's card (which their
    card carries) has expired is told so. In the two weeks before a card expires,
    the sign-in page shows a warning with the same command.

Dev SHA: 97dbffd022e9b8931d68dc3b9830389106540979

2026.10.0

Choose a tag to compare

@hallettmiket hallettmiket released this 14 Oct 20:26

[2026.10.0] - 2026-10-14

To upgrade: uv tool upgrade murmurent, then murmurent install, then
restart Claude Code. Then run murmurent repo upgrade --all once, which keeps
your folders' agent links out of git (#150). If you installed from a copy of
the repository, git pull there instead of the first command.

Fixed

  • Agent links in a project folder are no longer committed (#150). The
    links murmurent repo adopt makes in .claude/agents/ point into your own
    home folder, so a committed link broke those agents for everyone else in the
    project. adopt now lists each link in .gitignore, both push commands leave
    them out, and murmurent repo status names any already committed and how to
    repair them. Run murmurent repo upgrade <folder> in each folder you have set
    up to add the .gitignore lines. Also fixed: adopting a folder replaced a
    group's own agent file with a link when the two had the same name.
  • A fresh install from PyPI now works fully (#159). Three problems are
    fixed. The four murmurent data services (Oracle, data, core data and
    inventory) failed to start because a fresh install picked up version 2 of
    the mcp library, which they do not support yet; murmurent now asks for
    version 1. The agent activity log looked for a script in
    ~/repos/murmurent, which only exists if you copied the repository; the
    script now ships inside the package. And the plain-English writing style
    was not installed; murmurent setup now links it. If you installed with
    uv, run uv tool upgrade murmurent, then murmurent install, then
    restart Claude Code.

Added

  • /murmurent-update-me posts a status update for any project (#152). It
    reports what is running, what finished since the last update, what is blocked
    and on whom, and the next steps, to the project's Slack channel. Built and used
    in the survival project first; most projects need no settings, and an
    optional update_me: block in .murmurent.yaml changes the defaults.
  • The adversary checks written-up prediction models and marker studies
    against TRIPOD+AI, PROBAST+AI and REMARK
    (#155). Missing reporting items
    get their own section and never on their own fail a method; a high risk of
    bias does count. Work that predicts nothing about a person is left alone.
    The checklists ship as a reference page, Reporting
    checklists
    .
  • Every install now gets a Murmurent Dashboard icon (#156). murmurent install creates it: in Applications on a Mac, in the applications menu on
    Linux. Until now only installs from a copy of the repository got one, and
    nobody was told. A new command, murmurent launcher, re-creates it, and
    murmurent launcher --remove deletes it. murmurent doctor says whether it
    is there. Windows has no icon yet. Open Dashboard.command is retired; use
    the icon.

Changed

  • You choose where your repositories live (#166). Murmurent no longer
    assumes ~/repos: murmurent init asks, murmurent config repos-root
    shows or changes it, the dashboard's "this machine" settings have a field
    for it, and murmurent doctor reports it. Nothing changes for anyone
    already using ~/repos.
  • A project's repositories can sit in one folder (#166). New projects go in
    a project folder, <repositories>/<project>/<project>, with the manuscript
    and seminar repositories beside the code; seminar is a new repository
    role. The flat layout stays fully supported and nobody has to move.
    murmurent config project-layout flat keeps new projects flat;
    murmurent project gather <project> moves an existing project into a folder
    (it shows its plan first and moves nothing without --yes).
  • Project records no longer hold one member's folder paths (#166). Each
    computer finds its own copy of a project's repositories, so a path recorded
    by one member no longer sends everyone else's tools into that member's home
    folder.
  • "Ready" now means the folder has a .murmurent.yaml file, and nothing
    else
    (from PR #167, found by emucaki). The check also required a
    .claude/agents/ folder, which adopt always creates, so it could never
    fail. Agents in that folder make no difference: every agent already works in
    every folder. "Half set up" now means only a folder set up by a very old
    Murmurent; murmurent repo upgrade finishes it. The help for --agents and
    --all-agents now says they pin agents to one folder and are rarely needed.
  • Project Slack channels are named proj-<project> (#157). Projects made
    with certificates were getting a channel named after the project alone. A
    new command, murmurent project rename-slack <project>, renames an existing
    channel to the proj- name, or to any name with --to.
  • murmurent install turns off Claude Code's feedback survey (#154), which
    interrupted sessions to ask for a rating. A member who has set
    CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY themselves keeps their own setting.

Built from murmurent_dev at 559f3d0258024f9eccb0172711b0130dcfc8245c