When prompt files contain shell metacharacters (\$VAR, backticks,
\$(...)), passing them as -p "\$(cat file)" causes the shell to expand
those sequences before the CLI tool ever receives the text. This
silently corrupts prompts built from user-authored PLAN.md content.
Replace all -p "\$(cat /tmp/gsd-review-prompt-{phase}.md)" patterns
with cat file | cli -p - so the prompt bytes are passed verbatim via
stdin. Affected CLIs: gemini, claude, codex, qwen. OpenCode and cursor
already used the pipe-to-stdin pattern.
Closes#2200
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add CURSOR_SESSION_ID env var detection in review.md so Cursor skips
itself as a reviewer (matching the CLAUDE_CODE_ENTRYPOINT pattern).
Add Qwen Review and Cursor Review sections to the REVIEWS.md template.
Update ja-JP and ko-KR FEATURES.md to include --opencode, --qwen, and
--cursor flags in the /gsd-review command signature.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(review): add Qwen Code and Cursor CLI as peer reviewers (#1938, #1960)
Add qwen and cursor to the /gsd-review pipeline following the
established pattern from CodeRabbit and OpenCode integrations:
- CLI detection via command -v
- --qwen and --cursor flags
- Invocation blocks with empty-output fallback
- Install help URLs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(review): correct qwen/cursor invocations and add doc surfaces (#1966)
Address review feedback from trek-e, kturk, and lawsontaylor:
- Use positional form for qwen (qwen "prompt") — -p flag is deprecated
upstream and will be removed in a future version
- Fix cursor invocation to use cursor agent -p --mode ask --trust
instead of cursor --prompt which launches the editor GUI
- Add --qwen and --cursor flags to COMMANDS.md, FEATURES.md, help.md,
commands/gsd/review.md, and localized docs (ja-JP, ko-KR)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(review): add per-CLI model selection via config
- Add review.models.<cli> dynamic config keys to VALID_CONFIG_KEYS
- Update review.md to read model preferences via config-get at runtime
- Null/missing values fall back to CLI defaults (backward compatible)
- Add key suggestion for common typo (review.model)
- Update planning-config reference doc
Closes#1849
* fix(review): handle absent and null model config gracefully
Address PR #1859 review feedback from @trek-e:
1. Add `|| true` to all four config-get subshell invocations in
review.md so that an absent review.models.<cli> key does not
produce a non-zero exit from the subshell. cmdConfigGet calls
error() (process.exit(1)) when the key path is missing; the
2>/dev/null suppresses the message but the exit code was still
discarded silently. The || true makes the fall-through explicit
and survives future set -e adoption.
2. Add `&& [ "$VAR" != "null" ]` to all four if guards. cmdConfigSet
does not parse the literal 'null' as JSON null — it stores the
string 'null' — and cmdConfigGet --raw returns the literal text
'null' for that value. Without the extra guard the workflow would
pass `-m "null"` to the CLI, which crashes. The issue spec
documents null as the "fall back to CLI default" sentinel, so this
restores the contract.
3. Add tests/review-model-config.test.cjs covering all five cases
trek-e listed:
- isValidConfigKey accepts review.models.gemini (via config-set)
- isValidConfigKey accepts review.models.codex (via config-set)
- review.model is rejected and suggests review.models.<cli-name>
- config-set then config-get round-trip with a model ID
- config-set then config-get round-trip with null (returns "null")
Tests follow the node:test + node:assert/strict pattern from
tests/agent-skills.test.cjs and use runGsdTools from helpers.cjs.
Closes#1849
claude --no-input was removed in Claude Code >= v2.1.81 and causes an
immediate crash ("error: unknown option '--no-input'"). The -p/--print
flag already handles non-interactive output, so --no-input is redundant.
Adds a regression test in tests/workflow-compat.test.cjs that scans all
workflow, command, and agent .md files to ensure --no-input never returns.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace AI self-identification with env var checks (ANTIGRAVITY_AGENT,
CLAUDE_CODE_ENTRYPOINT) to correctly determine which review CLI to skip.
Fixes incorrect skip behavior when running non-Claude models inside
the Antigravity client.
* fix: replace /gsd: command format with /gsd- skill format in all suggestions
All next-step suggestions shown to users were still using the old colon
format (/gsd:xxx) which cannot be copy-pasted as skills. Migrated all
occurrences across agents/, commands/, get-shit-done/, docs/, README files,
bin/install.js (hardcoded defaults for claude runtime), and
get-shit-done/bin/lib/*.cjs (generate-claude-md templates and error messages).
Updated tests to assert new hyphen format instead of old colon format.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: migrate remaining /gsd: format to /gsd- in hooks, workflows, and sdk
Addresses remaining user-facing occurrences missed in the initial migration:
- hooks/: fix 4 user-facing messages (pause-work, update, fast, quick)
and 2 comments in gsd-workflow-guard.js
- get-shit-done/workflows/: fix 21 Skill() literal calls that Claude
executes directly (installer does not transform workflow content)
- sdk/prompt-sanitizer.ts: update regex to strip /gsd- format in addition
to legacy /gsd: format; update JSDoc comment
- tests/: update autonomous-ui-steps, prompt-sanitizer to assert new format
Note: commands/gsd/*.md frontmatter (name: gsd:xxx) intentionally unchanged
— installer derives skillName from directory path, not the name field.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(plan-phase): preserve --chain flag in auto-advance sync and handle ui-phase gate in chain mode
Bug 1: step 15 sync-flag check only guarded against --auto, causing
_auto_chain_active to be cleared when plan-phase is invoked without
--auto in ARGUMENTS even though a --chain pipeline was active. Added
--chain to the guard condition, matching discuss-phase behaviour.
Bug 2: UI Design Contract gate (step 5.6) always exited the workflow
when UI-SPEC was missing, breaking the discuss --chain pipeline
silently. When _auto_chain_active is true, the gate now auto-invokes
gsd-ui-phase --auto via Skill() and continues to step 6 without
prompting. Manual invocations retain the existing AskUserQuestion flow.
* fix: remove <sub>/clear</sub> pattern and duplicate old-format command in discuss-phase.md
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Addresses review feedback — checks if opencode output file is
non-empty after invocation, writes a failure message if empty
to prevent blank sections in REVIEWS.md.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove --copilot alias to avoid collision with existing Copilot concept
- Remove hardcoded model (-m) and variant flags; let user's OpenCode
config determine the model, consistent with other reviewer CLIs
- Use generic "OpenCode Review" section header since model varies by config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds OpenCode CLI as a 5th reviewer option, enabling teams with GitHub
Copilot subscriptions to leverage Copilot-routed models (e.g.
gpt-5.3-codex) for cross-AI plan reviews.
Closes#1520
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three commands reimplemented from positively-received community PRs:
1. /gsd:review (#925) — Cross-AI peer review
Invoke external AI CLIs (Gemini, Claude, Codex) to independently
review phase plans. Produces REVIEWS.md with per-reviewer feedback
and consensus summary. Feed back into planning via --reviews flag.
Multiple users praised the adversarial review concept.
2. /gsd:plant-seed (#456) — Forward-looking idea capture
Capture ideas with trigger conditions that auto-surface during
/gsd:new-milestone. Seeds preserve WHY, WHEN to surface, and
breadcrumbs to related code. Better than deferred items because
triggers are checked, not forgotten.
3. /gsd:pr-branch (#470) — Clean PR branches
Create a branch for pull requests by filtering out .planning/
commits. Classifies commits as code-only, planning-only, or mixed,
then cherry-picks only code changes. Reviewers see clean diffs.
All three are standalone command+workflow additions with no core code
changes. Help workflow updated. Test skill counts updated.
797/797 tests pass.