ChangeRig

RigSmith·RigSmith.ChangeRig

Changesets: capture intent, then version across every ecosystem

winget install --id RigSmith.ChangeRig --exact --source winget

Latest 1.19.0·September 21, 2026

Release Notes

πŸš€ Enhancements

  • clauderig: mcp list and mcp get now say whether each MCP server will exist on your other machine, and the answer is more often "no" than people expect. Every place Claude Code stores an MCP server is outside the tree clauderig syncs. User- and local-scope servers live in ~/.claude.json, which sits beside ~/.claude rather than inside it β€” so a backup that has run nightly for a year carries none of them, and nothing has ever said so. Project-scope servers do travel, but through your own repository rather than through the backup; what does not travel with them is the approval, which is recorded in the gitignored .claude/settings.local.json, so a fresh clone is asked again. A TRAVELS column carries the verdict, with the details below it: which env or header values are committed to your repo in plain text, and which absolute paths are spelled for this machine only and will fail to start elsewhere. mcp list --json emits the same as records for a script to gate on. recent --json is new alongside it, matching search --json. Two smaller fixes: a file the publication audit condemns is now taken back out of the staging tree instead of being left there, one permissive run from being committed; and the dashboard's shortcut legend is derived from the actions actually on screen, so it can no longer name a key that does nothing.
  • clauderig: clauderig account prepare readies an account's session profile and prints its CLAUDE_CONFIG_DIR, for programs that launch claude themselves. It does everything run does short of starting Claude Code and never touches your machine-wide login. --json returns one object, and on refusal a stable reason a launcher can branch on: no-such-account, ambiguous-account, unmapped-directory, no-tokens, session-unknown, profile-desync (the profile was re-logged as a different account inside a session), or failed. A success always reports session: ok. Two resolution fixes that reach every account command: an exact email stored for two organizations is now refused as ambiguous with the ids to use, instead of silently picking one; and a directory mapped to an account that no longer exists is reported as such, instead of as "not mapped".
  • codexrig: sync your Codex CLI configuration across machines, and run several Codex logins side by side. The fifth rig does for the Codex CLI what claudeRig does for Claude Code. It copies your setup β€” config.toml and any named profile overlays, AGENTS.md, skills, prompts, rules β€” into a private git repo of your own, rewrites machine-specific paths so it lands correctly on a computer laid out differently, and refuses to publish anything that still looks like a credential. codexrig init # a private remote, and the hooks that keep it current codexrig global trust # let Codex actually run them codexrig sync Your login is never in the backup. auth.json is excluded, and a value that looks like a token β€” anything under an [mcp_servers.*.env] table, for instance β€” is replaced with a sentinel that a restore swaps back for the machine's own value. A restored machine runs codex login once for itself. Your conversations are not backed up unless you ask. codexrig config set syncSessions true turns rollouts on. They are large, and resuming one on another machine is not a proven round trip yet, so carrying them is a backup rather than portability β€” and every surface says which mode the machine is in, so nobody assumes otherwise. Several logins on one machine. codexrig account add tracks the login you are signed in as; codexrig account run work starts Codex as that one without disturbing the others, each in its own CODEX_HOME, with your setup shared in so they differ only in who they are. codexrig account switch changes which login a plain codex uses, and refuses while Codex is running β€” a live session holds the credential it started with, and swapping underneath it leaves it unable to refresh. One thing to know about the hooks. Codex will not run a hook until its hash is recorded in config.toml, and it says nothing at all when it declines. That makes installed-but-untrusted the quietest possible way for a backup tool to stop backing anything up, which is why install tells you to run trust every time and codexrig doctor asks Codex directly rather than checking that a file exists. Three things differ from claudeRig because Codex differs, and each would have failed quietly if ported straight across. Codex writes absolute paths as TOML table keys ([projects."/Users/you/Git/thing"]), so a rewriter that walks only values leaves a restored config trusting a directory that does not exist. Codex's configuration is TOML, so it goes through a real codec rather than a second suffix test β€” a raw-file path would carry config.toml past field-level redaction entirely. And a rollout records its working directory inside the conversation, so codexRig never rewrites one: codex resume --cd is the answer when a directory moved. Large conversations. A rollout past 8 MiB is stored in the repo as content-addressed parts rather than as one blob, so adding a turn costs a chunk instead of a copy. This matters more than it sounds: the biggest rollout on the machine this was built against is 172 MB, which is over the default per-file cap β€” so without it, the longest conversation you have is the one thing never backed up. Chunked, it becomes 44 parts and a 4 KB index, and one more turn rewrites one of them. codexrig peek reads another machine's session straight out of the repo without restoring anything, and peek get copies just that one session onto this machine. codexrig ledger remembers a session after its body ages out of the retention window, so a search for an old conversation says "this existed, and here is the command that recovers it" rather than nothing. codexrig repo status says what the backup holds by category, because a byte total on its own points at the wrong lever. codexrig account map binds a directory, so a bare account run anywhere under it picks that login. codexrig doctor is where the quiet failures become sentences, and docs/CODEXRIG-PARITY.md lists, feature by feature, what is built and what is not.
  • brewrig: keep several machines on the same Homebrew software, and the same versions of it. The sixth rig. Each machine publishes what it has deliberately installed to your own private git repo, and installs whatever the others have that it doesn't. brewrig init on both Macs is the whole setup. It deliberately does not sync a Brewfile. brew bundle dump into a shared folder is the obvious answer and it fails in three specific ways: a single file is last-writer-wins, so the other machine's ad-hoc installs are invisible until they are overwritten; --cleanup is the only removal story and it uninstalls everything not listed; and a flat list cannot tell "the other machine hasn't installed this yet" from "the other machine deliberately removed it", which are the two cases that need opposite responses. So each machine writes only machines/.json and the union is derived β€” which also means two machines syncing at once touch disjoint paths, so git has nothing to merge. That is about content, not about writes: two brewrig processes on ONE machine share a clone, and they are serialised by a lock. A run that loses that race is refused with a clear message and succeeds when you run it again, rather than quietly replacing the other one's work. What gets published is installed_on_request, not the dependency closure and not brew leaves. The closure would turn every upstream dependency change into drift. leaves is subtly wrong in the other direction: it means "nothing depends on this", so it drops a tool you installed on purpose the moment anything else picks it up as a dependency β€” on the machine this was built against it silently omits ffmpeg and python@3.14, 39 packages where 41 were asked for. Nothing is uninstalled to make machines match: a package only one Mac has is not drift, it is something the other has not caught up on. The single exception is a package you deliberately removed, which is recorded as retired with a timestamp and offered on the other machine one prompt at a time, naming who removed it and when β€” never in a non-interactive run, where it reports the count and changes nothing. Answer "keep" and that refusal is published as an acknowledged entry stamped with the retirement it answered, so you are not asked again β€” while a later, separate retirement of the same package still is. (It is deliberately not an opt-out: an opt-out means "do not install this here", and it is cleared the moment the package is installed, which it is.) A reinstall outranks a retirement by timestamp, which is what stops the two machines deadlocking: A uninstalls, B reinstalls it on A, A uninstalls again, forever. status separates three things that a Brewfile collapses into one, because they have three different fixes: missing here (apply), outdated against upstream (update), and skew β€” the machines on different versions of the same package (update on whichever is behind). Skew is the usual reason two Macs "have the same things installed" and still behave differently, and it is invisible to a dumped Brewfile. Unlike its siblings brewrig ships for macOS and Linux only, since Homebrew does not run on Windows: no winget or Scoop entry, and the install script skips it there instead of failing. 🩹 Fixes
  • rig: The release workflow's dry run builds under the last CLI version again, rather than under the window's tag.

