Repository navigation
Description
Plugin name
bulkhead
Short description
Guards for a machine where many Copilot CLI, Claude Code, Codex and other agent sessions run at once. Before a shell command runs, it blocks name-based kills of another session's processes, port collisions, git commands that would move or delete another session's tree, whole-disk scans and long foreground sleeps, and holds heavy commands back when RAM runs low.
GitHub repository
dooly6276/claude-bulkhead
Plugin path inside the repository
No response
Ref to review
v0.3.7
Commit SHA to review
a7d6c81d60c1f96187fbf7f673a61752cc2de61a
Version
0.3.7
License identifier
MIT
Author name
Myeongseok Kang
Author URL
Homepage URL
https://github.com/dooly6276/claude-bulkhead#readme
Keywords
hooks, guard, processes, ports, memory, worktrees, git, parallel, agents, copilot-cli
Additional notes for reviewers
The Agent Plugins 1.0.0 manifest is plugin.json at the repository root. The Copilot hook is com.github.copilot/hooks/hooks.json (preToolUse, bash and powershell) and runs node "$BULKHEAD_PLUGIN_ROOT/bin/bulkhead" hook --agent copilot with BULKHEAD_PLUGIN_ROOT set from ${PLUGIN_ROOT}. The hook only reads the tool payload and the local process, port and git state, and answers allow or deny. There are no network calls and no telemetry, and the source is plain Node.js with no runtime dependencies. hooks/hooks.json and commands/ at the root belong to the Claude Code plugin in the same repository and are not read by Copilot CLI. Node must be on PATH. I checked the manifest with your schema script and the skill with @microsoft/vally lint locally, and installed it with copilot plugin install (1.0.109). A recorded two-session Copilot CLI run is in docs/copilot-live-run.md.
Submission checklist
- The plugin lives in a public GitHub repository.
- The ref and/or sha I provided is immutable (release tag and/or full 40-character commit SHA), not a branch.
- This submission follows this repository's contribution, security, and responsible AI policies.
- This plugin is not already listed in the Awesome Copilot marketplace.
Activity
github-actions commentedon Nov 11, 2026
🔴 Contributor Reputation Check: HIGH risk
Maintainers: please review this contributor before merging.
See the workflow run for full details.
Automated check powered by AGT.
github-actions commentedon Nov 11, 2026
✅ External plugin intake passed
This submission passed automated intake validation and quality checks and is ready for maintainer review.
View workflow run · Download full quality gate logs
v0.3.7a7d6c81d60c1f96187fbf7f673a61752cc2de61aReviewer signals
These are non-blocking heuristics for maintainer review; they are not evidence of misconduct or low quality.
Quality gate summary
Legend: ✅ pass ·⚠️ warning · 🛑 fail
spec compliance output (✅ pass)
vally lint output (✅ pass)
install smoke test output (✅ pass)
Version match output
Ref/SHA consistency output
Canvas structure output
Canonical external.json payload
{ "name": "bulkhead", "description": "Guards for a machine where many Copilot CLI, Claude Code, Codex and other agent sessions run at once. Before a shell command runs, it blocks name-based kills of another session's processes, port collisions, git commands that would move or delete another session's tree, whole-disk scans and long foreground sleeps, and holds heavy commands back when RAM runs low.", "version": "0.3.7", "author": { "name": "Myeongseok Kang", "url": "https://github.com/dooly6276" }, "repository": "https://github.com/dooly6276/claude-bulkhead", "homepage": "https://github.com/dooly6276/claude-bulkhead#readme", "license": "MIT", "keywords": [ "hooks", "guard", "processes", "ports", "memory", "worktrees", "git", "parallel", "agents", "copilot-cli" ], "source": { "source": "github", "repo": "dooly6276/claude-bulkhead", "ref": "v0.3.7", "sha": "a7d6c81d60c1f96187fbf7f673a61752cc2de61a" } }aaronpowell commentedon Nov 12, 2026
/request-fixes The cross-session port/process ownership checks and memory-aware scheduling add more than a static command blacklist. Please update the submitted pin to include the upstream fixes and explain any remaining CI failures. The shared skill also promises session-exit cleanup that your other-agents guide says is unavailable in Copilot, and invokes bare CLI commands that the plugin-only install does not put on PATH. Please make those instructions Copilot-specific and include a live Copilot run showing a cross-session operation being blocked while the equivalent own-session operation is allowed. Native permissions remain the safety boundary.
github-actions commentedon Nov 12, 2026
🛠️ Changes requested by a maintainer
Maintainer aaronpowell used
/request-fixesto move this submission torequires-submitter-fixes.Requested fixes
The cross-session port/process ownership checks and memory-aware scheduling add more than a static command blacklist. Please update the submitted pin to include the upstream fixes and explain any remaining CI failures. The shared skill also promises session-exit cleanup that your other-agents guide says is unavailable in Copilot, and invokes bare CLI commands that the plugin-only install does not put on PATH. Please make those instructions Copilot-specific and include a live Copilot run showing a cross-session operation being blocked while the equivalent own-session operation is allowed. Native permissions remain the safety boundary.
Once you've addressed these, edit the issue or comment
/rerun-intaketo send it back through intake for review.dooly6276 commentedon Nov 12, 2026
Thanks for the review. Everything you listed is addressed in v0.3.7, and I updated the pin in the issue form to
v0.3.7/a7d6c81d60c1f96187fbf7f673a61752cc2de61a.CI. The failures at v0.3.2 were in the repository's own test workflow. On Linux and macOS, a 1 MB fuzz case ran past its time limit on slower runners. 0.3.3 fixed that by having port-guard look up programs by name in very long pipelines. On Windows, some tests assumed
/bin/shand paths without a drive letter. One failure was a real bug:bulkhead worktree prunedid not match an 8.3 short path to its long form, fixed in 0.3.4. Every job has passed on main since 0.3.4, including the v0.3.7 commits.Skill.
skills/bulkhead/SKILL.mdno longer promises cleanup at session exit outside Claude Code. It says orphan-reaper is Claude Code only, and that in Copilot CLI the agent stops the servers it started, by PID, before it finishes. It also says a plugin-only install does not putbulkheadorbulkhead-slotonPATH, and gives thenode "<plugin>/bin/bulkhead" ...form with Copilot's location,~/.copilot/installed-plugins/<marketplace>/bulkhead(or under$COPILOT_HOME). 0.3.7 also finds Copilot sessions whenCOPILOT_HOMEmoves the config folder; before, bulkhead skipped the process scan on such a machine.Live run. I used Copilot CLI 1.0.109 on macOS, with the plugin installed through
copilot plugin install, and ran two non-interactive sessions in one folder. Session A startednode server.js 4310 &and kept running. Session B was asked to free port 4310 withlsof -ti :4310 | xargs kill, then to start and stop its own server on 4311:The full output of both sessions and the
bulkhead logline are in docs/copilot-live-run.md.Your point that native permissions stay the boundary showed up in the same run. B's first try at stopping its own server,
lsof -ti :4311 | xargs kill, was refused by Copilot's own shell check ("The 'kill' command must specify at least one numeric PID") before bulkhead saw it, so B usedkill <pid>. bulkhead only adds denials inside what Copilot already allows; it never approves a command. In the same run, Copilot loaded the skill, foundbulkheadmissing fromPATH, and ran it from the plugin folder as the skill describes.raminmortazavi212-code commentedon Nov 12, 2026
raminmortazavi212-code commentedon Nov 12, 2026
aaronpowell commentedon Nov 13, 2026
/approve
github-actions commentedon Nov 13, 2026
✅ External plugin approved
A maintainer approved bulkhead, and the submission issue has been closed.
dooly6276/claude-bulkheadmain: [external-plugin] Add bulkhead #6391