mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-06 13:45:35 +02:00
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
\`\`\`
|
||||
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 <email>\`.
|
||||
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(),
|
||||
|
||||
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
+53
-5
@@ -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 <user-provided-email>
|
||||
```
|
||||
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 <email>`.
|
||||
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:**
|
||||
|
||||
Reference in New Issue
Block a user