Repository navigation
Releases
Releases · chris-peterson/shipshape
v1.3.1
Changed
- The plugin report spells out a disabled plugin's state. Every plugin the run updates gets its own row, disabled ones included, and a disabled one reads
✅ current, disabled(or⬆️ updated, disabled) in place of the 💤 marker.
v1.3.0
Added
/maintain-harnessends with everything the run changed. The closing lists each file it changed in your repos (uncommitted or committed), each issue it filed, the version it recorded, and the caches it pruned, followed by the steps left for you, or "Nothing left to run." Only the run's own changes are listed: it snapshots each repo before writing to it, so work your other sessions left in the same checkout stays out, and a file that already had changes is marked.
Changed
- The first upgrade asks a clearer question about your plugins. It asks whether you maintain each author's plugins. The ones you don't are ignored: never examined and never reported. For each one you do, it asks whether to fix what it finds in your checkout or file an issue. The old
skipanswer, which read like "don't update this plugin", is nowignore, and decisions you've already recorded carry over.
Other
- shipshape's icon shows in marketplace catalogs and the plugin directory.
v1.2.3
Fixed
/maintain-harness pluginsremoves dependencies nothing needs any more. A plugin Claude Code installs because another plugin depends on it stays enabled after that plugin is uninstalled, so the reconcile kept it, and kept updating it. It now uninstalls those dependencies and keeps their data dirs, asking before it deletes one that holds files.claude plugin pruneremoves the same plugins but deletes their data dirs without asking, so shipshape doesn't use it.
v1.2.2
Fixed
/maintain-harnessno longer rejects honest replies as offers. Its reply check blocked a tally of changelog entries that had all been walked ("the other 34 are harness-internal"), any reply quoting a blocked phrase in double quotes, and ordinary sentences containing "happy to" or "on request". Those now pass; a reply that offers more work instead of doing it is still blocked.
Other
- The docs site deploys from each release.
v1.2.1
Fixed
- shipshape keeps itself and your plugins updated on a machine without
jq. Claude Code leaves auto-update off for marketplaces outside Anthropic's own, and shipshape's session-start hook needsjqto turn it on. Withoutjq, shipshape stayed on the version you first installed, along with your other plugins. It now downloadsjq1.8.2 into its data directory, checked against a pinned SHA-256. If that fails, a banner tells you to installjqor turn auto-update on in/plugin→ Marketplaces. - An upgrade asks about your claude.ai-synced skills once. Answering that you maintain none of them now records each as
skip, and a recorded skill stays out of the question, so the next upgrade doesn't ask again. - Plugin reports show
n/awhen a plugin has no version number.
v1.2.0
Fixed
- A plugin installed into a settings file that doesn't load is reported as not enabled. Claude Code 2.1.295 and later warns after an install when the settings file it wrote to doesn't load, and ignores that whole file, so the plugin isn't running.
/maintain-harness pluginsnow marks it 🔧 with the file and what's wrong with it, and the closing steps start with fixing that file (plusclaude plugin enablewhere the enable didn't land) ahead of/reload-plugins. /maintain-harness pluginsshows its progress on models without the task tools. Claude Code offers its task list to a fixed set of models, so on a current model the reconcile ran silent through its updates and prunes. It now posts a checklist there and re-posts it as each group finishes, and uses the task list wherever it's offered.- On Windows, the cache prune keeps the versions your running sessions use. Claude Code on Windows records a session's start time in a form git-bash's
pscan't read, so shipshape read every lease as expired and could prune a version a live session had loaded. It now reads those start times through PowerShell, and treats a lease as in use wherever it can't read one. The scan also matches the install paths Claude Code records on Windows (C:\…) against the cache dirs it finds, and readsjqoutput without the carriage returns a Windowsjqadds.
Other
-
The test suites run on Windows (git-bash) in CI, alongside Linux and macOS.
-
When an upgrade pass repairs shipshape's own checkout, it runs the fixes,
just test, andjust generatebefore asking you to restart with--plugin-dir. With the Bash sandbox on, the restarted session can't write into the checkout.
v1.1.0
Changed
- The Claude Code version banner is opt-in. Sessions no longer open with a line announcing a version change unless you set
SHIPSHAPE_VERSION_NOTICEin theenvblock of~/.claude/settings.jsonto1ortrue(onandyeswork too, in any case)./maintain-harnessstill finds a pending upgrade and walks it when you run it, and marketplace auto-update stays enabled as before. If you'd set the variable tooff, you can remove it. - A run's reply ends with the commands you run, and nothing after them. Each step is the exact command, in the order it has to run, with no reason attached.
/reload-pluginscomes ahead of any plugin's installer, and the reload step names--forceand your other sessions up front. - The Claude Code status line shows the two versions, plus anything that needs your action.
Fixed
- An update blocked on a marketplace-declared command goes straight to your terminal. Claude Code ignores
--accept-commandinside a session as it does-y, so shipshape quotes the line to run in your own shell instead of trying either flag.
Other
- The upgrade report labels each changelog entry with a category and each target with an action.
- The plugin manifest links the docs site as its documentation.
v1.0.0
Breaking
/plugin-maintenanceand/claude-code-versionare now/maintain-harness pluginsand/maintain-harness claude-code. The old names no longer resolve; type the new ones instead.- Only you start
/maintain-harness. A run updates, uninstalls, and prunes your plugins, so Claude no longer runs it when you ask about a Claude Code upgrade; it names the command for you to type.
Added
/maintain-harnessbrings your whole harness current in one run. It handles a pending Claude Code upgrade, then reconciles your plugins;/maintain-harness alldoes the same./maintain-harness claude-coderuns the upgrade alone,/maintain-harness pluginsruns the plugin reconcile alone, and/maintain-harness guideshows, changes, or sets up your guide without running either. The version banner names/maintain-harness.- One guide holds your own steps for both halves.
harness-maintenance-guide.mdin shipshape's data dir has a section for after a Claude Code upgrade and one for after plugins change, and each half carries out only its own. A###subheading, one per plugin say, stays inside its section. Commands only you can type, like/reload-pluginsor a plugin's CLI installer, close the report as a numbered list in the order you wrote them. The first run that finds no guide offers to write it, starting from the CLI installers your plugins ship. Run/maintain-harness guideto show or change it.
Changed
- One maintenance lock covers a whole
/maintain-harnessrun, so a second session's run stops and names the first instead of interleaving with either half. - Steps in
on-claude-code-version-change.mdmove into the new guide. The next/maintain-harnessrun puts them under the upgrade heading, drops any/plugin-maintenancestep (the plugins section covers it), and removes the old file.
Fixed
- Plugins synced from claude.ai are left alone. A
<name>@syncedplugin is governed in claude.ai, so/maintain-harness pluginsno longer offers to uninstall it, counts it as missing, or tries to update it. It gets its own row in the report, marked as managed in claude.ai. A plugin from any origin that isn't a registered marketplace is treated the same way. (#15) - The what-changed walk names the versions the Claude Code changelog skips. Some releases ship with no changelog entry. The walk now lists those versions as having none instead of guessing what was in them. When the version you're running is one of them, it says so instead of walking an older entry. (#19)
v0.13.0
Added
- A shipshape reply can't end by offering more instead of doing it. Once
/claude-code-versionor/plugin-maintenanceruns, aStophook checks every reply for the rest of the session. It blocks phrases like "let me know if", "I can walk those", or "the other 79 are…", and Claude rewrites the reply. A phrase quoted in code doesn't count, and a rewrite that still matches goes through with the phrase named to you instead of looping.
Changed
- A maintenance report describes a marketplace's auto-update as enabled, the word the rest of shipshape uses.
Fixed
- A version-change guide can run
/plugin-maintenance. Acknowledging carries out each step of your guide, and the step shipshape's own example suggests was one Claude could not invoke, so the run stopped there and left the upgrade pending. Claude can now call the skill, which puts its description back in every session's skill listing; it still confirms before it deletes anything. - What changed walks every entry. The report leads with what you'd act on, then gives every other entry one line grouped by area, where it used to offer to walk the rest.
- An uninstall that Claude Code refuses is reported with its reason. Since Claude Code 2.1.282, an uninstall stops when a settings file still enables the plugin or can't be read, and names that file. A reconcile now reports the extra as skipped with that file.
v0.12.0
Added
- A maintenance run now examines the skills and plugins your claude.ai account syncs in. They carry no install-manifest row, so a run used to report full coverage over a lane it had never opened.
--driftnames what it can name and counts what it cannot, and a bucket file that does not parse is reported unreadable rather than empty. - Leftovers Claude Code strands are reported with their size. A scratch clone at the top of the plugin cache arrives as one line naming the directory Claude Code created, rather than one line per directory inside it, and a download left behind by a failed auto-update is named for you to clear.
Changed
- The version banner takes the shape the other plugins' banners use —
<source>: <resolution> # <reasoning>— so the command to type sits where your eye lands across every line a session opens with. - A version-change run no longer tallies the plugins you leave to their own maintainers, and it delivers its findings as a set you walk one at a time instead of one offer to file everything.
- A pass that starts inside shipshape's own checkout repairs shipshape first. Every later verdict is reached against the changelog, the install manifest and the plugin cache, so a release that moves one of those would leave the rest of the run reading a stale map.
Fixed
- A
--plugin-dirsession reads the state an installed session wrote. Your acknowledged version, your version-change guide and your deep-scan declaration live in a data directory whose name changes when the plugin is mounted from a checkout, so the built-in guide's own advice to restart that way used to land you on what looked like a machine shipshape had never run on. Where the install manifest can't settle which lane to read, the session stays in its own and says why. - A reconcile whose inputs arrive in an awkward order no longer exits without a word. A recorded checkout that has moved, a marketplace manifest that does not parse, and the last plugin in the outstanding list each used to drop out silently; each now reaches the report.
- Reading what changed works without the GitHub CLI. The changelog walk pulls the file from its raw URL, so
/claude-code-versionreports what an upgrade contains on a machine with noghinstalled and without an expired token stopping the run. Reading the first-party examples an entry implicates still usesgh. - A what-changed summary no longer tells you it left nothing out. Where every changelog entry made the one-screen summary, the summary is the whole account, so the run states how many entries it omitted only when it omitted some.