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

85 lines
5.0 KiB
Markdown

# 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](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](https://supabase.com) (an open-source Firebase
alternative). The schema is in [`supabase/migrations/`](../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](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](memorable-workflow-memory.md),
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.