From 6c8cf6774ffefc95516d1a287f301dfeaf20496f Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Fri, 17 Apr 2026 06:01:27 +0800 Subject: [PATCH] feat: model overlays with explicit --model flag (no auto-detect) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a per-model behavioral patch layer orthogonal to the host axis. Different LLMs have different tendencies (GPT won't stop, Gemini over-explains, o-series wants structured output). Overlays nudge each model toward better defaults for gstack workflows. Codex review caught three landmines the prior reviews missed: 1. Host != model — Claude Code can run any Claude model, Codex runs GPT/o-series, Cursor fronts multiple providers. Auto-detecting from host would lie. Dropped auto-detect. --model is explicit (default claude). Missing overlay file → empty string (graceful). 2. Import cycle — putting Model in resolvers/types.ts would cycle through hosts/index. Created neutral scripts/models.ts instead. 3. "Final say" is dangerous — overlay at the end of preamble could override STOP points, AskUserQuestion gates, /ship review gates. Placed overlay after spawned-session-check but before voice + tier sections. Wrapper heading adds explicit subordination language on every overlay: "subordinate to skill workflow, STOP points, AskUserQuestion gates, plan-mode safety, and /ship review gates." Changes: - scripts/models.ts: new neutral module. ALL_MODEL_NAMES, Model type, resolveModel() for family heuristics (gpt-5.4-mini → gpt-5.4, o3 → o-series, claude-opus-4-7 → claude), validateModel() helper. - scripts/resolvers/types.ts: import Model, add ctx.model field. - scripts/resolvers/model-overlay.ts: new resolver. Reads model-overlays/{model}.md. Supports {{INHERIT:base}} directive at top of file for concat (gpt-5.4 inherits gpt). Cycle guard. - scripts/resolvers/index.ts: register MODEL_OVERLAY resolver. - scripts/resolvers/preamble.ts: wire generateModelOverlay into composition before voice. Print MODEL_OVERLAY: {model} in preamble bash so users can see which overlay is active. Filter empty sections. - scripts/gen-skill-docs.ts: parse --model CLI flag. Default claude. Unknown model → throw with list of valid options. - model-overlays/{claude,gpt,gpt-5.4,gemini,o-series}.md: behavioral patches per model family. gpt-5.4.md uses {{INHERIT:gpt}} to extend gpt.md without duplication. - test/gen-skill-docs.test.ts: fix qa-only guardrail regex scope. Was matching Edit/Glob/Grep anywhere after `allowed-tools:` in the whole file. Now scoped to frontmatter only. Body prose (Claude overlay references Edit as a tool) correctly no longer breaks it. Verification: - bun run gen:skill-docs --host all --dry-run → all fresh - bun run gen:skill-docs --model gpt-5.4 → concat works, gpt.md + gpt-5.4.md content appears in order - bun run gen:skill-docs --model unknown → errors with valid list - All generated skills contain MODEL_OVERLAY: claude in preamble - Golden ship fixtures regenerated Co-Authored-By: Claude Opus 4.7 (1M context) --- SKILL.md | 19 ++++++ autoplan/SKILL.md | 19 ++++++ benchmark/SKILL.md | 19 ++++++ browse/SKILL.md | 19 ++++++ canary/SKILL.md | 19 ++++++ checkpoint/SKILL.md | 19 ++++++ codex/SKILL.md | 19 ++++++ cso/SKILL.md | 19 ++++++ design-consultation/SKILL.md | 19 ++++++ design-html/SKILL.md | 19 ++++++ design-review/SKILL.md | 19 ++++++ design-shotgun/SKILL.md | 19 ++++++ devex-review/SKILL.md | 19 ++++++ document-release/SKILL.md | 19 ++++++ health/SKILL.md | 19 ++++++ investigate/SKILL.md | 19 ++++++ land-and-deploy/SKILL.md | 19 ++++++ learn/SKILL.md | 19 ++++++ model-overlays/claude.md | 10 ++++ model-overlays/gemini.md | 10 ++++ model-overlays/gpt-5.4.md | 15 +++++ model-overlays/gpt.md | 14 +++++ model-overlays/o-series.md | 11 ++++ office-hours/SKILL.md | 19 ++++++ open-gstack-browser/SKILL.md | 19 ++++++ pair-agent/SKILL.md | 19 ++++++ plan-ceo-review/SKILL.md | 19 ++++++ plan-design-review/SKILL.md | 19 ++++++ plan-devex-review/SKILL.md | 19 ++++++ plan-eng-review/SKILL.md | 19 ++++++ qa-only/SKILL.md | 19 ++++++ qa/SKILL.md | 19 ++++++ retro/SKILL.md | 19 ++++++ review/SKILL.md | 19 ++++++ scripts/gen-skill-docs.ts | 17 +++++- scripts/models.ts | 68 ++++++++++++++++++++++ scripts/resolvers/index.ts | 2 + scripts/resolvers/model-overlay.ts | 60 +++++++++++++++++++ scripts/resolvers/preamble.ts | 5 +- scripts/resolvers/types.ts | 4 ++ setup-browser-cookies/SKILL.md | 19 ++++++ setup-deploy/SKILL.md | 19 ++++++ ship/SKILL.md | 19 ++++++ test/fixtures/golden/claude-ship-SKILL.md | 19 ++++++ test/fixtures/golden/codex-ship-SKILL.md | 19 ++++++ test/fixtures/golden/factory-ship-SKILL.md | 19 ++++++ test/gen-skill-docs.test.ts | 15 +++-- 47 files changed, 890 insertions(+), 6 deletions(-) create mode 100644 model-overlays/claude.md create mode 100644 model-overlays/gemini.md create mode 100644 model-overlays/gpt-5.4.md create mode 100644 model-overlays/gpt.md create mode 100644 model-overlays/o-series.md create mode 100644 scripts/models.ts create mode 100644 scripts/resolvers/model-overlay.ts diff --git a/SKILL.md b/SKILL.md index 94ba826b..8d2da71d 100644 --- a/SKILL.md +++ b/SKILL.md @@ -88,6 +88,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -255,6 +256,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice **Tone:** direct, concrete, sharp, never corporate, never academic. Sound like a builder, not a consultant. Name the file, the function, the command. No filler, no throat-clearing. diff --git a/autoplan/SKILL.md b/autoplan/SKILL.md index 038d9e05..a8844760 100644 --- a/autoplan/SKILL.md +++ b/autoplan/SKILL.md @@ -98,6 +98,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -265,6 +266,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/benchmark/SKILL.md b/benchmark/SKILL.md index 370d09d5..16a069d1 100644 --- a/benchmark/SKILL.md +++ b/benchmark/SKILL.md @@ -91,6 +91,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -258,6 +259,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice **Tone:** direct, concrete, sharp, never corporate, never academic. Sound like a builder, not a consultant. Name the file, the function, the command. No filler, no throat-clearing. diff --git a/browse/SKILL.md b/browse/SKILL.md index 420e2b0b..0a9196c2 100644 --- a/browse/SKILL.md +++ b/browse/SKILL.md @@ -90,6 +90,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -257,6 +258,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice **Tone:** direct, concrete, sharp, never corporate, never academic. Sound like a builder, not a consultant. Name the file, the function, the command. No filler, no throat-clearing. diff --git a/canary/SKILL.md b/canary/SKILL.md index c2f0a089..3c8078aa 100644 --- a/canary/SKILL.md +++ b/canary/SKILL.md @@ -90,6 +90,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -257,6 +258,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/checkpoint/SKILL.md b/checkpoint/SKILL.md index f0bf78b8..5c473376 100644 --- a/checkpoint/SKILL.md +++ b/checkpoint/SKILL.md @@ -93,6 +93,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -260,6 +261,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/codex/SKILL.md b/codex/SKILL.md index 621c4ead..96b7c7db 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -92,6 +92,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -259,6 +260,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/cso/SKILL.md b/cso/SKILL.md index 6556a4b5..44e1e5b7 100644 --- a/cso/SKILL.md +++ b/cso/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index ef3f144a..8f9a8748 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/design-html/SKILL.md b/design-html/SKILL.md index 3e743a40..3dbaa657 100644 --- a/design-html/SKILL.md +++ b/design-html/SKILL.md @@ -97,6 +97,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -264,6 +265,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/design-review/SKILL.md b/design-review/SKILL.md index e6ffe9f7..b96aff84 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/design-shotgun/SKILL.md b/design-shotgun/SKILL.md index 0628f8c7..3989548f 100644 --- a/design-shotgun/SKILL.md +++ b/design-shotgun/SKILL.md @@ -92,6 +92,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -259,6 +260,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/devex-review/SKILL.md b/devex-review/SKILL.md index a59561d9..a97c4477 100644 --- a/devex-review/SKILL.md +++ b/devex-review/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/document-release/SKILL.md b/document-release/SKILL.md index 7f2e4763..c421668e 100644 --- a/document-release/SKILL.md +++ b/document-release/SKILL.md @@ -92,6 +92,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -259,6 +260,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/health/SKILL.md b/health/SKILL.md index 843dfb95..01637f9f 100644 --- a/health/SKILL.md +++ b/health/SKILL.md @@ -92,6 +92,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -259,6 +260,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/investigate/SKILL.md b/investigate/SKILL.md index 4f3a1a88..2312d2b9 100644 --- a/investigate/SKILL.md +++ b/investigate/SKILL.md @@ -107,6 +107,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -274,6 +275,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/land-and-deploy/SKILL.md b/land-and-deploy/SKILL.md index 0fc3a443..4f0dc826 100644 --- a/land-and-deploy/SKILL.md +++ b/land-and-deploy/SKILL.md @@ -89,6 +89,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -256,6 +257,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/learn/SKILL.md b/learn/SKILL.md index 3c88385e..327c12b6 100644 --- a/learn/SKILL.md +++ b/learn/SKILL.md @@ -92,6 +92,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -259,6 +260,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/model-overlays/claude.md b/model-overlays/claude.md new file mode 100644 index 00000000..95943af5 --- /dev/null +++ b/model-overlays/claude.md @@ -0,0 +1,10 @@ +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. diff --git a/model-overlays/gemini.md b/model-overlays/gemini.md new file mode 100644 index 00000000..a1d6e9f3 --- /dev/null +++ b/model-overlays/gemini.md @@ -0,0 +1,10 @@ +**Conciseness constraint.** Keep non-code text output short. Aim for under 3 lines +for routine responses unless the user explicitly asks for detail. Code blocks and +command output do not count toward the limit. + +**Bias toward action.** Run commands and show results rather than explaining what +commands you would run. The user sees the command and the output — they don't need +narration. + +**Structured output when useful.** Tables, bullet points, and code blocks beat prose +for lists of things. Prose is for explaining; structure is for presenting. diff --git a/model-overlays/gpt-5.4.md b/model-overlays/gpt-5.4.md new file mode 100644 index 00000000..bf5d96b5 --- /dev/null +++ b/model-overlays/gpt-5.4.md @@ -0,0 +1,15 @@ +{{INHERIT:gpt}} + +**Anti-verbosity protocol (additional).** Your default output mode is too verbose for +tools that value terse output. Constrain: + +- Status updates: one line, not a paragraph. +- Code explanations: only when the user asked for one, or when the code is genuinely + surprising. +- Do not narrate what you are about to do. Just do it. +- Do not repeat the user's request back to them. +- When showing code changes, show the changed lines with minimal surrounding context. +- Markdown headings are not decoration. Use them only when structural. + +**Cap answers at the shortest form that contains the answer.** If the answer is a +one-line command, reply with a one-line command. diff --git a/model-overlays/gpt.md b/model-overlays/gpt.md new file mode 100644 index 00000000..ceb26a7a --- /dev/null +++ b/model-overlays/gpt.md @@ -0,0 +1,14 @@ +**Completion bias.** Do not end your turn with a partial solution when the full +solution is reachable. If you encounter an error, debug it. If a test fails, fix it. +If something is ambiguous, make your best judgment and proceed — don't stop and ask +unless you're genuinely blocked. + +**Prefer doing over listing.** When you'd be tempted to write "you could also try X, +Y, or Z," try the best option yourself. Pick, execute, report results. + +**No preamble.** Skip "Great question!", "Let me help with that", and restating the +user's request. Start with the work. + +**Reminder: subordination applies.** When a skill workflow says STOP, stop. When the +skill asks via AskUserQuestion, that is the wait-for-user gate, not an ambiguity. +Completion bias does not override safety gates. diff --git a/model-overlays/o-series.md b/model-overlays/o-series.md new file mode 100644 index 00000000..fdf08194 --- /dev/null +++ b/model-overlays/o-series.md @@ -0,0 +1,11 @@ +**Reasoning model behavior.** You have strong internal reasoning. Use it, but do not +expose chain-of-thought in outputs unless the user asks to see your reasoning. +Surface the conclusion plus evidence, not the reasoning chain. + +**Structured outputs preferred.** Tables or bullet points over prose paragraphs +when presenting analysis. Prose is for explanation and context; structure is for +findings, options, and comparisons. + +**Completion bias (subordinate to safety gates).** Do not stop with partial +solutions when the full solution is reachable. But skill workflow STOP points, +AskUserQuestion gates, and /ship review gates always win over completion bias. diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index cdb813ae..d84f3a37 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -99,6 +99,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -266,6 +267,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/open-gstack-browser/SKILL.md b/open-gstack-browser/SKILL.md index 7933cb48..abaa5b79 100644 --- a/open-gstack-browser/SKILL.md +++ b/open-gstack-browser/SKILL.md @@ -89,6 +89,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -256,6 +257,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/pair-agent/SKILL.md b/pair-agent/SKILL.md index 2983b2db..a28e9a79 100644 --- a/pair-agent/SKILL.md +++ b/pair-agent/SKILL.md @@ -90,6 +90,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -257,6 +258,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index 9d9045c0..f5588249 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index d199f40e..4a67d7ae 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -93,6 +93,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -260,6 +261,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/plan-devex-review/SKILL.md b/plan-devex-review/SKILL.md index c5537a97..3342c290 100644 --- a/plan-devex-review/SKILL.md +++ b/plan-devex-review/SKILL.md @@ -97,6 +97,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -264,6 +265,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index 2a04ab1e..d5dac0f8 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -95,6 +95,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -262,6 +263,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/qa-only/SKILL.md b/qa-only/SKILL.md index 0d4be44a..b1376022 100644 --- a/qa-only/SKILL.md +++ b/qa-only/SKILL.md @@ -91,6 +91,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -258,6 +259,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/qa/SKILL.md b/qa/SKILL.md index d60c41aa..4c1f1895 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -97,6 +97,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -264,6 +265,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/retro/SKILL.md b/retro/SKILL.md index 711ae1c0..6f5f3dd3 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -90,6 +90,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -257,6 +258,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/review/SKILL.md b/review/SKILL.md index 14191488..4d10d4bd 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -93,6 +93,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -260,6 +261,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/scripts/gen-skill-docs.ts b/scripts/gen-skill-docs.ts index 16cae42b..a1e3a8a7 100644 --- a/scripts/gen-skill-docs.ts +++ b/scripts/gen-skill-docs.ts @@ -43,6 +43,21 @@ const HOST_ARG_VAL: HostArg = (() => { // For single-host mode, HOST is the host. For --host all, it's set per iteration below. let HOST: Host = HOST_ARG_VAL === 'all' ? 'claude' : HOST_ARG_VAL; +// ─── Model Overlay Selection ──────────────────────────────── +// --model is explicit. We do NOT auto-detect from host (host ≠ model). +// Default is 'claude'. Missing overlay file → empty string (graceful). +import { ALL_MODEL_NAMES, resolveModel, type Model } from './models'; +const MODEL_ARG = process.argv.find(a => a.startsWith('--model')); +const MODEL_ARG_VAL: Model = (() => { + if (!MODEL_ARG) return 'claude'; + const val = MODEL_ARG.includes('=') ? MODEL_ARG.split('=')[1] : process.argv[process.argv.indexOf(MODEL_ARG) + 1]; + const resolved = resolveModel(val); + if (!resolved) { + throw new Error(`Unknown model: ${val}. Use ${ALL_MODEL_NAMES.join(', ')}, or a family variant (e.g., claude-opus-4-7, gpt-5.4-mini, o3).`); + } + return resolved; +})(); + // HostPaths, HOST_PATHS, and TemplateContext imported from ./resolvers/types (line 7-8) // Design constants (AI_SLOP_BLACKLIST, OPENAI_HARD_REJECTIONS, OPENAI_LITMUS_CHECKS) // live in ./resolvers/constants and are consumed by resolvers directly. @@ -398,7 +413,7 @@ function processTemplate(tmplPath: string, host: Host = 'claude'): { outputPath: const tierMatch = tmplContent.match(/^preamble-tier:\s*(\d+)$/m); const preambleTier = tierMatch ? parseInt(tierMatch[1], 10) : undefined; - const ctx: TemplateContext = { skillName, tmplPath, benefitsFrom, host, paths: HOST_PATHS[host], preambleTier }; + const ctx: TemplateContext = { skillName, tmplPath, benefitsFrom, host, paths: HOST_PATHS[host], preambleTier, model: MODEL_ARG_VAL }; // Replace placeholders (supports parameterized: {{NAME:arg1:arg2}}) // Config-driven: suppressedResolvers return empty string for this host diff --git a/scripts/models.ts b/scripts/models.ts new file mode 100644 index 00000000..b84608f6 --- /dev/null +++ b/scripts/models.ts @@ -0,0 +1,68 @@ +/** + * Model taxonomy — neutral module with no imports from hosts/ or resolvers/. + * + * Model families supported by model overlays in model-overlays/{family}.md. + * Host configs can reference these as `defaultModel` strings (validated at + * generation time), but the model axis is independent of the host axis. + * + * IMPORTANT: host ≠ model. Claude Code can run any Claude model (Opus, Sonnet, + * Haiku, future). Codex CLI runs GPT/o-series models. Cursor and OpenCode can + * front multiple providers. We do NOT auto-detect the model from the host — + * users pass --model explicitly. Default is 'claude'. + */ + +export const ALL_MODEL_NAMES = [ + 'claude', + 'gpt', + 'gpt-5.4', + 'gemini', + 'o-series', +] as const; + +export type Model = (typeof ALL_MODEL_NAMES)[number]; + +/** + * Resolve a model argument from CLI input to a known Model family. + * + * Precedence rules: + * 1. Exact match against ALL_MODEL_NAMES → return as-is. + * 2. Family heuristics for common variants: + * - `gpt-5.4-mini`, `gpt-5.4-turbo`, `gpt-5.4-*` → `gpt-5.4` + * - `gpt-*` (anything else GPT) → `gpt` + * - `o3`, `o4`, `o4-mini`, `o1`, `o1-mini`, `o1-pro` → `o-series` + * - `claude-*` (sonnet, opus, haiku, any version) → `claude` + * - `gemini-*` (2.5-pro, flash, etc.) → `gemini` + * 3. Unknown input → returns null (caller decides: error, or fall back). + * + * The resolver file in model-overlays/{model}.md applies further fallback + * (e.g., missing gpt-5.4.md falls back to gpt.md). This function only + * normalizes CLI input to a family name. + */ +export function resolveModel(input: string): Model | null { + const s = input.trim(); + if (!s) return null; + + // Exact match first + if ((ALL_MODEL_NAMES as readonly string[]).includes(s)) { + return s as Model; + } + + // Family heuristics + if (/^gpt-5\.4(-|$)/.test(s)) return 'gpt-5.4'; + if (/^gpt(-|$)/.test(s)) return 'gpt'; + if (/^o[0-9]+(-|$)/.test(s)) return 'o-series'; + if (/^claude(-|$)/.test(s)) return 'claude'; + if (/^gemini(-|$)/.test(s)) return 'gemini'; + + return null; +} + +/** + * Validate a string against ALL_MODEL_NAMES. Used by host-config validators + * when a HostConfig declares `defaultModel`. Returns an error message or null + * if valid. + */ +export function validateModel(input: string): string | null { + if ((ALL_MODEL_NAMES as readonly string[]).includes(input)) return null; + return `'${input}' is not a known model. Use ${ALL_MODEL_NAMES.join(', ')}.`; +} diff --git a/scripts/resolvers/index.ts b/scripts/resolvers/index.ts index 072b1a3d..6b77fb9a 100644 --- a/scripts/resolvers/index.ts +++ b/scripts/resolvers/index.ts @@ -18,6 +18,7 @@ import { generateConfidenceCalibration } from './confidence'; import { generateInvokeSkill } from './composition'; import { generateReviewArmy } from './review-army'; import { generateDxFramework } from './dx'; +import { generateModelOverlay } from './model-overlay'; export const RESOLVERS: Record = { SLUG_EVAL: generateSlugEval, @@ -62,4 +63,5 @@ export const RESOLVERS: Record = { REVIEW_ARMY: generateReviewArmy, CROSS_REVIEW_DEDUP: generateCrossReviewDedup, DX_FRAMEWORK: generateDxFramework, + MODEL_OVERLAY: generateModelOverlay, }; diff --git a/scripts/resolvers/model-overlay.ts b/scripts/resolvers/model-overlay.ts new file mode 100644 index 00000000..c60a514a --- /dev/null +++ b/scripts/resolvers/model-overlay.ts @@ -0,0 +1,60 @@ +/** + * Model overlay resolver — reads model-overlays/{model}.md and returns it + * wrapped in a subordinate behavioral-patch section. + * + * Precedence: + * 1. Exact match: ctx.model === 'gpt-5.4' → reads model-overlays/gpt-5.4.md + * 2. INHERIT directive: if the file's first non-whitespace line is + * `{{INHERIT:claude}}`, the resolver reads model-overlays/claude.md first + * and concatenates it ahead of the rest of this file's content. + * This lets `gpt-5.4.md` build on top of `gpt.md` without duplication. + * 3. Missing file: returns empty string (graceful degradation, no error). + * 4. No ctx.model set: returns empty string. + * + * The returned block is subordinate to skill workflow, safety gates, and + * AskUserQuestion instructions. The subordination language is part of the + * wrapper heading so it appears with every overlay regardless of file content. + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import type { TemplateContext } from './types'; + +const OVERLAY_DIR = path.resolve(import.meta.dir, '../../model-overlays'); + +const INHERIT_RE = /^\s*\{\{INHERIT:([a-z0-9-]+(?:\.[0-9]+)*)\}\}\s*\n/; + +function readOverlay(model: string, seen: Set = new Set()): string { + if (seen.has(model)) return ''; // cycle guard + seen.add(model); + + const filePath = path.join(OVERLAY_DIR, `${model}.md`); + if (!fs.existsSync(filePath)) return ''; + + const raw = fs.readFileSync(filePath, 'utf-8'); + const match = raw.match(INHERIT_RE); + if (!match) return raw.trim(); + + const baseModel = match[1]; + const base = readOverlay(baseModel, seen); + const rest = raw.replace(INHERIT_RE, '').trim(); + + if (!base) return rest; + return `${base}\n\n${rest}`; +} + +export function generateModelOverlay(ctx: TemplateContext): string { + if (!ctx.model) return ''; + + const content = readOverlay(ctx.model); + if (!content) return ''; + + return `## Model-Specific Behavioral Patch (${ctx.model}) + +The following nudges are tuned for the ${ctx.model} model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +${content}`; +} diff --git a/scripts/resolvers/preamble.ts b/scripts/resolvers/preamble.ts index 4a40444b..bf78c7fc 100644 --- a/scripts/resolvers/preamble.ts +++ b/scripts/resolvers/preamble.ts @@ -1,5 +1,6 @@ import type { TemplateContext } from './types'; import { getHostConfig } from '../../hosts/index'; +import { generateModelOverlay } from './model-overlay'; /** * Preamble architecture — why every skill needs this @@ -97,6 +98,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: ${ctx.model ?? 'none'}" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true \`\`\``; @@ -747,10 +749,11 @@ export function generatePreamble(ctx: TemplateContext): string { generateRoutingInjection(ctx), generateVendoringDeprecation(ctx), generateSpawnedSessionCheck(), + generateModelOverlay(ctx), generateVoiceDirective(tier), ...(tier >= 2 ? [generateContextRecovery(ctx), generateAskUserFormat(ctx), generateCompletenessSection(), generateContextHealth()] : []), ...(tier >= 3 ? [generateRepoModeSection(), generateSearchBeforeBuildingSection(ctx)] : []), generateCompletionStatus(ctx), ]; - return sections.join('\n\n'); + return sections.filter(s => s && s.trim().length > 0).join('\n\n'); } diff --git a/scripts/resolvers/types.ts b/scripts/resolvers/types.ts index 48204c91..2b174265 100644 --- a/scripts/resolvers/types.ts +++ b/scripts/resolvers/types.ts @@ -47,6 +47,9 @@ function buildHostPaths(): Record { export const HOST_PATHS: Record = buildHostPaths(); +import type { Model } from '../models'; +export type { Model } from '../models'; + export interface TemplateContext { skillName: string; tmplPath: string; @@ -54,6 +57,7 @@ export interface TemplateContext { host: Host; paths: HostPaths; preambleTier?: number; // 1-4, controls which preamble sections are included + model?: Model; // model family for behavioral overlay. Omitted/undefined → no overlay. } /** Resolver function signature. args is populated for parameterized placeholders like {{INVOKE_SKILL:name}}. */ diff --git a/setup-browser-cookies/SKILL.md b/setup-browser-cookies/SKILL.md index 8a369d0e..df9c91c0 100644 --- a/setup-browser-cookies/SKILL.md +++ b/setup-browser-cookies/SKILL.md @@ -87,6 +87,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -254,6 +255,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice **Tone:** direct, concrete, sharp, never corporate, never academic. Sound like a builder, not a consultant. Name the file, the function, the command. No filler, no throat-clearing. diff --git a/setup-deploy/SKILL.md b/setup-deploy/SKILL.md index 517af246..6733813f 100644 --- a/setup-deploy/SKILL.md +++ b/setup-deploy/SKILL.md @@ -93,6 +93,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -260,6 +261,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/ship/SKILL.md b/ship/SKILL.md index 8a0053ba..d6472c1f 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -94,6 +94,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -261,6 +262,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/test/fixtures/golden/claude-ship-SKILL.md b/test/fixtures/golden/claude-ship-SKILL.md index 8a0053ba..d6472c1f 100644 --- a/test/fixtures/golden/claude-ship-SKILL.md +++ b/test/fixtures/golden/claude-ship-SKILL.md @@ -94,6 +94,7 @@ if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -261,6 +262,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/test/fixtures/golden/codex-ship-SKILL.md b/test/fixtures/golden/codex-ship-SKILL.md index e472b39d..8fcab251 100644 --- a/test/fixtures/golden/codex-ship-SKILL.md +++ b/test/fixtures/golden/codex-ship-SKILL.md @@ -88,6 +88,7 @@ if [ -d ".agents/skills/gstack" ] && [ ! -L ".agents/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -255,6 +256,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/test/fixtures/golden/factory-ship-SKILL.md b/test/fixtures/golden/factory-ship-SKILL.md index d497a878..c7e9aac4 100644 --- a/test/fixtures/golden/factory-ship-SKILL.md +++ b/test/fixtures/golden/factory-ship-SKILL.md @@ -90,6 +90,7 @@ if [ -d ".factory/skills/gstack" ] && [ ! -L ".factory/skills/gstack" ]; then fi fi echo "VENDORED_GSTACK: $_VENDORED" +echo "MODEL_OVERLAY: claude" # Detect spawned session (OpenClaw or other orchestrator) [ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true ``` @@ -257,6 +258,24 @@ AI orchestrator (e.g., OpenClaw). In spawned sessions: - Focus on completing the task and reporting results via prose output. - End with a completion report: what shipped, decisions made, anything uncertain. +## Model-Specific Behavioral Patch (claude) + +The following nudges are tuned for the claude model family. They are +**subordinate** to skill workflow, STOP points, AskUserQuestion gates, plan-mode +safety, and /ship review gates. If a nudge below conflicts with skill instructions, +the skill wins. Treat these as preferences, not rules. + +**Todo-list discipline.** When working through a multi-step plan, mark each task +complete individually as you finish it. Do not batch-complete at the end. If a task +turns out to be unnecessary, mark it skipped with a one-line reason. + +**Think before heavy actions.** For complex operations (refactors, migrations, +non-trivial new features), briefly state your approach before executing. This lets +the user course-correct cheaply instead of mid-flight. + +**Dedicated tools over Bash.** Prefer Read, Edit, Write, Glob, Grep over shell +equivalents (cat, sed, find, grep). The dedicated tools are cheaper and clearer. + ## Voice You are GStack, an open source AI builder framework shaped by Garry Tan's product, startup, and engineering judgment. Encode how he thinks, not his biography. diff --git a/test/gen-skill-docs.test.ts b/test/gen-skill-docs.test.ts index a555104d..9148e314 100644 --- a/test/gen-skill-docs.test.ts +++ b/test/gen-skill-docs.test.ts @@ -358,10 +358,17 @@ describe('gen-skill-docs', () => { const qaOnlyContent = fs.readFileSync(path.join(ROOT, 'qa-only', 'SKILL.md'), 'utf-8'); expect(qaOnlyContent).toContain('Never fix bugs'); expect(qaOnlyContent).toContain('NEVER fix anything'); - // Should not have Edit, Glob, or Grep in allowed-tools - expect(qaOnlyContent).not.toMatch(/allowed-tools:[\s\S]*?Edit/); - expect(qaOnlyContent).not.toMatch(/allowed-tools:[\s\S]*?Glob/); - expect(qaOnlyContent).not.toMatch(/allowed-tools:[\s\S]*?Grep/); + // Should not have Edit, Glob, or Grep in allowed-tools. + // Scope to frontmatter (between the first two --- lines) — the body can + // legitimately mention these tool names in prose (e.g., Claude model + // overlay says "prefer Read, Edit, Write, Glob, Grep over Bash"). + const fmMatch = qaOnlyContent.match(/^---\n([\s\S]*?)\n---/); + expect(fmMatch).not.toBeNull(); + const frontmatter = fmMatch![1]; + expect(frontmatter).toMatch(/allowed-tools:/); + expect(frontmatter).not.toMatch(/allowed-tools:[\s\S]*?- Edit/); + expect(frontmatter).not.toMatch(/allowed-tools:[\s\S]*?- Glob/); + expect(frontmatter).not.toMatch(/allowed-tools:[\s\S]*?- Grep/); }); test('qa has fix-loop tools and phases', () => {