Skip to main content

benchmark

Detects performance regressions and establishes baselines for web metrics, enhancing page load times and user experience.

Install this skill

or
0/100

Security score

The benchmark skill was audited on May 10, 2026 and we found 100 security issues across 4 threat categories, including 1 high-severity. Review the findings below before installing.

Categories Tested

Security Issues

low line 29

Command substitution pattern

SourceSKILL.md
27
28```bash
29_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
30[ -n "$_UPD" ] && echo "$_UPD" || true
31mkdir -p ~/.gstack/sessions
low line 33

Command substitution pattern

SourceSKILL.md
31mkdir -p ~/.gstack/sessions
32touch ~/.gstack/sessions/"$PPID"
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
low line 35

Command substitution pattern

SourceSKILL.md
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
low line 36

Command substitution pattern

SourceSKILL.md
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
38echo "BRANCH: $_BRANCH"
low line 37

Command substitution pattern

SourceSKILL.md
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
38echo "BRANCH: $_BRANCH"
39_SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/dev/null || echo "false")
low line 39

Command substitution pattern

SourceSKILL.md
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
38echo "BRANCH: $_BRANCH"
39_SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/dev/null || echo "false")
40echo "PROACTIVE: $_PROACTIVE"
41echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED"
low line 46

Command substitution pattern

SourceSKILL.md
44REPO_MODE=${REPO_MODE:-unknown}
45echo "REPO_MODE: $REPO_MODE"
46_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
low line 48

Command substitution pattern

SourceSKILL.md
46_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
49_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
50_TEL_START=$(date +%s)
low line 49

Command substitution pattern

SourceSKILL.md
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
49_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
50_TEL_START=$(date +%s)
51_SESSION_ID="$$-$(date +%s)"
low line 54

Command substitution pattern

SourceSKILL.md
52echo "TELEMETRY: ${_TEL:-off}"
53echo "TEL_PROMPTED: $_TEL_PROMPTED"
54_EXPLAIN_LEVEL=$(~/.claude/skills/gstack/bin/gstack-config get explain_level 2>/dev/null || echo "default")
55if [ "$_EXPLAIN_LEVEL" != "default" ] && [ "$_EXPLAIN_LEVEL" != "terse" ]; then _EXPLAIN_LEVEL="default"; fi
56echo "EXPLAIN_LEVEL: $_EXPLAIN_LEVEL"
low line 57

Command substitution pattern

SourceSKILL.md
55if [ "$_EXPLAIN_LEVEL" != "default" ] && [ "$_EXPLAIN_LEVEL" != "terse" ]; then _EXPLAIN_LEVEL="default"; fi
56echo "EXPLAIN_LEVEL: $_EXPLAIN_LEVEL"
57_QUESTION_TUNING=$(~/.claude/skills/gstack/bin/gstack-config get question_tuning 2>/dev/null || echo "false")
58echo "QUESTION_TUNING: $_QUESTION_TUNING"
59mkdir -p ~/.gstack/analytics
low line 61

Command substitution pattern

SourceSKILL.md
59mkdir -p ~/.gstack/analytics
60if [ "$_TEL" != "off" ]; then
61echo '{"skill":"benchmark","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
62fi
63for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
low line 63

Command substitution pattern

SourceSKILL.md
61echo '{"skill":"benchmark","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
62fi
63for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
64 if [ -f "$_PF" ]; then
65 if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; then
low line 72

Command substitution pattern

SourceSKILL.md
70 break
71done
72eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
73_LEARN_FILE="${GSTACK_HOME:-$HOME/.gstack}/projects/${SLUG:-unknown}/learnings.jsonl"
74if [ -f "$_LEARN_FILE" ]; then
low line 75

Command substitution pattern

SourceSKILL.md
73_LEARN_FILE="${GSTACK_HOME:-$HOME/.gstack}/projects/${SLUG:-unknown}/learnings.jsonl"
74if [ -f "$_LEARN_FILE" ]; then
75 _LEARN_COUNT=$(wc -l < "$_LEARN_FILE" 2>/dev/null | tr -d ' ')
76 echo "LEARNINGS: $_LEARN_COUNT entries loaded"
77 if [ "$_LEARN_COUNT" -gt 5 ] 2>/dev/null; then
low line 88

Command substitution pattern

SourceSKILL.md
86 _HAS_ROUTING="yes"
87fi
88_ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false")
89echo "HAS_ROUTING: $_HAS_ROUTING"
90echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
low line 99

Command substitution pattern

SourceSKILL.md
97echo "VENDORED_GSTACK: $_VENDORED"
98echo "MODEL_OVERLAY: claude"
99_CHECKPOINT_MODE=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_mode 2>/dev/null || echo "explicit")
100_CHECKPOINT_PUSH=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_push 2>/dev/null || echo "false")
101echo "CHECKPOINT_MODE: $_CHECKPOINT_MODE"
low line 100

Command substitution pattern

SourceSKILL.md
98echo "MODEL_OVERLAY: claude"
99_CHECKPOINT_MODE=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_mode 2>/dev/null || echo "explicit")
100_CHECKPOINT_PUSH=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_push 2>/dev/null || echo "false")
101echo "CHECKPOINT_MODE: $_CHECKPOINT_MODE"
102echo "CHECKPOINT_PUSH: $_CHECKPOINT_PUSH"
low line 262

Command substitution pattern

SourceSKILL.md
260Always run (regardless of choice):
261```bash
262eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
263touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
264```
low line 297

Command substitution pattern

SourceSKILL.md
295_GBRAIN_CONFIG="$HOME/.gbrain/config.json"
296if [ -f "$_GBRAIN_CONFIG" ] && command -v gbrain >/dev/null 2>&1; then
297 _GBRAIN_VERSION_OK=$(gbrain --version 2>/dev/null | grep -c '^gbrain ' || echo 0)
298 if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
299 _GBRAIN_PIN_PATH=""
low line 300

Command substitution pattern

SourceSKILL.md
298 if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
299 _GBRAIN_PIN_PATH=""
300 _REPO_TOP=$(git rev-parse --show-toplevel 2>/dev/null || echo "")
301 if [ -n "$_REPO_TOP" ] && [ -f "$_REPO_TOP/.gbrain-source" ]; then
302 _GBRAIN_PIN_PATH="$_REPO_TOP/.gbrain-source"
low line 317

Command substitution pattern

SourceSKILL.md
315fi
316
317_BRAIN_SYNC_MODE=$("$_BRAIN_CONFIG_BIN" get artifacts_sync_mode 2>/dev/null || echo off)
318
319# Detect remote-MCP mode (Path 4 of /setup-gbrain). Local artifacts sync is
low line 325

Command substitution pattern

SourceSKILL.md
323_GBRAIN_MCP_MODE="none"
324if command -v jq >/dev/null 2>&1 && [ -f "$HOME/.claude.json" ]; then
325 _GBRAIN_MCP_TYPE=$(jq -r '.mcpServers.gbrain.type // .mcpServers.gbrain.transport // empty' "$HOME/.claude.json" 2>/dev/null)
326 case "$_GBRAIN_MCP_TYPE" in
327 url|http|sse) _GBRAIN_MCP_MODE="remote-http" ;;
low line 333

Command substitution pattern

SourceSKILL.md
331
332if [ -f "$_BRAIN_REMOTE_FILE" ] && [ ! -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" = "off" ]; then
333 _BRAIN_NEW_URL=$(head -1 "$_BRAIN_REMOTE_FILE" 2>/dev/null | tr -d '[:space:]')
334 if [ -n "$_BRAIN_NEW_URL" ]; then
335 echo "ARTIFACTS_SYNC: artifacts repo detected: $_BRAIN_NEW_URL"
low line 345

Command substitution pattern

SourceSKILL.md
343 _BRAIN_DO_PULL=1
344 if [ -f "$_BRAIN_LAST_PULL_FILE" ]; then
345 _BRAIN_LAST=$(cat "$_BRAIN_LAST_PULL_FILE" 2>/dev/null || echo 0)
346 _BRAIN_AGE=$(( _BRAIN_NOW - _BRAIN_LAST ))
347 [ "$_BRAIN_AGE" -lt 86400 ] && _BRAIN_DO_PULL=0
low line 346

Command substitution pattern

SourceSKILL.md
344 if [ -f "$_BRAIN_LAST_PULL_FILE" ]; then
345 _BRAIN_LAST=$(cat "$_BRAIN_LAST_PULL_FILE" 2>/dev/null || echo 0)
346 _BRAIN_AGE=$(( _BRAIN_NOW - _BRAIN_LAST ))
347 [ "$_BRAIN_AGE" -lt 86400 ] && _BRAIN_DO_PULL=0
348 fi
low line 350

Command substitution pattern

SourceSKILL.md
348 fi
349 if [ "$_BRAIN_DO_PULL" = "1" ]; then
350 ( cd "$_GSTACK_HOME" && git fetch origin >/dev/null 2>&1 && git merge --ff-only "origin/$(git rev-parse --abbrev-ref HEAD)" >/dev/null 2>&1 ) || true
351 echo "$_BRAIN_NOW" > "$_BRAIN_LAST_PULL_FILE"
352 fi
low line 359

Command substitution pattern

SourceSKILL.md
357 # Remote-MCP mode: local artifacts sync is a no-op (brain admin's server
358 # pulls from GitHub/GitLab). Show the user this is by design, not broken.
359 _GBRAIN_HOST=$(jq -r '.mcpServers.gbrain.url // empty' "$HOME/.claude.json" 2>/dev/null | sed -E 's|^https?://([^/:]+).*|\1|')
360 echo "ARTIFACTS_SYNC: remote-mode (managed by brain server ${_GBRAIN_HOST:-remote})"
361elif [ -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" != "off" ]; then
low line 363

Command substitution pattern

SourceSKILL.md
361elif [ -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" != "off" ]; then
362 _BRAIN_QUEUE_DEPTH=0
363 [ -f "$_GSTACK_HOME/.brain-queue.jsonl" ] && _BRAIN_QUEUE_DEPTH=$(wc -l < "$_GSTACK_HOME/.brain-queue.jsonl" | tr -d ' ')
364 _BRAIN_LAST_PUSH="never"
365 [ -f "$_GSTACK_HOME/.brain-last-push" ] && _BRAIN_LAST_PUSH=$(cat "$_GSTACK_HOME/.brain-last-push" 2>/dev/null || echo never)
low line 365

Command substitution pattern

SourceSKILL.md
363 [ -f "$_GSTACK_HOME/.brain-queue.jsonl" ] && _BRAIN_QUEUE_DEPTH=$(wc -l < "$_GSTACK_HOME/.brain-queue.jsonl" | tr -d ' ')
364 _BRAIN_LAST_PUSH="never"
365 [ -f "$_GSTACK_HOME/.brain-last-push" ] && _BRAIN_LAST_PUSH=$(cat "$_GSTACK_HOME/.brain-last-push" 2>/dev/null || echo never)
366 echo "ARTIFACTS_SYNC: mode=$_BRAIN_SYNC_MODE | last_push=$_BRAIN_LAST_PUSH | queue=$_BRAIN_QUEUE_DEPTH"
367else
low line 458

Command substitution pattern

SourceSKILL.md
456```bash
457_TEL_END=$(date +%s)
458_TEL_DUR=$(( _TEL_END - _TEL_START ))
459rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
460# Session timeline: record skill completion (local-only, never sent anywhere)
low line 461

