sync: dev → main (v0.3.0 — README rewrite, MCP vs CLI guide, GSD auto-install)#14
sync: dev → main (v0.3.0 — README rewrite, MCP vs CLI guide, GSD auto-install)#14auroracapital merged 3 commits intomainfrom
Conversation
…d org URLs (#11) - All GitHub URLs now point to Lifecycle-Innovations-Limited/claude-ops - Root README: correct /plugin marketplace add + install commands, MCP vs CLI comparison table showing what each path gains/loses per integration - Inner README: consistent /ops:* colon syntax, GSD as optional, integrations split into CLI-only / MCP-only / choose-with-tradeoffs / plugin-bundled - setup.sh: auto-install missing core tools + npm deps on SessionStart - plugin.json: updated author URL, homepage, repository - marketplace.json + SECURITY.md: updated email Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Setup wizard now offers to install GSD (Get Shit Done) as a companion plugin. Pulls latest version via plugin marketplace. Users choose [Install GSD] or [Skip]. Enhances /ops:go, /ops:projects, /ops:next dashboards with project roadmap state. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Mention Blocks like a regular teammate with your question or request: @blocks review this pull request Run |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (7)
📝 WalkthroughWalkthroughOrganizational branding update from Aurora Capital to Lifecycle Innovations Limited with corresponding email and GitHub URL changes across configuration and documentation files. README restructured with new command namespace ( Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|
||
| # ops setup — Auto-install missing tools + validate readiness | ||
| # Called by SessionStart hook and /ops:setup | ||
| set -euo pipefail |
There was a problem hiding this comment.
Bug: The script exits prematurely on systems with missing dependencies due to an unhandled error in the auto_install function combined with set -e, preventing it from reporting missing tools.
Severity: HIGH
Suggested Fix
Modify the calls to auto_install so they do not trigger an immediate script exit. This can be achieved by appending || true to each auto_install function call, which will prevent a non-zero exit code from being propagated and stopping the script.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: claude-ops/scripts/setup.sh#L4
Potential issue: The script `setup.sh` enables `set -e`, which causes the script to exit
immediately upon any command failure. The `auto_install` function returns an exit code
of 1 if a required tool is missing and cannot be automatically installed (e.g., on a
Linux system without Homebrew). Because the `auto_install` functions are called directly
without any error handling, a missing tool will cause the script to terminate
prematurely. This prevents the script from executing its primary logic, which is to
iterate through all dependencies and report a consolidated list of what is missing to
the user. The script fails silently, defeating its purpose in common environments like
Docker or CI.
Did we get this right? 👍 / 👎 to inform future reviews.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: eaec55c533
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| auto_install jq jq | ||
| auto_install gh gh |
There was a problem hiding this comment.
Prevent setup script from exiting on first missing tool
Because the script runs with set -e, these unguarded auto_install ... calls abort execution as soon as one tool is missing (e.g., gh on a fresh machine), since auto_install returns 1 in that case. That means the rest of setup checks never run, additional auto-installs are skipped, and the SessionStart hook can emit no actionable ✗ lines, leaving users without the expected readiness guidance.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 3 potential issues.
Bugbot Autofix is ON, but it could not run because the spend limit has been reached. To enable Bugbot Autofix, raise your spend limit in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit eaec55c. Configure here.
| On install, run: | ||
|
|
||
| ```bash | ||
| claude plugin marketplace add auroracapital/get-shit-done && claude plugin install gsd@auroracapital-get-shit-done |
There was a problem hiding this comment.
GSD install commands reference wrong org name
High Severity
The GSD auto-install commands use auroracapital/get-shit-done while claude-ops/README.md line 63 references Lifecycle-Innovations-Limited/get-shit-done. This org name migration was applied everywhere else in the PR but missed here, so the new GSD auto-install feature — the main new feature of this PR — will fail to find the marketplace/plugin.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit eaec55c. Configure here.
| echo "" | ||
| for tool in "${MISSING[@]}"; do | ||
| echo " ✗ ops: $tool not found — run /ops:setup to configure" | ||
| done |
There was a problem hiding this comment.
Empty array expansion crashes script on macOS bash
High Severity
With set -u (nounset) enabled, "${MISSING[@]}" on an empty array triggers an "unbound variable" error in bash 3.2, which is macOS's default. On the happy path where all tools are present, MISSING stays empty and the script aborts before the registry check runs. This script runs on every session start via the SessionStart hook.
Reviewed by Cursor Bugbot for commit eaec55c. Configure here.
| brew install "$brew_pkg" 2>/dev/null && INSTALLED+=("$tool") && return 0 | ||
| fi | ||
| MISSING+=("$tool") | ||
| return 1 |
There was a problem hiding this comment.
Script aborts on first missing tool due to set -e
Medium Severity
auto_install returns 1 when a tool is missing and brew is unavailable (or brew install fails). Since callers like auto_install jq jq are in a simple command position, set -e causes the script to exit on the first failure. The remaining tools are never checked, the MISSING array is never fully populated, and npm installs and registry checks are skipped.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit eaec55c. Configure here.
There was a problem hiding this comment.
Pull request overview
Syncs dev → main for v0.3.0, primarily updating documentation/install flows and adding setup-wizard guidance for optional companion plugins and auto-install behavior.
Changes:
- Rewrites/updates READMEs with the new marketplace install flow, MCP vs CLI guidance, and updated org URLs.
- Adds “Companion plugins” (GSD) step to the setup wizard documentation.
- Updates setup script behavior to auto-install core tooling/dependencies and refresh readiness signals on SessionStart.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| SECURITY.md | Updates security contact email. |
| README.md | Rewrites root README (new install flow, MCP vs CLI guide, architecture/structure). |
| claude-ops/skills/setup/SKILL.md | Extends setup wizard spec with companion plugin (GSD) installation step. |
| claude-ops/scripts/setup.sh | Changes setup script to auto-install core tools and npm deps; reports missing items. |
| claude-ops/README.md | Updates plugin README install flow, integrations taxonomy, and slash-command syntax. |
| claude-ops/.claude-plugin/plugin.json | Updates author/repo URLs to new GitHub org. |
| .claude-plugin/marketplace.json | Updates marketplace owner email. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| On install, run: | ||
|
|
||
| ```bash | ||
| claude plugin marketplace add auroracapital/get-shit-done && claude plugin install gsd@auroracapital-get-shit-done | ||
| ``` |
There was a problem hiding this comment.
The GSD auto-install instructions still point at auroracapital/get-shit-done and gsd@auroracapital-get-shit-done, but elsewhere in the docs GSD is referenced under Lifecycle-Innovations-Limited/get-shit-done. This mismatch will cause the wizard’s install command to fail or install from the wrong marketplace; update the marketplace repo and plugin identifier to the intended org/slug consistently throughout this step.
| # ops setup — Auto-install missing tools + validate readiness | ||
| # Called by SessionStart hook and /ops:setup | ||
| set -euo pipefail | ||
|
|
||
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | ||
| echo " OPS ► SETUP CHECK" | ||
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | ||
| echo "" | ||
|
|
||
| check_tool() { | ||
| local name="$1" | ||
| local cmd="$2" | ||
| local purpose="$3" | ||
| local required="$4" | ||
|
|
||
| if command -v "$cmd" &>/dev/null; then | ||
| version=$($cmd --version 2>/dev/null | head -1 || echo "installed") | ||
| echo " ✓ $name — $version" | ||
| else | ||
| if [ "$required" = "required" ]; then | ||
| echo " ✗ $name — NOT FOUND (required for $purpose)" | ||
| else | ||
| echo " ○ $name — not found (optional, needed for $purpose)" | ||
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | ||
| PLUGIN_ROOT="$(dirname "$SCRIPT_DIR")" | ||
| MISSING=() | ||
| INSTALLED=() | ||
|
|
||
| # ─── Auto-install core tools ──────────────────────────────────────── | ||
| auto_install() { | ||
| local tool="$1" | ||
| local brew_pkg="$2" | ||
| if ! command -v "$tool" &>/dev/null; then | ||
| if command -v brew &>/dev/null; then | ||
| brew install "$brew_pkg" 2>/dev/null && INSTALLED+=("$tool") && return 0 | ||
| fi | ||
| MISSING+=("$tool") | ||
| return 1 | ||
| fi | ||
| return 0 | ||
| } | ||
|
|
||
| echo "## Core Tools (required)" | ||
| check_tool "jq" "jq" "JSON processing" "required" | ||
| check_tool "git" "git" "repository management" "required" | ||
| check_tool "gh" "gh" "GitHub PRs and CI" "required" | ||
| # Core (auto-installed silently) | ||
| auto_install jq jq | ||
| auto_install gh gh | ||
| auto_install git git | ||
|
|
||
| # Infrastructure (auto-installed if brew available) | ||
| auto_install aws awscli | ||
| auto_install node node |
There was a problem hiding this comment.
setup.sh runs brew install automatically and is invoked by the SessionStart hook; this can make networked system changes on every session start without explicit user confirmation. Consider making auto-install opt-in (e.g., only when invoked from /ops:setup, or gated behind an env var/flag) and keep SessionStart to a read-only readiness check.
| # Telegram MCP server deps | ||
| if [ -f "$PLUGIN_ROOT/telegram-server/package.json" ] && command -v node &>/dev/null; then | ||
| if [ ! -d "$PLUGIN_ROOT/telegram-server/node_modules" ]; then | ||
| (cd "$PLUGIN_ROOT/telegram-server" && npm install --silent 2>/dev/null) && INSTALLED+=("telegram-deps") | ||
| fi | ||
| fi | ||
|
|
||
| echo "" | ||
| echo "## Infrastructure Tools" | ||
| check_tool "aws" "aws" "/ops-infra ECS health" "optional" | ||
| check_tool "sentry-cli" "sentry-cli" "/ops-triage Sentry issues" "optional" | ||
| # Plugin bin deps | ||
| if [ -f "$PLUGIN_ROOT/package.json" ] && command -v node &>/dev/null; then | ||
| if [ ! -d "$PLUGIN_ROOT/node_modules" ]; then | ||
| (cd "$PLUGIN_ROOT" && npm install --silent 2>/dev/null) && INSTALLED+=("plugin-deps") | ||
| fi | ||
| fi |
There was a problem hiding this comment.
The npm install calls discard stderr and don’t emit any warning on failure (they just skip adding to INSTALLED). If dependency installation fails (offline, permissions, missing npm), the script will silently proceed and later Telegram/plugin scripts may break with no actionable signal. Consider capturing failures and printing a clear ✗ ops: line (and/or the error output) so SessionStart and users can see what went wrong.
| ## Requirements | ||
|
|
||
| Add to `~/.claude/settings.json`: | ||
| Just [Claude Code](https://claude.ai/code) 1.0+. Everything else is installed automatically. | ||
|
|
||
| ```json | ||
| { | ||
| "plugins": [ | ||
| { | ||
| "source": "https://github.com/auroracapital/claude-ops" | ||
| } | ||
| ] | ||
| } | ||
| ``` | ||
|
|
||
| Then configure integrations: | ||
| The setup wizard (`/ops:setup`) walks you through each integration interactively — "Do you want AWS CLI? [Yes/No]", "Connect Slack? [OAuth/Skip]", etc. Missing CLIs are auto-installed via Homebrew. MCP servers connect via OAuth. No config files to edit manually. | ||
|
|
There was a problem hiding this comment.
The statement “Everything else is installed automatically” is inaccurate given the current behavior: installs depend on Homebrew being present, and some tools (e.g., wacli, gog) are manual installs. Reword this to reflect the actual flow (wizard-guided installs, auto-install only when supported, and Homebrew/macOS assumptions) to avoid misleading users.
| ```bash | ||
| # 1. Add the marketplace (one-time) | ||
| /plugin marketplace add Lifecycle-Innovations-Limited/claude-ops | ||
|
|
||
| # 3. Fill in plugin user_config when prompted, or later via /plugin settings | ||
| # (Telegram API creds, Sentry org, Linear team, AWS region — all optional) | ||
| # 2. Install the plugin | ||
| /plugin install ops@lifecycle-innovations-limited-claude-ops | ||
|
|
||
| # 4. Run the interactive setup wizard to auto-detect tools and configure channels | ||
| # 3. Configure integrations (Telegram, Slack, AWS, etc.) | ||
| /ops:setup | ||
| ``` |
There was a problem hiding this comment.
This README now instructs installing ops@lifecycle-innovations-limited-claude-ops, but later sections still refer to configuring ops@ops-marketplace and use hard-coded cache paths like ~/.claude/plugins/cache/ops-marketplace/.... That inconsistency is likely to send users to the wrong plugin settings / paths. Please update those references to match the new marketplace/plugin identifier (or prefer ${CLAUDE_PLUGIN_ROOT} in examples).
| | [GSD](https://github.com/Lifecycle-Innovations-Limited/get-shit-done) | Project roadmap state in dashboards | Auto-detected. Skills degrade gracefully without it | | ||
|
|
There was a problem hiding this comment.
GSD is listed under the “Plugin-bundled” integrations section, but it’s described elsewhere (and in the setup wizard) as a separate third-party companion plugin. This heading/placement is misleading; consider moving GSD to a dedicated “Companion/Optional plugins” section (or explicitly note it is not bundled with claude-ops).
| | [GSD](https://github.com/Lifecycle-Innovations-Limited/get-shit-done) | Project roadmap state in dashboards | Auto-detected. Skills degrade gracefully without it | | |
| #### Optional companion plugins (not bundled) | |
| | Integration | What it is | Setup | | |
| |-------------|-----------|-------| | |
| | [GSD](https://github.com/Lifecycle-Innovations-Limited/get-shit-done) | Project roadmap state in dashboards | Auto-detected if installed separately. Skills degrade gracefully without it | |
…-install) (#14) * docs: rewrite READMEs with correct install flow, MCP vs CLI guide, and org URLs (#11) - All GitHub URLs now point to Lifecycle-Innovations-Limited/claude-ops - Root README: correct /plugin marketplace add + install commands, MCP vs CLI comparison table showing what each path gains/loses per integration - Inner README: consistent /ops:* colon syntax, GSD as optional, integrations split into CLI-only / MCP-only / choose-with-tradeoffs / plugin-bundled - setup.sh: auto-install missing core tools + npm deps on SessionStart - plugin.json: updated author URL, homepage, repository - marketplace.json + SECURITY.md: updated email Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: clarify Telegram setup is fully automated (phone + 2 codes) (#12) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add GSD companion plugin auto-install to setup wizard (#13) Setup wizard now offers to install GSD (Get Shit Done) as a companion plugin. Pulls latest version via plugin marketplace. Users choose [Install GSD] or [Skip]. Enhances /ops:go, /ops:projects, /ops:next dashboards with project roadmap state. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>


Summary
Test plan
🤖 Generated with Claude Code
Note
Medium Risk
Medium risk because
claude-ops/scripts/setup.shnow auto-installs tools (via Homebrew) and runsnpm install, which can change local environments and fail differently across machines. Most other changes are documentation/metadata updates and should be low risk.Overview
Documentation and metadata are updated for the new
Lifecycle-Innovations-Limitedorg and the current Claude Code marketplace flow, including corrected slash-command naming (/ops:goetc.), revised install steps, and expanded integration guidance (notably an MCP vs CLI comparison).Setup behavior is expanded:
scripts/setup.shnow auto-installs core tools (jq,git,gh, plusaws/nodewhen available) via Homebrew, installs Node dependencies for the plugin and bundled Telegram server, and reports only missing prerequisites/registry.The setup wizard spec (
skills/setup/SKILL.md) adds a new Companion plugins section to optionally install theGSDplugin, and various docs/security contact details are updated accordingly.Reviewed by Cursor Bugbot for commit eaec55c. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by CodeRabbit
New Features
/ops:comms,/ops:deploy,/ops:triage).Documentation
Chores