mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-10 18:50:18 +01:00
* feat: retire /investigate after a no-gain eval (GST-1717)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(skill-start): core routing offer drops every non-core rule line (GST-1717)
The retired /investigate rule became 'Bugs/errors → fix them directly', which no
longer matches '→ invoke /', so proactive=core leaked it into the offered section.
Match any '- … → ' rule line.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* revert(review): keep review/checklist.md at its no-loss-pinned bytes (GST-1717)
The pin names replay GSTA-224 H1; a reviewer checklist edit merges only after a
passing no-loss replay (crew rule 15). The /investigate flake line stays until a
replayed repin.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* test: repair free-suite fallout from retiring /investigate (GST-1717)
CI run 42340956269 at 83a8a9a: drop fixtures, ledger rows, allowlist entries and
counts for the retired skill and its deleted paid files; record the harness
change as non-behavioral; the test-of-test detector accepts path.join(ROOT, 'bin');
uncovered-prompt fixtures use a tracked prompt, since an untracked path now
reads as a deleted one.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(relink): back up a retired skill's real SKILL.md before cleaning it (GST-1717)
With the skill's source gone, the customized-file check never ran, so a
banner-carrying local copy of investigate/SKILL.md was deleted instead of moved
to the backup root (red-team review, pass 1).
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(qm): restore the review checklist's flake-line rewrite (GST-1717)
review/checklist.md keeps its pinned /investigate line, so the QM edition needs
its replaceText rule back; qm/ stays fresh against the generator.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs(changelog): name the setup flag break, the relink backup and the pinned checklist line (GST-1717)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(setup,relink): back up a retired skill's real SKILL.md instead of deleting it (GST-1717)
Scoped fix round under grant a-360dd62bd46a (outside-voice blocking finding and
adversarial #1, #4). setup's prune compares a copied host entry with the render
before removing that render, and backs up a copy that differs or whose render is
gone; relink no longer takes the marker's rm -rf for a skill whose source is
gone, so a real SKILL.md is backed up and the user's files stay. setup reports a
failed remove-source of the retired gate hooks on stderr.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(pr-profile): a changed prompt counts as deleted only when it is gone from disk (GST-1717)
An untracked prompt file on disk still needs prompt validation (targeted review
finding); harness change recorded as non-behavioral.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs(changelog): exact backup wording, the hook-removal warning and GST-1744 (GST-1717)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix(setup): one backup folder per host for a retired skill's copies (GST-1717)
Under grant a-c95576b8b1f9 (fix-check#1): every copy host moved its
gstack-investigate/SKILL.md to the same backup path, so a later host's copy
overwrote an earlier host's edits. A sandboxed ./setup --host factory run showed
gen-skill-docs removes the retired render before the prune, so every real copy
is backed up; each host now gets its own folder.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs(changelog): say exactly what setup backs up for a retired skill (GST-1717)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* docs(changelog): end the two colon sentences prose-lint flagged (GST-1717)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* test(retired-skills): name plan-eng-review once behind a pregate-literal waiver (GST-1717)
pregate's literals check read the GSTACK_RETIRED_SKILLS change as an old
value still in the tests. plan-eng-review is still retired; investigate was
appended. The fixture names it once, with the waiver.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
134 lines
10 KiB
Cheetah
134 lines
10 KiB
Cheetah
---
|
|
name: gstack
|
|
preamble-tier: 1
|
|
version: 1.2.0
|
|
description: |
|
|
Router for the gstack skill suite. Sends any gstack request to the right skill
|
|
(planning, review, QA, shipping, debugging, docs, security, design). Routes QA by
|
|
intent and browser interaction to /browse. Use when you invoke gstack without a specific
|
|
skill, or ask "which gstack skill fits this?". (gstack)
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- AskUserQuestion
|
|
triggers:
|
|
- gstack
|
|
- which gstack skill
|
|
- route this with gstack
|
|
|
|
---
|
|
|
|
{{PREAMBLE}}
|
|
|
|
## Route first
|
|
|
|
This is the gstack router. Its one job is to send the request to the right skill.
|
|
|
|
1. If the request is to test behavior, find bugs, QA or dogfood software → invoke `/qa`,
|
|
or `/qa-only` when the user wants reporting without fixes. These skills select browser,
|
|
API, CLI, job, worker or webhook surfaces before loading their testing instructions.
|
|
An API URL does not imply browser testing. An explicit skill request keeps its authority.
|
|
2. If the request is browser interaction, screenshots, or inspecting a page
|
|
(open a site, take a screenshot, inspect a flow visually) → invoke `/browse`.
|
|
Every gstack browser skill (`/browse`, `/qa`, `/qa-only`, `/design-review`, `/canary`,
|
|
`/benchmark`, `/scrape`) drives the Aside browser first — the user's real browser with
|
|
their real logged-in sessions — and falls back to gstack's own browser when Aside is not
|
|
installed or not running. Route "open the browser" / "import cookies" requests to the
|
|
fallback-browser skills below only when the user is clearly on that path (Linux,
|
|
Windows, or Aside closed); on Aside there is nothing to open or import.
|
|
3. Otherwise, route by the rules below. If nothing matches, answer directly.
|
|
|
|
Best-effort, record which way you routed (never block on it). Set `ROUTE_OUTCOME` to
|
|
`browse` (sent to /browse), `routed` (sent to another skill), or `direct` (answered
|
|
directly, no skill matched), and replace `SESSION_ID` with the value the skill-start
|
|
output echoed:
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type route --skill gstack --outcome ROUTE_OUTCOME --session-id "SESSION_ID" 2>/dev/null || true
|
|
```
|
|
|
|
If `PROACTIVE` is `false` or `off`: do not proactively invoke or suggest other gstack
|
|
skills during this session, including by asking whether to run one ("want me to run /X?").
|
|
Only run skills the user explicitly invokes. This preference persists across sessions via
|
|
`gstack-config`.
|
|
|
|
If `PROACTIVE` is `core` (default): **invoke the Skill tool** only for the four core
|
|
skills when the user's request matches their rule below: `/office-hours`, `/review`,
|
|
`/qa` and `/ship`. For every other rule, answer directly and do not suggest the skill;
|
|
the user types it. The browser step above follows the
|
|
same rule: under `core`, name `/browse` for the user to type instead of
|
|
invoking it. A skill the user names is always invoked, whatever this setting says,
|
|
and a step inside a skill that is already running (a handoff, a review gate, a subagent it
|
|
dispatches) is part of that skill, not a suggestion.
|
|
|
|
If `PROACTIVE` is `all` (or `true`): **invoke the Skill tool** when the user's request
|
|
matches any skill's purpose. Do NOT answer directly when a skill exists for the task.
|
|
Use the Skill tool to invoke it. The skill has specialized workflows, checklists, and
|
|
quality gates that produce better results than answering inline.
|
|
|
|
**Routing rules — when you see these patterns, INVOKE the skill via the Skill tool** (under
|
|
`core`, only the four core rules auto-invoke):
|
|
- User describes a new idea, asks "is this worth building", brainstorms, pitches a concept → invoke `/office-hours`
|
|
- User asks to spec something out, file an issue, write up a ticket, "turn this into a GitHub issue", "backlog item" → invoke `/spec`
|
|
- User asks about strategy, scope, ambition, "think bigger", "what should we build" → invoke `/plan-ceo-review`
|
|
- User asks to review architecture, lock in the plan, "does this design make sense" → invoke `/autoplan`
|
|
- User asks about design system, brand, visual identity, "how should this look" → invoke `/design-consultation`
|
|
- User asks to review design of a plan → invoke `/plan-design-review`
|
|
- User asks about developer experience of a plan, API/CLI/SDK design → invoke `/plan-devex-review`
|
|
- User wants all reviews done automatically, "review everything" → invoke `/autoplan`
|
|
- User reports a bug, error, failing test or broken behavior, "why is this broken", "this doesn't work", "wtf", "something's wrong" → check the cause by **Failures** below, then fix it test-first
|
|
- User asks to test the site, find bugs, QA, "does this work", "check the deploy" → invoke `/qa`
|
|
- User asks to just report bugs without fixing → invoke `/qa-only`
|
|
- User asks to review code, check the diff, pre-landing review, "look at my changes" → invoke `/review`
|
|
- User asks to find code worth sharing, shared-code extractions, or duplication worth consolidating → invoke `/deslop-shared-libs`
|
|
- User asks to audit, prune or find low-value tests in the existing suite → invoke `/test-audit`
|
|
- User asks to write a skill, improve or slim a skill, or add a lesson to a named skill → invoke `/write-skill`
|
|
- User asks about visual polish, design audit of a live site, "this looks off" → invoke `/design-review`
|
|
- User asks to audit the live developer experience, time-to-hello-world → invoke `/devex-review`
|
|
- User asks to run the checks, make the tests pass, "verify my change", "check my work" while building → invoke `/verify`
|
|
- User asks to ship, deploy, push, create a PR, "let's land this", "send it" → invoke `/ship`
|
|
- User asks to merge + deploy + verify as one flow → tell them to type `/land-and-deploy`; never merge or deploy by hand
|
|
- User asks to rebase or revive an old PR, "modernize this PR", whether a stale PR is still worth landing → tell them to type `/modernize`
|
|
- User asks to configure deployment for the project → invoke `/setup-deploy`
|
|
- User asks to monitor prod after shipping, post-deploy checks → invoke `/canary`
|
|
- User asks to update docs after shipping → invoke `/document-release`
|
|
- User asks to write docs from scratch, generate documentation, "document this feature/module" → invoke `/document-generate`
|
|
- User asks for a weekly retro, what did we ship, "how'd we do" → invoke `/retro`
|
|
- User asks to run a crew of agents, coordinate lanes, build a merge train, call a slot, validate a READY block, write the crew digest, "set up a captain", "run the crew" → invoke `/captain`
|
|
{{OUTSIDE_VOICE_ROUTING}}
|
|
- User asks for safety mode, careful mode → invoke `/careful` or `/guard`
|
|
- User asks to restrict edits to a directory → invoke `/freeze` or `/unfreeze`
|
|
- User asks to upgrade gstack → invoke `/gstack-upgrade`
|
|
- User asks to save progress, checkpoint, "save my work" → invoke `/context-save`
|
|
- User asks to resume, restore, "where was I" → invoke `/context-restore`
|
|
- User asks about security, OWASP, vulnerabilities, "is this secure" → invoke `/cso`
|
|
- User asks to make a PDF, document, publication → invoke `/make-pdf`
|
|
- User asks to pull data off a web page, "grab the table from", "extract the prices" → invoke `/scrape`
|
|
- User asks to launch a real browser for QA, "open the browser" → invoke `/open-gstack-browser` (fallback browser; on Aside the tabs are already visible)
|
|
- User asks to import cookies for authenticated testing → invoke `/setup-browser-cookies` (fallback browser; Aside already has the sessions)
|
|
- User asks to share the browser with another agent, "pair OpenClaw/Codex with my browser" → invoke `/pair-agent` (fallback browser)
|
|
- User asks to codify or save the last `/scrape` as a reusable skill → invoke `/skillify` (fallback browser)
|
|
- User asks about page speed, web performance regression → invoke `/benchmark`; model or skill benchmarks → invoke `/benchmark-models`
|
|
- User asks to plan, preregister, price or pilot a paid eval → invoke `/eval-plan`
|
|
- User asks to run a suite, build or eval on Ubicloud → invoke `/ubicloud`
|
|
- User asks to find, stop or rotate runaway agent threads, or for a token sweep → invoke `/runaway-stopper`
|
|
- User asks what gstack has learned, "show learnings" → invoke `/learn`
|
|
- User asks to tune question sensitivity, "stop asking me that" → invoke `/plan-tune`
|
|
- User asks for code quality dashboard, "health check" → invoke `/health`{{VOICE_TRIGGER_ROUTING}}
|
|
|
|
**Failures: check the cause, then fix it test-first.** A failing test, error or stack trace shows where a failure surfaces, not its root cause.
|
|
|
|
- **Cause supplied** (the user names a specific cause and a narrow fix): make one read-only check of the evidence it rests on, such as the named file, test or log. If that confirms the cause, make the fix and run the focused test that covers it. If it does not, leave the suggested fix alone: reproduce the failure with a focused failing test, trace it to the root cause, fix that and rerun the test.
|
|
- **Cause unknown:** make one read-only triage pass over the supplied evidence and the directly implicated test and code. Do not reproduce, test hypotheses or search wider. If that pass establishes the root cause and a narrow fix, make the fix and run the focused test that covers it. If the cause or scope is still unclear, write or run a focused test that fails on the bug before any edit, trace the failure to its root cause, fix that and rerun the test. If the intended behavior is unclear, ask the user.
|
|
|
|
**Route only to skills in your available-skills list.** A rule above whose skill is
|
|
not listed there is turned off on this install; skip it, never try to invoke it.
|
|
|
|
**When to invoke, and when not to.** Invoke when the request matches a skill's purpose:
|
|
the skill's workflow, checklists and gates beat an ad-hoc answer. Answer directly when
|
|
no skill matches, for a quick factual question or a small edit the user scoped
|
|
themselves, and when the user asks for a direct answer instead of a workflow.
|
|
|
|
If the user opts out of suggestions, run `gstack-config set proactive off`. If they want
|
|
every skill suggested, run `gstack-config set proactive all`. `gstack-config set proactive
|
|
core` restores the default (the four core skills only).
|