Command substitution pattern

SourceSKILL.md
459rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
460# Session timeline: record skill completion (local-only, never sent anywhere)
461~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"SKILL_NAME","event":"completed","branch":"'$(git branch --show-current 2>/dev/null || echo unknown)'","outcome":"OUTCOME","duration_s":"'"$_TEL_DUR"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null || true
462# Local analytics (gated on telemetry setting)
463if [ "$_TEL" != "off" ]; then
low line 464

Command substitution pattern

SourceSKILL.md
462# Local analytics (gated on telemetry setting)
463if [ "$_TEL" != "off" ]; then
464echo '{"skill":"SKILL_NAME","duration_s":"'"$_TEL_DUR"'","outcome":"OUTCOME","browse":"USED_BROWSE","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
465fi
466# Remote telemetry (opt-in, requires binary)
low line 485

Command substitution pattern

SourceSKILL.md
483
484```bash
485_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
486B=""
487[ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse"
low line 506

Command substitution pattern

SourceSKILL.md
504 tmpfile=$(mktemp)
505 curl -fsSL "https://bun.sh/install" -o "$tmpfile"
506 actual_sha=$(shasum -a 256 "$tmpfile" | awk '{print $1}')
507 if [ "$actual_sha" != "$BUN_INSTALL_SHA" ]; then
508 echo "ERROR: bun install script checksum mismatch" >&2
low line 540

Command substitution pattern

SourceSKILL.md
538
539```bash
540eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null || echo "SLUG=unknown")"
541mkdir -p .gstack/benchmark-reports
542mkdir -p .gstack/benchmark-reports/baselines
low line 551

