diff --git a/SKILL.md b/SKILL.md index aaa5612dd4..f9bd198f92 100644 --- a/SKILL.md +++ b/SKILL.md @@ -104,9 +104,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"gstack","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/autoplan/SKILL.md b/autoplan/SKILL.md index a8e4809144..27664f0057 100644 --- a/autoplan/SKILL.md +++ b/autoplan/SKILL.md @@ -114,9 +114,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"autoplan","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/benchmark-models/SKILL.md b/benchmark-models/SKILL.md index 6a9d62616d..016574d91a 100644 --- a/benchmark-models/SKILL.md +++ b/benchmark-models/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"benchmark-models","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/benchmark/SKILL.md b/benchmark/SKILL.md index 9451d2d4f9..a6dac4a036 100644 --- a/benchmark/SKILL.md +++ b/benchmark/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"benchmark","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/bin/gstack-team-init b/bin/gstack-team-init index 256735f8b4..f5f7d7f17d 100755 --- a/bin/gstack-team-init +++ b/bin/gstack-team-init @@ -58,19 +58,19 @@ This project uses [gstack](https://github.com/garrytan/gstack) for AI-assisted w Install it for the best experience: ```bash -git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack -cd ~/.claude/skills/gstack && ./setup --team +git clone --depth 1 https://github.com/garrytan/gstack.git ~/.gstack/repos/gstack +cd ~/.gstack/repos/gstack && ./setup --team ``` Skills like /qa, /ship, /review, /investigate, and /browse become available after install. -Use /browse for all web browsing. Use ~/.claude/skills/gstack/... for gstack file paths.' +Use /browse for all web browsing. Use $GSTACK_ROOT/... (default: ~/.gstack/repos/gstack) for gstack file paths.' else SNIPPET='## gstack (REQUIRED — global install) **Before doing ANY work, verify gstack is installed:** ```bash -test -d ~/.claude/skills/gstack/bin && echo "GSTACK_OK" || echo "GSTACK_MISSING" +[ -d "$HOME/.codex/skills/gstack/bin" ] || [ -d "$HOME/.gstack/repos/gstack/bin" ] && echo "GSTACK_OK" || echo "GSTACK_MISSING" ``` If GSTACK_MISSING: STOP. Do not proceed. Tell the user: @@ -78,8 +78,8 @@ If GSTACK_MISSING: STOP. Do not proceed. Tell the user: > gstack is required for all AI-assisted work in this repo. > Install it: > ```bash -> git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack -> cd ~/.claude/skills/gstack && ./setup --team +> git clone --depth 1 https://github.com/garrytan/gstack.git ~/.gstack/repos/gstack +> cd ~/.gstack/repos/gstack && ./setup --team > ``` > Then restart your AI coding tool. @@ -87,7 +87,7 @@ Do not skip skills, ignore gstack errors, or work around missing gstack. Using gstack skills: After install, skills like /qa, /ship, /review, /investigate, and /browse are available. Use /browse for all web browsing. -Use ~/.claude/skills/gstack/... for gstack file paths (the global path).' +Use $GSTACK_ROOT/... (default: ~/.gstack/repos/gstack) for gstack file paths.' fi # Check if CLAUDE.md already has a gstack section @@ -115,15 +115,22 @@ if [ "$MODE" = "required" ]; then #!/bin/bash # Block skill usage when gstack is not installed globally. -if [ ! -d "$HOME/.claude/skills/gstack/bin" ]; then +# Resolve GSTACK_ROOT the same way gstack skill preambles do: the env var +# first, then the setup --host codex location, then the canonical global +# repo, then the legacy Claude Code convention. Block only if none exist. +GSTACK_ROOT="${GSTACK_ROOT:-$HOME/.codex/skills/gstack}" +[ -d "$GSTACK_ROOT/bin" ] || GSTACK_ROOT="$HOME/.gstack/repos/gstack" +[ -d "$GSTACK_ROOT/bin" ] || GSTACK_ROOT="$HOME/.claude/skills/gstack" + +if [ ! -d "$GSTACK_ROOT/bin" ]; then cat >&2 <<'MSG' BLOCKED: gstack is not installed globally. gstack is required for AI-assisted work in this repo. Install it: - git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack - cd ~/.claude/skills/gstack && ./setup --team + git clone --depth 1 https://github.com/garrytan/gstack.git ~/.gstack/repos/gstack + cd ~/.gstack/repos/gstack && ./setup --team Then restart your AI coding tool. MSG @@ -188,5 +195,5 @@ if [ ${#GENERATED[@]} -gt 0 ]; then fi echo "" echo "Each developer then runs:" -echo " git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack" -echo " cd ~/.claude/skills/gstack && ./setup --team" +echo " git clone --depth 1 https://github.com/garrytan/gstack.git ~/.gstack/repos/gstack" +echo " cd ~/.gstack/repos/gstack && ./setup --team" diff --git a/browse/SKILL.md b/browse/SKILL.md index a8138dbbc3..cf8b751331 100644 --- a/browse/SKILL.md +++ b/browse/SKILL.md @@ -106,9 +106,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"browse","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/canary/SKILL.md b/canary/SKILL.md index a7eded4fed..ace78e607f 100644 --- a/canary/SKILL.md +++ b/canary/SKILL.md @@ -106,9 +106,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"canary","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/codex/SKILL.md b/codex/SKILL.md index af7fa4de91..61ae1e9e6b 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -109,9 +109,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"codex","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/context-restore/SKILL.md b/context-restore/SKILL.md index 5007319365..232fbcfe31 100644 --- a/context-restore/SKILL.md +++ b/context-restore/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"context-restore","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/context-save/SKILL.md b/context-save/SKILL.md index b347b1b7d7..69a0bae14b 100644 --- a/context-save/SKILL.md +++ b/context-save/SKILL.md @@ -109,9 +109,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"context-save","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/cso/SKILL.md b/cso/SKILL.md index cd1e346fc3..32ebfded67 100644 --- a/cso/SKILL.md +++ b/cso/SKILL.md @@ -112,9 +112,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"cso","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index 9b52914eaa..84dcd2b2a2 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -132,9 +132,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"design-consultation","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/design-html/SKILL.md b/design-html/SKILL.md index 8222a3f6c2..48ecf8d5c9 100644 --- a/design-html/SKILL.md +++ b/design-html/SKILL.md @@ -113,9 +113,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"design-html","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/design-review/SKILL.md b/design-review/SKILL.md index 56bd0ff412..9c854b1441 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"design-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/design-shotgun/SKILL.md b/design-shotgun/SKILL.md index d18254b8be..23ba650923 100644 --- a/design-shotgun/SKILL.md +++ b/design-shotgun/SKILL.md @@ -127,9 +127,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"design-shotgun","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/devex-review/SKILL.md b/devex-review/SKILL.md index 4903ac4f0d..d306243578 100644 --- a/devex-review/SKILL.md +++ b/devex-review/SKILL.md @@ -112,9 +112,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"devex-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/diagram/SKILL.md b/diagram/SKILL.md index 215f90efd1..b59b45ad10 100644 --- a/diagram/SKILL.md +++ b/diagram/SKILL.md @@ -107,9 +107,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"diagram","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/document-generate/SKILL.md b/document-generate/SKILL.md index f681a612e7..943a87ed68 100644 --- a/document-generate/SKILL.md +++ b/document-generate/SKILL.md @@ -112,9 +112,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"document-generate","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/document-release/SKILL.md b/document-release/SKILL.md index b7fe35f0e0..bcfffe4c25 100644 --- a/document-release/SKILL.md +++ b/document-release/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"document-release","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/health/SKILL.md b/health/SKILL.md index 659ba78d2b..7053219fd9 100644 --- a/health/SKILL.md +++ b/health/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"health","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/investigate/SKILL.md b/investigate/SKILL.md index e7d81a45be..511bab7abd 100644 --- a/investigate/SKILL.md +++ b/investigate/SKILL.md @@ -147,9 +147,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"investigate","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ios-clean/SKILL.md b/ios-clean/SKILL.md index a1280e3955..e2e287d431 100644 --- a/ios-clean/SKILL.md +++ b/ios-clean/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-clean","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ios-design-review/SKILL.md b/ios-design-review/SKILL.md index 633dd1820d..c17621b144 100644 --- a/ios-design-review/SKILL.md +++ b/ios-design-review/SKILL.md @@ -112,9 +112,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-design-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ios-fix/SKILL.md b/ios-fix/SKILL.md index 81176c9eae..4c460e4aea 100644 --- a/ios-fix/SKILL.md +++ b/ios-fix/SKILL.md @@ -113,9 +113,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-fix","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ios-qa/SKILL.md b/ios-qa/SKILL.md index 4151d269bc..6eba20070a 100644 --- a/ios-qa/SKILL.md +++ b/ios-qa/SKILL.md @@ -116,9 +116,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-qa","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ios-sync/SKILL.md b/ios-sync/SKILL.md index ceef05de64..e0c12fd792 100644 --- a/ios-sync/SKILL.md +++ b/ios-sync/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ios-sync","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/land-and-deploy/SKILL.md b/land-and-deploy/SKILL.md index 0df40c3126..f73556a41a 100644 --- a/land-and-deploy/SKILL.md +++ b/land-and-deploy/SKILL.md @@ -105,9 +105,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"land-and-deploy","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/landing-report/SKILL.md b/landing-report/SKILL.md index 927244c58c..f7a0827349 100644 --- a/landing-report/SKILL.md +++ b/landing-report/SKILL.md @@ -106,9 +106,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"landing-report","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/learn/SKILL.md b/learn/SKILL.md index cf08d6b80d..554c34a8c2 100644 --- a/learn/SKILL.md +++ b/learn/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"learn","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/make-pdf/SKILL.md b/make-pdf/SKILL.md index 600eb47ca4..2f9e230477 100644 --- a/make-pdf/SKILL.md +++ b/make-pdf/SKILL.md @@ -107,9 +107,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"make-pdf","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index b304a23b45..cda32b5c7a 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -143,9 +143,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"office-hours","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/open-gstack-browser/SKILL.md b/open-gstack-browser/SKILL.md index 507ecceb29..59915922ee 100644 --- a/open-gstack-browser/SKILL.md +++ b/open-gstack-browser/SKILL.md @@ -105,9 +105,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"open-gstack-browser","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/pair-agent/SKILL.md b/pair-agent/SKILL.md index 367f56d2a3..81cf23a179 100644 --- a/pair-agent/SKILL.md +++ b/pair-agent/SKILL.md @@ -107,9 +107,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"pair-agent","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index 4ad55529ad..b3b48f2282 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -137,9 +137,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"plan-ceo-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index dfd4f4253e..2a2422a4c5 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -109,9 +109,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"plan-design-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/plan-devex-review/SKILL.md b/plan-devex-review/SKILL.md index 698900edb8..7fe514b063 100644 --- a/plan-devex-review/SKILL.md +++ b/plan-devex-review/SKILL.md @@ -115,9 +115,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"plan-devex-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index 448c36e247..9d57849f73 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -113,9 +113,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"plan-eng-review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/plan-tune/SKILL.md b/plan-tune/SKILL.md index cbb6bb6188..9089f240d9 100644 --- a/plan-tune/SKILL.md +++ b/plan-tune/SKILL.md @@ -118,9 +118,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"plan-tune","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/qa-only/SKILL.md b/qa-only/SKILL.md index 9953eb228f..568e883db4 100644 --- a/qa-only/SKILL.md +++ b/qa-only/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"qa-only","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/qa/SKILL.md b/qa/SKILL.md index 38b1131cdf..e99258b150 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -114,9 +114,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"qa","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/retro/SKILL.md b/retro/SKILL.md index 3016295a63..adf4c9eeab 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -125,9 +125,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"retro","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/review/SKILL.md b/review/SKILL.md index dbc28f7047..1a57bfa0e0 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"review","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/scrape/SKILL.md b/scrape/SKILL.md index 86ae0fc7b7..9b7e3be92c 100644 --- a/scrape/SKILL.md +++ b/scrape/SKILL.md @@ -106,9 +106,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"scrape","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/scripts/resolvers/preamble/generate-preamble-bash.ts b/scripts/resolvers/preamble/generate-preamble-bash.ts index f0bc57b4bb..cb2c6ef013 100644 --- a/scripts/resolvers/preamble/generate-preamble-bash.ts +++ b/scripts/resolvers/preamble/generate-preamble-bash.ts @@ -93,9 +93,11 @@ else fi ${ctx.paths.binDir}/gstack-timeline-log '{"skill":"${ctx.skillName}","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(${ctx.paths.binDir}/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/setup-browser-cookies/SKILL.md b/setup-browser-cookies/SKILL.md index 77df27da2c..e226e6dbbc 100644 --- a/setup-browser-cookies/SKILL.md +++ b/setup-browser-cookies/SKILL.md @@ -102,9 +102,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"setup-browser-cookies","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/setup-deploy/SKILL.md b/setup-deploy/SKILL.md index eba0e3bf87..5f82eff245 100644 --- a/setup-deploy/SKILL.md +++ b/setup-deploy/SKILL.md @@ -109,9 +109,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"setup-deploy","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/setup-gbrain/SKILL.md b/setup-gbrain/SKILL.md index ad1382c014..9473827cd6 100644 --- a/setup-gbrain/SKILL.md +++ b/setup-gbrain/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"setup-gbrain","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/ship/SKILL.md b/ship/SKILL.md index 3062cda609..cd770ff434 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -110,9 +110,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"ship","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/skillify/SKILL.md b/skillify/SKILL.md index af2f7ec38d..536f066923 100644 --- a/skillify/SKILL.md +++ b/skillify/SKILL.md @@ -106,9 +106,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"skillify","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/spec/SKILL.md b/spec/SKILL.md index 4301ec3e7e..dcb8c9bdca 100644 --- a/spec/SKILL.md +++ b/spec/SKILL.md @@ -107,9 +107,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"spec","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" @@ -1177,9 +1179,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"spec","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/sync-gbrain/SKILL.md b/sync-gbrain/SKILL.md index eac766352c..6eade40213 100644 --- a/sync-gbrain/SKILL.md +++ b/sync-gbrain/SKILL.md @@ -108,9 +108,11 @@ else fi ~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"sync-gbrain","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null & _HAS_ROUTING="no" -if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then - _HAS_ROUTING="yes" -fi +for _RF in CLAUDE.md AGENTS.md; do + if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + _HAS_ROUTING="yes" + fi +done _ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false") echo "HAS_ROUTING: $_HAS_ROUTING" echo "ROUTING_DECLINED: $_ROUTING_DECLINED" diff --git a/test/routing-probe.test.ts b/test/routing-probe.test.ts new file mode 100644 index 0000000000..0e0a86c46d --- /dev/null +++ b/test/routing-probe.test.ts @@ -0,0 +1,79 @@ +/** + * Regression test for the preamble's HAS_ROUTING probe. + * + * Every gstack skill's preamble contains a bash block that detects whether the + * project routes skills via CLAUDE.md / AGENTS.md: + * + * _HAS_ROUTING="no" + * for _RF in CLAUDE.md AGENTS.md; do + * if [ -f "$_RF" ] && grep -q "## Skill routing" "$_RF" 2>/dev/null; then + * _HAS_ROUTING="yes" + * fi + * done + * + * The block is generated by scripts/resolvers/preamble/generate-preamble-bash.ts + * into every skill's SKILL.md. This test extracts the LIVE block from a + * generated skill and executes it against the three routing scenarios, so a + * future edit that breaks AGENTS.md support — or any of the three outcomes — + * fails here even if it regenerates cleanly. + */ + +import { describe, test, expect } from 'bun:test'; +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { execFileSync } from 'child_process'; + +const SKILL_DOC = path.join(import.meta.dir, '..', 'review', 'SKILL.md'); + +/** Extract the `_HAS_ROUTING` block (init line through its closing `done`). */ +function extractProbe(skillDoc: string): string { + const src = fs.readFileSync(skillDoc, 'utf8'); + const start = src.indexOf('_HAS_ROUTING="no"'); + expect(start, 'generated skill must contain the routing probe').toBeGreaterThan(-1); + const tail = src.slice(start); + const end = tail.indexOf('\ndone'); + expect(end, 'probe must be a for/done loop').toBeGreaterThan(-1); + return tail.slice(0, end + '\ndone'.length); +} + +/** Run the probe in a fresh temp dir containing the given files; return HAS_ROUTING. */ +function runProbe(probe: string, files: Record): string { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'trprobe-')); + try { + for (const [name, body] of Object.entries(files)) { + fs.mkdirSync(path.dirname(path.join(dir, name)), { recursive: true }); + fs.writeFileSync(path.join(dir, name), body); + } + const script = `#!/bin/bash\nset -e\ncd "$1"\n${probe}\necho "HAS_ROUTING: $_HAS_ROUTING"\n`; + const out = execFileSync('bash', ['-c', script, 'bash', dir], { encoding: 'utf8' }); + const m = out.match(/HAS_ROUTING: (yes|no)/); + expect(m, 'probe must print HAS_ROUTING').toBeTruthy(); + return m![1]; + } finally { + fs.rmSync(dir, { recursive: true, force: true }); + } +} + +const ROUTED = '## Skill routing\n\n- code review → /review\n'; +const PLAIN = '# repo\n'; + +describe('preamble HAS_ROUTING probe', () => { + const probe = extractProbe(SKILL_DOC); + + test('probe is generated with AGENTS.md support (guards a revert to CLAUDE.md-only)', () => { + expect(probe).toContain('AGENTS.md'); + }); + + test('both CLAUDE.md and AGENTS.md routed → yes', () => { + expect(runProbe(probe, { 'CLAUDE.md': ROUTED, 'AGENTS.md': ROUTED })).toBe('yes'); + }); + + test('AGENTS.md-only routing → yes (non-Claude hosts)', () => { + expect(runProbe(probe, { 'AGENTS.md': ROUTED })).toBe('yes'); + }); + + test('neither file routed → no', () => { + expect(runProbe(probe, { 'README.md': PLAIN })).toBe('no'); + }); +});