From a961a8a39484483a8513e5ab86cdbc9457e11f24 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Thu, 19 Mar 2026 22:54:41 -0700 Subject: [PATCH] feat: 3-option telemetry prompt + community upgrade + regenerate SKILLs Telemetry prompt now offers Community (backup/benchmarks/email), Anonymous, or Off. Community tier triggers gstack-auth OTP flow. Adds one-time upgrade prompt for existing anonymous users. Preamble emits EMAIL, COMM_PROMPTED, AUTH status vars. All 33 SKILL.md files regenerated for Claude Code + Codex/agents. Co-Authored-By: Claude Opus 4.6 (1M context) --- .agents/skills/gstack-browse/SKILL.md | 58 ++++++++++++++++-- .../gstack-design-consultation/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-design-review/SKILL.md | 58 ++++++++++++++++-- .../skills/gstack-document-release/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-investigate/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-office-hours/SKILL.md | 58 ++++++++++++++++-- .../skills/gstack-plan-ceo-review/SKILL.md | 58 ++++++++++++++++-- .../skills/gstack-plan-design-review/SKILL.md | 58 ++++++++++++++++-- .../skills/gstack-plan-eng-review/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-qa-only/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-qa/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-retro/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-review/SKILL.md | 58 ++++++++++++++++-- .../gstack-setup-browser-cookies/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack-ship/SKILL.md | 58 ++++++++++++++++-- .agents/skills/gstack/SKILL.md | 58 ++++++++++++++++-- SKILL.md | 58 ++++++++++++++++-- browse/SKILL.md | 58 ++++++++++++++++-- codex/SKILL.md | 58 ++++++++++++++++-- design-consultation/SKILL.md | 58 ++++++++++++++++-- design-review/SKILL.md | 58 ++++++++++++++++-- document-release/SKILL.md | 58 ++++++++++++++++-- investigate/SKILL.md | 58 ++++++++++++++++-- office-hours/SKILL.md | 58 ++++++++++++++++-- plan-ceo-review/SKILL.md | 58 ++++++++++++++++-- plan-design-review/SKILL.md | 58 ++++++++++++++++-- plan-eng-review/SKILL.md | 58 ++++++++++++++++-- qa-only/SKILL.md | 58 ++++++++++++++++-- qa/SKILL.md | 58 ++++++++++++++++-- retro/SKILL.md | 58 ++++++++++++++++-- review/SKILL.md | 58 ++++++++++++++++-- scripts/gen-skill-docs.ts | 61 +++++++++++++++++-- setup-browser-cookies/SKILL.md | 58 ++++++++++++++++-- ship/SKILL.md | 58 ++++++++++++++++-- 34 files changed, 1805 insertions(+), 170 deletions(-) diff --git a/.agents/skills/gstack-browse/SKILL.md b/.agents/skills/gstack-browse/SKILL.md index 08fe9f1f..a4a2dcba 100644 --- a/.agents/skills/gstack-browse/SKILL.md +++ b/.agents/skills/gstack-browse/SKILL.md @@ -33,6 +33,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"browse","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -58,16 +64,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -76,6 +97,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-design-consultation/SKILL.md b/.agents/skills/gstack-design-consultation/SKILL.md index cd81ab4e..786b66d5 100644 --- a/.agents/skills/gstack-design-consultation/SKILL.md +++ b/.agents/skills/gstack-design-consultation/SKILL.md @@ -34,6 +34,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"design-consultation","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -59,16 +65,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -77,6 +98,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-design-review/SKILL.md b/.agents/skills/gstack-design-review/SKILL.md index fa7100db..8a7d8cbb 100644 --- a/.agents/skills/gstack-design-review/SKILL.md +++ b/.agents/skills/gstack-design-review/SKILL.md @@ -34,6 +34,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"design-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -59,16 +65,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -77,6 +98,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-document-release/SKILL.md b/.agents/skills/gstack-document-release/SKILL.md index c28b034e..99ca54e8 100644 --- a/.agents/skills/gstack-document-release/SKILL.md +++ b/.agents/skills/gstack-document-release/SKILL.md @@ -32,6 +32,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"document-release","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -57,16 +63,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -75,6 +96,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-investigate/SKILL.md b/.agents/skills/gstack-investigate/SKILL.md index ed8a3425..61885abf 100644 --- a/.agents/skills/gstack-investigate/SKILL.md +++ b/.agents/skills/gstack-investigate/SKILL.md @@ -35,6 +35,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"investigate","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -60,16 +66,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -78,6 +99,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-office-hours/SKILL.md b/.agents/skills/gstack-office-hours/SKILL.md index 78ae5670..ae8a7e12 100644 --- a/.agents/skills/gstack-office-hours/SKILL.md +++ b/.agents/skills/gstack-office-hours/SKILL.md @@ -36,6 +36,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"office-hours","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -61,16 +67,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -79,6 +100,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-plan-ceo-review/SKILL.md b/.agents/skills/gstack-plan-ceo-review/SKILL.md index 6cc2472b..6681da4f 100644 --- a/.agents/skills/gstack-plan-ceo-review/SKILL.md +++ b/.agents/skills/gstack-plan-ceo-review/SKILL.md @@ -35,6 +35,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-ceo-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -60,16 +66,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -78,6 +99,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-plan-design-review/SKILL.md b/.agents/skills/gstack-plan-design-review/SKILL.md index 53186772..d759107e 100644 --- a/.agents/skills/gstack-plan-design-review/SKILL.md +++ b/.agents/skills/gstack-plan-design-review/SKILL.md @@ -34,6 +34,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-design-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -59,16 +65,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -77,6 +98,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-plan-eng-review/SKILL.md b/.agents/skills/gstack-plan-eng-review/SKILL.md index 37ea990e..a8f032bf 100644 --- a/.agents/skills/gstack-plan-eng-review/SKILL.md +++ b/.agents/skills/gstack-plan-eng-review/SKILL.md @@ -33,6 +33,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-eng-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -58,16 +64,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -76,6 +97,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-qa-only/SKILL.md b/.agents/skills/gstack-qa-only/SKILL.md index dba7efd1..f67502db 100644 --- a/.agents/skills/gstack-qa-only/SKILL.md +++ b/.agents/skills/gstack-qa-only/SKILL.md @@ -32,6 +32,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"qa-only","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -57,16 +63,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -75,6 +96,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-qa/SKILL.md b/.agents/skills/gstack-qa/SKILL.md index 88bfc49d..136b989a 100644 --- a/.agents/skills/gstack-qa/SKILL.md +++ b/.agents/skills/gstack-qa/SKILL.md @@ -35,6 +35,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"qa","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -60,16 +66,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -78,6 +99,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-retro/SKILL.md b/.agents/skills/gstack-retro/SKILL.md index 057d45d5..f71a79ed 100644 --- a/.agents/skills/gstack-retro/SKILL.md +++ b/.agents/skills/gstack-retro/SKILL.md @@ -32,6 +32,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"retro","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -57,16 +63,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -75,6 +96,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-review/SKILL.md b/.agents/skills/gstack-review/SKILL.md index 94dc0e74..be90a6cf 100644 --- a/.agents/skills/gstack-review/SKILL.md +++ b/.agents/skills/gstack-review/SKILL.md @@ -31,6 +31,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -56,16 +62,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -74,6 +95,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-setup-browser-cookies/SKILL.md b/.agents/skills/gstack-setup-browser-cookies/SKILL.md index 1fccb626..096af8cf 100644 --- a/.agents/skills/gstack-setup-browser-cookies/SKILL.md +++ b/.agents/skills/gstack-setup-browser-cookies/SKILL.md @@ -31,6 +31,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"setup-browser-cookies","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -56,16 +62,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -74,6 +95,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack-ship/SKILL.md b/.agents/skills/gstack-ship/SKILL.md index 8b66d09e..a6ccf7c3 100644 --- a/.agents/skills/gstack-ship/SKILL.md +++ b/.agents/skills/gstack-ship/SKILL.md @@ -29,6 +29,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"ship","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -54,16 +60,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -72,6 +93,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/.agents/skills/gstack/SKILL.md b/.agents/skills/gstack/SKILL.md index d517f861..0aee73d9 100644 --- a/.agents/skills/gstack/SKILL.md +++ b/.agents/skills/gstack/SKILL.md @@ -64,6 +64,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.codex/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.codex/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"gstack","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.codex/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -89,16 +95,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.codex/skills/gstack/bin/gstack-config set telemetry community +~/.codex/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.codex/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.codex/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -107,6 +128,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.codex/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.codex/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/SKILL.md b/SKILL.md index 1f1085e6..7fcafe0e 100644 --- a/SKILL.md +++ b/SKILL.md @@ -70,6 +70,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"gstack","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -95,16 +101,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -113,6 +134,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/browse/SKILL.md b/browse/SKILL.md index e8ae4450..2c550a95 100644 --- a/browse/SKILL.md +++ b/browse/SKILL.md @@ -39,6 +39,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"browse","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -64,16 +70,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -82,6 +103,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/codex/SKILL.md b/codex/SKILL.md index c67acc2c..3771e269 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -40,6 +40,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"codex","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -65,16 +71,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -83,6 +104,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index 5d70420a..51dfbb1b 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -44,6 +44,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"design-consultation","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -69,16 +75,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -87,6 +108,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/design-review/SKILL.md b/design-review/SKILL.md index 5fdaa989..811eb08f 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -44,6 +44,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"design-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -69,16 +75,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -87,6 +108,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/document-release/SKILL.md b/document-release/SKILL.md index cf8656e4..5c605d5b 100644 --- a/document-release/SKILL.md +++ b/document-release/SKILL.md @@ -41,6 +41,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"document-release","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -66,16 +72,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -84,6 +105,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/investigate/SKILL.md b/investigate/SKILL.md index 17ef4a8b..931f71d8 100644 --- a/investigate/SKILL.md +++ b/investigate/SKILL.md @@ -54,6 +54,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"investigate","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -79,16 +85,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -97,6 +118,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index 0a2bb310..e854214e 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -45,6 +45,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"office-hours","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -70,16 +76,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -88,6 +109,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index d684ac79..fdf8a4c2 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -42,6 +42,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-ceo-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -67,16 +73,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -85,6 +106,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index d2b4fe76..ca5c8372 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -42,6 +42,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-design-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -67,16 +73,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -85,6 +106,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index d22ee433..11f0a06a 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -41,6 +41,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"plan-eng-review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -66,16 +72,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -84,6 +105,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/qa-only/SKILL.md b/qa-only/SKILL.md index 4242f626..921cd3d5 100644 --- a/qa-only/SKILL.md +++ b/qa-only/SKILL.md @@ -38,6 +38,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"qa-only","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -63,16 +69,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -81,6 +102,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/qa/SKILL.md b/qa/SKILL.md index 17066366..59920798 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -45,6 +45,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"qa","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -70,16 +76,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -88,6 +109,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/retro/SKILL.md b/retro/SKILL.md index 7cbdd6d4..206b45d3 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -39,6 +39,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"retro","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -64,16 +70,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -82,6 +103,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/review/SKILL.md b/review/SKILL.md index 86c7c768..d8989733 100644 --- a/review/SKILL.md +++ b/review/SKILL.md @@ -40,6 +40,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"review","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -65,16 +71,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -83,6 +104,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/scripts/gen-skill-docs.ts b/scripts/gen-skill-docs.ts index 81a43bf5..41c5e1b6 100644 --- a/scripts/gen-skill-docs.ts +++ b/scripts/gen-skill-docs.ts @@ -159,6 +159,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: \${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(${ctx.paths.binDir}/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(${ctx.paths.binDir}/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: \${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"${ctx.skillName}","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ${ctx.paths.binDir}/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -190,16 +196,31 @@ function generateTelemetryPrompt(ctx: TemplateContext): string { return `If \`TEL_PROMPTED\` is \`no\` AND \`LAKE_INTRO\` is \`yes\`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with \`gstack-config set telemetry off\`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run \`${ctx.paths.binDir}/gstack-config set telemetry anonymous\` -If B: run \`${ctx.paths.binDir}/gstack-config set telemetry off\` +If A: ask for their email via a follow-up AskUserQuestion, then run: +\`\`\`bash +${ctx.paths.binDir}/gstack-config set telemetry community +${ctx.paths.binDir}/gstack-auth +\`\`\` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run \`${ctx.paths.binDir}/gstack-config set telemetry anonymous\` +If C: run \`${ctx.paths.binDir}/gstack-config set telemetry off\` Always run: \`\`\`bash @@ -209,6 +230,35 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If \`TEL_PROMPTED\` is \`yes\`, skip this entirely.`; } +function generateCommunityUpgradePrompt(ctx: TemplateContext): string { + return `If \`TELEMETRY\` is \`anonymous\` AND \`COMM_PROMPTED\` is \`no\`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run \`${ctx.paths.binDir}/gstack-auth \`. +Wait for the verification code. On success, run \`${ctx.paths.binDir}/gstack-config set telemetry community\`. +If B: do nothing. + +Always run: +\`\`\`bash +touch ~/.gstack/.community-prompted +\`\`\` + +This only happens once. If \`COMM_PROMPTED\` is \`yes\`, skip this entirely.`; +} + function generateAskUserFormat(_ctx: TemplateContext): string { return `## AskUserQuestion Format @@ -343,6 +393,7 @@ function generatePreamble(ctx: TemplateContext): string { generateUpgradeCheck(ctx), generateLakeIntro(), generateTelemetryPrompt(ctx), + generateCommunityUpgradePrompt(ctx), generateAskUserFormat(ctx), generateCompletenessSection(), generateContributorMode(), diff --git a/setup-browser-cookies/SKILL.md b/setup-browser-cookies/SKILL.md index 864c6c31..7307fb43 100644 --- a/setup-browser-cookies/SKILL.md +++ b/setup-browser-cookies/SKILL.md @@ -36,6 +36,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"setup-browser-cookies","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -61,16 +67,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -79,6 +100,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:** diff --git a/ship/SKILL.md b/ship/SKILL.md index be1b628c..93d6b087 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -39,6 +39,12 @@ _TEL_START=$(date +%s) _SESSION_ID="$$-$(date +%s)" echo "TELEMETRY: ${_TEL:-off}" echo "TEL_PROMPTED: $_TEL_PROMPTED" +_EMAIL=$(~/.claude/skills/gstack/bin/gstack-config get email 2>/dev/null || true) +_COMM_PROMPTED=$([ -f ~/.gstack/.community-prompted ] && echo "yes" || echo "no") +_AUTH_OK=$(~/.claude/skills/gstack/bin/gstack-auth-refresh --check 2>/dev/null && echo "yes" || echo "no") +echo "EMAIL: ${_EMAIL:-none}" +echo "COMM_PROMPTED: $_COMM_PROMPTED" +echo "AUTH: $_AUTH_OK" mkdir -p ~/.gstack/analytics echo '{"skill":"ship","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 for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; done @@ -64,16 +70,31 @@ Only run `open` if the user says yes. Always run `touch` to mark as seen. This o If `TEL_PROMPTED` is `no` AND `LAKE_INTRO` is `yes`: After the lake intro is handled, ask the user about telemetry. Use AskUserQuestion: -> gstack can share anonymous usage data (which skills you use, how long they take, crash info) +> gstack can share usage data (which skills you use, how long they take, crash info) > to help improve the project. No code, file paths, or repo names are ever sent. +> +> The **community tier** unlocks extra features: +> - **Cloud backup** of your gstack config + history (restore on new machines) +> - **Benchmarks**: see how your usage compares to other builders +> - **Skill recommendations** based on community patterns +> > Change anytime with `gstack-config set telemetry off`. Options: -- A) Yes, share anonymous data (recommended) -- B) No thanks +- A) Community — share data + email for backup, benchmarks & recommendations (recommended) +- B) Anonymous — share data only, no account +- C) No thanks -If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` -If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` +If A: ask for their email via a follow-up AskUserQuestion, then run: +```bash +~/.claude/skills/gstack/bin/gstack-config set telemetry community +~/.claude/skills/gstack/bin/gstack-auth +``` +The auth script will send a verification code to their email. Wait for them to enter the 6-digit code. +If auth succeeds, continue with the skill. If it fails, fall back to anonymous tier. + +If B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous` +If C: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off` Always run: ```bash @@ -82,6 +103,33 @@ touch ~/.gstack/.telemetry-prompted This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely. +If `TELEMETRY` is `anonymous` AND `COMM_PROMPTED` is `no`: After the main skill workflow +begins (not during preamble), offer the community tier upgrade once. Use AskUserQuestion: + +> You're already sharing anonymous usage data — nice! Want to unlock more? +> +> The **community tier** adds: +> - Cloud backup of your gstack config (restore on new machines) +> - Benchmarks: see how your /qa times compare to the community +> - Skill recommendations based on what other builders use +> +> Just needs your email (verified via a one-time code). + +Options: +- A) Yes, join community (enter email) +- B) Not now + +If A: ask for their email, then run `~/.claude/skills/gstack/bin/gstack-auth `. +Wait for the verification code. On success, run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`. +If B: do nothing. + +Always run: +```bash +touch ~/.gstack/.community-prompted +``` + +This only happens once. If `COMM_PROMPTED` is `yes`, skip this entirely. + ## AskUserQuestion Format **ALWAYS follow this structure for every AskUserQuestion call:**