Repository navigation
Version the Claude Code plugin with onctl releases - #1177
Merged
Merged
Conversation
The marketplace now serves the plugin from the plugin-stable branch instead of main. On every v* release tag, the new plugin-release workflow takes claude-plugin/ as it is at that tag, stamps plugin.json with the release's version (v0.1.34 -> 0.1.34) and force-pushes it to plugin-stable. Users get exactly the plugin that shipped with each onctl release, labelled with the same version; work on main waits for the next release. A branch, not a commit to main: commits made with the workflow's token can't pass main's required checks, since its pushes and PRs trigger no workflows. It can also be run by hand with a tag to republish. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U8g3mHkS6JmtYVYc4AjcV4
cdalar
enabled auto-merge (squash)
October 5, 2026 05:40
cdalar
added a commit
that referenced
this pull request
Oct 9, 2026
The plugin lives in cdalar/boxctl (/boxctl:on ...), where it drives the boxctl CLI. The copy made here as 'onctl' (#1175) did the same job with a second 500-line helper to keep in step, had no users, and since #1177 couldn't be installed from its marketplace at all: that pointed at a plugin-stable branch only a release creates, and none has been cut. Removes claude-plugin/, .claude-plugin/marketplace.json, the plugin-release workflow, the plugin hint in onctl login (with its test) and the paragraph in onctl claude --help, and the README line. login.go and claude.go are back to what they were before #1176. The boxes provider, ssh-proxy, port-forward, sizes and onctl claude are unaffected; none of them used the plugin. The plan doc now says steps 4 (the plugin) and 5 (retiring boxctl) aren't happening. Claude-Session: https://claude.ai/code/session_01U8g3mHkS6JmtYVYc4AjcV4 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The plugin's version now follows onctl's: each release publishes the plugin as it was at that release, with the same number (
v0.1.34→ plugin0.1.34).How it works
.claude-plugin/marketplace.jsonserves the plugin from theplugin-stablebranch instead ofmain. It uses agit-subdirsource withref: plugin-stable(marketplace reference)..github/workflows/plugin-release.ymlruns on everyv*tag, or by hand with a tag. It checks out the tag, stampsclaude-plugin/.claude-plugin/plugin.jsonwith the version, and force-pushes the result toplugin-stable.vX.Y.Zis refused, e.g. the movingedgetag.mainwaits for the next release;plugin.jsononmainstays without a version.main: pushes and PRs made with the workflow's token trigger no workflows, so such a commit could never passmain's required checks.Tested locally
onctl 0.1.34, which passesclaude plugin validate --strict.claude plugin validate.Note:
plugin-stabledoesn't exist until the first release that contains the plugin (v0.1.33 predates it). Until then, installing from the marketplace fails. Local testing works without it:claude --plugin-dir ./claude-plugin.🤖 Generated with Claude Code
https://claude.ai/code/session_01U8g3mHkS6JmtYVYc4AjcV4