Installer type: zip

x64β€”8592C9717287A30D0836DD7BBB503CF7C95D924890085BF73211679DBCE5BF61
arm64β€”6278309E18C1411DE1ED742BA57E893A9517A5B6BAFE968D909FCC3009F8BE80

Details

Homepage
https://rigsmith.dev/
License
MIT
Publisher
RigSmith
Support
https://github.com/rigsmith/rigsmith/issues
Copyright
Copyright (c) 2026 John Campion Jr
Moniker
changerig

Tags

clideveloper-toolsdotnetgorust

Older versions (23)

1.18.0
x64β€”BD0483EB6D05BE9FF935D4B878A0D48F8960F9761297BE500A6867BD0BB9FFFC
arm64β€”13E3674D272D5F4520094190E2911B8E526ABE805846D9BD3762D21D7FB1B115
1.17.0
x64β€”7F8537BFE9E6F0FC1531D9535436F42A95D1EBF6212FE7993DFEEF70D9C00052
arm64β€”E0757ACFADB4E885B29F2C4E2AEB90748BEA70EF449C5ABCB69EE3B062D1F696
1.16.0
x64β€”0FF10E1E8A69A3D2CCF8B75CE5C5C1C755DD2635353A92DEA5F5B60525CA25DD
arm64β€”C585382621A8E39073B7D1FF50D36CA8BAE4C96086A767A808F7036C53118D25
1.15.5
x64β€”AC8E50D969A4B5DE3D391DDAE05A6EAA41BF1F31210CE05523AB4E15D07E97BF
arm64β€”B0AD7DB7C748BE84469590CBB0B34F60F815EC864C7EB907D3BFC4254674540B
1.15.4
x64β€”0EF080B3BD240462B94E4CC48F8956DDCBC831532156B0D3430A204FF4914651
arm64β€”992D53CB5C8B177752DCA54A968303B081AFBD3CDC5FACA83CCB866C5145D65C
1.15.3
x64β€”7B7F404E86A91994C0293F8FC363A31EDA19B777D967C71E2D436ECEFFF44171
arm64β€”FFD1366A6A6EA88ABB4D2A723AF8E8F1A5E77AB6FBB8B6E1090069EFE0B5EF74
1.15.2
x64β€”3893EFF786CA3654A143AB327B70B5F6EC16E126BA10B702A825E89E20D08A22
arm64β€”86152498E82385FA59E1E94462ABDB18CCDBEEDCB31D1A9827F74E86241EB089
1.15.1
x64β€”EA23C6B733CD979C2FB4DDF17BA9917700563EAAC10F7C076F4C37CBC4028C6F
arm64β€”815517A7321D62FFDD9980FC7A7693E88D7464CE76CAC8807457C83B0DE7AAA7
1.15.0
x64β€”12AF4A70D4E0772B6CF4C79E31D7DC2D8CE9322D8726F3494F8C605501760BDE
arm64β€”37FEE14585498FD19633BBFF31360E9D52A6C5652BD20E0B53E296586B155624
1.14.0
x64β€”E9B0AFB5382C8068D86E515ED16E7771DE8D454A390AEFADBBF1721D6A7370C4
arm64β€”4B518007B85B06AAA55861F32BF90A59A2D2984733612147467DECC561C86E61
1.13.1
x64β€”E12728E61788C2F7A534E13F4D5EEEA8C51F6B7807777F25236116452E1C9DE2
arm64β€”8AD0667AB196E235FC463BD45E452AFC55F92D7875E7979A8B5BC6BFC20D7CE8
1.13.0
x64β€”11D561E5A90F5C42E0E4AF55444B429D6E216DD4CC2300D427BC89D2E3C63E0A
arm64β€”66304A3E7B82D7CCECCFEBE412209BE36AF1FB06AD1DF422BD48E5F79A68770F
1.12.0
x64β€”A5F5EB19B18CA61F485CD9385C120770BB74E55E8FBBC45C388DDCB2FAE68018
arm64β€”91FA80669BEEF77A31B8B4E8E488559C95DEE17E6D289E1E8773ABCF5BA7162D
1.11.0
x64β€”A6C284A1A6EAB73AB71074335369699FC09D50D64739D5004DA95325E5D22865
arm64β€”32E7E731A08A387E011DFE0D35307FC7B1B726042577266D229A647E8DCB4AA2
1.10.0
x64β€”F0F840E4CDE339D19A71A9B78E8D643B9224FF4D1711126FDF4DD155C2BA6BBF
arm64β€”2CB23EBD2614DC665A776479A64A924FBBA794EB9AAE112DB8E8B7AA89115333
1.9.0
x64β€”D5B61B247FC822A209120D264BDC3D8A63EAFFB2CD497FC61DA94731D35EE20D
arm64β€”AD5AED3FD760DEB7ADE760731B3D53F561ACD72EE0AC82472D1BC69004A41077
1.8.0
x64β€”B21B0E37FBF0106E13661177FF60D000BB5FF3C6C174E680853C94A5466EB063
arm64β€”0BFF364DA5F0C24F2CA9001D9592C25D815EE052BDB175B3B45B4DC8C5EC1885
1.7.0
x64β€”97C513745144107E5BB3F0D458F50C549502D1009643ED33AB555D594F5A7672
arm64β€”B37C86ECFE4F03CEAEB8C434806ACCB283FE6DD4C88A2F33979C8FAFA33A9D39
1.6.0
x64β€”41B546730DDC9F909B573BDACAC54A5E930E517154A62E3C70A3AF78A6E2006D
arm64β€”C96E410B998ED1633EEC125870F96ED885EB8C607560EC0BF3151B748CB61B83
1.5.2
x64β€”F04C16EDE68858E6567F6C4365EA03C33FE59B5643368F8E5F7100B2311C16FC
arm64β€”B1CD18B4D7F833A5F925D100F8DC796766A368902FD10FA7E6BDE395102535A3
1.4.0
x64β€”E477C7A4FC230A0D232886FAF2B557D2A80D0E71AAF05929BFC823292AB75D5A
arm64β€”6747CC0BB499948B928F70509FAE560ECC9737FE6F34F794295DC0EACC8FCC62
1.3.0
x64β€”29648045B32F90800F908027448D4CE7C86FA4876B5151A93ED7101F6BF35772
arm64β€”93FD1CF453FA573F6195C440F55F7F2D23433C00465D3B8FFBBDC9B8F4AB2C1F
1.0.0
x64β€”10FC2ABDC24D505287C4506ED3346499CFFB5ABFABB878701FF1CAFBDF6AF8D2
arm64β€”94CF3BE890333498EFC0FC194DDB2734714A3FBA07786A49952A5294926BA304