Command substitution pattern

SourceSKILL.md
549If `--diff` mode:
550```bash
551git diff $(gh pr view --json baseRefName -q .baseRefName 2>/dev/null || gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null || echo main)...HEAD --name-only
552```
553
medium line 505

Curl to non-GitHub URL

SourceSKILL.md
503 BUN_INSTALL_SHA="bab8acfb046aac8c72407bdcce903957665d655d7acaa3e11c7c4616beae68dd"
504 tmpfile=$(mktemp)
505 curl -fsSL "https://bun.sh/install" -o "$tmpfile"
506 actual_sha=$(shasum -a 256 "$tmpfile" | awk '{print $1}')
507 if [ "$actual_sha" != "$BUN_INSTALL_SHA" ]; then
low line 29

Access to home directory dotfiles

SourceSKILL.md
27
28```bash
29_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
30[ -n "$_UPD" ] && echo "$_UPD" || true
31mkdir -p ~/.gstack/sessions
low line 31

Access to home directory dotfiles

SourceSKILL.md
29_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
30[ -n "$_UPD" ] && echo "$_UPD" || true
31mkdir -p ~/.gstack/sessions
32touch ~/.gstack/sessions/"$PPID"
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
low line 32

Access to home directory dotfiles

SourceSKILL.md
30[ -n "$_UPD" ] && echo "$_UPD" || true
31mkdir -p ~/.gstack/sessions
32touch ~/.gstack/sessions/"$PPID"
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
low line 33

Access to home directory dotfiles

SourceSKILL.md
31mkdir -p ~/.gstack/sessions
32touch ~/.gstack/sessions/"$PPID"
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
low line 34

Access to home directory dotfiles

SourceSKILL.md
32touch ~/.gstack/sessions/"$PPID"
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
low line 35

Access to home directory dotfiles

SourceSKILL.md
33_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
low line 36

Access to home directory dotfiles

SourceSKILL.md
34find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
35_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
36_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
38echo "BRANCH: $_BRANCH"
low line 39

Access to home directory dotfiles

SourceSKILL.md
37_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
38echo "BRANCH: $_BRANCH"
39_SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/dev/null || echo "false")
40echo "PROACTIVE: $_PROACTIVE"
41echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED"
low line 43

Access to home directory dotfiles

SourceSKILL.md
41echo "PROACTIVE_PROMPTED: $_PROACTIVE_PROMPTED"
42echo "SKILL_PREFIX: $_SKILL_PREFIX"
43source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true
44REPO_MODE=${REPO_MODE:-unknown}
45echo "REPO_MODE: $REPO_MODE"
low line 46

Access to home directory dotfiles

SourceSKILL.md
44REPO_MODE=${REPO_MODE:-unknown}
45echo "REPO_MODE: $REPO_MODE"
46_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
low line 48

Access to home directory dotfiles

SourceSKILL.md
46_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
49_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
50_TEL_START=$(date +%s)
low line 49

Access to home directory dotfiles

SourceSKILL.md
47echo "LAKE_INTRO: $_LAKE_SEEN"
48_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
49_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
50_TEL_START=$(date +%s)
51_SESSION_ID="$$-$(date +%s)"
low line 54

Access to home directory dotfiles

SourceSKILL.md
52echo "TELEMETRY: ${_TEL:-off}"
53echo "TEL_PROMPTED: $_TEL_PROMPTED"
54_EXPLAIN_LEVEL=$(~/.claude/skills/gstack/bin/gstack-config get explain_level 2>/dev/null || echo "default")
55if [ "$_EXPLAIN_LEVEL" != "default" ] && [ "$_EXPLAIN_LEVEL" != "terse" ]; then _EXPLAIN_LEVEL="default"; fi
56echo "EXPLAIN_LEVEL: $_EXPLAIN_LEVEL"
low line 57

Access to home directory dotfiles

SourceSKILL.md
55if [ "$_EXPLAIN_LEVEL" != "default" ] && [ "$_EXPLAIN_LEVEL" != "terse" ]; then _EXPLAIN_LEVEL="default"; fi
56echo "EXPLAIN_LEVEL: $_EXPLAIN_LEVEL"
57_QUESTION_TUNING=$(~/.claude/skills/gstack/bin/gstack-config get question_tuning 2>/dev/null || echo "false")
58echo "QUESTION_TUNING: $_QUESTION_TUNING"
59mkdir -p ~/.gstack/analytics
low line 59

Access to home directory dotfiles

SourceSKILL.md
57_QUESTION_TUNING=$(~/.claude/skills/gstack/bin/gstack-config get question_tuning 2>/dev/null || echo "false")
58echo "QUESTION_TUNING: $_QUESTION_TUNING"
59mkdir -p ~/.gstack/analytics
60if [ "$_TEL" != "off" ]; then
61echo '{"skill":"benchmark","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
low line 61

Access to home directory dotfiles

SourceSKILL.md
59mkdir -p ~/.gstack/analytics
60if [ "$_TEL" != "off" ]; then
61echo '{"skill":"benchmark","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
62fi
63for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
low line 63

Access to home directory dotfiles

SourceSKILL.md
61echo '{"skill":"benchmark","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
62fi
63for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
64 if [ -f "$_PF" ]; then
65 if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; then
low line 65

Access to home directory dotfiles

SourceSKILL.md
63for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
64 if [ -f "$_PF" ]; then
65 if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; then
66 ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true
67 fi
low line 66

Access to home directory dotfiles

SourceSKILL.md
64 if [ -f "$_PF" ]; then
65 if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; then
66 ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true
67 fi
68 rm -f "$_PF" 2>/dev/null || true
low line 72

Access to home directory dotfiles

SourceSKILL.md
70 break
71done
72eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
73_LEARN_FILE="${GSTACK_HOME:-$HOME/.gstack}/projects/${SLUG:-unknown}/learnings.jsonl"
74if [ -f "$_LEARN_FILE" ]; then
low line 78

Access to home directory dotfiles

SourceSKILL.md
76 echo "LEARNINGS: $_LEARN_COUNT entries loaded"
77 if [ "$_LEARN_COUNT" -gt 5 ] 2>/dev/null; then
78 ~/.claude/skills/gstack/bin/gstack-learnings-search --limit 3 2>/dev/null || true
79 fi
80else
low line 83

Access to home directory dotfiles

SourceSKILL.md
81 echo "LEARNINGS: 0"
82fi
83~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"benchmark","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null &
84_HAS_ROUTING="no"
85if [ -f CLAUDE.md ] && grep -q "## Skill routing" CLAUDE.md 2>/dev/null; then
low line 88

Access to home directory dotfiles

SourceSKILL.md
86 _HAS_ROUTING="yes"
87fi
88_ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false")
89echo "HAS_ROUTING: $_HAS_ROUTING"
90echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
low line 99

Access to home directory dotfiles

SourceSKILL.md
97echo "VENDORED_GSTACK: $_VENDORED"
98echo "MODEL_OVERLAY: claude"
99_CHECKPOINT_MODE=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_mode 2>/dev/null || echo "explicit")
100_CHECKPOINT_PUSH=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_push 2>/dev/null || echo "false")
101echo "CHECKPOINT_MODE: $_CHECKPOINT_MODE"
low line 100

Access to home directory dotfiles

SourceSKILL.md
98echo "MODEL_OVERLAY: claude"
99_CHECKPOINT_MODE=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_mode 2>/dev/null || echo "explicit")
100_CHECKPOINT_PUSH=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_push 2>/dev/null || echo "false")
101echo "CHECKPOINT_MODE: $_CHECKPOINT_MODE"
102echo "CHECKPOINT_PUSH: $_CHECKPOINT_PUSH"
medium line 108

Access to home directory dotfiles

SourceSKILL.md
106## Plan Mode Safe Operations
107
108In plan mode, allowed because they inform the plan: `$B`, `$D`, `codex exec`/`codex review`, writes to `~/.gstack/`, writes to the plan file, and `open` for generated artifacts.
109
110## Skill Invocation During Plan Mode
medium line 116

Access to home directory dotfiles

SourceSKILL.md
114If `PROACTIVE` is `"false"`, do not auto-invoke or proactively suggest skills. If a skill seems useful, ask: "I think /skillname might help here — want me to run it?"
115
116If `SKILL_PREFIX` is `"true"`, suggest/invoke `/gstack-*` names. Disk paths stay `~/.claude/skills/gstack/[skill-name]/SKILL.md`.
117
118If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined).
medium line 118

Access to home directory dotfiles

SourceSKILL.md
116If `SKILL_PREFIX` is `"true"`, suggest/invoke `/gstack-*` names. Disk paths stay `~/.claude/skills/gstack/[skill-name]/SKILL.md`.
117
118If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with 4 options, write snooze state if declined).
119
120If output shows `JUST_UPGRADED <from> <to>`: print "Running gstack v{to} (just updated!)". If `SPAWNED_SESSION` is true, skip feature discovery.
medium line 123

Access to home directory dotfiles

SourceSKILL.md
121
122Feature discovery, max one prompt per session:
123- Missing `~/.claude/skills/gstack/.feature-prompted-continuous-checkpoint`: AskUserQuestion for Continuous checkpoint auto-commits. If accepted, run `~/.claude/skills/gstack/bin/gstack-config set checkpoint_mode continuous`. Always touch marker.
124- Missing `~/.claude/skills/gstack/.feature-prompted-model-overlay`: inform "Model overlays are active. MODEL_OVERLAY shows the patch." Always touch marker.
125
medium line 124

Access to home directory dotfiles

SourceSKILL.md
122Feature discovery, max one prompt per session:
123- Missing `~/.claude/skills/gstack/.feature-prompted-continuous-checkpoint`: AskUserQuestion for Continuous checkpoint auto-commits. If accepted, run `~/.claude/skills/gstack/bin/gstack-config set checkpoint_mode continuous`. Always touch marker.
124- Missing `~/.claude/skills/gstack/.feature-prompted-model-overlay`: inform "Model overlays are active. MODEL_OVERLAY shows the patch." Always touch marker.
125
126After upgrade prompts, continue workflow.
medium line 137

Access to home directory dotfiles

SourceSKILL.md
135
136If A: leave `explain_level` unset (defaults to `default`).
137If B: run `~/.claude/skills/gstack/bin/gstack-config set explain_level terse`.
138
139Always run (regardless of choice):
low line 141

Access to home directory dotfiles

SourceSKILL.md
139Always run (regardless of choice):
140```bash
141rm -f ~/.gstack/.writing-style-prompt-pending
142touch ~/.gstack/.writing-style-prompted
143```
low line 142

Access to home directory dotfiles

SourceSKILL.md
140```bash
141rm -f ~/.gstack/.writing-style-prompt-pending
142touch ~/.gstack/.writing-style-prompted
143```
144
low line 151

Access to home directory dotfiles

SourceSKILL.md
149```bash
150open https://garryslist.org/posts/boil-the-ocean
151touch ~/.gstack/.completeness-intro-seen
152```
153
medium line 164

Access to home directory dotfiles

SourceSKILL.md
162- B) No thanks
163
164If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`
165
166If B: ask follow-up:
medium line 174

