From eb49ff98dfbb3715a46f9ed415468e4c73699e67 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Mon, 14 Sep 2026 16:49:52 -0400 Subject: [PATCH] fix(#4728): stop presenting the retired Gemini CLI as a supported runtime (#4743) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#4728): stop presenting the retired Gemini CLI as a supported runtime #1928 removed the Gemini CLI runtime after Google sunset it on 2026-06-18, and updated the ENGLISH docs. The locale mirrors and the runtime-loaded workflow prose were not updated in the same change, and no gate asserts the ABSENCE of a retired runtime, so both drifted quietly for a year. The finding that shaped this change: English is already correct. docs/ ARCHITECTURE.md, CONFIGURATION.md, USER-GUIDE.md, how-to/install-on-your-runtime.md and CLI-TOOLS.md carry zero runtime-axis Gemini references; the only English hits anywhere are a Gemini 2.5 Pro MODEL line, the GEMINI_API_KEY row, and prose that correctly documents the retirement. So the docs half of this is translation lag, not a content decision, and every locale edit here is parity with an existing English line rather than new wording: - install-on-your-runtime.md English has NO `### Gemini CLI` section -> deleted - USER-GUIDE.md :843 "…, Antigravity CLI, Kilo)" -> substituted - ARCHITECTURE.md English has NO Gemini CLI table row -> row deleted - ARCHITECTURE.md :24 English holds `Kimi CLI` in that slot -> Kimi CLI - context-monitor.md :3 "`AfterTool` for Antigravity CLI" -> substituted - spike-and-sketch.md :93 "(Codex, Antigravity CLI, etc.)" -> substituted - configure-model-profiles "Codex, OpenCode, Antigravity CLI, or Kilo" -> substituted - COMMANDS.md English keeps only hyphen + Codex bullets -> colon bullet deleted - FEATURES.md source docs/features/multi-runtime-support.md:10 lists no Gemini CLI -> name removed ARCHITECTURE.md:24 is the clearest case for reading English rather than substituting blind: Antigravity ALREADY appears later in that list, so replacing Gemini CLI with Antigravity would have named it twice. English holds Kimi CLI there, so that is what the locales get. The largest single class was hand-duplicated boilerplate. A "Text mode" paragraph repeated across 34 runtime-loaded workflow files ends "…required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.)". No lint enforces that sentence and no script syncs it, so every copy was edited. These files are read by the agent at runtime, so they steer behavior rather than only informing a reader — which is why this class matters more than its word count suggests. The slash-command-form section is restructured in all four languages to match English, which had already dropped its colon-form bullet. That bullet claimed the colon form is "Gemini CLI only", which was false on its own terms independent of the retirement: `/gsd:…` is GSD's canonical AUTHORING token, rewritten per runtime at install time, and NO runtime registers it — VALID_COMMAND_STYLES is {slash-hyphen, shell-var} and 18 of 19 runtimes declare slash-hyphen. Substituting the runtime name would have left the claim false with Antigravity's name in it, so the claim is gone, matching English. Two anchor regressions were caught and fixed while doing that. zh-CN lost its explicit {#slash-command-forms-hyphen-vs-colon} anchor while its TOC still linked it; the anchor is restored. ko-KR and pt-BR never had an explicit anchor and rely on the slug generated from the heading text, so shortening the heading broke their own TOC links; those links now point at the new slugs. English's heading lost its anchor while its TOC still links the old one — that latent English bug is deliberately NOT copied. Preserved, because `gemini` is not one thing here and a blanket sweep breaks the product: ~/.gemini/antigravity{,-ide,-cli} and ~/.gemini as their parent; ~/.gemini/config (#3738); GEMINI.md; hookEvents "gemini"; GEMINI_API_KEY in all four locales; every gemini-* model id and the Gemini 2.5 Pro references in ko-KR/pt-BR/zh-CN (ja-JP genuinely lacks that line — the locales have diverged, so a uniform patch would be wrong); the hook-event dialect notes, which are RE-ATTRIBUTED rather than deleted because Antigravity inherits that dialect; reapply-patches.md:93's legacy-install note; host-integration-capability-matrix.md :27 and :342, which correctly record the sunset and Antigravity's contract; whats-new-1.7.0.md and FEATURES.md:3506, which document the retirement itself; and the generated launcher preamble, which belongs to epic #4632 — zero _GSD_SHIM_NAME lines appear in this diff. Coverage: a #4728 block in tests/gemini-runtime-removed.test.cjs asserts the retired name is gone from STRUCTURAL POSITIONS (a level-3 heading, a table row's first cell, a runtime-example parenthetical) rather than asserting the string is absent, which would be wrong. It pairs those with positive PRESERVE assertions over the same files — Antigravity's heading, ~/.gemini/antigravity, GEMINI_API_KEY, AfterTool — so a patch that deletes too much fails as loudly as one that deletes too little. The model-axis test pins both the presence in three locales and the absence in ja-JP, so a later uniform patch that "helpfully" adds it back fails. The new docs/ reads tripped lint-docs-guard-registration for the first time in this file, so the test is registered in scripts/docs-guard-registry.cjs. Not covered here, by design: nothing above would catch a Gemini-as-runtime reference appearing in a NEW file tomorrow. That is the repo-wide drift guard, #4729, which must land last — written now it would red on the very references this change removes. Fixes #4728 Co-Authored-By: Claude Opus 5 * fix(#4728): fix four review blockers, including a vacuous test and my own duplicate A full matrix run on 31f12d7943 FAILED with 3 real failures, and an isolated adversarial review returned BLOCK on four blockers. All of it was correct. 1. I committed the exact error I claimed to have avoided. The commit message boasted that ARCHITECTURE.md:24 proved the value of reading English rather than substituting blind, because Antigravity already appeared later in that list. Five hundred lines further down the SAME four files, my `Gemini:` -> `Antigravity:` substitution produced TWO consecutive `- Antigravity:` bullets, because an Antigravity bullet was already there. English (ARCHITECTURE.md:827) merges them into one. Now merged in all four locales, reusing each locale's existing words. 2. `--gemini` survived in the runtime-detection CLI flag list in all four locale ARCHITECTURE.md files. English:817 holds `--kimi` in that slot and already lists `--antigravity` later, so this is another place where substituting Antigravity would have duplicated it. Now `--kimi`. 3. Two runtime-loaded workflow files still enumerated Gemini one line ABOVE the line I had already corrected -- the "Adaptive (Recommended)" option in settings.md:192 and new-project/steps/auto-mode-config.md:95. 4. THE NEW TEST WAS VACUOUS for two of its five files. It matched only `non-Claude runtimes (` and `(e.g. `, and neither regex could reach the two lines the change actually fixed: health.md:52 reads `non-Claude (Codex, ...)` without the word "runtimes", and execute-phase.md:1028 has no parenthetical at all. The reviewer proved it by re-introducing Gemini at both lines and watching the assertion stay GREEN. That same blind spot is what hid finding 3. Replaced with a case-sensitive `/\bGemini\b/` walk over every `gsd-core/workflows/**/*.md`, which works because every LEGITIMATE gemini reference in that tree is spelled differently and cannot match: Antigravity's paths are lowercase with a slash (`~/.gemini/antigravity`), Google's model ids are lowercase and hyphenated (`gemini-3.1-pro-preview`), and the env vars are uppercase (`GEMINI_CONFIG_DIR`, `GEMINI_SESSION_ID`). A bare capitalised `Gemini` there means the retired RUNTIME is being named. The walk asserts it found at least 50 files so an empty walk cannot pass vacuously, and it now covers the nested `new-project/steps/` directory where finding 3 lived. Two allowlist entries, both by line CONTENT and both justified: reapply-patches.md's `Legacy: ... pre-#1928` note, and settings-advanced.md's `Known provider` menu. The second was escalated by the agent rather than decided: Section 8 of that file says model policy is defined "independently" of the runtime, so `(Claude / OpenAI / Gemini / Qwen)` is the PROVIDER axis -- the same axis as the lowercase model ids -- and must keep working. Proven to fail, not just asserted: the predicate reports 0 offenders on the real tree and exactly 2 on a /tmp copy with Gemini re-injected at health.md:52 and execute-phase.md:1028. Also from the review: a `| Gemini |` COLUMN survived in the locale FEATURES.md comparison tables (English has none) -- removed from all three, with header, separator and every body row kept aligned; two ENGLISH runtime-axis sites were missed by my own parity standard (how-to/execute-a-phase.md:88 and how-to/verify-and-ship.md:89, the latter doubly stale since #4716 retired the Gemini reviewer lane); docs/USER-GUIDE.md:12 linked a dead anchor, which I had found and deliberately left -- record-and-proceed on a known defect is exactly what the rules forbid, so it is fixed; docs/COMMANDS.md:12 and all four mirrors still claimed "the hyphen and colon forms are runtime-specific spellings" with no colon form documented anywhere, so that false sentence is deleted; and ko-KR had the installer rather than the user doing the targeting. The other two matrix failures were the compact-content benchmark baseline, which drifted because this PR changes byte counts, refreshed via the script's own `--write` path rather than by hand; and this commit's emitted-drift-ack trailers. Method note on the acks: the failing run measured growth against origin/next@1110c3b4ee, which is the STALE LOCAL `next` ref -- gsd-test merges into the local base branch, and this machine's `next` is seven commits behind origin/next, which is checked out in the main worktree and so cannot be fast-forwarded from here. The 32 trailers below are computed against the REAL base (origin/next @ ca8d9d4459) by comparing each tracked file's blob size, which is one more file than that run reported -- the extra is settings.md, grown again by fix 3. docs-update.md and map-codebase.md are deliberately NOT acked: they SHRANK, since there the fix deleted ", Gemini CLI" rather than substituting, and acking a file no delta consumed is itself an error. Refs #4728 Emitted-Drift-Ack-Growth: add-tests.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: add-todo.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: ai-integration-phase.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: check-todos.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: cleanup.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: complete-milestone.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: do.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: eval-review.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: execute-phase.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: execute-plan.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: health.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: import.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: inbox.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: manager.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: new-milestone.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: new-workspace.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: note.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: onboard.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: plant-seed.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: profile-user.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: quick.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: remove-workspace.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: secure-phase.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: settings.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: ship.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: smart-entry.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: ui-phase.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: ui-review.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: undo.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: update.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: validate-phase.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Emitted-Drift-Ack-Growth: verify-work.md — retiring the Gemini CLI runtime name; Antigravity is one byte longer Co-Authored-By: Claude Opus 5 * chore(#4728): add the changeset fragment The PR body claimed one was present and it was not — caught by scripts/changeset/lint.cjs reporting fail_missing_fragment, not by the checklist, which is exactly why the lint exists. Type Fixed: the diff is prose, and a docs-only fix uses Fixed since there is no Documentation type. Refs #4728 Co-Authored-By: Claude Opus 5 --------- Co-authored-by: sim Co-authored-by: Claude Opus 5 --- .changeset/witty-pumas-travel.md | 5 + docs/COMMANDS.md | 2 +- docs/USER-GUIDE.md | 2 +- docs/how-to/execute-a-phase.md | 2 +- docs/how-to/run-phases-autonomously.md | 2 +- docs/how-to/verify-and-ship.md | 2 +- docs/ja-JP/ARCHITECTURE.md | 14 +- docs/ja-JP/COMMANDS.md | 3 +- docs/ja-JP/CONFIGURATION.md | 4 +- docs/ja-JP/FEATURES.md | 14 +- docs/ja-JP/USER-GUIDE.md | 10 +- docs/ja-JP/context-monitor.md | 4 +- docs/ja-JP/how-to/configure-model-profiles.md | 2 +- docs/ja-JP/how-to/install-on-your-runtime.md | 18 +- docs/ja-JP/how-to/spike-and-sketch.md | 2 +- docs/ko-KR/ARCHITECTURE.md | 16 +- docs/ko-KR/COMMANDS.md | 3 +- docs/ko-KR/CONFIGURATION.md | 4 +- docs/ko-KR/FEATURES.md | 14 +- docs/ko-KR/USER-GUIDE.md | 12 +- docs/ko-KR/context-monitor.md | 4 +- docs/ko-KR/how-to/configure-model-profiles.md | 2 +- docs/ko-KR/how-to/install-on-your-runtime.md | 18 +- docs/ko-KR/how-to/spike-and-sketch.md | 2 +- docs/pt-BR/ARCHITECTURE.md | 16 +- docs/pt-BR/COMMANDS.md | 3 +- docs/pt-BR/CONFIGURATION.md | 6 +- docs/pt-BR/USER-GUIDE.md | 12 +- docs/pt-BR/context-monitor.md | 4 +- docs/pt-BR/how-to/configure-model-profiles.md | 2 +- docs/pt-BR/how-to/install-on-your-runtime.md | 18 +- docs/pt-BR/how-to/spike-and-sketch.md | 2 +- docs/research/provider-rate-limit-signals.md | 6 +- docs/zh-CN/ARCHITECTURE.md | 16 +- docs/zh-CN/COMMANDS.md | 3 +- docs/zh-CN/CONFIGURATION.md | 6 +- docs/zh-CN/FEATURES.md | 14 +- docs/zh-CN/USER-GUIDE.md | 10 +- docs/zh-CN/context-monitor.md | 4 +- docs/zh-CN/how-to/configure-model-profiles.md | 2 +- docs/zh-CN/how-to/install-on-your-runtime.md | 18 +- docs/zh-CN/how-to/spike-and-sketch.md | 2 +- gsd-core/references/model-profiles.md | 2 +- gsd-core/workflows/add-tests.md | 2 +- gsd-core/workflows/add-todo.md | 4 +- gsd-core/workflows/ai-integration-phase.md | 2 +- gsd-core/workflows/check-todos.md | 2 +- gsd-core/workflows/cleanup.md | 2 +- gsd-core/workflows/complete-milestone.md | 2 +- gsd-core/workflows/do.md | 2 +- gsd-core/workflows/docs-update.md | 4 +- gsd-core/workflows/eval-review.md | 2 +- gsd-core/workflows/execute-phase.md | 2 +- gsd-core/workflows/execute-plan.md | 2 +- gsd-core/workflows/health.md | 2 +- gsd-core/workflows/import.md | 2 +- gsd-core/workflows/inbox.md | 2 +- gsd-core/workflows/manager.md | 2 +- gsd-core/workflows/map-codebase.md | 2 +- gsd-core/workflows/new-milestone.md | 2 +- .../new-project/steps/auto-mode-config.md | 4 +- .../new-project/steps/codebase-map-offer.md | 2 +- gsd-core/workflows/new-workspace.md | 2 +- gsd-core/workflows/note.md | 2 +- gsd-core/workflows/onboard.md | 2 +- gsd-core/workflows/plant-seed.md | 2 +- gsd-core/workflows/profile-user.md | 2 +- gsd-core/workflows/quick.md | 2 +- gsd-core/workflows/remove-workspace.md | 2 +- gsd-core/workflows/secure-phase.md | 2 +- gsd-core/workflows/settings.md | 6 +- gsd-core/workflows/ship.md | 2 +- gsd-core/workflows/smart-entry.md | 2 +- gsd-core/workflows/ui-phase.md | 2 +- gsd-core/workflows/ui-review.md | 2 +- gsd-core/workflows/undo.md | 2 +- gsd-core/workflows/update.md | 2 +- gsd-core/workflows/validate-phase.md | 2 +- gsd-core/workflows/verify-work.md | 2 +- scripts/docs-guard-registry.cjs | 26 +++ .../lib/macos-conformance-tier.generated.cjs | 1 + .../compact-content-benchmark-baseline.json | 20 +- tests/gemini-runtime-removed.test.cjs | 176 ++++++++++++++++++ 83 files changed, 365 insertions(+), 247 deletions(-) create mode 100644 .changeset/witty-pumas-travel.md diff --git a/.changeset/witty-pumas-travel.md b/.changeset/witty-pumas-travel.md new file mode 100644 index 000000000..c6a661a0e --- /dev/null +++ b/.changeset/witty-pumas-travel.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 4743 +--- +**The docs and workflow prose no longer offer Gemini CLI as a runtime** — translated guides still walked readers through installing GSD for a runtime Google shut off in 2026-06, including an install command that now just prints a sunset notice and exits, and the workflow text the agent reads at runtime still named it as a non-Claude option. Antigravity is the documented successor and is what those surfaces name now. (#4728) diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md index 550cafd42..66582efd8 100644 --- a/docs/COMMANDS.md +++ b/docs/COMMANDS.md @@ -9,7 +9,7 @@ - **Claude Code / Copilot / OpenCode / Kilo:** `/gsd-command-name [args]` (hyphen form) - **Codex:** `$gsd-command-name [args]` -The hyphen and colon forms are *runtime-specific spellings of the same command*. Whichever runtime you're on, the installer writes the correct form into your runtime's command directory. +Whichever runtime you're on, the installer writes the correct form into your runtime's command directory. ### Skill Runtime Behavior (Claude Code) diff --git a/docs/USER-GUIDE.md b/docs/USER-GUIDE.md index e159f47f7..cf2e8166e 100644 --- a/docs/USER-GUIDE.md +++ b/docs/USER-GUIDE.md @@ -9,7 +9,7 @@ A narrative companion guide to GSD Core — orient yourself here, then follow th ## Table of Contents -- [Slash-command forms](#slash-command-forms-hyphen-vs-colon) +- [Slash-command forms](#slash-command-form) - [Namespace routing primer](#namespace-routing-primer-gsd-ns--v140) - [Reading GSD's output](#reading-gsds-output) - [Project lifecycle overview](#project-lifecycle-overview) diff --git a/docs/how-to/execute-a-phase.md b/docs/how-to/execute-a-phase.md index c18ba93f2..c3177491f 100644 --- a/docs/how-to/execute-a-phase.md +++ b/docs/how-to/execute-a-phase.md @@ -85,7 +85,7 @@ Git history will show one commit per task (from each executor), followed by trac ## Cross-AI execution -To delegate execution to an external AI CLI (Codex, Gemini, etc.) configured in `workflow.cross_ai_command`: +To delegate execution to an external AI CLI (Codex, Antigravity, etc.) configured in `workflow.cross_ai_command`: ```bash /gsd-execute-phase 2 --cross-ai diff --git a/docs/how-to/run-phases-autonomously.md b/docs/how-to/run-phases-autonomously.md index eb0de8c57..22b7d5b8a 100644 --- a/docs/how-to/run-phases-autonomously.md +++ b/docs/how-to/run-phases-autonomously.md @@ -93,7 +93,7 @@ In interactive mode: ## Run on a non-Claude runtime -To run autonomously on a runtime that does not support the `AskUserQuestion` tool (for example Codex CLI or Gemini CLI), add `--text`: +To run autonomously on a runtime that does not support the `AskUserQuestion` tool (for example Codex CLI or Antigravity), add `--text`: ```bash /gsd-autonomous --text diff --git a/docs/how-to/verify-and-ship.md b/docs/how-to/verify-and-ship.md index bda414dd8..adbceb6b2 100644 --- a/docs/how-to/verify-and-ship.md +++ b/docs/how-to/verify-and-ship.md @@ -86,7 +86,7 @@ No manual body writing required. /gsd-code-review 1 --depth=deep # Cross-file analysis including import graphs ``` -See [Set up cross-AI review](set-up-cross-ai-review.md) to configure Gemini, Codex, or other reviewers for plan review earlier in the cycle. +See [Set up cross-AI review](set-up-cross-ai-review.md) to configure Antigravity, Codex, or other reviewers for plan review earlier in the cycle. --- diff --git a/docs/ja-JP/ARCHITECTURE.md b/docs/ja-JP/ARCHITECTURE.md index 7b343bb5c..406bd9b56 100644 --- a/docs/ja-JP/ARCHITECTURE.md +++ b/docs/ja-JP/ARCHITECTURE.md @@ -21,7 +21,7 @@ ## システム概要 -GSD Core は、ユーザーと AI コーディングエージェント(Claude Code、Gemini CLI、OpenCode、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code)の間に位置する **メタプロンプティングフレームワーク** です。以下の機能を提供します: +GSD Core は、ユーザーと AI コーディングエージェント(Claude Code、Kimi CLI、OpenCode、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code)の間に位置する **メタプロンプティングフレームワーク** です。以下の機能を提供します: 1. **コンテキストエンジニアリング** — タスクごとに AI が必要とするすべてを提供する構造化アーティファクト([コンテキストエンジニアリング](explanation/context-engineering.md) 参照) 2. **マルチエージェントオーケストレーション** — フレッシュなコンテキストウィンドウで専門化されたエージェントを生成する薄いオーケストレーター([マルチエージェントオーケストレーション](explanation/multi-agent-orchestration.md) 参照) @@ -112,7 +112,6 @@ GSD Core は、ユーザーと AI コーディングエージェント(Claude - **OpenCode / Kilo:** スラッシュコマンド(ハイフン形式、`/gsd-command-name`) - **Codex:** スキル(`$gsd-command-name`) - **Copilot:** スラッシュコマンド(ハイフン形式、`/gsd-command-name`) -- **Gemini CLI:** `gsd:` 名前空間下のスラッシュコマンド(コロン形式、`/gsd:command-name`)——Gemini はすべてのカスタムコマンドをプラグイン ID の下で名前空間化するため、インストールパスがすべての本文テキスト参照をコロン形式に書き換える - **Antigravity:** スキル **コマンド総数:** 信頼できる数と完全なロスターについては [`docs/INVENTORY.md`](INVENTORY.md#commands) を参照。 @@ -446,7 +445,6 @@ UI-SPEC.md (per phase) ─────────────────── - **OpenCode:** `~/.config/opencode/` global または `./.opencode/` local - **Kilo:** `~/.config/kilo/` global または `./.kilo/` local -- **Gemini CLI:** `~/.gemini/` global または `./.gemini/` local - **Codex:** `~/.codex/` global または `./.codex/` local - **Copilot:** `~/.copilot/` global または `./.github/` local - **Antigravity:** auto-detected global root(`~/.gemini/antigravity/`、`~/.gemini/antigravity-ide/`、または `~/.gemini/antigravity-cli/`)または `./.agent/` local @@ -518,7 +516,7 @@ UI-SPEC.md (per phase) ─────────────────── インストーラー(`bin/install.js`、約 10,700 行)は以下を処理します: -1. **ランタイム検出** — インタラクティブプロンプトまたは CLI フラグ(`--claude`、`--opencode`、`--gemini`、`--kilo`、`--codex`、`--copilot`、`--antigravity`、`--cursor`、`--windsurf`、`--augment`、`--trae`、`--qwen`、`--hermes`、`--codebuddy`、`--cline`、`--all`) +1. **ランタイム検出** — インタラクティブプロンプトまたは CLI フラグ(`--claude`、`--opencode`、`--kimi`、`--kilo`、`--codex`、`--copilot`、`--antigravity`、`--cursor`、`--windsurf`、`--augment`、`--trae`、`--qwen`、`--hermes`、`--codebuddy`、`--cline`、`--all`) 2. **インストール先の選択** — グローバル(`--global`)またはローカル(`--local`) 3. **ファイルデプロイ** — コマンド、スキル、ワークフロー、リファレンス、テンプレート、エージェント、フックをコピー 4. **ランタイム適応** — ランタイムごとにファイル内容を変換: @@ -527,8 +525,7 @@ UI-SPEC.md (per phase) ─────────────────── - Kilo: OpenCode 変換パイプラインを Kilo の設定パスで再利用 - Codex: コマンドから TOML 設定 + スキルを生成 - Copilot: ツール名をマッピング(Read→read、Bash→execute など) - - Gemini: フックイベント名を調整(`PostToolUse` の代わりに `AfterTool`) - - Antigravity: Google モデル同等品によるスキルファースト + - Antigravity: Google モデル同等品によるスキルファースト;フックイベント名を調整(`PostToolUse` の代わりに `AfterTool`) - Cursor: ルール参照付きスキルファースト - Windsurf: ルール参照付きスキルファースト - Trae: `~/.trae` / `./.trae` へのスキルファーストインストール、`settings.json` またはフック統合なし @@ -558,7 +555,7 @@ UI-SPEC.md (per phase) ─────────────────── ### アーキテクチャ ``` -Runtime Engine (Claude Code / Gemini CLI) +Runtime Engine (Claude Code / Antigravity CLI) │ ├── statusLine event ──► gsd-statusline.js │ Reads: stdin (session JSON) @@ -634,7 +631,6 @@ GSD Core は統一されたコマンド/ワークフローアーキテクチャ | Claude Code | `~/.claude` | `./.claude` | グローバル `skills/gsd-*/SKILL.md`;ローカル `commands/gsd/*.md` | `agents/gsd-*.md` | `settings.json` フックと statusLine エントリ | | OpenCode | `~/.config/opencode` | `./.opencode` | `command/gsd-*.md` | `agents/gsd-*.md` | `opencode.json` または `opencode.jsonc`;GSD フックなし | | Kilo | `~/.config/kilo` | `./.kilo` | `command/gsd-*.md` | `agents/gsd-*.md` | `kilo.json` または `kilo.jsonc`;GSD フックなし | -| Gemini CLI | `~/.gemini` | `./.gemini` | `commands/gsd/*.toml` | `agents/gsd-*.md` | `settings.json` フィーチャーフラグ、フック、statusline | | Codex | `~/.codex` | `./.codex` | `skills/gsd-*/SKILL.md` | エージェントソース markdown + エージェントごとの TOML | `config.toml` `[agents.gsd-*]`、`[features].hooks`、フックテーブル | | GitHub Copilot | `~/.copilot` | `./.github` | `skills/gsd-*/SKILL.md` と `copilot-instructions.md` | `.agent.md` ファイル | GSD フックまたは statusline なし | | Antigravity | auto-detected:`~/.gemini/antigravity`、`~/.gemini/antigravity-ide`、または `~/.gemini/antigravity-cli` | `./.agent` | `skills/gsd-*/SKILL.md` | `agents/gsd-*.md` | GSD がインストールした場合の Gemini スタイル `settings.json` フックエントリ | @@ -650,7 +646,7 @@ GSD Core は統一されたコマンド/ワークフローアーキテクチャ ### 抽象化ポイント 1. **ツール名マッピング** — 各ランタイムは独自のツール名を持つ(例:Claude の `Bash` → Copilot の `execute`) -2. **フックイベント名** — Claude Code は `PostToolUse`、Gemini は `AfterTool` を使用 +2. **フックイベント名** — Claude Code は `PostToolUse`、Antigravity は `AfterTool` を使用 3. **エージェントフロントマター** — 各ランタイムは独自のエージェント定義形式を持つ 4. **パス規約** — 各ランタイムは異なるディレクトリに設定を保存 5. **モデル参照** — `inherit` プロファイルにより、GSD はランタイムのモデル選択に委譲 diff --git a/docs/ja-JP/COMMANDS.md b/docs/ja-JP/COMMANDS.md index 902b2b58d..eccf917ab 100644 --- a/docs/ja-JP/COMMANDS.md +++ b/docs/ja-JP/COMMANDS.md @@ -7,10 +7,9 @@ ## コマンド構文 - **Claude Code / Copilot / OpenCode / Kilo:** `/gsd-command-name [args]`(ハイフン形式) -- **Gemini CLI:** `/gsd:command-name [args]`(コロン形式 — Gemini は `gsd:` 配下にコマンドを名前空間化します) - **Codex:** `$gsd-command-name [args]` -ハイフン形式とコロン形式は、*同じコマンドのランタイム固有の表記*です。どのランタイムを使用していても、インストーラーが正しい形式をランタイムのコマンドディレクトリに書き込みます。 +どのランタイムを使用していても、インストーラーが正しい形式をランタイムのコマンドディレクトリに書き込みます。 --- diff --git a/docs/ja-JP/CONFIGURATION.md b/docs/ja-JP/CONFIGURATION.md index e36639092..ee4ab899f 100644 --- a/docs/ja-JP/CONFIGURATION.md +++ b/docs/ja-JP/CONFIGURATION.md @@ -298,7 +298,7 @@ quick タスクのブランチ設定例: 有効なオーバーライド値: `opus`、`sonnet`、`haiku`、`inherit`、または完全修飾モデル ID(例: `"openai/o3"`、`"google/gemini-2.5-pro"`)。 -### 非 Claude ランタイム(Codex、OpenCode、Gemini CLI、Kilo) +### 非 Claude ランタイム(Codex、OpenCode、Antigravity CLI、Kilo) GSD が非 Claude ランタイム向けにインストールされると、インストーラーは自動的に `~/.gsd/defaults.json` に `resolve_model_ids: "omit"` を設定します。これにより GSD はすべてのエージェントに対して空のモデルパラメータを返し、各エージェントはランタイムで設定されたモデルを使用します。デフォルトの場合、追加のセットアップは不要です。 @@ -333,7 +333,7 @@ GSD が非 Claude ランタイム向けにインストールされると、イ |----|------|---------| | `false`(デフォルト) | Claude エイリアス(`opus`、`sonnet`、`haiku`)を返す | Claude Code + ネイティブ Anthropic API | | `true` | エイリアスを完全な Claude モデル ID(`claude-opus-4-8`)にマッピング | 完全な ID が必要な API を使用する Claude Code | -| `"omit"` | 空文字列を返す(ランタイムがデフォルトを選択) | 非 Claude ランタイム(Codex、OpenCode、Gemini CLI、Kilo) | +| `"omit"` | 空文字列を返す(ランタイムがデフォルトを選択) | 非 Claude ランタイム(Codex、OpenCode、Antigravity CLI、Kilo) | ### プロファイルの設計思想 diff --git a/docs/ja-JP/FEATURES.md b/docs/ja-JP/FEATURES.md index 0ce322339..5cbe68180 100644 --- a/docs/ja-JP/FEATURES.md +++ b/docs/ja-JP/FEATURES.md @@ -1013,7 +1013,7 @@ fix(03-01): correct auth token expiry **目的:** 複数の AI コーディングエージェントランタイムで GSD を実行します。 **要件:** -- REQ-RUNTIME-01: システムは Claude Code、OpenCode、Gemini CLI、Kilo、Codex、Copilot、Antigravity をサポートしなければならない +- REQ-RUNTIME-01: システムは Claude Code、OpenCode、Kilo、Codex、Copilot、Antigravity をサポートしなければならない - REQ-RUNTIME-02: インストーラーはランタイムごとにコンテンツを変換しなければならない(ツール名、パス、フロントマター) - REQ-RUNTIME-03: インストーラーはインタラクティブおよび非インタラクティブ(`--claude --global`)モードをサポートしなければならない - REQ-RUNTIME-04: インストーラーはグローバルとローカルの両方のインストールをサポートしなければならない @@ -1022,12 +1022,12 @@ fix(03-01): correct auth token expiry **ランタイム変換:** -| 側面 | Claude Code | OpenCode | Gemini | Kilo | Codex | Copilot | Antigravity | -|------|------------|----------|--------|-------|-------|---------|-------------| -| コマンド | スラッシュコマンド | スラッシュコマンド | スラッシュコマンド | スラッシュコマンド | スキル(TOML) | スラッシュコマンド | スキル | -| エージェント形式 | Claude ネイティブ | `mode: subagent` | Claude ネイティブ | `mode: subagent` | スキル | ツールマッピング | スキル | -| フックイベント | `PostToolUse` | N/A | `AfterTool` | N/A | N/A | N/A | N/A | -| 設定 | `settings.json` | `opencode.json(c)` | `settings.json` | `kilo.json(c)` | TOML | Instructions | Config | +| 側面 | Claude Code | OpenCode | Kilo | Codex | Copilot | Antigravity | +|------|------------|----------|-------|-------|---------|-------------| +| コマンド | スラッシュコマンド | スラッシュコマンド | スラッシュコマンド | スキル(TOML) | スラッシュコマンド | スキル | +| エージェント形式 | Claude ネイティブ | `mode: subagent` | `mode: subagent` | スキル | ツールマッピング | スキル | +| フックイベント | `PostToolUse` | N/A | N/A | N/A | N/A | N/A | +| 設定 | `settings.json` | `opencode.json(c)` | `kilo.json(c)` | TOML | Instructions | Config | --- diff --git a/docs/ja-JP/USER-GUIDE.md b/docs/ja-JP/USER-GUIDE.md index 1a1f09677..0243ea774 100644 --- a/docs/ja-JP/USER-GUIDE.md +++ b/docs/ja-JP/USER-GUIDE.md @@ -31,14 +31,13 @@ execute → verify → review → ship ループにマッピングするレシ --- -## スラッシュコマンドの形式(ハイフン形式 vs コロン形式) {#slash-command-forms-hyphen-vs-colon} +## スラッシュコマンドの形式 {#slash-command-forms-hyphen-vs-colon} -GSD はサポートされているすべてのランタイムに **同一のスキルセット** を提供しますが、スラッシュ形式には 2 種類の表記が存在します。 +GSD はサポートされているすべてのランタイムに **同一のスキルセット** を提供しており、ハイフン形式のスラッシュ表記を使用します: - **ハイフン形式** — `/gsd-command-name` — Claude Code、Copilot、OpenCode、Kilo、Cursor、Windsurf、Augment、Antigravity、Trae で使用されます。 -- **コロン形式** — `/gsd:command-name` — **Gemini CLI 専用**。Gemini はすべてのプラグインコマンドをプラグイン ID 配下に名前空間分けするため、インストール時に `--gemini` フラグを指定するとコマンドディレクトリ内の本文参照とコマンドファイルがすべてコロン形式に書き換えられます。 -どちらを選ぶ必要はありません — インストーラーが対象の各ランタイムのコマンドディレクトリに正しい形式を書き込みます。Gemini 端末でウォークスルーを実行する場合は、スラッシュコマンドを読む際に `gsd` 後のハイフンをコロンに置き換えてください。 +インストーラーが、対象とする各ランタイムのコマンドディレクトリにこの形式を書き込みます。 ## 名前空間ルーティング入門(`gsd:`、v1.40) {#namespace-routing-primer-gsdnamespace-v140} @@ -671,7 +670,7 @@ budget プロファイルに切り替えてください: `/gsd-config --profile 完全な監査、ハーネスリファレンス、`model_profile` との組み合わせに関するノートは、バンドルされた `context-budget.md` リファレンスの [MCP ツールスキーマコスト](../../gsd-core/references/context-budget.md#mcp-tool-schema-cost-harness-concern) を参照してください。 -### 非 Claude ランタイムの使用(Codex、OpenCode、Gemini CLI、Kilo) +### 非 Claude ランタイムの使用(Codex、OpenCode、Antigravity CLI、Kilo) > **Codex CLI の最小サポートバージョン: `0.130.0`**(イシュー [#3562](https://github.com/open-gsd/gsd-core/issues/3562))。 @@ -748,7 +747,6 @@ WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/gsd-core@latest --wind | ランタイム | 安定版デフォルト | オーバーライド環境変数 | |---|---|---| | Claude Code | `~/.claude` | `CLAUDE_CONFIG_DIR` | -| Gemini CLI | `~/.gemini` | `GEMINI_CONFIG_DIR` | | OpenCode | `XDG_CONFIG_HOME/opencode` | `OPENCODE_CONFIG_DIR` | | Codex | (Codex CLI による) | `--config-dir` フラグ | | Copilot | `~/.copilot` | `COPILOT_CONFIG_DIR` | diff --git a/docs/ja-JP/context-monitor.md b/docs/ja-JP/context-monitor.md index d17532873..1e1830205 100644 --- a/docs/ja-JP/context-monitor.md +++ b/docs/ja-JP/context-monitor.md @@ -1,6 +1,6 @@ # コンテキストウィンドウモニター -ツール使用後に実行されるフック(Claude Code では `PostToolUse`、Gemini CLI では `AfterTool`)で、コンテキストウィンドウの使用量が高くなった際にエージェントに警告します。 +ツール使用後に実行されるフック(Claude Code では `PostToolUse`、Antigravity CLI では `AfterTool`)で、コンテキストウィンドウの使用量が高くなった際にエージェントに警告します。 ## 問題 @@ -62,7 +62,7 @@ GSD の `/gsd-pause-work` コマンドは実行状態を保存します。WARNIN 両フックは `npx @opengsd/gsd-core` のインストール時に自動的に登録されます——通常の状況では手動の手順は不要です。フック設定の詳細、しきい値のオーバーライド、手動登録の例については、[設定](CONFIGURATION.md) を参照してください。 -簡単な参考として:ステータスラインフックは `settings.json` に `statusLine` として登録されます;コンテキストモニター(`gsd-context-monitor.js`)は `PostToolUse` フックとして登録されます(Gemini CLI の場合は `AfterTool`)。どちらのエントリも、インストーラーを実行した Node 実行ファイルの絶対パスを使います。Windows PowerShell では、引用符付きの実行ファイルパスに `&` をプレフィックスしてください。 +簡単な参考として:ステータスラインフックは `settings.json` に `statusLine` として登録されます;コンテキストモニター(`gsd-context-monitor.js`)は `PostToolUse` フックとして登録されます(Antigravity CLI の場合は `AfterTool`)。どちらのエントリも、インストーラーを実行した Node 実行ファイルの絶対パスを使います。Windows PowerShell では、引用符付きの実行ファイルパスに `&` をプレフィックスしてください。 ## 安全性 diff --git a/docs/ja-JP/how-to/configure-model-profiles.md b/docs/ja-JP/how-to/configure-model-profiles.md index 9274a5cf9..62a934dbf 100644 --- a/docs/ja-JP/how-to/configure-model-profiles.md +++ b/docs/ja-JP/how-to/configure-model-profiles.md @@ -154,7 +154,7 @@ npx @opengsd/gsd-core@latest --codex --global # または --opencode、--kilo ## Anthropic 以外のランタイムでの GSD 使用 -Codex、OpenCode、Gemini CLI、または Kilo 向けに GSD をインストールした場合、インストーラーはすでに設定に `resolve_model_ids: "omit"` を設定しています。これにより GSD は Anthropic のモデル ID 解決をスキップし、ランタイムが独自のデフォルトモデルを選択できるようにします。基本的なケースでは手動設定は不要です。 +Codex、OpenCode、Antigravity CLI、または Kilo 向けに GSD をインストールした場合、インストーラーはすでに設定に `resolve_model_ids: "omit"` を設定しています。これにより GSD は Anthropic のモデル ID 解決をスキップし、ランタイムが独自のデフォルトモデルを選択できるようにします。基本的なケースでは手動設定は不要です。 **Codex でティアードモデルを使用したい場合:** diff --git a/docs/ja-JP/how-to/install-on-your-runtime.md b/docs/ja-JP/how-to/install-on-your-runtime.md index f81d87181..3dd9e9e7c 100644 --- a/docs/ja-JP/how-to/install-on-your-runtime.md +++ b/docs/ja-JP/how-to/install-on-your-runtime.md @@ -8,7 +8,7 @@ GSD Core(`@opengsd/gsd-core`)を普段使いの AI コーディングラン ## インストーラーが必要な理由 -GSD Core は Claude Code のネイティブ frontmatter 形式でエージェントファイルとコマンドファイルを提供しています。サポートされている各ランタイムは、異なるスキーマ、ディレクトリ構成、コマンド呼び出し構文を要求します。インストーラーは必要な変換を実行します。たとえば OpenCode 向けのツールリストとカラー値の変換、Codex 向けの TOML エージェントエントリの書き込み、Gemini CLI 向けのすべてのコマンド本文をハイフン形式(`/gsd-update`)からコロン形式(`/gsd-update`)への書き換えなどです。 +GSD Core は Claude Code のネイティブ frontmatter 形式でエージェントファイルとコマンドファイルを提供しています。サポートされている各ランタイムは、異なるスキーマ、ディレクトリ構成、コマンド呼び出し構文を要求します。インストーラーは必要な変換を実行します。たとえば OpenCode 向けのツールリストとカラー値の変換、Codex 向けの TOML エージェントエントリの書き込みなどです。 **`agents/` や `commands/` からファイルを直接コピーしないでください。** そうするとこれらの変換がスキップされ、スキーマ検証エラーやコマンドの欠落が発生します。 @@ -46,22 +46,6 @@ CLAUDE_CONFIG_DIR=~/.claude-alt npx @opengsd/gsd-core@latest --claude --global --- -### Gemini CLI - -```bash -npx @opengsd/gsd-core@latest --gemini --global -``` - -スキルは `~/.gemini/` に配置されます。インストーラーはすべてのコマンド本文を Gemini のコロン名前空間(`/gsd-update`、`/gsd-config` など)に書き換えます。インストール後は Gemini CLI を再起動してください。 - -**インストールディレクトリの上書き:** - -```bash -GEMINI_CONFIG_DIR=~/.gemini-alt npx @opengsd/gsd-core@latest --gemini --global -``` - ---- - ### OpenCode ```bash diff --git a/docs/ja-JP/how-to/spike-and-sketch.md b/docs/ja-JP/how-to/spike-and-sketch.md index 0311d31a0..44b86be16 100644 --- a/docs/ja-JP/how-to/spike-and-sketch.md +++ b/docs/ja-JP/how-to/spike-and-sketch.md @@ -90,7 +90,7 @@ GSD は、コードを書く前に、雰囲気、ビジュアルリファレン `--quick` は受付の会話を完全にスキップし、引数をデザイン方向として使用します。 -### Claude 以外のランタイム(Codex、Gemini CLI など) +### Claude 以外のランタイム(Codex、Antigravity CLI など) ```bash /gsd-sketch --text "onboarding flow" diff --git a/docs/ko-KR/ARCHITECTURE.md b/docs/ko-KR/ARCHITECTURE.md index bad6b8b21..0cdc15efa 100644 --- a/docs/ko-KR/ARCHITECTURE.md +++ b/docs/ko-KR/ARCHITECTURE.md @@ -21,7 +21,7 @@ ## 시스템 개요 -GSD Core는 사용자와 AI 코딩 에이전트(Claude Code, Gemini CLI, OpenCode, Kilo, Codex, Copilot, Antigravity, Trae, Cline, Augment Code) 사이에 위치하는 **메타 프롬프팅 프레임워크**이다. 다음을 제공한다: +GSD Core는 사용자와 AI 코딩 에이전트(Claude Code, Kimi CLI, OpenCode, Kilo, Codex, Copilot, Antigravity, Trae, Cline, Augment Code) 사이에 위치하는 **메타 프롬프팅 프레임워크**이다. 다음을 제공한다: 1. **컨텍스트 엔지니어링** — 작업별로 AI에게 필요한 모든 것을 제공하는 구조화된 결과물([컨텍스트 엔지니어링](explanation/context-engineering.md) 참조) 2. **다중 에이전트 오케스트레이션** — 신선한 컨텍스트 윈도우로 전문화된 에이전트를 생성하는 얇은 오케스트레이터([다중 에이전트 오케스트레이션](explanation/multi-agent-orchestration.md) 참조) @@ -115,7 +115,6 @@ GSD Core는 사용자와 AI 코딩 에이전트(Claude Code, Gemini CLI, OpenCod - **OpenCode / Kilo:** 슬래시 명령어 (하이픈 형식, `/gsd-command-name`) - **Codex:** Skills (`$gsd-command-name`) - **Copilot:** 슬래시 명령어 (하이픈 형식, `/gsd-command-name`) -- **Gemini CLI:** `gsd:` 네임스페이스 하의 슬래시 명령어 (콜론 형식, `/gsd:command-name`) — Gemini는 플러그인 id 아래 모든 커스텀 명령어를 네임스페이스화하므로 설치 경로가 모든 본문 텍스트 참조를 콜론 형식으로 다시 쓴다 - **Antigravity:** Skills **전체 명령어 수:** 권위 있는 개수와 전체 목록은 [`docs/INVENTORY.md`](INVENTORY.md#commands)를 참조하라. @@ -484,7 +483,6 @@ UI-SPEC.md (단계별) ─────────────────── - **OpenCode:** `~/.config/opencode/` 전역 또는 `./.opencode/` 로컬 - **Kilo:** `~/.config/kilo/` 전역 또는 `./.kilo/` 로컬 -- **Gemini CLI:** `~/.gemini/` 전역 또는 `./.gemini/` 로컬 - **Codex:** `~/.codex/` 전역 또는 `./.codex/` 로컬 - **Copilot:** `~/.copilot/` 전역 또는 `./.github/` 로컬 - **Antigravity:** 자동 감지된 전역 루트 (`~/.gemini/antigravity/`, `~/.gemini/antigravity-ide/`, 또는 `~/.gemini/antigravity-cli/`) 또는 `./.agent/` 로컬 @@ -569,7 +567,7 @@ UI-SPEC.md (단계별) ─────────────────── 인스톨러(`bin/install.js`, ~10,700줄)는 다음을 처리한다: -1. **런타임 감지** — 대화형 프롬프트 또는 CLI 플래그 (`--claude`, `--opencode`, `--gemini`, `--kilo`, `--codex`, `--copilot`, `--antigravity`, `--cursor`, `--windsurf`, `--augment`, `--trae`, `--qwen`, `--hermes`, `--codebuddy`, `--cline`, `--all`) +1. **런타임 감지** — 대화형 프롬프트 또는 CLI 플래그 (`--claude`, `--opencode`, `--kimi`, `--kilo`, `--codex`, `--copilot`, `--antigravity`, `--cursor`, `--windsurf`, `--augment`, `--trae`, `--qwen`, `--hermes`, `--codebuddy`, `--cline`, `--all`) 2. **위치 선택** — 전역(`--global`) 또는 로컬(`--local`) 3. **파일 배포** — commands, skills, workflows, references, templates, agents, hooks 복사 4. **런타임 적응** — 런타임별 파일 내용 변환: @@ -578,8 +576,7 @@ UI-SPEC.md (단계별) ─────────────────── - Kilo: Kilo 설정 경로로 OpenCode 변환 파이프라인 재사용 - Codex: commands에서 TOML config + skills 생성 - Copilot: 도구 이름 매핑 (Read→read, Bash→execute 등) - - Gemini: 훅 이벤트 이름 조정 (`PostToolUse` 대신 `AfterTool`) - - Antigravity: Google 모델 등가물을 사용한 skills-first + - Antigravity: Google 모델 등가물을 사용한 skills-first; 훅 이벤트 이름 조정 (`PostToolUse` 대신 `AfterTool`) - Cursor: Cursor 규칙 참조를 사용한 skills-first - Windsurf: Windsurf 규칙 참조를 사용한 skills-first - Trae: `settings.json` 또는 훅 통합 없이 `~/.trae` / `./.trae`에 skills-first 설치 @@ -612,7 +609,7 @@ UI-SPEC.md (단계별) ─────────────────── ### 아키텍처 ``` -런타임 엔진 (Claude Code / Gemini CLI) +런타임 엔진 (Claude Code / Antigravity CLI) │ ├── statusLine 이벤트 ──► gsd-statusline.js │ 읽기: stdin (세션 JSON) @@ -705,7 +702,6 @@ GSD는 통합된 명령어/워크플로우 아키텍처를 통해 여러 AI 코 | Claude Code | `~/.claude` | `./.claude` | 전역 `skills/gsd-*/SKILL.md`; 로컬 `commands/gsd/*.md` | `agents/gsd-*.md` | `settings.json` 훅 및 statusLine 항목 | | OpenCode | `~/.config/opencode` | `./.opencode` | `command/gsd-*.md` | `agents/gsd-*.md` | `opencode.json` 또는 `opencode.jsonc`; GSD 훅 없음 | | Kilo | `~/.config/kilo` | `./.kilo` | `command/gsd-*.md` | `agents/gsd-*.md` | `kilo.json` 또는 `kilo.jsonc`; GSD 훅 없음 | -| Gemini CLI | `~/.gemini` | `./.gemini` | `commands/gsd/*.toml` | `agents/gsd-*.md` | `settings.json` 기능 플래그, 훅, statusline | | Codex | `~/.codex` | `./.codex` | `skills/gsd-*/SKILL.md` | `agents/` 소스 마크다운 + 에이전트별 TOML | `config.toml` `[agents.gsd-*]`, `[features].hooks` (정규; 레거시 별칭 `codex_hooks`는 인식되며 재설치 시 마이그레이션됨, #3566), 훅 테이블 | | GitHub Copilot | `~/.copilot` | `./.github` | `skills/gsd-*/SKILL.md` 및 `copilot-instructions.md` | `.agent.md` 파일 | GSD 훅 또는 statusline 없음 | | Antigravity | 자동 감지: `~/.gemini/antigravity`, `~/.gemini/antigravity-ide`, 또는 `~/.gemini/antigravity-cli` | `./.agent` | `skills/gsd-*/SKILL.md` | `agents/gsd-*.md` | GSD가 설치 시 Gemini 스타일 `settings.json` 훅 항목 | @@ -724,7 +720,7 @@ GSD는 통합된 명령어/워크플로우 아키텍처를 통해 여러 AI 코 - Claude Code: Anthropic 슬래시 명령어, 설정, 훅, 서브에이전트 문서. - OpenCode 및 Kilo: OpenCode 설정 문서 및 Kilo 커스텀 서브에이전트 문서. -- Gemini CLI 및 Qwen Code: 명령어/설정 문서; Qwen 명령어 문서는 2026-05-06에 마지막으로 업데이트됨. +- Qwen Code: 명령어/설정 문서; Qwen 명령어 문서는 2026-05-06에 마지막으로 업데이트됨. - Codex: OpenAI Codex 문서 및 `config-schema.json`; 인스톨러는 에이전트 테이블 형태를 위한 Codex 0.124.0 호환성도 포함. - Copilot, Cursor, Cline, Augment, Hermes, CodeBuddy: 커스텀 지시, 규칙, 스킬, 설정을 위한 벤더 문서. - Antigravity, Windsurf, Trae: 소스가 제한된 행. 인스톨러는 현재 호환성 심을 문서화하며, 마이그레이션은 설정을 재작성하기 전에 해당 소스를 새로 고쳐야 한다. @@ -732,7 +728,7 @@ GSD는 통합된 명령어/워크플로우 아키텍처를 통해 여러 AI 코 ### 추상화 포인트 1. **도구 이름 매핑** — 각 런타임은 고유한 도구 이름을 가진다 (예: Claude의 `Bash` → Copilot의 `execute`) -2. **훅 이벤트 이름** — Claude는 `PostToolUse`를 사용하고 Gemini는 `AfterTool`을 사용한다 +2. **훅 이벤트 이름** — Claude는 `PostToolUse`를 사용하고 Antigravity는 `AfterTool`을 사용한다 3. **에이전트 전문** — 각 런타임은 고유한 에이전트 정의 형식을 가진다 4. **경로 컨벤션** — 각 런타임은 서로 다른 디렉터리에 설정을 저장한다 5. **모델 참조** — `inherit` 프로필은 GSD가 런타임의 모델 선택에 위임하도록 한다 diff --git a/docs/ko-KR/COMMANDS.md b/docs/ko-KR/COMMANDS.md index 5ab20472c..c5c49b526 100644 --- a/docs/ko-KR/COMMANDS.md +++ b/docs/ko-KR/COMMANDS.md @@ -7,10 +7,9 @@ ## 명령어 구문 - **Claude Code / Copilot / OpenCode / Kilo:** `/gsd-command-name [args]` (하이픈 형식) -- **Gemini CLI:** `/gsd:command-name [args]` (콜론 형식 — Gemini는 `gsd:` 네임스페이스로 명령어를 분류합니다) - **Codex:** `$gsd-command-name [args]` -하이픈 형식과 콜론 형식은 *동일한 명령어의 런타임별 표기법*입니다. 사용 중인 런타임에 따라 인스톨러가 해당 런타임의 명령어 디렉토리에 올바른 형식을 자동으로 작성합니다. +사용 중인 런타임에 따라 인스톨러가 해당 런타임의 명령어 디렉토리에 올바른 형식을 자동으로 작성합니다. --- diff --git a/docs/ko-KR/CONFIGURATION.md b/docs/ko-KR/CONFIGURATION.md index ce3930032..909737878 100644 --- a/docs/ko-KR/CONFIGURATION.md +++ b/docs/ko-KR/CONFIGURATION.md @@ -298,7 +298,7 @@ quick 태스크 브랜칭 예시: 유효한 재정의 값: `opus`, `sonnet`, `haiku`, `inherit`, 또는 완전히 정규화된 모델 ID (예: `"openai/o3"`, `"google/gemini-2.5-pro"`). -### 비 Claude 런타임 (Codex, OpenCode, Gemini CLI, Kilo) +### 비 Claude 런타임 (Codex, OpenCode, Antigravity CLI, Kilo) 비 Claude 런타임에 GSD를 설치하면 인스톨러가 자동으로 `~/.gsd/defaults.json`에 `resolve_model_ids: "omit"`을 설정합니다. 이로 인해 GSD는 모든 에이전트에 빈 model 파라미터를 반환하며 각 에이전트는 런타임에 설정된 모델을 사용합니다. 기본 사용 시 추가 설정은 필요하지 않습니다. @@ -333,7 +333,7 @@ quick 태스크 브랜칭 예시: |----|------|----------| | `false` (기본값) | Claude 별칭 반환 (`opus`, `sonnet`, `haiku`) | 네이티브 Anthropic API를 사용하는 Claude Code | | `true` | 별칭을 전체 Claude 모델 ID로 매핑 (`claude-opus-4-8`) | 전체 ID가 필요한 API를 사용하는 Claude Code | -| `"omit"` | 빈 문자열 반환 (런타임이 기본값 선택) | 비 Claude 런타임 (Codex, OpenCode, Gemini CLI, Kilo) | +| `"omit"` | 빈 문자열 반환 (런타임이 기본값 선택) | 비 Claude 런타임 (Codex, OpenCode, Antigravity CLI, Kilo) | ### 프로필 철학 diff --git a/docs/ko-KR/FEATURES.md b/docs/ko-KR/FEATURES.md index f8870341b..940a5dc4c 100644 --- a/docs/ko-KR/FEATURES.md +++ b/docs/ko-KR/FEATURES.md @@ -918,7 +918,7 @@ fix(03-01): correct auth token expiry **목적:** 여러 AI 코딩 에이전트 런타임에서 GSD를 실행합니다. **요구사항.** -- REQ-RUNTIME-01: Claude Code, OpenCode, Gemini CLI, Kilo, Codex, Copilot, Antigravity를 지원해야 합니다. +- REQ-RUNTIME-01: Claude Code, OpenCode, Kilo, Codex, Copilot, Antigravity를 지원해야 합니다. - REQ-RUNTIME-02: 설치 프로그램은 런타임별로 콘텐츠를 변환해야 합니다(도구 이름, 경로, 프론트매터). - REQ-RUNTIME-03: 설치 프로그램은 대화형 및 비대화형(`--claude --global`) 모드를 모두 지원해야 합니다. - REQ-RUNTIME-04: 설치 프로그램은 전역 및 로컬 설치를 모두 지원해야 합니다. @@ -927,12 +927,12 @@ fix(03-01): correct auth token expiry **런타임 변환.** -| 측면 | Claude Code | OpenCode | Gemini | Kilo | Codex | Copilot | Antigravity | -|--------|------------|----------|--------|-------|-------|---------|-------------| -| 명령어 | 슬래시 명령어 | 슬래시 명령어 | 슬래시 명령어 | 슬래시 명령어 | Skills(TOML) | 슬래시 명령어 | Skills | -| 에이전트 형식 | Claude native | `mode: subagent` | Claude native | `mode: subagent` | Skills | Tool mapping | Skills | -| 훅 이벤트 | `PostToolUse` | N/A | `AfterTool` | N/A | N/A | N/A | N/A | -| 구성 | `settings.json` | `opencode.json(c)` | `settings.json` | `kilo.json(c)` | TOML | Instructions | Config | +| 측면 | Claude Code | OpenCode | Kilo | Codex | Copilot | Antigravity | +|--------|------------|----------|-------|-------|---------|-------------| +| 명령어 | 슬래시 명령어 | 슬래시 명령어 | 슬래시 명령어 | Skills(TOML) | 슬래시 명령어 | Skills | +| 에이전트 형식 | Claude native | `mode: subagent` | `mode: subagent` | Skills | Tool mapping | Skills | +| 훅 이벤트 | `PostToolUse` | N/A | N/A | N/A | N/A | N/A | +| 구성 | `settings.json` | `opencode.json(c)` | `kilo.json(c)` | TOML | Instructions | Config | --- diff --git a/docs/ko-KR/USER-GUIDE.md b/docs/ko-KR/USER-GUIDE.md index a900a85d6..2da17bd37 100644 --- a/docs/ko-KR/USER-GUIDE.md +++ b/docs/ko-KR/USER-GUIDE.md @@ -9,7 +9,7 @@ GSD Core의 설명형 동반 가이드 — 여기서 방향을 잡은 후 전용 ## 목차 -- [슬래시 명령어 형식](#슬래시-명령어-형식-하이픈-vs-콜론) +- [슬래시 명령어 형식](#슬래시-명령어-형식) - [네임스페이스 라우팅 입문](#네임스페이스-라우팅-입문-gsdnamespace-v140) - [프로젝트 생명주기 개요](#프로젝트-생명주기-개요) - [워크플로우 다이어그램](#워크플로우-다이어그램) @@ -31,14 +31,13 @@ GitHub / Linear / Jira 이슈에서 GSD를 직접 구동하는 방법은 --- -## 슬래시 명령어 형식 (하이픈 vs 콜론) +## 슬래시 명령어 형식 -GSD는 지원되는 모든 런타임에 **동일한 스킬 세트**를 제공하지만, 두 가지 슬래시 형식이 존재합니다: +GSD는 지원되는 모든 런타임에 **동일한 스킬 세트**를 제공하며, 하이픈 형식의 슬래시 표기를 사용합니다: - **하이픈 형식** — `/gsd-command-name` — Claude Code, Copilot, OpenCode, Kilo, Cursor, Windsurf, Augment, Antigravity, Trae에서 사용됩니다. -- **콜론 형식** — `/gsd:command-name` — **Gemini CLI 전용**입니다. Gemini는 모든 플러그인 명령어를 플러그인 ID 아래에 네임스페이스로 묶으므로, `--gemini` 설치 시 설치 경로가 본문 텍스트 참조와 명령어 파일을 모두 콜론 형식으로 재작성합니다. -직접 선택할 필요는 없습니다 — 설치 프로그램이 각 런타임의 명령어 디렉터리에 올바른 형식을 작성합니다. Gemini 터미널에서 안내를 따를 때는 각 슬래시 명령어를 읽을 때 `gsd` 뒤의 하이픈을 콜론으로 대체하세요. +설치 프로그램은 사용자가 대상으로 하는 각 런타임의 명령어 디렉터리에 이 형식을 작성합니다. ## 네임스페이스 라우팅 입문 (`gsd:`, v1.40) @@ -676,7 +675,7 @@ GSD 서브에이전트는 별도의 컨텍스트 창에서 실행됩니다 — 전체 감사, 하네스 레퍼런스, `model_profile`과의 구성 노트는 번들된 `context-budget.md` 레퍼런스의 [MCP 도구 스키마 비용](../../gsd-core/references/context-budget.md#mcp-tool-schema-cost-harness-concern)을 참조하세요. -### 비 Claude 런타임 사용 (Codex, OpenCode, Gemini CLI, Kilo) +### 비 Claude 런타임 사용 (Codex, OpenCode, Antigravity CLI, Kilo) > **Codex CLI 최소 지원 버전: `0.130.0`** (이슈 [#3562](https://github.com/open-gsd/gsd-core/issues/3562)). @@ -753,7 +752,6 @@ WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/gsd-core@latest --wind | 런타임 | 안정 기본값 | 재정의 환경 변수 | |---|---|---| | Claude Code | `~/.claude` | `CLAUDE_CONFIG_DIR` | -| Gemini CLI | `~/.gemini` | `GEMINI_CONFIG_DIR` | | OpenCode | `XDG_CONFIG_HOME/opencode` | `OPENCODE_CONFIG_DIR` | | Codex | (Codex CLI에 따름) | `--config-dir` 플래그 | | Copilot | `~/.copilot` | `COPILOT_CONFIG_DIR` | diff --git a/docs/ko-KR/context-monitor.md b/docs/ko-KR/context-monitor.md index af09c2a96..8579597de 100644 --- a/docs/ko-KR/context-monitor.md +++ b/docs/ko-KR/context-monitor.md @@ -1,6 +1,6 @@ # 컨텍스트 윈도우 모니터 -에이전트의 컨텍스트 윈도우 사용량이 높을 때 경고를 주는 post-tool 훅 (Claude Code의 경우 `PostToolUse`, Gemini CLI의 경우 `AfterTool`). +에이전트의 컨텍스트 윈도우 사용량이 높을 때 경고를 주는 post-tool 훅 (Claude Code의 경우 `PostToolUse`, Antigravity CLI의 경우 `AfterTool`). ## 문제 @@ -62,7 +62,7 @@ GSD의 `/gsd-pause-work` 명령어는 실행 상태를 저장한다. WARNING 메 두 훅 모두 `npx @opengsd/gsd-core` 설치 중에 자동으로 등록된다 — 정상적인 상황에서는 수동 단계가 필요하지 않다. 훅 설정 상세, 임계값 재정의, 수동 등록 예시는 [설정](CONFIGURATION.md)을 참조하라. -간략한 참고: statusline 훅은 `settings.json`에 `statusLine`으로 등록된다; context monitor(`gsd-context-monitor.js`)는 `PostToolUse` 훅으로 등록된다(Gemini CLI의 경우 `AfterTool`). 두 항목 모두 설치 프로그램을 실행한 절대 Node 실행 경로를 사용한다. Windows PowerShell에서는 인용된 실행 경로 앞에 `&`를 붙인다. +간략한 참고: statusline 훅은 `settings.json`에 `statusLine`으로 등록된다; context monitor(`gsd-context-monitor.js`)는 `PostToolUse` 훅으로 등록된다(Antigravity CLI의 경우 `AfterTool`). 두 항목 모두 설치 프로그램을 실행한 절대 Node 실행 경로를 사용한다. Windows PowerShell에서는 인용된 실행 경로 앞에 `&`를 붙인다. ## 안전성 diff --git a/docs/ko-KR/how-to/configure-model-profiles.md b/docs/ko-KR/how-to/configure-model-profiles.md index b4ec02992..9bbce0664 100644 --- a/docs/ko-KR/how-to/configure-model-profiles.md +++ b/docs/ko-KR/how-to/configure-model-profiles.md @@ -154,7 +154,7 @@ npx @opengsd/gsd-core@latest --codex --global # 또는 --opencode, --kilo 등 ## 비 Anthropic 런타임에서 GSD 사용 -Codex, OpenCode, Gemini CLI, 또는 Kilo용으로 GSD를 설치한 경우 인스톨러가 이미 설정에 `resolve_model_ids: "omit"`을 설정했습니다. 이는 GSD가 Anthropic 모델 ID 해결을 건너뛰고 런타임이 자체 기본 모델을 선택하도록 합니다. 기본 사용 시 수동 설정이 필요 없습니다. +Codex, OpenCode, Antigravity CLI, 또는 Kilo용으로 GSD를 설치한 경우 인스톨러가 이미 설정에 `resolve_model_ids: "omit"`을 설정했습니다. 이는 GSD가 Anthropic 모델 ID 해결을 건너뛰고 런타임이 자체 기본 모델을 선택하도록 합니다. 기본 사용 시 수동 설정이 필요 없습니다. **Codex에서 티어별 모델을 원하는 경우:** diff --git a/docs/ko-KR/how-to/install-on-your-runtime.md b/docs/ko-KR/how-to/install-on-your-runtime.md index 1a59c5a93..94a3d59ae 100644 --- a/docs/ko-KR/how-to/install-on-your-runtime.md +++ b/docs/ko-KR/how-to/install-on-your-runtime.md @@ -8,7 +8,7 @@ GSD Core(`@opengsd/gsd-core`)를 매일 사용하는 AI 코딩 런타임에 설 ## 인스톨러가 필요한 이유 -GSD Core는 Claude Code의 네이티브 frontmatter 형식으로 에이전트 및 명령 파일을 제공합니다. 각 지원 런타임은 서로 다른 스키마, 디렉터리 구조, 명령 호출 문법을 요구합니다. 인스톨러는 필요한 변환을 수행합니다. 예를 들어 OpenCode용 도구 목록 및 색상 값 변환, Codex용 TOML 에이전트 항목 작성, Gemini CLI용 모든 명령 본문을 하이픈 형식(`/gsd-update`)에서 콜론 형식(`/gsd-update`)으로 재작성합니다. +GSD Core는 Claude Code의 네이티브 frontmatter 형식으로 에이전트 및 명령 파일을 제공합니다. 각 지원 런타임은 서로 다른 스키마, 디렉터리 구조, 명령 호출 문법을 요구합니다. 인스톨러는 필요한 변환을 수행합니다. 예를 들어 OpenCode용 도구 목록 및 색상 값 변환, Codex용 TOML 에이전트 항목 작성 등입니다. **`agents/` 또는 `commands/`에서 파일을 직접 복사하지 마세요.** 그렇게 하면 변환을 우회하게 되어 스키마 유효성 검사 오류나 누락된 명령이 발생합니다. @@ -46,22 +46,6 @@ CLAUDE_CONFIG_DIR=~/.claude-alt npx @opengsd/gsd-core@latest --claude --global --- -### Gemini CLI - -```bash -npx @opengsd/gsd-core@latest --gemini --global -``` - -스킬은 `~/.gemini/`에 저장됩니다. 인스톨러는 모든 명령 본문을 Gemini의 콜론 네임스페이스(`/gsd-update`, `/gsd-config` 등)로 재작성합니다. 설치 후 Gemini CLI를 재시작하세요. - -**설치 디렉터리 재정의:** - -```bash -GEMINI_CONFIG_DIR=~/.gemini-alt npx @opengsd/gsd-core@latest --gemini --global -``` - ---- - ### OpenCode ```bash diff --git a/docs/ko-KR/how-to/spike-and-sketch.md b/docs/ko-KR/how-to/spike-and-sketch.md index 0ebd49a1a..0e8dd96f3 100644 --- a/docs/ko-KR/how-to/spike-and-sketch.md +++ b/docs/ko-KR/how-to/spike-and-sketch.md @@ -90,7 +90,7 @@ GSD는 코드 작성 전에 느낌, 시각적 참조, 핵심 사용자 작업을 `--quick`은 입력 대화를 완전히 건너뛰고 인자를 디자인 방향으로 사용합니다. -### 비 Claude 런타임(Codex, Gemini CLI 등) +### 비 Claude 런타임(Codex, Antigravity CLI 등) ```bash /gsd-sketch --text "onboarding flow" diff --git a/docs/pt-BR/ARCHITECTURE.md b/docs/pt-BR/ARCHITECTURE.md index 1b5197dc4..56a226293 100644 --- a/docs/pt-BR/ARCHITECTURE.md +++ b/docs/pt-BR/ARCHITECTURE.md @@ -21,7 +21,7 @@ ## Visão Geral do Sistema -O GSD Core é um **framework de meta-prompting** que fica entre o usuário e os agentes de codificação com IA (Claude Code, Gemini CLI, OpenCode, Kilo, Codex, Copilot, Antigravity, Trae, Cline, Augment Code). Ele fornece: +O GSD Core é um **framework de meta-prompting** que fica entre o usuário e os agentes de codificação com IA (Claude Code, Kimi CLI, OpenCode, Kilo, Codex, Copilot, Antigravity, Trae, Cline, Augment Code). Ele fornece: 1. **Engenharia de contexto** — Artefatos estruturados que fornecem à IA tudo o que ela precisa por tarefa (consulte [Engenharia de contexto](explanation/context-engineering.md)) 2. **Orquestração multi-agente** — Orquestradores leves que criam agentes especializados com janelas de contexto novas (consulte [Orquestração multi-agente](explanation/multi-agent-orchestration.md)) @@ -117,7 +117,6 @@ Pontos de entrada voltados ao usuário. Cada arquivo contém frontmatter YAML (n - **OpenCode / Kilo:** Comandos slash (forma com hífen, `/gsd-command-name`) - **Codex:** Skills (`$gsd-command-name`) - **Copilot:** Comandos slash (forma com hífen, `/gsd-command-name`) -- **Gemini CLI:** Comandos slash sob o namespace `gsd:` (forma com dois-pontos, `/gsd:command-name`) — o Gemini agrupa todos os comandos customizados sob o id do plugin, portanto a instalação reescreve cada referência no corpo do texto para a forma com dois-pontos - **Antigravity:** Skills **Total de comandos:** consulte [`docs/INVENTORY.md`](INVENTORY.md#commands) para a contagem oficial e o roster completo. @@ -499,7 +498,6 @@ Caminhos equivalentes para outros runtimes: - **OpenCode:** `~/.config/opencode/` global ou `./.opencode/` local - **Kilo:** `~/.config/kilo/` global ou `./.kilo/` local -- **Gemini CLI:** `~/.gemini/` global ou `./.gemini/` local - **Codex:** `~/.codex/` global ou `./.codex/` local - **Copilot:** `~/.copilot/` global ou `./.github/` local - **Antigravity:** raiz global detectada automaticamente (`~/.gemini/antigravity/`, `~/.gemini/antigravity-ide/`, ou `~/.gemini/antigravity-cli/`) ou `./.agent/` local @@ -595,7 +593,7 @@ os helpers de ida e volta `readMappedCommit` e `writeMappedCommit`. O instalador (`bin/install.js`, ~10.700 linhas) trata de: -1. **Detecção de runtime** — Prompt interativo ou flags CLI (`--claude`, `--opencode`, `--gemini`, `--kilo`, `--codex`, `--copilot`, `--antigravity`, `--cursor`, `--windsurf`, `--augment`, `--trae`, `--qwen`, `--hermes`, `--codebuddy`, `--cline`, `--all`) +1. **Detecção de runtime** — Prompt interativo ou flags CLI (`--claude`, `--opencode`, `--kimi`, `--kilo`, `--codex`, `--copilot`, `--antigravity`, `--cursor`, `--windsurf`, `--augment`, `--trae`, `--qwen`, `--hermes`, `--codebuddy`, `--cline`, `--all`) 2. **Seleção de local** — Global (`--global`) ou local (`--local`) 3. **Implantação de arquivos** — Copia comandos, skills, workflows, referências, templates, agentes e hooks 4. **Adaptação de runtime** — Transforma o conteúdo de arquivos por runtime: @@ -604,8 +602,7 @@ O instalador (`bin/install.js`, ~10.700 linhas) trata de: - Kilo: Reutiliza o pipeline de conversão do OpenCode com os caminhos de configuração do Kilo - Codex: Gera config TOML + skills a partir de comandos - Copilot: Mapeia nomes de ferramentas (Read→read, Bash→execute, etc.) - - Gemini: Ajusta nomes de eventos de hook (`AfterTool` em vez de `PostToolUse`) - - Antigravity: Skills em primeiro lugar com equivalentes de modelo do Google + - Antigravity: Skills em primeiro lugar com equivalentes de modelo do Google; ajusta nomes de eventos de hook (`AfterTool` em vez de `PostToolUse`) - Cursor: Skills em primeiro lugar com referências de regras do Cursor - Windsurf: Skills em primeiro lugar com referências de regras do Windsurf - Trae: Instalação skills-first em `~/.trae` / `./.trae` sem `settings.json` ou integração de hooks @@ -643,7 +640,7 @@ O guarda de desvio de plano (`plan_review.source_grounding`) — que verifica re ### Arquitetura ``` -Motor de Runtime (Claude Code / Gemini CLI) +Motor de Runtime (Claude Code / Antigravity CLI) │ ├── evento statusLine ──► gsd-statusline.js │ Lê: stdin (JSON de sessão) @@ -737,7 +734,6 @@ A propriedade específica de migração e os snapshots de fonte vivem em | Claude Code | `~/.claude` | `./.claude` | `skills/gsd-*/SKILL.md` global; `commands/gsd/*.md` local | `agents/gsd-*.md` | Entradas de hook e statusLine em `settings.json` | | OpenCode | `~/.config/opencode` | `./.opencode` | `command/gsd-*.md` | `agents/gsd-*.md` | `opencode.json` ou `opencode.jsonc`; sem hooks do GSD | | Kilo | `~/.config/kilo` | `./.kilo` | `command/gsd-*.md` | `agents/gsd-*.md` | `kilo.json` ou `kilo.jsonc`; sem hooks do GSD | -| Gemini CLI | `~/.gemini` | `./.gemini` | `commands/gsd/*.toml` | `agents/gsd-*.md` | flag de funcionalidade, hooks e statusline em `settings.json` | | Codex | `~/.codex` | `./.codex` | `skills/gsd-*/SKILL.md` | markdown de origem de agentes mais TOML por agente | `config.toml` `[agents.gsd-*]`, `[features].hooks` (canônico; alias legado `codex_hooks` é reconhecido e migrado no reinstall, #3566) e tabelas de hooks | | GitHub Copilot | `~/.copilot` | `./.github` | `skills/gsd-*/SKILL.md` e `copilot-instructions.md` | arquivos `.agent.md` | Sem hooks ou statusline do GSD | | Antigravity | detectado automaticamente: `~/.gemini/antigravity`, `~/.gemini/antigravity-ide`, ou `~/.gemini/antigravity-cli` | `./.agent` | `skills/gsd-*/SKILL.md` | `agents/gsd-*.md` | Entradas de hook `settings.json` no estilo Gemini quando instalado pelo GSD | @@ -757,7 +753,7 @@ disponível. O snapshot de fonte atual é 2026-05-11: - Claude Code: Documentação de comandos slash, configurações, hooks e subagentes da Anthropic. - OpenCode e Kilo: Documentação de configuração do OpenCode e documentação de subagente customizado do Kilo. -- Gemini CLI e Qwen Code: Documentação de comandos/configuração; a documentação de comandos do Qwen foi atualizada pela última vez em 2026-05-06. +- Qwen Code: Documentação de comandos/configuração; a documentação de comandos do Qwen foi atualizada pela última vez em 2026-05-06. - Codex: Documentação do OpenAI Codex e `config-schema.json`; o instalador também carrega compatibilidade com o Codex 0.124.0 para o formato de tabela de agentes. - Copilot, Cursor, Cline, Augment, Hermes e CodeBuddy: Documentação do fornecedor para instruções customizadas, regras, skills ou configuração. - Antigravity, Windsurf e Trae: Linhas com fontes limitadas. O instalador documenta os shims de compatibilidade atuais, e as migrações devem atualizar essas fontes antes de reescrever sua configuração. @@ -765,7 +761,7 @@ disponível. O snapshot de fonte atual é 2026-05-11: ### Pontos de Abstração 1. **Mapeamento de nomes de ferramentas** — Cada runtime tem seus próprios nomes de ferramentas (ex.: `Bash` do Claude → `execute` do Copilot) -2. **Nomes de eventos de hook** — Claude usa `PostToolUse`, Gemini usa `AfterTool` +2. **Nomes de eventos de hook** — Claude usa `PostToolUse`, Antigravity usa `AfterTool` 3. **Frontmatter de agente** — Cada runtime tem seu próprio formato de definição de agente 4. **Convenções de caminho** — Cada runtime armazena a configuração em diretórios diferentes 5. **Referências de modelo** — O perfil `inherit` permite que o GSD adie para a seleção de modelo do runtime diff --git a/docs/pt-BR/COMMANDS.md b/docs/pt-BR/COMMANDS.md index 46a5734d6..907be25c0 100644 --- a/docs/pt-BR/COMMANDS.md +++ b/docs/pt-BR/COMMANDS.md @@ -7,10 +7,9 @@ ## Sintaxe de Comandos - **Claude Code / Copilot / OpenCode / Kilo:** `/gsd-command-name [args]` (forma com hífen) -- **Gemini CLI:** `/gsd:command-name [args]` (forma com dois-pontos — o Gemini agrupa comandos sob `gsd:`) - **Codex:** `$gsd-command-name [args]` -As formas com hífen e com dois-pontos são *variações específicas do runtime para o mesmo comando*. Independente do runtime utilizado, o instalador escreve a forma correta no diretório de comandos do seu runtime. +Independente do runtime utilizado, o instalador escreve a forma correta no diretório de comandos do seu runtime. --- diff --git a/docs/pt-BR/CONFIGURATION.md b/docs/pt-BR/CONFIGURATION.md index 0f3bf0d05..e360631e9 100644 --- a/docs/pt-BR/CONFIGURATION.md +++ b/docs/pt-BR/CONFIGURATION.md @@ -866,7 +866,7 @@ As cinco camadas compõem de cima para baixo: `model_profile` é o nível base, | `"opus"` / `"sonnet"` / `"haiku"` | Nível padrão — a resolução de runtime mapeia para o modelo do runtime ativo para aquele nível | | `"inherit"` | Agentes nesta fase seguem o modelo da sessão (mesma semântica que `model_profile: "inherit"`) | -Se você precisar de um ID de modelo totalmente qualificado (`"openai/gpt-5"`, `"google/gemini-2.5-pro"`), use `model_overrides` por agente. `models.*` é intencionalmente apenas de nível para que o mapeamento com reconhecimento de runtime permaneça correto nas instalações Codex / OpenCode / Gemini CLI. +Se você precisar de um ID de modelo totalmente qualificado (`"openai/gpt-5"`, `"google/gemini-2.5-pro"`), use `model_overrides` por agente. `models.*` é intencionalmente apenas de nível para que o mapeamento com reconhecimento de runtime permaneça correto nas instalações Codex / OpenCode / Antigravity CLI. #### Quando usar qual @@ -1089,7 +1089,7 @@ Use `node gsd-tools.cjs resolve-execution [--effort ] [--fas --- -### Runtimes Não-Claude (Codex, OpenCode, Gemini CLI, Kilo) +### Runtimes Não-Claude (Codex, OpenCode, Antigravity CLI, Kilo) > **Versão mínima suportada do Codex CLI: `0.130.0`** (issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562)). > @@ -1128,7 +1128,7 @@ A intenção é a mesma que os níveis de perfil do Claude -- use um modelo mais |-------|----------|----------| | `false` (padrão) | Retorna aliases Claude (`opus`, `sonnet`, `haiku`) | Claude Code com API Anthropic nativa | | `true` | Mapeia aliases para IDs completos de modelo Claude (`claude-opus-4-8`) | Claude Code com API que requer IDs completos | -| `"omit"` | Retorna string vazia (runtime escolhe seu padrão) | Runtimes não-Claude (Codex, OpenCode, Gemini CLI, Kilo) | +| `"omit"` | Retorna string vazia (runtime escolhe seu padrão) | Runtimes não-Claude (Codex, OpenCode, Antigravity CLI, Kilo) | ### Perfis com Reconhecimento de Runtime (#2517) diff --git a/docs/pt-BR/USER-GUIDE.md b/docs/pt-BR/USER-GUIDE.md index 9934013ff..3995a52be 100644 --- a/docs/pt-BR/USER-GUIDE.md +++ b/docs/pt-BR/USER-GUIDE.md @@ -9,7 +9,7 @@ Um guia narrativo complementar ao GSD Core — comece aqui para se orientar e si ## Sumário -- [Formas do slash-command](#formas-do-slash-command-hífen-vs-dois-pontos) +- [Formas do slash-command](#formas-do-slash-command) - [Introdução ao roteamento de namespace](#introdução-ao-roteamento-de-namespace-gsdnamespace-v140) - [Visão geral do ciclo de vida do projeto](#visão-geral-do-ciclo-de-vida-do-projeto) - [Diagramas de fluxo](#diagramas-de-fluxo) @@ -31,14 +31,13 @@ execute → verify → review → ship usando as primitivas GSD existentes. --- -## Formas do slash-command (hífen vs dois-pontos) +## Formas do slash-command -O GSD fornece **o mesmo conjunto de habilidades** para todos os runtimes suportados, mas dois estilos de barra são utilizados: +O GSD fornece **o mesmo conjunto de habilidades** para todos os runtimes suportados, usando a grafia com hífen para o slash-command: - **Forma com hífen** — `/gsd-command-name` — usada por Claude Code, Copilot, OpenCode, Kilo, Cursor, Windsurf, Augment, Antigravity e Trae. -- **Forma com dois-pontos** — `/gsd:command-name` — usada **exclusivamente pelo Gemini CLI**. O Gemini coloca todos os comandos de cada plugin sob o ID do plugin, portanto o instalador reescreve todas as referências no corpo do texto e nos arquivos de comando para a forma com dois-pontos durante a instalação com `--gemini`. -Você não precisa escolher — o instalador grava a forma correta no diretório de comandos de cada runtime que você especificar. Ao seguir um guia passo a passo num terminal Gemini, substitua o hífen após `gsd` por dois-pontos ao ler cada slash-command. +O instalador grava essa forma no diretório de comandos de cada runtime que você especificar. ## Introdução ao roteamento de namespace (`gsd:`, v1.40) @@ -676,7 +675,7 @@ Cada servidor desabilitado remove seu esquema de cada turno subsequente. Reduzir Para a auditoria completa, referência do harness e a nota de composição com `model_profile`, consulte [Custo de esquema de ferramentas MCP](../../gsd-core/references/context-budget.md#mcp-tool-schema-cost-harness-concern) na referência `context-budget.md` incluída. -### Usando runtimes não-Claude (Codex, OpenCode, Gemini CLI, Kilo) +### Usando runtimes não-Claude (Codex, OpenCode, Antigravity CLI, Kilo) > **Versão mínima suportada do Codex CLI: `0.130.0`** (issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562)). @@ -753,7 +752,6 @@ WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/gsd-core@latest --wind | Runtime | Padrão estável | Variável de ambiente para substituição | |---|---|---| | Claude Code | `~/.claude` | `CLAUDE_CONFIG_DIR` | -| Gemini CLI | `~/.gemini` | `GEMINI_CONFIG_DIR` | | OpenCode | `XDG_CONFIG_HOME/opencode` | `OPENCODE_CONFIG_DIR` | | Codex | (per Codex CLI) | `--config-dir` flag | | Copilot | `~/.copilot` | `COPILOT_CONFIG_DIR` | diff --git a/docs/pt-BR/context-monitor.md b/docs/pt-BR/context-monitor.md index 1789b4afa..52593874d 100644 --- a/docs/pt-BR/context-monitor.md +++ b/docs/pt-BR/context-monitor.md @@ -1,6 +1,6 @@ # Monitor de Janela de Contexto -Um hook pós-ferramenta (`PostToolUse` para o Claude Code, `AfterTool` para o Gemini CLI) que avisa o agente quando o uso da janela de contexto está elevado. +Um hook pós-ferramenta (`PostToolUse` para o Claude Code, `AfterTool` para o Antigravity CLI) que avisa o agente quando o uso da janela de contexto está elevado. ## Problema @@ -62,7 +62,7 @@ O comando `/gsd-pause-work` do GSD salva o estado de execução. A mensagem de A Ambos os hooks são registrados automaticamente durante a instalação do `npx @opengsd/gsd-core` — nenhuma etapa manual é necessária em circunstâncias normais. Para detalhes de configuração de hooks, substituições de limiares e exemplos de registro manual, consulte [Configuração](CONFIGURATION.md). -Como referência rápida: o hook da barra de status se registra como `statusLine` em `settings.json`; o monitor de contexto (`gsd-context-monitor.js`) se registra como um hook `PostToolUse` (ou `AfterTool` para o Gemini CLI). Ambas as entradas utilizam o caminho absoluto do executável Node que executou o instalador. No Windows PowerShell, prefixe caminhos de executáveis entre aspas com `&`. +Como referência rápida: o hook da barra de status se registra como `statusLine` em `settings.json`; o monitor de contexto (`gsd-context-monitor.js`) se registra como um hook `PostToolUse` (ou `AfterTool` para o Antigravity CLI). Ambas as entradas utilizam o caminho absoluto do executável Node que executou o instalador. No Windows PowerShell, prefixe caminhos de executáveis entre aspas com `&`. ## Segurança diff --git a/docs/pt-BR/how-to/configure-model-profiles.md b/docs/pt-BR/how-to/configure-model-profiles.md index f797b697a..71f1ea78f 100644 --- a/docs/pt-BR/how-to/configure-model-profiles.md +++ b/docs/pt-BR/how-to/configure-model-profiles.md @@ -154,7 +154,7 @@ Cada tentativa usa `tier_models[default_tier]` independentemente do resultado ## Usando o GSD em runtimes não-Anthropic -Se você instalou o GSD para Codex, OpenCode, Gemini CLI ou Kilo, o instalador já definiu `resolve_model_ids: "omit"` na sua configuração. Isso instrui o GSD a pular a resolução de IDs de modelo Anthropic e deixar o runtime escolher seu próprio modelo padrão. Nenhuma configuração manual é necessária para o caso básico. +Se você instalou o GSD para Codex, OpenCode, Antigravity CLI ou Kilo, o instalador já definiu `resolve_model_ids: "omit"` na sua configuração. Isso instrui o GSD a pular a resolução de IDs de modelo Anthropic e deixar o runtime escolher seu próprio modelo padrão. Nenhuma configuração manual é necessária para o caso básico. **Se você quiser modelos por nível no Codex:** diff --git a/docs/pt-BR/how-to/install-on-your-runtime.md b/docs/pt-BR/how-to/install-on-your-runtime.md index d83f82348..b608f77e6 100644 --- a/docs/pt-BR/how-to/install-on-your-runtime.md +++ b/docs/pt-BR/how-to/install-on-your-runtime.md @@ -8,7 +8,7 @@ Instale o GSD Core (`@opengsd/gsd-core`) no ambiente de codificação com IA que ## Por que o instalador é necessário -O GSD Core distribui arquivos de agente e comando no formato nativo de frontmatter do Claude Code. Cada ambiente suportado espera um schema, layout de diretório e sintaxe de invocação de comandos diferente. O instalador realiza as transformações necessárias — por exemplo, convertendo listas de ferramentas e valores de cor para o OpenCode, escrevendo entradas TOML de agente para o Codex e reescrevendo o corpo de cada comando do formato com hífen (`/gsd-update`) para o formato com dois-pontos (`/gsd-update`) para o Gemini CLI. +O GSD Core distribui arquivos de agente e comando no formato nativo de frontmatter do Claude Code. Cada ambiente suportado espera um schema, layout de diretório e sintaxe de invocação de comandos diferente. O instalador realiza as transformações necessárias — por exemplo, convertendo listas de ferramentas e valores de cor para o OpenCode e escrevendo entradas TOML de agente para o Codex. **Não copie arquivos de `agents/` ou `commands/` diretamente.** Fazer isso ignora as transformações e produz erros de validação de schema ou comandos ausentes. @@ -46,22 +46,6 @@ CLAUDE_CONFIG_DIR=~/.claude-alt npx @opengsd/gsd-core@latest --claude --global --- -### Gemini CLI - -```bash -npx @opengsd/gsd-core@latest --gemini --global -``` - -As habilidades são instaladas em `~/.gemini/`. O instalador reescreve todos os corpos de comando para o namespace de dois-pontos do Gemini (`/gsd-update`, `/gsd-config`, etc.). Reinicie o Gemini CLI após a instalação. - -**Substituir o diretório de instalação:** - -```bash -GEMINI_CONFIG_DIR=~/.gemini-alt npx @opengsd/gsd-core@latest --gemini --global -``` - ---- - ### OpenCode ```bash diff --git a/docs/pt-BR/how-to/spike-and-sketch.md b/docs/pt-BR/how-to/spike-and-sketch.md index 1e36c873b..631fab89a 100644 --- a/docs/pt-BR/how-to/spike-and-sketch.md +++ b/docs/pt-BR/how-to/spike-and-sketch.md @@ -90,7 +90,7 @@ GSD abre uma conversa breve para explorar sensação, referências visuais e a a `--quick` ignora completamente a conversa de coleta e usa o argumento como direção de design. -### Runtimes não-Claude (Codex, Gemini CLI, etc.) +### Runtimes não-Claude (Codex, Antigravity CLI, etc.) ```bash /gsd-sketch --text "onboarding flow" diff --git a/docs/research/provider-rate-limit-signals.md b/docs/research/provider-rate-limit-signals.md index 2b6664a2e..efa852cfe 100644 --- a/docs/research/provider-rate-limit-signals.md +++ b/docs/research/provider-rate-limit-signals.md @@ -2,7 +2,7 @@ **Status:** research note — informs #3095 reactive classification and points at the proactive path forward. -GSD dispatches executor subagents into one of four host runtimes today: Claude Code, GitHub Copilot CLI, OpenAI Codex CLI, and Google Gemini CLI. Each provider exposes rate-limit information at three different layers — pre-warning, post-mortem error body, and underlying HTTP transport — but the *host runtime* (the CLI that wraps the provider for us) gates how much of that surfaces to GSD's orchestrator. +GSD dispatches executor subagents into one of four host runtimes today: Claude Code, GitHub Copilot CLI, OpenAI Codex CLI, and Antigravity CLI (Google Gemini backend). Each provider exposes rate-limit information at three different layers — pre-warning, post-mortem error body, and underlying HTTP transport — but the *host runtime* (the CLI that wraps the provider for us) gates how much of that surfaces to GSD's orchestrator. The reactive classifier shipped with #3095 (`agent.classify-failure`) parses post-mortem error bodies. This note records the proactive signals that exist at the provider layer but are not yet surfaced to orchestrators by the host runtimes — i.e. the forward path once host runtimes expose them to hooks. @@ -29,7 +29,9 @@ The reactive classifier shipped with #3095 (`agent.classify-failure`) parses pos | HTTP headers | `x-ratelimit-remaining-requests`, `x-ratelimit-remaining-tokens` | No — Codex CLI does not forward these to hooks | | Error body | `429`, `usage_limit_reached`, `"exceeded your current quota"`, `Too Many Requests` ([openai/codex#9135](https://github.com/openai/codex/issues/9135)) | Yes — parsed by `agent.classify-failure` | -## Google Gemini CLI +## Google Gemini (via Antigravity CLI) + +*Host runtime: Antigravity CLI. GSD's Gemini CLI runtime was removed in #1928 after Google sunset it on 2026-06-18; Antigravity is the documented successor and runs on the same Gemini backend, so the provider-layer signals below are unchanged.* | Layer | Signal | Available to GSD today? | |--------------|---------------------------------------------------------------------------|-------------------------| diff --git a/docs/zh-CN/ARCHITECTURE.md b/docs/zh-CN/ARCHITECTURE.md index 9812e8a81..4fe95fabd 100644 --- a/docs/zh-CN/ARCHITECTURE.md +++ b/docs/zh-CN/ARCHITECTURE.md @@ -21,7 +21,7 @@ ## 系统概述 -GSD Core 是一个**元提示框架**,位于用户与 AI 编码 Agent(Claude Code、Gemini CLI、OpenCode、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code)之间。它提供: +GSD Core 是一个**元提示框架**,位于用户与 AI 编码 Agent(Claude Code、Kimi CLI、OpenCode、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code)之间。它提供: 1. **上下文工程** — 结构化产物,为每个任务向 AI 提供所需的全部信息(参见[上下文工程](explanation/context-engineering.md)) 2. **多 Agent 编排** — 轻量级编排器,以全新上下文窗口派生专用 Agent(参见[多 Agent 编排](explanation/multi-agent-orchestration.md)) @@ -115,7 +115,6 @@ GSD Core 是一个**元提示框架**,位于用户与 AI 编码 Agent(Claude - **OpenCode / Kilo:** 斜线命令(连字符形式,`/gsd-command-name`) - **Codex:** 技能(`$gsd-command-name`) - **Copilot:** 斜线命令(连字符形式,`/gsd-command-name`) -- **Gemini CLI:** 在 `gsd:` 命名空间下的斜线命令(冒号形式,`/gsd:command-name`)——Gemini 将所有自定义命令置于其插件 id 的命名空间下,因此安装路径会将正文中的每个引用改写为冒号形式 - **Antigravity:** 技能 **命令总数:** 请参阅 [`docs/INVENTORY.md`](INVENTORY.md#commands) 获取权威数量及完整列表。 @@ -484,7 +483,6 @@ UI-SPEC.md (per phase) ─────────────────── - **OpenCode:** `~/.config/opencode/` 全局或 `./.opencode/` 本地 - **Kilo:** `~/.config/kilo/` 全局或 `./.kilo/` 本地 -- **Gemini CLI:** `~/.gemini/` 全局或 `./.gemini/` 本地 - **Codex:** `~/.codex/` 全局或 `./.codex/` 本地 - **Copilot:** `~/.copilot/` 全局或 `./.github/` 本地 - **Antigravity:** 自动检测全局根目录(`~/.gemini/antigravity/`、`~/.gemini/antigravity-ide/` 或 `~/.gemini/antigravity-cli/`)或 `./.agent/` 本地 @@ -569,7 +567,7 @@ UI-SPEC.md (per phase) ─────────────────── 安装程序(`bin/install.js`,约 10,700 行)处理以下事项: -1. **运行时检测** — 交互式提示或 CLI 标志(`--claude`、`--opencode`、`--gemini`、`--kilo`、`--codex`、`--copilot`、`--antigravity`、`--cursor`、`--windsurf`、`--augment`、`--trae`、`--qwen`、`--hermes`、`--codebuddy`、`--cline`、`--all`) +1. **运行时检测** — 交互式提示或 CLI 标志(`--claude`、`--opencode`、`--kimi`、`--kilo`、`--codex`、`--copilot`、`--antigravity`、`--cursor`、`--windsurf`、`--augment`、`--trae`、`--qwen`、`--hermes`、`--codebuddy`、`--cline`、`--all`) 2. **位置选择** — 全局(`--global`)或本地(`--local`) 3. **文件部署** — 复制命令、技能、工作流、参考文档、模板、Agent 和 hook 4. **运行时适配** — 按运行时转换文件内容: @@ -578,8 +576,7 @@ UI-SPEC.md (per phase) ─────────────────── - Kilo:复用 OpenCode 转换流水线,使用 Kilo 配置路径 - Codex:从命令生成 TOML 配置 + 技能 - Copilot:映射工具名称(Read→read、Bash→execute 等) - - Gemini:调整 hook 事件名称(`AfterTool` 而非 `PostToolUse`) - - Antigravity:以技能为主,使用 Google 模型等效项 + - Antigravity:以技能为主,使用 Google 模型等效项;调整 hook 事件名称(`AfterTool` 而非 `PostToolUse`) - Cursor:以技能为主,带 Cursor 规则引用 - Windsurf:以技能为主,带 Windsurf 规则引用 - Trae:以技能为主安装到 `~/.trae` / `./.trae`,不含 `settings.json` 或 hook 集成 @@ -611,7 +608,7 @@ UI-SPEC.md (per phase) ─────────────────── ### 架构 ``` -Runtime Engine (Claude Code / Gemini CLI) +Runtime Engine (Claude Code / Antigravity CLI) │ ├── statusLine event ──► gsd-statusline.js │ Reads: stdin (session JSON) @@ -703,7 +700,6 @@ GSD 通过统一的命令/工作流架构支持多种 AI 编码运行时: | Claude Code | `~/.claude` | `./.claude` | 全局 `skills/gsd-*/SKILL.md`;本地 `commands/gsd/*.md` | `agents/gsd-*.md` | `settings.json` hook 和 statusLine 条目 | | OpenCode | `~/.config/opencode` | `./.opencode` | `command/gsd-*.md` | `agents/gsd-*.md` | `opencode.json` 或 `opencode.jsonc`;无 GSD hook | | Kilo | `~/.config/kilo` | `./.kilo` | `command/gsd-*.md` | `agents/gsd-*.md` | `kilo.json` 或 `kilo.jsonc`;无 GSD hook | -| Gemini CLI | `~/.gemini` | `./.gemini` | `commands/gsd/*.toml` | `agents/gsd-*.md` | `settings.json` 功能标志、hook 和 statusline | | Codex | `~/.codex` | `./.codex` | `skills/gsd-*/SKILL.md` | `agents/` 源 markdown 加每个 Agent 的 TOML | `config.toml` `[agents.gsd-*]`、`[features].hooks`(规范;遗留别名 `codex_hooks` 在重新安装时被识别并迁移到新版本,#3566)以及 hook 表 | | GitHub Copilot | `~/.copilot` | `./.github` | `skills/gsd-*/SKILL.md` 和 `copilot-instructions.md` | `.agent.md` 文件 | 无 GSD hook 或 statusline | | Antigravity | 自动检测:`~/.gemini/antigravity`、`~/.gemini/antigravity-ide` 或 `~/.gemini/antigravity-cli` | `./.agent` | `skills/gsd-*/SKILL.md` | `agents/gsd-*.md` | GSD 安装时的 Gemini 风格 `settings.json` hook 条目 | @@ -722,7 +718,7 @@ GSD 通过统一的命令/工作流架构支持多种 AI 编码运行时: - Claude Code:Anthropic 斜线命令、设置、hook 和子 Agent 文档。 - OpenCode 和 Kilo:OpenCode 配置文档和 Kilo 自定义子 Agent 文档。 -- Gemini CLI 和 Qwen Code:命令/配置文档;Qwen 命令文档最后更新于 2026-05-06。 +- Qwen Code:命令/配置文档;Qwen 命令文档最后更新于 2026-05-06。 - Codex:OpenAI Codex 文档和 `config-schema.json`;安装程序还支持 Codex 0.124.0 的 Agent 表格格式兼容性。 - Copilot、Cursor、Cline、Augment、Hermes 和 CodeBuddy:自定义指令、规则、技能或配置的供应商文档。 - Antigravity、Windsurf 和 Trae:来源有限的行。安装程序记录了当前的兼容性垫片,迁移前必须刷新这些来源后再重写其配置。 @@ -730,7 +726,7 @@ GSD 通过统一的命令/工作流架构支持多种 AI 编码运行时: ### 抽象点 1. **工具名称映射** — 每个运行时有其自己的工具名称(例如 Claude 的 `Bash` → Copilot 的 `execute`) -2. **Hook 事件名称** — Claude 使用 `PostToolUse`,Gemini 使用 `AfterTool` +2. **Hook 事件名称** — Claude 使用 `PostToolUse`,Antigravity 使用 `AfterTool` 3. **Agent 前置元数据** — 每个运行时有其自己的 Agent 定义格式 4. **路径约定** — 每个运行时将配置存储在不同的目录中 5. **模型引用** — `inherit` 配置文件让 GSD 推迟到运行时的模型选择 diff --git a/docs/zh-CN/COMMANDS.md b/docs/zh-CN/COMMANDS.md index bdc904c6e..f46f690e4 100644 --- a/docs/zh-CN/COMMANDS.md +++ b/docs/zh-CN/COMMANDS.md @@ -7,10 +7,9 @@ ## 命令语法 - **Claude Code / Copilot / OpenCode / Kilo:** `/gsd-command-name [args]`(连字符形式) -- **Gemini CLI:** `/gsd:command-name [args]`(冒号形式 — Gemini 将命令置于 `gsd:` 命名空间下) - **Codex:** `$gsd-command-name [args]` -连字符形式与冒号形式是*同一命令在不同运行时中的拼写方式*。无论使用哪种运行时,安装程序都会将正确的形式写入该运行时的命令目录。 +无论使用哪种运行时,安装程序都会将正确的形式写入该运行时的命令目录。 --- diff --git a/docs/zh-CN/CONFIGURATION.md b/docs/zh-CN/CONFIGURATION.md index 54468329d..93058d030 100644 --- a/docs/zh-CN/CONFIGURATION.md +++ b/docs/zh-CN/CONFIGURATION.md @@ -835,7 +835,7 @@ gsd-tools query config-set features.thinking_partner false | `"opus"` / `"sonnet"` / `"haiku"` | 标准层级——运行时解析映射到该层级的活跃运行时模型 | | `"inherit"` | 此阶段的 agent 遵循会话模型(与 `model_profile: "inherit"` 语义相同) | -如果需要完全限定的模型 ID(`"openai/gpt-5"`、`"google/gemini-2.5-pro"`),请改为按 agent 使用 `model_overrides`。`models.*` 有意仅接受层级别名,以便运行时感知映射在 Codex / OpenCode / Gemini CLI 安装上保持正确。 +如果需要完全限定的模型 ID(`"openai/gpt-5"`、`"google/gemini-2.5-pro"`),请改为按 agent 使用 `model_overrides`。`models.*` 有意仅接受层级别名,以便运行时感知映射在 Codex / OpenCode / Antigravity CLI 安装上保持正确。 #### 何时使用哪种方式 @@ -1058,7 +1058,7 @@ minimal < low < medium < high < xhigh < max --- -### 非 Claude 运行时(Codex、OpenCode、Gemini CLI、Kilo) +### 非 Claude 运行时(Codex、OpenCode、Antigravity CLI、Kilo) > **Codex CLI 最低支持版本:`0.130.0`**(issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562))。 > @@ -1097,7 +1097,7 @@ minimal < low < medium < high < xhigh < max |-------|----------|----------| | `false`(默认) | 返回 Claude 别名(`opus`、`sonnet`、`haiku`) | 使用原生 Anthropic API 的 Claude Code | | `true` | 将别名映射到完整 Claude 模型 ID(`claude-opus-4-8`) | 使用需要完整 ID 的 API 的 Claude Code | -| `"omit"` | 返回空字符串(运行时选择其默认值) | 非 Claude 运行时(Codex、OpenCode、Gemini CLI、Kilo) | +| `"omit"` | 返回空字符串(运行时选择其默认值) | 非 Claude 运行时(Codex、OpenCode、Antigravity CLI、Kilo) | ### 运行时感知配置文件(#2517) diff --git a/docs/zh-CN/FEATURES.md b/docs/zh-CN/FEATURES.md index fcae0173e..cd25f42c0 100644 --- a/docs/zh-CN/FEATURES.md +++ b/docs/zh-CN/FEATURES.md @@ -1013,7 +1013,7 @@ fix(03-01): correct auth token expiry **目的:** 跨多个 AI 编程智能体运行时运行 GSD。 **需求:** -- REQ-RUNTIME-01:系统必须支持 Claude Code、OpenCode、Gemini CLI、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code、CodeBuddy、Qwen Code +- REQ-RUNTIME-01:系统必须支持 Claude Code、OpenCode、Kilo、Codex、Copilot、Antigravity、Trae、Cline、Augment Code、CodeBuddy、Qwen Code - REQ-RUNTIME-02:安装器必须按运行时转换内容(工具名称、路径、前置元数据) - REQ-RUNTIME-03:安装器必须支持交互式和非交互式(`--claude --global`)模式 - REQ-RUNTIME-04:安装器必须支持全局和本地安装 @@ -1022,12 +1022,12 @@ fix(03-01): correct auth token expiry **运行时转换:** -| 方面 | Claude Code | OpenCode | Gemini | Kilo | Codex | Copilot | Antigravity | Trae | Cline | Augment | CodeBuddy | Qwen Code | -|--------|------------|----------|--------|-------|-------|---------|-------------|------|-------|---------|-----------|-----------| -| 命令 | 斜杠命令 | 斜杠命令 | 斜杠命令 | 斜杠命令 | Skills (TOML) | 斜杠命令 | Skills | Skills | Rules | Skills | Skills | Skills | -| 智能体格式 | Claude 原生 | `mode: subagent` | Claude 原生 | `mode: subagent` | Skills | 工具映射 | Skills | Skills | Rules | Skills | Skills | Skills | -| 钩子事件 | `PostToolUse` | N/A | `AfterTool` | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | -| 配置 | `settings.json` | `opencode.json(c)` | `settings.json` | `kilo.json(c)` | TOML | Instructions | Config | Config | `.clinerules` | Config | Config | Config | +| 方面 | Claude Code | OpenCode | Kilo | Codex | Copilot | Antigravity | Trae | Cline | Augment | CodeBuddy | Qwen Code | +|--------|------------|----------|-------|-------|---------|-------------|------|-------|---------|-----------|-----------| +| 命令 | 斜杠命令 | 斜杠命令 | 斜杠命令 | Skills (TOML) | 斜杠命令 | Skills | Skills | Rules | Skills | Skills | Skills | +| 智能体格式 | Claude 原生 | `mode: subagent` | `mode: subagent` | Skills | 工具映射 | Skills | Skills | Rules | Skills | Skills | Skills | +| 钩子事件 | `PostToolUse` | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| 配置 | `settings.json` | `opencode.json(c)` | `kilo.json(c)` | TOML | Instructions | Config | Config | `.clinerules` | Config | Config | Config | --- diff --git a/docs/zh-CN/USER-GUIDE.md b/docs/zh-CN/USER-GUIDE.md index 436ce677d..d62ed3354 100644 --- a/docs/zh-CN/USER-GUIDE.md +++ b/docs/zh-CN/USER-GUIDE.md @@ -30,14 +30,13 @@ GSD Core 的叙述性辅助指南——从这里开始了解系统全貌,然 --- -## 斜杠命令形式(连字符 vs 冒号) +## 斜杠命令形式 {#slash-command-forms-hyphen-vs-colon} -GSD 向所有支持的运行时提供**同一套技能**,但有两种斜杠拼写方式: +GSD 向所有支持的运行时提供**同一套技能**,使用连字符形式的斜杠拼写: - **连字符形式** — `/gsd-command-name` — 供 Claude Code、Copilot、OpenCode、Kilo、Cursor、Windsurf、Augment、Antigravity 和 Trae 使用。 -- **冒号形式** — `/gsd:command-name` — **仅供 Gemini CLI 使用**。Gemini 将每个插件的命令置于插件 ID 的命名空间下,因此安装时会在 `--gemini` 安装过程中将所有正文引用和命令文件改写为冒号形式。 -无需手动选择——安装器会为您所针对的每个运行时写入正确形式。在 Gemini 终端上阅读演示时,将每个斜杠命令中 `gsd` 后的连字符替换为冒号即可。 +安装器会将此形式写入您所针对的每个运行时的命令目录。 ## 命名空间路由入门(`gsd:`,v1.40) @@ -675,7 +674,7 @@ GSD 子 Agent 在单独的上下文窗口中运行——其工作在进行中对 完整审计、运行时参考及与 `model_profile` 的组合说明,请参阅捆绑的 `context-budget.md` 参考中的 [MCP 工具模式成本](../../gsd-core/references/context-budget.md#mcp-tool-schema-cost-harness-concern)。 -### 使用非 Claude 运行时(Codex、OpenCode、Gemini CLI、Kilo) +### 使用非 Claude 运行时(Codex、OpenCode、Antigravity CLI、Kilo) > **Codex CLI 最低支持版本:`0.130.0`**(issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562))。 @@ -752,7 +751,6 @@ WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/gsd-core@latest --wind | 运行时 | 稳定默认值 | 覆盖环境变量 | |---|---|---| | Claude Code | `~/.claude` | `CLAUDE_CONFIG_DIR` | -| Gemini CLI | `~/.gemini` | `GEMINI_CONFIG_DIR` | | OpenCode | `XDG_CONFIG_HOME/opencode` | `OPENCODE_CONFIG_DIR` | | Codex | (按 Codex CLI) | `--config-dir` 标志 | | Copilot | `~/.copilot` | `COPILOT_CONFIG_DIR` | diff --git a/docs/zh-CN/context-monitor.md b/docs/zh-CN/context-monitor.md index 4bb3a40db..76641d07a 100644 --- a/docs/zh-CN/context-monitor.md +++ b/docs/zh-CN/context-monitor.md @@ -1,6 +1,6 @@ # 上下文窗口监视器 -一个后置工具钩子(Claude Code 中的 `PostToolUse`,Gemini CLI 中的 `AfterTool`),当上下文窗口使用率较高时向 Agent 发出警告。 +一个后置工具钩子(Claude Code 中的 `PostToolUse`,Antigravity CLI 中的 `AfterTool`),当上下文窗口使用率较高时向 Agent 发出警告。 ## 问题背景 @@ -62,7 +62,7 @@ GSD 的 `/gsd-pause-work` 命令用于保存执行状态。WARNING 消息建议 两个钩子均在执行 `npx @opengsd/gsd-core` 安装时自动注册——正常情况下无需手动操作。有关钩子配置详情、阈值覆盖以及手动注册示例,请参阅[配置文档](CONFIGURATION.md)。 -简要参考:状态栏钩子在 `settings.json` 中注册为 `statusLine`;上下文监视器(`gsd-context-monitor.js`)注册为 `PostToolUse` 钩子(Gemini CLI 中为 `AfterTool`)。两项配置均使用运行安装程序时的 Node 可执行文件绝对路径。在 Windows PowerShell 中,需在带引号的可执行文件路径前添加 `&` 前缀。 +简要参考:状态栏钩子在 `settings.json` 中注册为 `statusLine`;上下文监视器(`gsd-context-monitor.js`)注册为 `PostToolUse` 钩子(Antigravity CLI 中为 `AfterTool`)。两项配置均使用运行安装程序时的 Node 可执行文件绝对路径。在 Windows PowerShell 中,需在带引号的可执行文件路径前添加 `&` 前缀。 ## 安全性 diff --git a/docs/zh-CN/how-to/configure-model-profiles.md b/docs/zh-CN/how-to/configure-model-profiles.md index d667429c5..e48c80ac2 100644 --- a/docs/zh-CN/how-to/configure-model-profiles.md +++ b/docs/zh-CN/how-to/configure-model-profiles.md @@ -154,7 +154,7 @@ npx @opengsd/gsd-core@latest --codex --global # or --opencode, --kilo, etc. ## 在非 Anthropic 运行时上使用 GSD Core -如果您为 Codex、OpenCode、Gemini CLI 或 Kilo 安装了 GSD Core,安装程序已在您的配置中设置了 `resolve_model_ids: "omit"`。这告知 GSD Core 跳过 Anthropic 模型 ID 解析,让运行时选择其自己的默认模型。基本情况下无需手动设置。 +如果您为 Codex、OpenCode、Antigravity CLI 或 Kilo 安装了 GSD Core,安装程序已在您的配置中设置了 `resolve_model_ids: "omit"`。这告知 GSD Core 跳过 Anthropic 模型 ID 解析,让运行时选择其自己的默认模型。基本情况下无需手动设置。 **如果您希望在 Codex 上使用分层模型:** diff --git a/docs/zh-CN/how-to/install-on-your-runtime.md b/docs/zh-CN/how-to/install-on-your-runtime.md index c58e0a0d4..4386393b7 100644 --- a/docs/zh-CN/how-to/install-on-your-runtime.md +++ b/docs/zh-CN/how-to/install-on-your-runtime.md @@ -8,7 +8,7 @@ ## 为什么需要安装程序 -GSD Core 以 Claude Code 原生 frontmatter 格式分发代理和命令文件。每个支持的运行时需要不同的 schema、目录结构和命令调用语法。安装程序负责执行必要的转换——例如,为 OpenCode 转换工具列表和颜色值、为 Codex 写入 TOML 代理条目,以及将所有命令体从连字符格式(`/gsd-update`)重写为冒号格式(`/gsd-update`)以适配 Gemini CLI。 +GSD Core 以 Claude Code 原生 frontmatter 格式分发代理和命令文件。每个支持的运行时需要不同的 schema、目录结构和命令调用语法。安装程序负责执行必要的转换——例如,为 OpenCode 转换工具列表和颜色值、为 Codex 写入 TOML 代理条目。 **请勿直接从 `agents/` 或 `commands/` 复制文件。** 这样做会绕过转换过程,导致 schema 验证错误或命令缺失。 @@ -46,22 +46,6 @@ CLAUDE_CONFIG_DIR=~/.claude-alt npx @opengsd/gsd-core@latest --claude --global --- -### Gemini CLI - -```bash -npx @opengsd/gsd-core@latest --gemini --global -``` - -技能文件存放于 `~/.gemini/`。安装程序将所有命令体重写为 Gemini 的冒号命名空间格式(`/gsd-update`、`/gsd-config` 等)。安装后重启 Gemini CLI。 - -**覆盖安装目录:** - -```bash -GEMINI_CONFIG_DIR=~/.gemini-alt npx @opengsd/gsd-core@latest --gemini --global -``` - ---- - ### OpenCode ```bash diff --git a/docs/zh-CN/how-to/spike-and-sketch.md b/docs/zh-CN/how-to/spike-and-sketch.md index 8717b14b1..5dbcde800 100644 --- a/docs/zh-CN/how-to/spike-and-sketch.md +++ b/docs/zh-CN/how-to/spike-and-sketch.md @@ -90,7 +90,7 @@ GSD 会开启一段简短对话,在编写任何代码之前探索感觉、视 `--quick` 完全跳过引导对话,直接使用参数作为设计方向。 -### 非 Claude 运行时(Codex、Gemini CLI 等) +### 非 Claude 运行时(Codex、Antigravity CLI 等) ```bash /gsd-sketch --text "onboarding flow" diff --git a/gsd-core/references/model-profiles.md b/gsd-core/references/model-profiles.md index e6034872e..71675de31 100644 --- a/gsd-core/references/model-profiles.md +++ b/gsd-core/references/model-profiles.md @@ -100,7 +100,7 @@ The three layers compose: `models` defaults a phase, `model_overrides` carves an - **Required when using non-Anthropic providers** (OpenRouter, local models, etc.) — otherwise GSD may call Anthropic models directly, incurring unexpected costs - Use when: you want GSD to follow your currently selected runtime model -## Using Non-Claude Runtimes (Codex, OpenCode, Gemini CLI, Kilo) +## Using Non-Claude Runtimes (Codex, OpenCode, Antigravity CLI, Kilo) When installed for a non-Claude runtime, the GSD installer sets `resolve_model_ids: "omit"` in `~/.gsd/defaults.json`. This returns an empty model parameter for all agents, so each agent uses the runtime's default model. No manual setup is needed. diff --git a/gsd-core/workflows/add-tests.md b/gsd-core/workflows/add-tests.md index 6ed3b581a..63af9cb49 100644 --- a/gsd-core/workflows/add-tests.md +++ b/gsd-core/workflows/add-tests.md @@ -109,7 +109,7 @@ Read each file to verify classification. Don't classify based on filename alone. Present the classification to the user for confirmation before proceeding: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. ``` AskUserQuestion( diff --git a/gsd-core/workflows/add-todo.md b/gsd-core/workflows/add-todo.md index db1045b6e..8656b4e82 100644 --- a/gsd-core/workflows/add-todo.md +++ b/gsd-core/workflows/add-todo.md @@ -77,7 +77,7 @@ Suggest from the user's natural-language description: Default the suggestion to **major** if unclear. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace the `AskUserQuestion` below with a plain-text numbered list of the four options and ask the user to type their choice number. Required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is unavailable. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace the `AskUserQuestion` below with a plain-text numbered list of the four options and ask the user to type their choice number. Required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is unavailable. Confirm with AskUserQuestion (present the suggested value first): - header: "Severity?" @@ -102,7 +102,7 @@ If potential duplicate found: 2. Compare scope -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. If overlapping, use AskUserQuestion: - header: "Duplicate?" - question: "Similar todo exists: [title]. What would you like to do?" diff --git a/gsd-core/workflows/ai-integration-phase.md b/gsd-core/workflows/ai-integration-phase.md index eb086c2ee..2d24b3297 100644 --- a/gsd-core/workflows/ai-integration-phase.md +++ b/gsd-core/workflows/ai-integration-phase.md @@ -78,7 +78,7 @@ Continue (non-blocking). AI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-AI-SPEC.md 2>/dev/null | head -1) ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **If exists:** Use AskUserQuestion: - header: "Existing AI-SPEC" - question: "AI-SPEC.md already exists for Phase {N}. What would you like to do?" diff --git a/gsd-core/workflows/check-todos.md b/gsd-core/workflows/check-todos.md index 99a95bcf9..83750217d 100644 --- a/gsd-core/workflows/check-todos.md +++ b/gsd-core/workflows/check-todos.md @@ -106,7 +106,7 @@ If `.planning/ROADMAP.md` exists: **If todo maps to a roadmap phase:** -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - header: "Action" - question: "This todo relates to Phase [N]: [name]. What would you like to do?" diff --git a/gsd-core/workflows/cleanup.md b/gsd-core/workflows/cleanup.md index 7b314e384..11a7c8385 100644 --- a/gsd-core/workflows/cleanup.md +++ b/gsd-core/workflows/cleanup.md @@ -157,7 +157,7 @@ No quick tasks to archive either. Stop here. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. AskUserQuestion: "Proceed with archiving and pruning?" with options: "Yes — archive phases and prune stale branches" | "Cancel" If "Cancel": Stop. diff --git a/gsd-core/workflows/complete-milestone.md b/gsd-core/workflows/complete-milestone.md index a68b769e7..28cd090ed 100644 --- a/gsd-core/workflows/complete-milestone.md +++ b/gsd-core/workflows/complete-milestone.md @@ -387,7 +387,7 @@ Initial user testing showed demand for shape tools. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **Quick-task archival (opt-in — NOT symmetrical with phase archival below, #2142):** unlike phase archival, quick-task archival is **opt-in, default OFF**. Doing nothing leaves `.planning/quick/` untouched, exactly like today's behavior. Decide this BEFORE calling `milestone complete` below, so the flag can be folded into that single invocation rather than issuing a second, redundant call. diff --git a/gsd-core/workflows/do.md b/gsd-core/workflows/do.md index 8c59482f0..6ba03dc16 100644 --- a/gsd-core/workflows/do.md +++ b/gsd-core/workflows/do.md @@ -18,7 +18,7 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default " **Check for input.** -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. If `$ARGUMENTS` is empty, ask via AskUserQuestion: ``` diff --git a/gsd-core/workflows/docs-update.md b/gsd-core/workflows/docs-update.md index 9d1fc1a27..1273876c5 100644 --- a/gsd-core/workflows/docs-update.md +++ b/gsd-core/workflows/docs-update.md @@ -95,7 +95,7 @@ If CONTRIBUTING.md is in the conditional queue AND does NOT appear in the `exist 1. If `--force` is present in `$ARGUMENTS`: skip this check, include CONTRIBUTING.md in the queue. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. 2. Otherwise, use AskUserQuestion to confirm: ``` @@ -722,7 +722,7 @@ Continue to dispatch_monorepo_packages (if monorepo_workspaces is non-empty) or If `section_manifest` (from `INIT_DOCS_UPDATE`) is `null` or `"dispatch-monorepo-packages"` is in its `included` list: read and execute `gsd-core/workflows/docs-update/steps/dispatch-monorepo-packages.md`. Otherwise skip — do not read the file; continue to commit_docs. - + When the `Task` tool is unavailable, generate all queued docs sequentially in the current context instead of spawning subagents — this step replaces dispatch_wave_1, collect_wave_1, dispatch_wave_2, and collect_wave_2. Read `agents/gsd-doc-writer.md` once, then for each queued doc (Wave 1: README/ARCHITECTURE/CONFIGURATION, complete before Wave 2; Wave 2: GETTING-STARTED/DEVELOPMENT/TESTING plus any queued conditional docs, referencing Wave 1 outputs) construct the same doc_assignment fields the parallel path uses and write the file inline, using only file system tools (never browser-based tools). If `monorepo_workspaces` is non-empty, generate per-package READMEs sequentially afterward. Continue to verify_docs. Exact per-doc construction and the monorepo per-package loop: `gsd-core/workflows/docs-update/detail/elaboration.md` § 1. diff --git a/gsd-core/workflows/eval-review.md b/gsd-core/workflows/eval-review.md index 8fc0d5ff7..8dbb25e56 100644 --- a/gsd-core/workflows/eval-review.md +++ b/gsd-core/workflows/eval-review.md @@ -45,7 +45,7 @@ EVAL_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-EVAL-REVIEW.md 2>/dev/null | head -1) **State B** — SUMMARY.md exists, no AI-SPEC.md: Audit against general best practices **State C** — No SUMMARY.md: Exit — "Phase {N} not executed. Run /gsd:execute-phase {N} first." -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **If `EVAL_REVIEW_FILE` non-empty:** Use AskUserQuestion: - header: "Existing Eval Review" - question: "EVAL-REVIEW.md already exists for Phase {N}." diff --git a/gsd-core/workflows/execute-phase.md b/gsd-core/workflows/execute-phase.md index 01c80d2fa..f73013f49 100644 --- a/gsd-core/workflows/execute-phase.md +++ b/gsd-core/workflows/execute-phase.md @@ -1025,7 +1025,7 @@ increases monotonically across waves. `{status}` is `complete` (success), RETRY_AFTER=$(echo "$CLASS_JSON" | jq -r '.retryAfterSeconds // empty') if [ -n "$RETRY_AFTER" ]; then RETRY_HINT=" Provider hinted retry-after: ${RETRY_AFTER}s"; else RETRY_HINT=""; fi ``` - One classifier branch handles sentinels across Claude/Copilot/Codex/Gemini. Reference: `docs/research/provider-rate-limit-signals.md`. + One classifier branch handles sentinels across Claude/Copilot/Codex/Antigravity. Reference: `docs/research/provider-rate-limit-signals.md`. **Abnormal ends reconcile first (#4217):** an abnormal session end (`turn_aborted`-class) routes through the step-4 artifact reconciliation BEFORE classifying the failure — artifacts decide. **Step 7.1 — `class == "quota-exceeded"`:** follow the quota-recovery fragment below. **Step 7.2 — `class == "classify-handoff-bug"`:** diff --git a/gsd-core/workflows/execute-plan.md b/gsd-core/workflows/execute-plan.md index c1c75d6ca..4922295a5 100644 --- a/gsd-core/workflows/execute-plan.md +++ b/gsd-core/workflows/execute-plan.md @@ -211,7 +211,7 @@ gsd_run query phases.list --type summaries --raw # Extract the second-to-last summary from the JSON result ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. If previous SUMMARY has unresolved "Issues Encountered" or "Next Phase Readiness" blockers: AskUserQuestion(header="Previous Issues", options: "Proceed anyway" | "Address first" | "Review previous"). diff --git a/gsd-core/workflows/health.md b/gsd-core/workflows/health.md index 1dc489ee1..9a67e00dd 100644 --- a/gsd-core/workflows/health.md +++ b/gsd-core/workflows/health.md @@ -49,7 +49,7 @@ model's own session telemetry). If the runtime exposes neither, prompt the user once via AskUserQuestion for both numbers. **TEXT_MODE fallback:** when `text_mode` is true (config or `--text` flag) the -runtime is non-Claude (Codex, Gemini, etc.) and `AskUserQuestion` is not +runtime is non-Claude (Codex, Antigravity, etc.) and `AskUserQuestion` is not available — replace the prompt with a plain-text two-question sequence ("Approximate tokens used? Context window size?") and read the answers as plain text from the user's response. diff --git a/gsd-core/workflows/import.md b/gsd-core/workflows/import.md index a81df0b03..8238e0edd 100644 --- a/gsd-core/workflows/import.md +++ b/gsd-core/workflows/import.md @@ -136,7 +136,7 @@ Render the full Conflict Detection Report using the format in `gsd-core/referenc **If only WARNINGS and/or INFO (no blockers):** -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Ask via AskUserQuestion using the approve-revise-abort pattern (see `gsd-core/references/gate-prompts.md`): - question: "Review the warnings above. Proceed with import?" diff --git a/gsd-core/workflows/inbox.md b/gsd-core/workflows/inbox.md index 8ac5bf0bf..781b399e3 100644 --- a/gsd-core/workflows/inbox.md +++ b/gsd-core/workflows/inbox.md @@ -333,7 +333,7 @@ gh pr close {number} --comment "Closed by GSD inbox triage: this PR does not mee Always confirm with the user before closing anything: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. ``` AskUserQuestion: diff --git a/gsd-core/workflows/manager.md b/gsd-core/workflows/manager.md index f28eea3c6..7b2872df5 100644 --- a/gsd-core/workflows/manager.md +++ b/gsd-core/workflows/manager.md @@ -136,7 +136,7 @@ All {phase_count} phases verified complete. Ready for final steps: → /gsd:complete-milestone — archive and wrap up ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Ask user via AskUserQuestion: - **question:** "All phases complete. What next?" - **options:** "Verify work" / "Complete milestone" / "Exit manager" diff --git a/gsd-core/workflows/map-codebase.md b/gsd-core/workflows/map-codebase.md index 8463b3945..a0ecd7f3a 100644 --- a/gsd-core/workflows/map-codebase.md +++ b/gsd-core/workflows/map-codebase.md @@ -311,7 +311,7 @@ If any agent failed, note the failure and continue with successful documents. Continue to verify_output. - + When the `Agent` tool is unavailable, perform codebase mapping sequentially in the current context. This replaces `spawn_agents` and `collect_confirmations`. **IMPORTANT:** Do NOT use `browser_subagent`, `Explore`, or any browser-based tool. Use only file system tools (Read, Bash, Write, Grep, Glob, list_dir, view_file, grep_search, or equivalent tools available in your runtime). diff --git a/gsd-core/workflows/new-milestone.md b/gsd-core/workflows/new-milestone.md index 8306d0728..5ac169b9c 100644 --- a/gsd-core/workflows/new-milestone.md +++ b/gsd-core/workflows/new-milestone.md @@ -74,7 +74,7 @@ if [[ "$INIT_EARLY" == @file:* ]]; then INIT_EARLY=$(cat "${INIT_EARLY#@file:}") **If no context file:** - Present what shipped in last milestone -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. - Ask inline (freeform, NOT AskUserQuestion): "What do you want to build next?" - Wait for their response, then use AskUserQuestion to probe specifics - If user selects "Other" at any point to provide freeform input, ask follow-up as plain text — not another AskUserQuestion diff --git a/gsd-core/workflows/new-project/steps/auto-mode-config.md b/gsd-core/workflows/new-project/steps/auto-mode-config.md index ac5fed017..c71f73e2a 100644 --- a/gsd-core/workflows/new-project/steps/auto-mode-config.md +++ b/gsd-core/workflows/new-project/steps/auto-mode-config.md @@ -92,9 +92,9 @@ AskUserQuestion([ question: "Which AI models for planning agents?", multiSelect: false, options: [ - { label: "Adaptive (Recommended)", description: "Role-based cost optimization: heavy roles use the highest-tier model available on the active runtime, light roles use the cheapest. Best balance of quality and cost across all supported runtimes (Claude, Codex, Gemini, OpenRouter, local)." }, + { label: "Adaptive (Recommended)", description: "Role-based cost optimization: heavy roles use the highest-tier model available on the active runtime, light roles use the cheapest. Best balance of quality and cost across all supported runtimes (Claude, Codex, Antigravity, OpenRouter, local)." }, { label: "Standard tier…", description: "Choose Quality, Balanced, or Budget — flat tier applied to all agents" }, - { label: "Inherit", description: "Use the current session model for all agents (required for non-Claude runtimes: Codex, Gemini CLI, OpenCode /model, OpenRouter, local models)" } + { label: "Inherit", description: "Use the current session model for all agents (required for non-Claude runtimes: Codex, Antigravity, OpenCode /model, OpenRouter, local models)" } ] } ]) diff --git a/gsd-core/workflows/new-project/steps/codebase-map-offer.md b/gsd-core/workflows/new-project/steps/codebase-map-offer.md index be091589a..369b1bdce 100644 --- a/gsd-core/workflows/new-project/steps/codebase-map-offer.md +++ b/gsd-core/workflows/new-project/steps/codebase-map-offer.md @@ -1,6 +1,6 @@ **If `needs_codebase_map` is true** (from init — existing code detected but no codebase map): -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - header: "Codebase" diff --git a/gsd-core/workflows/new-workspace.md b/gsd-core/workflows/new-workspace.md index 58e4b5488..898e4a5da 100644 --- a/gsd-core/workflows/new-workspace.md +++ b/gsd-core/workflows/new-workspace.md @@ -35,7 +35,7 @@ Extract from $ARGUMENTS: **If `--name` is missing and not `--auto`:** -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - header: "Workspace Name" - question: "What should this workspace be called?" diff --git a/gsd-core/workflows/note.md b/gsd-core/workflows/note.md index 2e71c851e..0114dac30 100644 --- a/gsd-core/workflows/note.md +++ b/gsd-core/workflows/note.md @@ -3,7 +3,7 @@ Zero-friction idea capture. One Write call, one confirmation line. No questions, no prompts. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Runs inline — no Task, no AskUserQuestion, no Bash. diff --git a/gsd-core/workflows/onboard.md b/gsd-core/workflows/onboard.md index 34153404c..68b7ebec1 100644 --- a/gsd-core/workflows/onboard.md +++ b/gsd-core/workflows/onboard.md @@ -36,7 +36,7 @@ Parse JSON fields from `INIT`: **If `response_language` is set:** All user-facing output of this workflow — narration between tool calls, status updates, progress notes, findings, questions, prompts, and explanations — MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. Set: -- `TEXT_MODE=true` if `--text` is present or `text_mode` is true. When `TEXT_MODE` is active, replace every `AskUserQuestion` call below with a plain-text numbered list and ask the user to type their choice number — required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +- `TEXT_MODE=true` if `--text` is present or `text_mode` is true. When `TEXT_MODE` is active, replace every `AskUserQuestion` call below with a plain-text numbered list and ask the user to type their choice number — required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. - `ONBOARDING_ROOT={git_worktree_root || _GSD_RUNTIME_ROOT}`. If `has_git` and `in_nested_subdir` are true, warn that onboarding artifacts belong to the outer worktree at `git_worktree_root`. Do not run `git init`. diff --git a/gsd-core/workflows/plant-seed.md b/gsd-core/workflows/plant-seed.md index 706d2e081..1a8dea7df 100644 --- a/gsd-core/workflows/plant-seed.md +++ b/gsd-core/workflows/plant-seed.md @@ -165,7 +165,7 @@ If `--enrich` flag is in `$ARGUMENTS`: - Ask focused questions to build a complete seed: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. ```text AskUserQuestion( diff --git a/gsd-core/workflows/profile-user.md b/gsd-core/workflows/profile-user.md index 489901c27..2f877eb37 100644 --- a/gsd-core/workflows/profile-user.md +++ b/gsd-core/workflows/profile-user.md @@ -36,7 +36,7 @@ PROFILE_PATH="$HOME/.claude/gsd-core/USER-PROFILE.md" **If profile exists AND --refresh NOT set AND --questionnaire NOT set:** -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - header: "Existing Profile" - question: "You already have a profile. What would you like to do?" diff --git a/gsd-core/workflows/quick.md b/gsd-core/workflows/quick.md index 1cc6cf864..e7c14a68d 100644 --- a/gsd-core/workflows/quick.md +++ b/gsd-core/workflows/quick.md @@ -47,7 +47,7 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default " If `$DESCRIPTION` is empty after parsing, prompt user interactively: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. ``` AskUserQuestion( diff --git a/gsd-core/workflows/remove-workspace.md b/gsd-core/workflows/remove-workspace.md index 1c21bfc9f..fe2e4a3e8 100644 --- a/gsd-core/workflows/remove-workspace.md +++ b/gsd-core/workflows/remove-workspace.md @@ -28,7 +28,7 @@ Parse JSON for: `workspace_name`, `workspace_path`, `has_manifest`, `strategy`, First run `/gsd:workspace --list` to show available workspaces, then ask: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - header: "Remove Workspace" - question: "Which workspace do you want to remove?" diff --git a/gsd-core/workflows/secure-phase.md b/gsd-core/workflows/secure-phase.md index c2d59d9f3..0822a2fcc 100644 --- a/gsd-core/workflows/secure-phase.md +++ b/gsd-core/workflows/secure-phase.md @@ -87,7 +87,7 @@ Build: `{ threat_id, category, component, severity, disposition, status, evidenc ## 4. Present Threat Plan -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Call AskUserQuestion with threat table and options: 1. "Verify all open threats" → Step 5 2. "Accept all open — document in accepted risks log" → add to SECURITY.md accepted risks, set all CLOSED, Step 6 diff --git a/gsd-core/workflows/settings.md b/gsd-core/workflows/settings.md index 2435d3fcd..cb2a64131 100644 --- a/gsd-core/workflows/settings.md +++ b/gsd-core/workflows/settings.md @@ -70,7 +70,7 @@ Parse current values (default to `true` if not present): -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **Non-Claude runtime note:** If `TEXT_MODE` is active (i.e. the runtime is non-Claude), prepend the following notice before the model profile question: @@ -189,9 +189,9 @@ AskUserQuestion([ header: "Model", multiSelect: false, options: [ - { label: "Adaptive (Recommended)", description: "Role-based cost optimization: heavy roles use the highest-tier model available on the active runtime, light roles use the cheapest. Best balance of quality and cost across all supported runtimes (Claude, Codex, Gemini, OpenRouter, local)." }, + { label: "Adaptive (Recommended)", description: "Role-based cost optimization: heavy roles use the highest-tier model available on the active runtime, light roles use the cheapest. Best balance of quality and cost across all supported runtimes (Claude, Codex, Antigravity, OpenRouter, local)." }, { label: "Standard tier…", description: "Choose Quality, Balanced, or Budget — flat tier applied to all agents" }, - { label: "Inherit", description: "Use current session model for all agents (required for non-Claude runtimes: Codex, Gemini CLI, OpenRouter, local models)" } + { label: "Inherit", description: "Use current session model for all agents (required for non-Claude runtimes: Codex, Antigravity, OpenRouter, local models)" } ] } ]) diff --git a/gsd-core/workflows/ship.md b/gsd-core/workflows/ship.md index dc9d7d7f1..8faa36ea1 100644 --- a/gsd-core/workflows/ship.md +++ b/gsd-core/workflows/ship.md @@ -448,7 +448,7 @@ If `REVIEW_CMD` is non-empty and not `"null"`, run the external review: Ask if user wants to trigger a code review: -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. ``` AskUserQuestion: diff --git a/gsd-core/workflows/smart-entry.md b/gsd-core/workflows/smart-entry.md index e9bb4b2c5..2ddc22a86 100644 --- a/gsd-core/workflows/smart-entry.md +++ b/gsd-core/workflows/smart-entry.md @@ -13,7 +13,7 @@ Read all files referenced by the invoking prompt's `execution_context` before st **TEXT_MODE handling (non-Claude runtimes).** -Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. diff --git a/gsd-core/workflows/ui-phase.md b/gsd-core/workflows/ui-phase.md index 1e958e2d2..b06c45eaa 100644 --- a/gsd-core/workflows/ui-phase.md +++ b/gsd-core/workflows/ui-phase.md @@ -98,7 +98,7 @@ Continue (non-blocking). UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1) ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **If exists:** Use AskUserQuestion: - header: "Existing UI-SPEC" - question: "UI-SPEC.md already exists for Phase {N}. What would you like to do?" diff --git a/gsd-core/workflows/ui-review.md b/gsd-core/workflows/ui-review.md index f935f5fff..e2fd00b6b 100644 --- a/gsd-core/workflows/ui-review.md +++ b/gsd-core/workflows/ui-review.md @@ -46,7 +46,7 @@ UI_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-UI-REVIEW.md 2>/dev/null | head -1) **If `SUMMARY_FILES` empty:** Exit — "Phase {N} not executed. Run /gsd:execute-phase {N} first." -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. **If `UI_REVIEW_FILE` non-empty:** Use AskUserQuestion: - header: "Existing UI Review" - question: "UI-REVIEW.md already exists for Phase {N}." diff --git a/gsd-core/workflows/undo.md b/gsd-core/workflows/undo.md index 1d1ee962c..dacc830aa 100644 --- a/gsd-core/workflows/undo.md +++ b/gsd-core/workflows/undo.md @@ -67,7 +67,7 @@ Recent GSD commits: 3. ghi9012 fix(02-03): correct validation logic ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion to ask: - question: "Which commits to revert? Enter numbers (e.g., 1,3) or 'all'" - header: "Select" diff --git a/gsd-core/workflows/update.md b/gsd-core/workflows/update.md index bd991d1a0..45b5e8d60 100644 --- a/gsd-core/workflows/update.md +++ b/gsd-core/workflows/update.md @@ -285,7 +285,7 @@ Your custom files in other locations are preserved: If you've modified any GSD files directly, they'll be automatically backed up to `gsd-local-patches/` and can be reapplied with `/gsd:update --reapply` after the update. ``` -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Use AskUserQuestion: - Question: "Proceed with update?" - Options: diff --git a/gsd-core/workflows/validate-phase.md b/gsd-core/workflows/validate-phase.md index f52bc91bc..a046c4e8b 100644 --- a/gsd-core/workflows/validate-phase.md +++ b/gsd-core/workflows/validate-phase.md @@ -89,7 +89,7 @@ No gaps → skip to Step 6, set `nyquist_compliant: true`. ## 4. Present Gap Plan -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Call AskUserQuestion with gap table and options: 1. "Fix all gaps" → Step 5 2. "Skip — mark manual-only" → add to Manual-Only, Step 6 diff --git a/gsd-core/workflows/verify-work.md b/gsd-core/workflows/verify-work.md index b9acff80c..f4af00cda 100644 --- a/gsd-core/workflows/verify-work.md +++ b/gsd-core/workflows/verify-work.md @@ -377,7 +377,7 @@ Display the returned checkpoint EXACTLY as-is: - Do NOT add commentary before or after the block. - If you notice protocol/meta markers such as `to=all:`, role-routing text, XML system tags, hidden instruction markers, ad copy, or any unrelated suffix, discard the draft and output `{CHECKPOINT}` only. -**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. +**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Antigravity, etc.) where `AskUserQuestion` is not available. Wait for user response (plain text, no AskUserQuestion). diff --git a/scripts/docs-guard-registry.cjs b/scripts/docs-guard-registry.cjs index 9dba40c1b..df7698bf6 100644 --- a/scripts/docs-guard-registry.cjs +++ b/scripts/docs-guard-registry.cjs @@ -272,6 +272,32 @@ const DOCS_GUARD_TESTS = { // seeding, so a content edit to any of them (e.g. renaming a landmark // heading/string a hostile-input test targets) can change this test's // fixture assumptions. + // #4728: pins the retirement of Gemini CLI prose from every localized + // how-to/ARCHITECTURE/USER-GUIDE/CONFIGURATION/context-monitor mirror, plus + // the PRESERVE (Antigravity) and MODEL-AXIS (Gemini 2.5 Pro) negative-space + // checks in the same locales. + 'tests/gemini-runtime-removed.test.cjs': [ + 'docs/ja-JP/how-to/install-on-your-runtime.md', + 'docs/ko-KR/how-to/install-on-your-runtime.md', + 'docs/pt-BR/how-to/install-on-your-runtime.md', + 'docs/zh-CN/how-to/install-on-your-runtime.md', + 'docs/ja-JP/ARCHITECTURE.md', + 'docs/ko-KR/ARCHITECTURE.md', + 'docs/pt-BR/ARCHITECTURE.md', + 'docs/zh-CN/ARCHITECTURE.md', + 'docs/ja-JP/USER-GUIDE.md', + 'docs/ko-KR/USER-GUIDE.md', + 'docs/pt-BR/USER-GUIDE.md', + 'docs/zh-CN/USER-GUIDE.md', + 'docs/ja-JP/CONFIGURATION.md', + 'docs/ko-KR/CONFIGURATION.md', + 'docs/pt-BR/CONFIGURATION.md', + 'docs/zh-CN/CONFIGURATION.md', + 'docs/ja-JP/context-monitor.md', + 'docs/ko-KR/context-monitor.md', + 'docs/pt-BR/context-monitor.md', + 'docs/zh-CN/context-monitor.md', + ], 'tests/gen-state-md-docs.test.cjs': [ 'docs/reference/state-md.md', 'docs/ja-JP/reference/state-md.md', diff --git a/scripts/lib/macos-conformance-tier.generated.cjs b/scripts/lib/macos-conformance-tier.generated.cjs index d9cc8bbc1..0bdbc94c3 100644 --- a/scripts/lib/macos-conformance-tier.generated.cjs +++ b/scripts/lib/macos-conformance-tier.generated.cjs @@ -73,6 +73,7 @@ module.exports = { "tests/features-index-gate.test.cjs", "tests/frontmatter.unit.test.cjs", "tests/gap-checker.property.test.cjs", + "tests/gemini-runtime-removed.test.cjs", "tests/gen-context-index.test.cjs", "tests/gen-section-manifest.test.cjs", "tests/git-base-branch.test.cjs", diff --git a/tests/fixtures/compact-content-benchmark-baseline.json b/tests/fixtures/compact-content-benchmark-baseline.json index f80617f3c..bd548125c 100644 --- a/tests/fixtures/compact-content-benchmark-baseline.json +++ b/tests/fixtures/compact-content-benchmark-baseline.json @@ -8,18 +8,18 @@ "label": "PROXY-TOKENIZER DELTA — gpt-tokenizer is a stand-in; Anthropic publishes no tokenizer for Claude 3+. The on/off COMPARISON is exact under this pinned tokenizer; absolute counts are not Claude's real token counts.", "splits": { "complete-milestone": { - "offTokens": 13199, - "onTokens": 8359, + "offTokens": 13200, + "onTokens": 8360, "reductionPct": 36.67 }, "docs-update": { - "offTokens": 14232, - "onTokens": 11882, + "offTokens": 14230, + "onTokens": 11880, "reductionPct": 16.51 }, "execute-phase": { - "offTokens": 26103, - "onTokens": 23852, + "offTokens": 26104, + "onTokens": 23853, "reductionPct": 8.62 }, "new-project": { @@ -33,14 +33,14 @@ "reductionPct": 11.9 }, "verify-work": { - "offTokens": 12112, - "onTokens": 10139, + "offTokens": 12113, + "onTokens": 10140, "reductionPct": 16.29 } }, "aggregate": { - "offTokens": 107591, - "onTokens": 90943, + "offTokens": 107592, + "onTokens": 90944, "reductionPct": 15.47 } } diff --git a/tests/gemini-runtime-removed.test.cjs b/tests/gemini-runtime-removed.test.cjs index 638ebcf9d..48d268234 100644 --- a/tests/gemini-runtime-removed.test.cjs +++ b/tests/gemini-runtime-removed.test.cjs @@ -584,3 +584,179 @@ describe('#4709 the Gemini CLI reviewer lane is retired', () => { }); }); }); + +/** + * #4728 — localized docs and runtime-loaded workflow prose still surface the retired Gemini CLI + * runtime as a selectable option, outside the English `how-to`/`ARCHITECTURE.md` surfaces #4709 + * already covers. + * + * As with #4709, every assertion here is STRUCTURAL: a heading position, a table's first cell, or + * a captured runtime-example parenthetical — never "the string gemini is absent". `gemini` is + * load-bearing across Antigravity's real on-disk contract (~/.gemini/antigravity, ~/.gemini/config, + * GEMINI.md, hookEvents "gemini", GEMINI_API_KEY, every gemini-* model id), so a bare-string + * assertion would be wrong and would fail on correct code. The PRESERVE block below is the + * over-reach guard: it is what fails first if a "helpful" blanket gemini->antigravity sweep lands + * instead of the scoped removal this issue asks for. + */ +describe('#4728 Gemini CLI prose retired from localized docs and runtime-loaded workflows', () => { + const LOCALES = ['ja-JP', 'ko-KR', 'pt-BR', 'zh-CN']; + const linesOf = (file) => fs.readFileSync(file, 'utf8').split(/\r?\n/); + const relPath = (p) => path.relative(ROOT, p).split(path.sep).join('/'); + + test('no locale install-on-your-runtime.md has a Gemini CLI ### heading', () => { + // Heading-scoped (### only) so Antigravity's own ~/.gemini/... paths documented in the same + // file cannot trip this — a bare substring match on "Gemini CLI" would be too broad here. + const HEADING = /^###\s+Gemini CLI\s*$/m; + const offenders = LOCALES + .map((locale) => path.join(ROOT, 'docs', locale, 'how-to', 'install-on-your-runtime.md')) + .filter((file) => HEADING.test(fs.readFileSync(file, 'utf8'))) + .map(relPath); + + assert.deepStrictEqual(offenders, [], + 'a localized how-to still documents Gemini CLI as an installable runtime under its own ' + + `heading, after #1928 retired the runtime. Offenders:\n ${offenders.join('\n ')}`); + }); + + test('no locale ARCHITECTURE.md tables a Gemini CLI row', () => { + // First-cell-scoped so the Antigravity row's ~/.gemini/antigravity cells are untouched. + const ROW = /^\|\s*Gemini CLI\s*\|/m; + const offenders = LOCALES + .map((locale) => path.join(ROOT, 'docs', locale, 'ARCHITECTURE.md')) + .filter((file) => ROW.test(fs.readFileSync(file, 'utf8'))) + .map(relPath); + + assert.deepStrictEqual(offenders, [], + 'a localized ARCHITECTURE.md still tables Gemini CLI as a runtime row, after #1928 retired ' + + `the runtime. Offenders:\n ${offenders.join('\n ')}`); + }); + + test('no locale USER-GUIDE.md tables a Gemini CLI row', () => { + const ROW = /^\|\s*Gemini CLI\s*\|/m; + const offenders = LOCALES + .map((locale) => path.join(ROOT, 'docs', locale, 'USER-GUIDE.md')) + .filter((file) => ROW.test(fs.readFileSync(file, 'utf8'))) + .map(relPath); + + assert.deepStrictEqual(offenders, [], + 'a localized USER-GUIDE.md still tables Gemini CLI as a runtime row, after #1928 retired the ' + + `runtime. Offenders:\n ${offenders.join('\n ')}`); + }); + + test('no runtime-loaded workflow file names the retired Gemini runtime', () => { + // Walk gsd-core/workflows/ recursively (this MUST cover nested dirs like + // new-project/steps/, where #4728's auto-mode-config.md defect lived) and assert no `.md` + // file contains a case-sensitive standalone `Gemini` token, i.e. no match for /\bGemini\b/. + // + // Why a bare `/\bGemini\b/` is the right predicate, and not a narrower parenthetical/heading + // scoped one: every LEGITIMATE gemini reference in this directory is spelled differently and + // therefore cannot collide with this assertion — + // - Antigravity's config paths are lowercase with a slash: ~/.gemini/antigravity, + // ~/.gemini/config, .gemini/antigravity-ide + // - Google model ids are lowercase and hyphenated: gemini-3.1-pro-preview, + // gemini-2.5-flash-lite + // - env vars are uppercase: GEMINI_CONFIG_DIR, GEMINI_SESSION_ID, GEMINI_API_KEY + // - the generated runtime-launcher preamble only ever uses GEMINI_CONFIG_DIR / $HOME/.gemini + // So a bare capitalised `Gemini` anywhere under gsd-core/workflows/ can only mean the retired + // RUNTIME is being named — which is exactly the defect this test exists to catch. These files + // are runtime-loaded (read by the agent at execution time), so a stale "Gemini" mention here + // actively steers execution toward a retired runtime, not merely misinforms a reader. + const WORKFLOWS_ROOT = path.join(ROOT, 'gsd-core', 'workflows'); + const GEMINI_TOKEN = /\bGemini\b/; + // Two allowlisted exceptions, both matched by line CONTENT (never line number, so neither can + // silently drift if the file is edited above the matched line): + // 1. reapply-patches.md's historical note about where a pre-#1928 Gemini CLI install used + // to place patches. + // 2. settings-advanced.md's Section 8 "Known provider" menu option. This predicate forbids + // `Gemini` naming the retired RUNTIME axis; it does NOT forbid `Gemini` naming the + // PROVIDER / MODEL-FAMILY axis. Section 8 ("Model Policy") is explicitly scoped to model + // selection, independent of which runtime is installed, and its own intro says so. The + // "Known provider" option lists Gemini alongside Claude/OpenAI/Qwen as a model provider — + // the same axis as the lowercase `gemini-*` model ids used elsewhere in this file — and + // Antigravity runs on that provider's models. That is the same runtime-vs-provider + // taxonomy the whole #4709 epic rests on, so this line is correct as written and must + // keep working, not get rewritten to dodge the predicate. + const isAllowlistedLegacyLine = (file, line) => + (relPath(file) === 'gsd-core/workflows/reapply-patches.md' + && line.includes('Legacy:') + && line.includes('pre-#1928')) + || (relPath(file) === 'gsd-core/workflows/settings-advanced.md' + && line.includes('Known provider')); + + /** Recursively collect every `.md` file under `dir`. */ + function markdownFilesUnder(dir) { + const out = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + out.push(...markdownFilesUnder(full)); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + out.push(full); + } + } + return out; + } + + const files = markdownFilesUnder(WORKFLOWS_ROOT); + // Guard against an empty or failed walk making this test pass vacuously. + assert.ok(files.length >= 50, + `expected at least 50 .md files under gsd-core/workflows/, found ${files.length} — the ` + + 'recursive walk may be broken'); + + const offenders = []; + for (const file of files) { + linesOf(file).forEach((line, i) => { + if (isAllowlistedLegacyLine(file, line)) return; + if (GEMINI_TOKEN.test(line)) { + offenders.push(`${relPath(file)}:${i + 1} names Gemini: "${line.trim()}"`); + } + }); + } + + assert.deepStrictEqual(offenders, [], + 'a runtime-loaded workflow file under gsd-core/workflows/ still names the retired Gemini ' + + 'runtime, steering the agent (these files are read at execution time, not just by a ' + + `reader) toward a retired runtime. Offenders:\n ${offenders.join('\n ')}`); + }); + + test('PRESERVE: Antigravity survives in every surface the removal above touches (over-reach guard)', () => { + // These four assertions are what fails first if someone "fixes" #4728 with a blanket + // gemini->antigravity string sweep instead of the scoped, structural removal above. + for (const locale of LOCALES) { + const installGuide = fs.readFileSync( + path.join(ROOT, 'docs', locale, 'how-to', 'install-on-your-runtime.md'), 'utf8', + ); + assert.match(installGuide, /^###\s+Antigravity\s*$/m, + `docs/${locale}/how-to/install-on-your-runtime.md must still document Antigravity under its own heading`); + + const architecture = fs.readFileSync(path.join(ROOT, 'docs', locale, 'ARCHITECTURE.md'), 'utf8'); + assert.ok(architecture.includes('~/.gemini/antigravity'), + `docs/${locale}/ARCHITECTURE.md must still document Antigravity's ~/.gemini/antigravity config home`); + + const configuration = fs.readFileSync(path.join(ROOT, 'docs', locale, 'CONFIGURATION.md'), 'utf8'); + assert.ok(configuration.includes('GEMINI_API_KEY'), + `docs/${locale}/CONFIGURATION.md must still document GEMINI_API_KEY`); + + const contextMonitor = fs.readFileSync(path.join(ROOT, 'docs', locale, 'context-monitor.md'), 'utf8'); + assert.ok(contextMonitor.includes('AfterTool'), + `docs/${locale}/context-monitor.md must still document AfterTool, the hook dialect Antigravity ` + + 'inherits — re-attributed on gemini removal, never deleted'); + } + }); + + test('MODEL AXIS: Gemini 2.5 Pro asymmetry across locale ARCHITECTURE.md is a measured fact, not an assumption', () => { + // Measured on 2026-09-14: ko-KR/pt-BR/zh-CN mention Gemini 2.5 Pro on the model axis (distinct + // from the retired RUNTIME axis covered above); ja-JP genuinely does not. Both sides are + // asserted so a later "helpful" uniform patch that adds the mention to ja-JP — treating the + // asymmetry as an oversight rather than a measured divergence — fails here. + for (const locale of ['ko-KR', 'pt-BR', 'zh-CN']) { + const text = fs.readFileSync(path.join(ROOT, 'docs', locale, 'ARCHITECTURE.md'), 'utf8'); + assert.ok(text.includes('Gemini 2.5 Pro'), + `docs/${locale}/ARCHITECTURE.md must still mention Gemini 2.5 Pro on the model axis`); + } + + const jaText = fs.readFileSync(path.join(ROOT, 'docs', 'ja-JP', 'ARCHITECTURE.md'), 'utf8'); + assert.ok(!jaText.includes('Gemini 2.5 Pro'), + 'docs/ja-JP/ARCHITECTURE.md does not mention Gemini 2.5 Pro — this locale genuinely diverged ' + + 'from the other three and must not be uniformly patched to match them'); + }); +});