Repository navigation
Move the Claude Code plugin here: /onctl:on routes Bash to a box - #1175
Merged
Merged
Conversation
Rollout step 4 of docs/plans/boxes-provider.md. boxctl's plugin moves into claude-plugin/ as 'onctl' (marketplace cdalar/onctl, /onctl:on, /onctl:off, /onctl:status, /onctl:handoff, the onctl-remote-bash skill). Its helper (bin/onctl-claude) now drives onctl: - boxes are found with onctl ls -o json, created, resumed and destroyed with onctl; - ssh reaches a box through onctl ssh-proxy as its ProxyCommand rather than a background port-forward, with keepalives so a master connection left from before a pause gives way, and one retry when ssh itself (not the command) failed; - the per-command timeout runs on the box (timeout), exit codes pass through; - exec mode creates and destroys a box per command itself. A session box whose workspace setup fails is now destroyed instead of left behind. The key is shared with onctl claude, boxctl's reused. 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:23
This was referenced Oct 5, 2026
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.
Rollout step 4 of
docs/plans/boxes-provider.md: boxctl's Claude Code plugin moves toclaude-plugin/as onctl.What changed in the helper (
bin/onctl-claude) — it now drivesonctlinstead ofboxctl:onctl ls -p boxes -o json(viajq, independent of table layout),onctl create / resume / destroy. The stored--sizebecomes onctl's--type.onctl ssh-proxy -p boxesas its ProxyCommand, replacing boxctl's backgroundport-forwardprocess and its pid/port files. A shared master connection still makes each sync a single round trip. Keepalives let a master from before a pause give way, and there's one retry when ssh itself (not the command) failed.timeout. Exit codes pass through, and ssh's own "mux_client" noise is filtered from the command's stderr.execcommand.onctl claude; boxctl's existing key is reused, so boxes either tool set up work with both.Hooks, slash commands and the skill are renamed. Commands starting with
onctl(orboxctl, or a# localline) stay local.Tested live, against boxctl.io (every box destroyed afterwards):
node_modulesstayed local and wasn't deleted;sleep 10;offdestroyed the box.Bugs found and fixed while testing:
pipefail;bash -nand shellcheck are clean; the JSON files validate.Not tested: the plugin loaded inside a real Claude Code session (the hooks were exercised directly), and
/onctl:handoff, which callsonctl claude --handoff.After this merges, step 5 retires boxctl, including its own copy of the plugin.
🤖 Generated with Claude Code
https://claude.ai/code/session_01U8g3mHkS6JmtYVYc4AjcV4