Access to home directory dotfiles

SourceSKILL.md
172- B) No thanks, fully off
173
174If B→A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous`
175If B→B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off`
176
medium line 175

Access to home directory dotfiles

SourceSKILL.md
173
174If B→A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous`
175If B→B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off`
176
177Always run:
low line 179

Access to home directory dotfiles

SourceSKILL.md
177Always run:
178```bash
179touch ~/.gstack/.telemetry-prompted
180```
181
medium line 192

Access to home directory dotfiles

SourceSKILL.md
190- B) Turn it off — I'll type /commands myself
191
192If A: run `~/.claude/skills/gstack/bin/gstack-config set proactive true`
193If B: run `~/.claude/skills/gstack/bin/gstack-config set proactive false`
194
medium line 193

Access to home directory dotfiles

SourceSKILL.md
191
192If A: run `~/.claude/skills/gstack/bin/gstack-config set proactive true`
193If B: run `~/.claude/skills/gstack/bin/gstack-config set proactive false`
194
195Always run:
low line 197

Access to home directory dotfiles

SourceSKILL.md
195Always run:
196```bash
197touch ~/.gstack/.proactive-prompted
198```
199
medium line 238

Access to home directory dotfiles

SourceSKILL.md
236Then commit the change: `git add CLAUDE.md && git commit -m "chore: add gstack skill routing rules to CLAUDE.md"`
237
238If B: run `~/.claude/skills/gstack/bin/gstack-config set routing_declined true` and say they can re-enable with `gstack-config set routing_declined false`.
239
240This only happens once per project. Skip if `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`.
medium line 242

