releasetools/mutex
Guard a shared resource with a distributed lock, using the mutex CLI
mutex
Newest release first. Each says what changed, and the choices behind it.
Everything up to 0.4.1 was read back out of the commits, because the plugin shipped four releases before it kept a changelog.
0.4.2 - 2026-09-18
The plugin carries this changelog. Nothing about running it changed: the entries below were reconstructed so that somebody on an older version can see what they are missing, and so that every release from here on has to say.
0.4.1 - 2026-09-11
The marketplace answers to release-tools, so installing is
claude plugin install mutex@release-tools or
codex plugin add mutex@release-tools. The ReleaseTools handle from 0.3.2
no longer resolves.
0.4.0 - 2026-09-11
- Gemini is no longer recognised as a host, and
GEMINI_*_IDis no longer read as a session id. A lock owner there is the agent and the machine alone, so every session on that machine shares one owner and can release the others' locks. ExportMUTEX_SESSION_IDto give a session a name of its own./mutex:statussays when the session id is missing. - Hermes and Antigravity install the plugin from the repository.
plugins/mutex/plugin.jsonis the portable manifest both read, soagy plugin install https://github.com/releasetools/agent-pluginsregisters mutex through the host's own install, update and uninstall instead of a script copying files into a home directory. - An Antigravity session gets a lock owner of its own. Its id is
ANTIGRAVITY_CONVERSATION_ID, a spelling the owner rule did not accept, so sessions there had been sharing one name.
Choices
- The portable manifest is generated from
.claude-plugin/plugin.jsonand compared byte for byte, rather than maintained beside it. It carries only the fields the schema names, because an unknown field there fails validation instead of being ignored. - Gemini CLI still installs by copy. Its extensions have to sit at the root of a repository or a release archive, and it has no notion of one inside a monorepo.
0.3.2 - 2026-08-23
The marketplace answers to ReleaseTools rather than releasetools, so
installing is mutex@ReleaseTools.
0.3.1 - 2026-08-21
/mutex:callsign stops short of naming a lock for an operation. Asked which
lock reviewing or deploying something takes, it points at the naming skill
rather than composing an id, because which lock an operation needs is a
judgment rather than a derivation.
0.3.0 - 2026-08-21
A naming skill decides which lock an operation takes and what that lock is
called, before any lock exists. It covers whether an operation needs a lock at
all, and what an issue, a pull request, a branch or an environment would be
called.
0.2.0 - 2026-08-21
/mutex:callsign derives a resource's lock id and prints it alone, so two
agents guarding the same thing compute the same id instead of inventing one
each. It takes a resource kind and its arguments, reads the repository from
origin or from --repo owner/name, and exits 2 naming the rule the input
broke.
0.1.0 - 2026-08-19
The first release: a distributed lock for a shared resource, held in a
PostgreSQL table that the mutex CLI and the releasetools/mutex GitHub Action
use as well, so a lock taken by an agent blocks CI and one taken by CI blocks
the agent.
/mutex:locktakes a lock for the work that follows,/mutex:unlockhands it back, and/mutex:renewextends one before it expires./mutex:statusshows what you hold, or who holds a lock you name./mutex:preflightanswers whether the lock table is reachable from where you are, and says what is missing when it is not.- A hook warns before a lock taken through the skill runs out.
- The plugin runs the
mutexcommand and does not contain it. Installing the plugin installs nothing else, andMUTEX_DATABASE_URLis yours to set: the plugin never reads its value or repeats it back.