Skip to content

feat(cli-bundle): OpenCode CLI + plugin marketplaces (GSD/gstack/superpowers)#6

Merged
govtech42 merged 1 commit into
mainfrom
feat/opencode-plugins
May 25, 2026
Merged

feat(cli-bundle): OpenCode CLI + plugin marketplaces (GSD/gstack/superpowers)#6
govtech42 merged 1 commit into
mainfrom
feat/opencode-plugins

Conversation

@govtech42
Copy link
Copy Markdown
Owner

Adds OpenCode as the 5th coexisting CLI in cli-bundle, plus opt-in install of three plugin marketplaces:

Plugin Claude Codex Antigravity Cursor OpenCode
GSD headless
gstack headless headless (--host opencode)
superpowers headless manual /plugins manual (NOT documented) manual /add-plugin manual fetch URL

OpenCode (05b-opencode.sh)

  • Upstream installer: curl -fsSL https://opencode.ai/install | bash
  • Toggle: INSTALL_OPENCODE
  • PATH wiring: ~/.opencode/bin and ~/.local/bin via ~/.bashrc

Plugins (09-plugins.sh, lib/plugins.sh)

  • claude_headless drives claude -p "<slash>" --dangerously-skip-permissions
  • install_claude_plugin — idempotent marketplace add + install + reload
  • install_gstack_for <host> — git clone --depth 1 + ./setup [--host <host>]
  • print_manual_install_hint — structured operator instruction for CLIs lacking a headless install path

Decisions

  • Antigravity superpowers: option (b) — no blind attempt. Manual hint with Gemini-CLI-pattern guess + warning that integration is NOT officially documented.
  • Bun: required by gstack. install_bun lives in lib/base-packages.sh (reusable), only invoked when INSTALL_GSTACK=true.
  • gstack targets: list-based (GSTACK_TARGETS="claude opencode") instead of per-target booleans.

Tests

  • 4 new bats unit tests (tests/test_plugins.bats) using a stubbed claude binary.
  • 28/28 bats pass locally + lint + env-completeness clean.

TODO (in .claude/TODO.md)

  • Verify whether antigravity extensions install is a real command
  • Confirm gstack ./setup is non-interactive
  • GSD legacy npm package conflict auto-uninstall
  • Plugin verification post-install (claude -p "/plugin list")

🤖 Generated with Claude Code

…rpowers)

OpenCode CLI joins the bundle as the 5th coexisting agent client.
Three plugin marketplaces (GSD, gstack, superpowers) are installed
opt-in across the CLIs that support them.

OpenCode (05b-opencode.sh)
- Upstream installer: curl -fsSL https://opencode.ai/install | bash
- PATH wiring for ~/.opencode/bin and ~/.local/bin via ~/.bashrc
- Toggle: INSTALL_OPENCODE

Plugins (09-plugins.sh, lib/plugins.sh)
- claude_headless: drives `claude -p "<slash>" --dangerously-skip-permissions`
- install_claude_plugin: marketplace add + install + reload-plugins, idempotent
- install_gstack_for <host>: git clone --depth 1 + ./setup [--host <host>]
- print_manual_install_hint: structured operator instruction for CLIs without
  a headless plugin-install path

Coverage matrix
  GSD          → Claude only (headless)
  gstack       → list-based via GSTACK_TARGETS (Claude + OpenCode supported)
  superpowers  → Claude headless; Codex / Cursor / OpenCode print manual
                 hints with exact commands; Antigravity option (b): no blind
                 attempt, manual hint + warning that integration is NOT
                 officially documented (Gemini-CLI pattern guess only).

Runtime
- install_bun added to lib/base-packages.sh (gstack requires Bun).
  Only invoked when INSTALL_GSTACK=true.

.env additions
  INSTALL_OPENCODE
  INSTALL_GSD
  INSTALL_GSTACK + GSTACK_TARGETS
  INSTALL_SUPERPOWERS + SUPERPOWERS_{CLAUDE,CODEX,CURSOR,OPENCODE,ANTIGRAVITY}

Tests
- tests/test_plugins.bats: 4 new tests using a stubbed `claude` binary
  (PATH isolation for the "missing claude" case).
- All 28 bats + lint + env-completeness pass locally.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@govtech42 govtech42 merged commit 976109a into main May 25, 2026
3 checks passed
@govtech42 govtech42 deleted the feat/opencode-plugins branch May 25, 2026 19:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant