Files
Garry Tanandcapy-ai[bot] ab9a854be2 v1.91.246.0 docs(readme): cut the README to the first ten minutes; move everything else to docs/ pages verbatim (GSTA-99) (#3428)
* docs(readme): cut the README to the first ten minutes; move everything else to docs/ pages verbatim (GSTA-99)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes

Restore the /setup-gbrain code block the README split left open: README.md kept
the ```bash opener and docs/gbrain-quick-tour.md got only the closing fence, so
both pages rendered their body as one code block. Drop the self-referential
'Full reference' link in docs/domain-skills.md and make the troubleshooting
quick-answer link an in-page anchor.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs: describe the proactive core-set default in why-gstack

The moved 'Proactive skill suggestions' paragraph now documents the four-skill
core set, gstack-config set proactive core|all|off and the docs/proactive.md
page that #3432 (gsta-99-proactive-core) adds; the CHANGELOG names it as the one
non-verbatim paragraph of the move.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes (round 2)

Promote docs/uninstall.md's moved sections from ### to ## so the page outline
matches the other pages the README split created; no inbound link targets
those anchors.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs: documentation audit fixes

The README Docs table no longer claims docs/standalone-binaries.md covers
every gstack-* CLI (it documents the standalone ones), and
docs/ADDING_A_HOST.md step 6 points at the README host-matrix row and
docs/hosts.md, where the per-host notes now live.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs: disclose the update check fully and list every setup hook

The README privacy summary now names both GitHub requests the update check
makes and the version/OS report it adds with telemetry on, as the full text
it replaced did. docs/install.md's hooks section lists the team-mode
SessionStart hook and the AskUserQuestion PreToolUse/PostToolUse hooks beside
the timeline Stop hook.

* docs: name the update check's conditional compare-API request

bin/gstack-update-check also GETs api.github.com's compare endpoint when the
remote VERSION equals the local one but main has moved; the README privacy
summary and docs/privacy.md now list it beside the ls-remote and VERSION
fetch (documentation audit).

* fix: pre-landing review fixes (merge resolution)

docs/install.md:21 carried main's stable-channel sentence twice after the
merge, the second copy with its backticked spans stripped; the paragraph
again matches README.md:41 verbatim with the relative link.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs: say outside reviews are on by default in the README privacy summary

The one-paragraph summary dropped the default-on disclosure the full text
kept; mirror docs/privacy.md's parenthetical so the top-level page says which
path sends code off-machine without an opt-in.

* v1.91.246.0 stamp

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-26 13:22:30 +00:00

5.0 KiB

Privacy & Telemetry

gstack sends nothing about how you use it unless you opt in. Three kinds of network traffic exist, and each has its own switch.

Telemetry (opt-in, default off). On first run gstack asks once. You can say no, and gstack-config set telemetry off turns it off at any time.

  • What's sent, per skill run: skill name, event type, outcome (success/error/abort), duration, gstack version, OS and CPU architecture, whether the browser was used, whether the run was live or a test, a session id, the count of live session markers (below), the error class, the failed step, and an error message passed through gstack's secret redaction (cut to 200 characters). community adds a stable device ID; anonymous sends no ID. Prompt-injection detections add the attacking page's domain, a payload hash, a confidence score, the detection layer and the verdict.
  • What's never sent: code, file paths, repo names, branch names, prompts, or any other content you write.
  • What stays on your machine: opted in, each run is also logged to ~/.gstack/analytics/skill-usage.jsonl (under your state root; see docs/state-root.md) with the repo name and branch, so gstack-analytics can show your own dashboard. gstack-telemetry-sync deletes those two fields (and, for anonymous, the device ID) before anything is uploaded. With telemetry off, gstack logs no usage analytics at all; nothing new is written there.
  • Where it goes: Supabase (an open-source Firebase alternative). The schema is in supabase/migrations/, so you can verify what's collected. The publishable key in the repo is a public key; row-level security denies direct access, and edge functions enforce schema checks, event allowlists and field length limits.

Update check (on by default, regardless of telemetry). Every interactive skill start runs gstack-update-check. When its cache is stale (60 minutes after an up-to-date result, 12 hours while an upgrade is pending, 10 minutes after a failure) it asks GitHub for the latest version: a git ls-remote of github.com/garrytan/gstack, a GET of the VERSION file from raw.githubusercontent.com and, when that version equals yours but main has moved past your checkout, a GET of api.github.com's compare endpoint for the two commit SHAs. GitHub sees your IP address; nothing about you or your code is sent. With telemetry on, the same check also posts your gstack version and OS to gstack's Supabase. Turn the check off with gstack-config set update_check false.

Outside reviews (on by default; the first one prints a notice). Plan reviews, /autoplan, /review and /ship adversarial passes, /ship's design check, /design-review, /design-consultation, /office-hours, /document-release and /spec can ask a second model for an independent review: Codex under Claude Code, Claude Code under Codex. That sends the review prompt and the relevant code, diff or plan to that provider, using your own Codex or Claude Code login. The first send on a machine says which provider and which account. Turn it off with gstack-config set codex_reviews disabled; the binaries that send then refuse (not_run, consent_missing) and start nothing, and an unreadable config counts as disabled. /codex and /claude-code still run when you ask for them by name.

Local state that is not telemetry. gstack keeps a few local files whatever your telemetry setting. They are functional state, not usage logs, and the files are never sent:

  • Session markers: ~/.gstack/sessions/<pid>, one empty file per live agent session, touched at skill start and deleted after 120 minutes. The count lets skills notice several sessions on one machine; with telemetry on, that number is the session count above.
  • Project timeline: ~/.gstack/projects/<repo>/timeline.jsonl records skill starts and finishes with the branch name, for /context-restore and /retro. It leaves the machine only if you turn on artifacts_sync_mode full (docs/gbrain-sync.md).

Every off-machine send is receipted. Any gstack-initiated network send, telemetry included, writes a hash-chained, tamper-evident receipt to ~/.gstack/security/egress.jsonl before the send; sensitive sinks refuse to send at all if the receipt can't be written. Audit with gstack-egress list, verify the chain with gstack-egress verify (exit 3 on tamper), and see the standing consent settings with gstack-egress grants. The ledger records attempted sends so accidents are auditable; it's an audit trail, not a network firewall.

Optional third-party bridges are off by default and receipted too. The one that exists today, the Memorable recall bridge, hands your prompt to a locally installed vendor binary only after you run gstack-memorable enable; every hand-off writes a receipt first, the consent shows up in gstack-egress grants, and what the vendor then sends is documented as the vendor's claim.