Access to home directory dotfiles

SourceSKILL.md
240This only happens once per project. Skip if `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`.
241
242If `VENDORED_GSTACK` is `yes`, warn once via AskUserQuestion unless `~/.gstack/.vendoring-warned-$SLUG` exists:
243
244> This project has gstack vendored in `.claude/skills/gstack/`. Vendoring is deprecated.
medium line 254

Access to home directory dotfiles

SourceSKILL.md
2521. Run `git rm -r .claude/skills/gstack/`
2532. Run `echo '.claude/skills/gstack/' >> .gitignore`
2543. Run `~/.claude/skills/gstack/bin/gstack-team-init required` (or `optional`)
2554. Run `git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"`
2565. Tell the user: "Done. Each developer now runs: `cd ~/.claude/skills/gstack && ./setup --team`"
medium line 256

Access to home directory dotfiles

SourceSKILL.md
2543. Run `~/.claude/skills/gstack/bin/gstack-team-init required` (or `optional`)
2554. Run `git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"`
2565. Tell the user: "Done. Each developer now runs: `cd ~/.claude/skills/gstack && ./setup --team`"
257
258If B: say "OK, you're on your own to keep the vendored copy up to date."
low line 262

Access to home directory dotfiles

SourceSKILL.md
260Always run (regardless of choice):
261```bash
262eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
263touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
264```
low line 263

