ShipRig

RigSmith·RigSmith.ShipRig

Uniform changeset -> version -> publish, across every ecosystem

winget install --id RigSmith.ShipRig --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β€”0DE0E9EB1CF334FC3AF3025FAA3286185BFAAE2D3456DC08C02D1C1B8355E87D
arm64β€”4744217BC4238A5371A0D57C5761F1B9E02DA26BDF29989ECFB6CC2537BD9F61

Details

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

Tags

clideveloper-toolsdotnetgorust

Older versions (23)

1.18.0
x64β€”E62E0D56291DE3892144CB524E22A10C479147B394DD0EA5E537078AE03B495A
arm64β€”EBBA5A6E30C0CFB31AB34FE0B726B317447505D70ABBB1F05A518B30BBDDA5E8
1.17.0
x64β€”5EE0FD76C943A8C1ADB068C76C4E77AE31FE49B6E77302D02710DD418428778F
arm64β€”84D6A8E0B4F78CB5E5C68ECCB1F8FBAC74BF2DB7DD78CC316FCD468DF6B32178
1.16.0
x64β€”4E0633834ED1E9E8FAD0A3EDA327823F3F36E99699DBB9DCF4889C51EACA31CC
arm64β€”7E5D0DA2B5A0A4938909B6FB80705777684B435018C15D7323A4D959DF969862
1.15.5
x64β€”540D85D6CF1D1B6723838ED2D893584743748A91243DD86F3DE9EB46EE9DB55C
arm64β€”9232F28F82CAC50DF0A2CDF4985DDF34DF2A30FFE5BF8E08C2A0D0AB939A475B
1.15.4
x64β€”5689C6A80001BE2A2A2507E5D1F4F4BCEA1EF7C554CA8834E15F310FF4641F62
arm64β€”D1E28E62DB7F52FDA033E54B6DD2C11E43ECA423BBD543A127BCA518CF4D78DE
1.15.3
x64β€”4DE28A949AA4555959E3FC8718A70598F8456025C941B4264F7CA51684A03EC4
arm64β€”2E7F6496DB1B439C696B280AA0A26BCE690576AA545C69E099B060985182200E
1.15.2
x64β€”6D96CB3255EF13EDB7B7154E5B7DD02D8876ED4DCDA486047390132B179BB12F
arm64β€”D877D799A7F992351FDBC66139CB1AF25EFA0D2AF0C5AF9240FF44BA2A32F897
1.15.1
x64β€”7DC7E4081365379ADCF14E70F1AF34AA99776B0379490302CA17BAE241E501BC
arm64β€”22E956C149790D577415457AA3B09FC7668D3D70EDF20D20E946FC10D1D11F82
1.15.0
x64β€”B6924CB74192011CB14A5B813583F0C06E09917CC3CFF7CD8090FA8E1DC345BD
arm64β€”CD288330EE3CD5C19B837BF453C341CEAADB71C012F0CE31187F5EEA2D59F8AC
1.14.0
x64β€”4D13C53126B83521009759175B1C1791F17C1791C4B52F5A1504205110DBDF13
arm64β€”065F2E1CA8F4E2EA5E7F9382914DBCDACECF239D8443C04303D2F64B6B9CDEF7
1.13.1
x64β€”9DCD618BB59787EA3A43CFC410EE69F41DD694E68951394DE2521E536D882C54
arm64β€”80208948E03B5F711A1BE435407F6E21424E9793D226CE97DE2CCA5FAB4BA0FB
1.13.0
x64β€”56CF2275AE50D57FFA1867F1069BB6CE0D8BFEEFE63B6B93391E64AB742D0C53
arm64β€”68FDB29C706045393B0AC9A0C3D195A45B649F49AA6643A65871D49ACA97388C
1.12.0
x64β€”6A8CB0D6DA7A9DE781134BD9AD1A90FEA7B260278A0E71D85D538EF9516DE357
arm64β€”3A92430E85FFC2783B307756F829B7DB494FA09A4B94EBB448AE5B0C7C10F5D2
1.11.0
x64β€”FB42599266ED0E25747D726432B5D70B2015273FD4FC75B70BDBF2E9049A2259
arm64β€”195D6732D68B209C1EE417D803607A3190604D3DDD597CBFD6AA506FAB720665
1.10.0
x64β€”E8B0B20A931CA3137A635079383776ADBE9726BC7B5F011811080D7B67184833
arm64β€”BDE21C3467948AB0406AC963A8E98D0DC9AF280B758935BA842EBC0DB14F794B
1.9.0
x64β€”6EA5B3469E4E83BD9603AB6707071CF7ECF376518175081EBB812B049EC251F9
arm64β€”B5294D39112A7BB4E958C5BB8D97341287791A1F841CA2A610D79FF630FF0C6D
1.8.0
x64β€”DA13087C577226612A4F9FD40738E6F4FD4108D92404EF0B1995A4C4849F1D62
arm64β€”83CE78957C6409E6E5F2A64C545EAB6BE4B4D3D4144FC177748D4B5271C69FE5
1.7.0
x64β€”BC0C1A00B6A56A5C865290FAAA4BB42B3D99EF696805833C1D944D3AAE516400
arm64β€”C4B53493F598D145834C458B84E2A6F301AEE99745E47E56F3B637628BABD78E
1.6.0
x64β€”7FACEE2EF8E078E70DA9DA0BEF08547D4D55A9E1A2B4B68266D32FE6EEAF7CD8
arm64β€”8359AD43381B0308531D7B9266B0F7385E7E43378B1F5B179B10D78208F53DD2
1.5.2
x64β€”85C3951874F9CBFF87C5B29D7CA535630C8C4AC44FF7E503A5C4F69640D7EC10
arm64β€”15E46DCB4A4C73D0E266AB20CF1C8877F5B14E885977BB28515293498A863FCB
1.4.0
x64β€”90588027465B4F976B3854BFFB73B20568710BE95F8BD377FC51678ED52F4B79
arm64β€”20272F36B6A7CD0AD4A118FB713DA2E19F35E4F5EAF3811D2FDC4C4761E446DB
1.3.0
x64β€”FBE0117B3910261308A1E1337B79C8EEED14955CC7EAD16A052939D68062A5F4
arm64β€”915024ECBD56CD71DD41330F0C75632FFCBC8D39E726B77F8A33105CF3FC6545
1.0.0
x64β€”244052988061F7A68DC10874A29B083A0E99E69F38D5DE1DACFD0535B8D0B620
arm64β€”92828C261FBB45ED48AD4CBFCC6A470CFF68FC5C0929DEAD520AD3BFE0906088