Repository navigation
Releases: shinytoyrobots/rutter
Release list
v1.0.0 — The positions tool is removed
- The positions tool is removed.
librarian-positionsand the code behind it (the recall query, the
fold and its index tables) are gone. A client that still calls it gets the standard "tool not found" error.
Session lines already carry who decided what and why, and are whatlibrarian-searchandlibrarian-recent
return. Positions already recorded stay in_librarian/positions/as your own history: rutter no longer reads
them, never changes them, and drops the old position tables from its index the next time it reindexes. Old
librarian-positionslines instateful-use.jsonlstay and are ignored. If an old rules file still produces a
position line, the capture hook still prints its note and stores nothing; that note has no end date. A client
that cached the old instructions keeps mentioning the tool until you restart it, or re-run the installer for
clients that keep a copy. The installer prints a one-line reminder.
Install or upgrade: npm install -g rutter-memory.
Full history: CHANGELOG.md.
v0.10.0 — Position capture has stopped; the positions tool goes in v1.0.0
- Position capture has stopped; the positions tool goes in v1.0.0. Rutter no longer asks your client for
a separate line about a stance you formed or changed (a position), and the capture hook stores none. If an
old rules file still produces one, the hook prints a note on its diagnostic output and stores nothing; the
session line in the same turn is captured as normal. Session lines already say when you made the call and
keep your reason. In a 14-day trial on the author's own use, 15 of 18 sampled lines that credited the author
were real decisions (83%), and only one position line was written, against four in the 14 days before. That
is one person's usage, and the earlier belief questions have not been rerun to confirm that session lines
cover what positions did. Positions already recorded stay in_librarian/positions/, and
librarian-positionsstill reads them until v1.0.0 removes it. Restart your client, or re-run the
installer for clients that keep a copy of the instructions, to drop the old line from them. See
the position-capture note.
Install or upgrade: npm install -g rutter-memory.
Full history: CHANGELOG.md.
v0.9.0 — Session lines now say when you made the call
- Session lines now say when you made the call. The instructions rutter gives your client ask it to credit
you when you decided, chose, ruled on or corrected something, not when you only asked, and to keep any reason
you gave. Before, a line could read as the assistant's own conclusion, so later sessions couldn't tell your
decisions from its suggestions. In a replay over 19 of your confirmed decisions, the new wording credited you
on 13 (68%). To stay inside Grok's 2,033-character limit, two filler clauses were cut ("nothing else is needed"
and "most sessions emit none") and the budget test now assumes a display name up to 24 characters. Restart
your client, or re-run the installer for clients that keep a copy of the instructions (Codex, Copilot, Muse,
Antigravity), to pick up the new wording.
Install or upgrade: npm install -g rutter-memory.
Full history: CHANGELOG.md.
v0.8.4 — Codex now learns that rutter exists
- Codex now learns that rutter exists. Codex 0.163.0 hides an MCP server's instructions from the model
until it loads one of the server's tools, so in ordinary sessions the model never wrote a summary line and
nothing was captured.install-hook --client codexnow adds a marked block holding the server's own
instructions to~/.codex/AGENTS.md(or$CODEX_HOME/AGENTS.md), and re-running it refreshes the block, even
when the hook is already installed. Anything else in the file is kept byte for byte, and a file the installer
can't parse safely is refused with nothing changed. Codex reads a nonemptyAGENTS.override.mdinstead of
AGENTS.md, so a block already in the override is kept current there, any other nonempty override is refused
with the way forward, and--no-rulesinstalls the hook and touches no rules file. Checked on Codex 0.163.0
from outside the repo: a preference settled in chat, a notes lookup, a recency question and a small coding
task each worked with the block. See Getting started.
Install or upgrade: npm install -g rutter-memory.
Full history: CHANGELOG.md.
v0.8.3 — Codex captures land in the right vault
- Codex captures now land in the vault Codex reads from. Codex gives its MCP server the vault from
config.toml
but its hooks only the launching shell's environment, so a Codex hook started withoutLIBRARIAN_VAULT_PATH
quietly wrote to~/Documents/knowledge-vaultwhile recall read your notes.install-hook --client codexnow
bakes the vault into the hook command, taken from--vault(new for Codex), the existing hook, your shell, or the
server'sconfig.tomlentry. Re-run the installer, then trust the changed hook in/hooks.
Install or upgrade: npm install -g rutter-memory, then rutter-memory install-hook --client codex.
Full history: CHANGELOG.md.
v0.8.2 — Release workflows off Node 20 actions
- The release and registry workflows no longer run on Node 20 actions.
actions/checkoutand
actions/setup-nodemove to v7, which declare Node 24, so GitHub's removal of the Node 20 opt-out
can't break a release. The registry workflow also smoke-tests the pinnedmcp-publisherbinary on every
run and, in a separate job, on Ubuntu 26.04. No change to the package itself.
Install or upgrade: npm install -g rutter-memory.
Full history: CHANGELOG.md.
v0.8.1 — Grok installs without Claude Code
- Grok no longer needs Claude Code.
rutter-memory install-hook --client grokwrites one file,
~/.grok/hooks/rutter.json(or$GROK_HOME/hooks/rutter.json), and prints thegrok mcp addline
for the server, which you run yourself. It refuses to replace arutter.jsonit did not write, keeps
its own entry current when the install path moves, and writes nothing when the file is already
current. Grok also loads rutter's hook from the Claude Code plugin and from~/.claude/settings.json;
when the installer finds either, or another hook file that runs it, it says which and creates no
second entry, since a duplicate would only run the hook twice (the capture still writes one record).
Grok needs no instructions file: it shows the model the server's instructions on its own. The
Claude Code route for Grok is unchanged. Verified with Grok 1.0.62 on a Linux machine that never had Claude Code, from install to a capturedclient: grokrecord and a working recall, and again beside a real Claude Code plugin install; the
Grok path in Getting started no longer requires Claude Code,
and the old note that Grok has nogrok mcp addis gone because the command exists.
Install or upgrade: npm install -g rutter-memory, then rutter-memory install-hook --client grok.
Full history: CHANGELOG.md.
v0.8.0 — Muse Code as a sixth client
Muse Code joins Claude Code, Grok, Codex, Copilot CLI, and Antigravity: capture and recall, set up with rutter-memory install-hook --client muse.
Install
Claude Code:
/plugin marketplace add shinytoyrobots/rutter
/plugin install rutter@rutter
Choose your notes folder when asked, then run /reload-plugins. Already installed? Run /plugin marketplace update rutter, update the plugin, and restart Claude Code. Requires Node 22 or newer.
Other clients: npm install -g rutter-memory, then follow your client's path in Getting started. Grok uses the Claude Code plugin. Muse Code has its own setup path.
What changed
- Muse Code is a sixth client.
rutter-memory install-hook --client museadds capture for Meta's
terminal agent (muse). It adds the Stop hook and an optionalrutterserver entry to
~/.config/muse/settings.json, and a marked block to~/.config/muse/AGENTS.md. The block is
required: in testing, Muse's model wrote summary lines only with it in place. Muse runs hooks with a
cleared environment, so the notes folder and an absolutenodeare baked into the hook; pass
--vaultto choose the folder. The installer keeps your other settings, hooks and servers, refuses a
symlinked or unparseable file, never changes text outside its own block, and recordsclient: muse.
Verified with Muse Code 1.4.10. In an untrusted workspace that has its ownAGENTS.md, the rule loaded
in only 1 of 4 trial runs. Setup is in
Getting started. - The Stop hook now bounds its capture process, for every client.
hooks/librarian-stop.shruns the
capture under a small supervisor that stops it after 20 seconds (LIBRARIAN_CAPTURE_TIMEOUT_SEC
changes that) and always exits cleanly with nothing on stdout. Muse holds a turn for as long as a
hook runs. The cost is one extra Node process per capture.
v0.7.0 — GitHub Copilot CLI as a fifth client
GitHub Copilot CLI joins Claude Code, Grok, Codex, and Antigravity: capture and recall, set up with rutter-memory install-hook --client copilot.
Install
Claude Code:
/plugin marketplace add shinytoyrobots/rutter
/plugin install rutter@rutter
Choose your notes folder when asked, then run /reload-plugins. Already installed? Run /plugin marketplace update rutter, update the plugin, and restart Claude Code. Requires Node 22 or newer.
Other clients: npm install -g rutter-memory, then follow your client's path in Getting started. Grok uses the Claude Code plugin. Copilot CLI has its own setup path.
What changed
- GitHub Copilot CLI is a fifth client.
rutter-memory install-hook --client copilotadds
capture: it writeshooks/rutter.jsonandinstructions/rutter.instructions.mdunder
~/.copilot(or$COPILOT_HOME), and refuses to replace either file if it didn't write it.
The hook reads the current turn from Copilot's transcript, waiting up to three seconds for
Copilot to finish writing it, and labels recordsclient: copilot. The instructions file is
required: Copilot loads a server's instructions only once one of its tools is called, and in
testing the model wrote summary lines only with that file in place. Verified with Copilot CLI
1.0.98, in one session that was captured and then recalled from Claude Code. Setup is in
Getting started. - The printed MCP registration survives a Node upgrade. The
copilot mcp addand
agy mcp addlines the installer prints, and Antigravity's JSON snippet, named the resolved
Node binary. On Homebrew that is a versioned folder thatbrew upgradedeletes, which
silently stopped recall. They now name thenodeon yourPATH, such as
/opt/homebrew/bin/node, when it is the same binary and lives somewhere lasting. If you
registered Antigravity from a printed line, check its Node path.
v0.6.2 — listed in the official MCP Registry
rutter is listed in the official MCP Registry as io.github.shinytoyrobots/rutter. rutter itself is unchanged from 0.6.1.
Install
Claude Code:
/plugin marketplace add shinytoyrobots/rutter
/plugin install rutter@rutter
Choose your notes folder when asked, then run /reload-plugins. Already installed? Run /plugin marketplace update rutter, update the plugin, and restart Claude Code. Requires Node 22 or newer.
Other clients: npm install -g rutter-memory, then follow your client's path in Getting started. Grok uses the Claude Code plugin.
What changed
- rutter is listed in the official MCP Registry as
io.github.shinytoyrobots/rutter,
pointing at the npm packagerutter-memory. MCP clients and directory sites that read the
Registry can now find it.server.jsonat the repository root holds the listing, and each
approved release updates it automatically. - rutter itself is unchanged from 0.6.1.