Access to home directory dotfiles

SourceSKILL.md
261```bash
262eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
263touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
264```
265
low line 286

Access to home directory dotfiles

SourceSKILL.md
284 _BRAIN_REMOTE_FILE="$HOME/.gstack-brain-remote.txt"
285fi
286_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
287_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
288
low line 287

Access to home directory dotfiles

SourceSKILL.md
285fi
286_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
287_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
288
289# /sync-gbrain context-load: teach the agent to use gbrain when it's available.
medium line 391

Access to home directory dotfiles

SourceSKILL.md
389```
390
391If A/B and `~/.gstack/.git` is missing, ask whether to run `gstack-artifacts-init`. Do not block the skill.
392
393At skill END before telemetry:
low line 396

Access to home directory dotfiles

SourceSKILL.md
394
395```bash
396"~/.claude/skills/gstack/bin/gstack-brain-sync" --discover-new 2>/dev/null || true
397"~/.claude/skills/gstack/bin/gstack-brain-sync" --once 2>/dev/null || true
398```
low line 397

Access to home directory dotfiles

SourceSKILL.md
395```bash
396"~/.claude/skills/gstack/bin/gstack-brain-sync" --discover-new 2>/dev/null || true
397"~/.claude/skills/gstack/bin/gstack-brain-sync" --once 2>/dev/null || true
398```
399
low line 442

Access to home directory dotfiles

SourceSKILL.md
440
441```bash
442~/.claude/skills/gstack/bin/gstack-learnings-log '{"skill":"SKILL_NAME","type":"operational","key":"SHORT_KEY","insight":"DESCRIPTION","confidence":N,"source":"observed"}'
443```
444
medium line 452

Access to home directory dotfiles

SourceSKILL.md
450
451**PLAN MODE EXCEPTION — ALWAYS RUN:** This command writes telemetry to
452`~/.gstack/analytics/`, matching preamble analytics writes.
453
454Run this bash:
low line 459

Access to home directory dotfiles

SourceSKILL.md
457_TEL_END=$(date +%s)
458_TEL_DUR=$(( _TEL_END - _TEL_START ))
459rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
460# Session timeline: record skill completion (local-only, never sent anywhere)
461~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"SKILL_NAME","event":"completed","branch":"'$(git branch --show-current 2>/dev/null || echo unknown)'","outcome":"OUTCOME","duration_s":"'"$_TEL_DUR"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null || true
low line 461

Access to home directory dotfiles

SourceSKILL.md
459rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
460# Session timeline: record skill completion (local-only, never sent anywhere)
461~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"SKILL_NAME","event":"completed","branch":"'$(git branch --show-current 2>/dev/null || echo unknown)'","outcome":"OUTCOME","duration_s":"'"$_TEL_DUR"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null || true
462# Local analytics (gated on telemetry setting)
463if [ "$_TEL" != "off" ]; then
low line 464

Access to home directory dotfiles

SourceSKILL.md
462# Local analytics (gated on telemetry setting)
463if [ "$_TEL" != "off" ]; then
464echo '{"skill":"SKILL_NAME","duration_s":"'"$_TEL_DUR"'","outcome":"OUTCOME","browse":"USED_BROWSE","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
465fi
466# Remote telemetry (opt-in, requires binary)
low line 467

Access to home directory dotfiles

SourceSKILL.md
465fi
466# Remote telemetry (opt-in, requires binary)
467if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
468 ~/.claude/skills/gstack/bin/gstack-telemetry-log \
469 --skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
low line 468

Access to home directory dotfiles

SourceSKILL.md
466# Remote telemetry (opt-in, requires binary)
467if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
468 ~/.claude/skills/gstack/bin/gstack-telemetry-log \
469 --skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
470 --used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
medium line 478

Access to home directory dotfiles

SourceSKILL.md
476## Plan Status Footer
477
478In plan mode before ExitPlanMode: if the plan file lacks `## GSTACK REVIEW REPORT`, run `~/.claude/skills/gstack/bin/gstack-review-read` and append the standard runs/status/findings table. With `NO_REVIEWS` or empty, append a 5-row placeholder with verdict "NO REVIEWS YET — run `/autoplan`". If a richer report exists, skip.
479
480PLAN MODE EXCEPTION — always allowed (it's the plan file).
low line 540

Access to home directory dotfiles

SourceSKILL.md
538
539```bash
540eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null || echo "SLUG=unknown")"
541mkdir -p .gstack/benchmark-reports
542mkdir -p .gstack/benchmark-reports/baselines
high line 112

Urgency-based manipulation

SourceSKILL.md
110## Skill Invocation During Plan Mode
111
112If the user invokes a skill in plan mode, the skill takes precedence over generic plan mode behavior. **Treat the skill file as executable instructions, not reference.** Follow it step by step starting from Step 0; the first AskUserQuestion is the workflow entering plan mode, not a violation of it. AskUserQuestion (any variant — `mcp__*__AskUserQuestion` or native; see "AskUserQuestion Format → Tool resolution") satisfies plan mode's end-of-turn requirement. If no variant is callable, the skill is BLOCKED — stop and report `BLOCKED — AskUserQuestion unavailable` per the AskUserQuestion Format rule. At a STOP point, stop immediately. Do not continue the workflow or call ExitPlanMode there. Commands marked "PLAN MODE EXCEPTION — ALWAYS RUN" execute. Call ExitPlanMode only after the skill workflow completes, or if the user tells you to cancel the skill or leave plan mode.
113
114If `PROACTIVE` is `"false"`, do not auto-invoke or proactively suggest skills. If a skill seems useful, ask: "I think /skillname might help here — want me to run it?"
Scanned on May 10, 2026
View Security Dashboard
Installation guide →
GitHub Stars 92.6K
Rate this skill
Categorydevelopment
UpdatedMay 13, 2026
garrytan/gstack