gstack
gstack turns Claude Code (and other coding agents) into a virtual engineering team: a CEO who rethinks the product, an eng manager who locks architecture, a designer who catches AI slop, a reviewer who finds production bugs, a QA lead who opens a real browser, a security officer who runs OWASP + STRIDE audits, and a release engineer who ships the PR. All slash commands, all Markdown, all free, MIT license.
I'm Garry Tan, President & CEO of Y Combinator. This is the open source software factory I use every day, and I'm sharing it because these tools should be available to everyone. The story, the productivity numbers and how I run ten sprints at once are in Why gstack.
Fork it. Improve it. Make it yours. And if you want to hate on free open source software — you're welcome to, but I'd rather you just try it first.
Who this is for:
- Founders and CEOs — especially technical ones who still want to ship
- First-time Claude Code users — structured roles instead of a blank prompt
- Tech leads and staff engineers — rigorous review, QA, and release automation on every PR
What gstack is for
- A whole team's judgment for one builder. Product, design, engineering, QA, security and release reviews, each from a specialist role.
- Catch what CI misses. Find the bugs that pass tests but break in production, before they ship.
- AI-written changes you can trust. Every change carries its tests, its review and the evidence for both, so you can merge without rereading every line.
- Free, open and portable. MIT-licensed, and it runs on Claude Code and the other major coding agents.
Quick start
- Install gstack (two pastes, about 30 seconds of setup; see below).
- Run
/office-hoursand describe what you're building. It pushes back on your framing and writes a design doc the other skills read. - Run
/reviewon any branch with changes. It finds the bugs that pass CI but break in production, and fixes the obvious ones. - Run
/qaon your staging URL, or on an isolated local API, CLI, job or webhook. It opens a real browser, reproduces bugs and fixes them.
Stop there. You'll know if this is for you. When you want the whole sprint, /autoplan reviews a plan end to end and /ship runs tests, review and the PR.
Install — about 30 seconds
Requirements: Claude Code, Git, Bun v1.4.2+ (the tested version; setup refuses Bun older than 1.3.3, which would let compiled tools read a project's .env), and Node.js on Windows. Recommended on macOS: the Aside browser (macOS 15+), which the browser skills, /make-pdf and /diagram drive first with your real logged-in sessions; without it, ./setup builds gstack's own bundled browser. /cso needs a native toolchain as well; setup says so and leaves it unavailable when the toolchain is absent. Timing, the /cso prerequisites and the hooks setup registers: docs/install.md.
Step 1: Install on your machine
Open Claude Code and paste this. Claude does the rest.
Install gstack: run
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setupthen add a "gstack" section to CLAUDE.md that says to use the /browse skill from gstack for all web browsing and never use mcp__claude-in-chrome__* tools. Claude Code lists the installed skills itself, so the section needs no skill list. Then ask the user if they also want to add gstack to the current project so teammates get it.
Which updates you get: a new install follows the stable channel, the tagged release (Monday and Thursday at most once every 72 hours, an important fix within about a day, never more than a week stale, plus verified security and regression fixes), instead of every merge to main. ./setup records this the first time it runs on a machine and prints it. The clone itself starts at main's latest commit, and the updater never moves a checkout backwards, so it moves onto releases at the next cut that passes it (within a few days). A gstack contributor's checkout (marked by bin/dev-setup, on a branch other than origin's default main, or carrying local commits) and a Capy crew machine (its installer records main) follow main instead, and an install set up before stable became the default keeps following main. To switch, run ~/.claude/skills/gstack/bin/gstack-config set update_channel main (every merge) or ~/.claude/skills/gstack/bin/gstack-config set update_channel stable (releases only). Details: docs/releases.md.
Step 2: Team mode — auto-update for shared repos (recommended)
From inside your repo, paste this. Switches you to team mode, bootstraps the repo so teammates get gstack automatically, and commits the change:
(cd ~/.claude/skills/gstack && ./setup --team) && ~/.claude/skills/gstack/bin/gstack-team-init required && git add .claude/ CLAUDE.md && git commit -m "require gstack for AI-assisted work"
No vendored files in your repo, no version drift, no manual upgrades. Every Claude Code session starts with a fast auto-update check (throttled to once/hour, network-failure-safe, completely silent). Team mode follows the stable channel while update_channel is auto (so also on an install from before stable became the default): the tagged release (Monday and Thursday at most once every 72 hours, an important fix within about a day, never more than a week stale, plus verified security and regression fixes), not every merge to main. gstack-config set update_channel main follows every merge instead; see docs/releases.md.
Swap required for optional if you'd rather nudge teammates than block them.
Team mode's required hook runs on Node.js, so every teammate needs Node.js on PATH (details). To remove gstack later: docs/uninstall.md.
Other AI Agents
gstack runs on more agents than Claude. Bare ./setup installs for Claude
Code only (run inside OpenClaw, Hermes or a Dot, it also registers gstack's
skills with that harness: docs/hosts.md).
Pick another agent with --host <name>, or install for every agent setup
detects on this machine with --host auto:
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup --host auto # or: ./setup --host codex
./setup --status # one row per install: host, tier, scope, version, path
An explicit --host X installs for X only and never changes another agent's
install. /gstack-upgrade refreshes every install it registered, one row per
host, and says which ones failed.
Tiers: full is certified by a real workflow run (see Certify your host); experimental installs and passes the conformance tests but has no certification run yet; instruction-only installs nothing: setup prints what to copy.
Per-host notes (agent harnesses, Copilot, Antigravity, Gemini CLI, OpenClaw and ClawHub, the Codex behavioral profile and model tiers, outside-review providers, the design binary's models) are in docs/hosts.md. Any rules-reading agent (Zed, Amp, Jules) can use the 2KB agents digest with no install. Adding a host: docs/ADDING_A_HOST.md.
See it work
You: I want to build a daily briefing app for my calendar.
You: /office-hours
Claude: [asks about the pain — specific examples, not hypotheticals]
You: Multiple Google calendars, events with stale info, wrong locations.
Prep takes forever and the results aren't good enough...
Claude: I'm going to push back on the framing. You said "daily briefing
app." But what you actually described is a personal chief of
staff AI.
[extracts 5 capabilities you didn't realize you were describing]
[challenges 4 premises — you agree, disagree, or adjust]
[generates 3 implementation approaches with effort estimates]
RECOMMENDATION: Ship the narrowest wedge tomorrow, learn from
real usage. The full vision is a 3-month project — start with
the daily briefing that actually works.
[writes design doc → feeds into downstream skills automatically]
You: /plan-ceo-review
[reads the design doc, challenges scope, runs 10-section review]
You: /autoplan
[eng phase: ASCII diagrams for data flow, state machines, error paths]
[test matrix, failure modes, security concerns]
You: Approve plan. Exit plan mode.
[writes 2,400 lines across 11 files. ~8 minutes.]
You: /review
[AUTO-FIXED] 2 issues. [ASK] Race condition → you approve fix.
You: /qa https://staging.myapp.com
[opens real browser, clicks through flows, finds and fixes a bug]
You: /ship
Tests: 42 → 51 (+9 new). PR: github.com/you/app/pull/42
You said "daily briefing app." The agent said "you're building a chief of staff AI" — because it listened to your pain, not your feature request. Eight commands, end to end. That is not a copilot. That is a team.
The sprint
gstack is a process, not a collection of tools. The skills run in the order a sprint runs:
Think → Plan → Build → Review → Test → Ship → Reflect
Each skill feeds into the next. /office-hours writes a design doc that /plan-ceo-review reads. /autoplan's eng phase writes a test plan that /qa picks up. /review catches bugs that /ship verifies are fixed. Nothing falls through the cracks because every step knows what came before it.
The same /qa and /qa-only commands test CLIs, APIs, jobs, workers and webhooks with no browser: QA without a webpage.
Which review should I use?
Power tools
Beyond the slash commands, gstack ships standalone CLIs (gstack-egress, gstack-context-bill, gstack-model-benchmark, gstack-pr-wait, the review and evidence ledgers, the iOS QA daemon): docs/standalone-binaries.md. The fallback browser's per-site domain skills and raw CDP escape hatch, and the voice-input aliases many skills carry, have their own pages.
Deep dives with examples and philosophy for every skill →
GBrain — persistent knowledge for your coding agent
GBrain is a persistent knowledge base for AI agents — think of it as the memory your agent actually keeps between sessions. GStack gives you a one-command path from zero to "it's running, my agent can call it."
/setup-gbrain
The four setup paths, the per-repo trust policy and memory sync, in brief: docs/gbrain-quick-tour.md. Full monty — every scenario, every flag, every bin helper, every troubleshooting step: USING_GBRAIN_WITH_GSTACK.md
Other references: docs/gbrain-sync.md (sync-specific guide) • docs/gbrain-sync-errors.md (error index)
gstack on Capy
On a Capy machine, ./setup also loads gstack's crew tools: /captain to run many agent threads from one controller, a merge queue that lands verified pull requests, receipts that tie each merge to the head that was reviewed and tested, and spend caps for /ship and /autoplan. They live in crew/ and load only on Capy, so any other install is unchanged by them.
Platform notes
macOS and Linux get full support. Windows and Gemini models get minimal support: install and the core skills work, and nothing more is promised. See support tiers.
macOS: everything runs. With the Aside browser (macOS 15+) open and signed in, the browser skills, /make-pdf and /diagram use it and your real sessions; otherwise they use the bundled browser ./setup builds. gstack never installs Aside.
Linux: everything runs on the bundled browser; Aside is macOS-only, so the readiness probe says NEEDS_ASIDE: Linux once and the skills use gstack's own Chromium. If Chromium installs but cannot launch because the host blocks unprivileged user namespaces (Ubuntu 24.04+ AppArmor default), set GSTACK_CHROMIUM_NO_SANDBOX=1.
Windows users: gstack works on Windows 11 via Git Bash or WSL. Aside is macOS-only, so on Windows (and Linux) the browser skills, /make-pdf, and /diagram always use gstack's bundled browser. Node.js is required in addition to Bun — Bun has a known bug with Playwright's pipe transport on Windows (bun#4253). The browse server automatically falls back to Node.js. Make sure both bun and node are on your PATH. Native /cso additionally requires PowerShell (PowerShell 7 pwsh is preferred; Windows PowerShell 5.1 is the fallback) and Visual Studio 2022 Build Tools with the Desktop development with C++ workload; setup leaves that skill explicitly unavailable when they are absent. /cso is optional: if its native helper fails to build or publish, setup still finishes, says which step failed with the log path and retry command, and keeps an earlier helper when it has one (GSTACK_STRICT_BUILD=1 makes that failure fatal, as CI does).
Known issue: Windows Smart App Control (#2595). gstack's compiled binaries (browse, find-browse, design, pdf, gstack-global-discover) are built on your machine and unsigned, so Windows 11 with Smart App Control on refuses to start them; Git Bash shows Permission denied. setup detects this, names the blocked binaries and the skills that need them, and gstack-doctor reports them as blocked. Today's workarounds are running gstack inside WSL, or turning Smart App Control off. Details: troubleshooting. The sidebar terminal uses Consolas on Windows, so its text no longer renders spaced out.
From PowerShell, .\setup.ps1 (same arguments as ./setup) checks that Git for Windows, Bun and Node.js are on PATH, prints the winget command for any that are missing, and otherwise runs ./setup in Git Bash.
On Windows without Developer Mode (MSYS2 / Git Bash), setup falls back to file copies instead of symlinks because ln -snf produces frozen copies that don't refresh on git pull. Re-run cd ~/.claude/skills/gstack && ./setup after every git pull so your skill files match the repo. setup prints a one-line note reminding you. Unix and WSL keep symlinks and don't need the re-run.
Docs
Privacy & Telemetry
gstack sends nothing about how you use it unless you opt in. Telemetry is off by default and asked about once; the update check (two or three GitHub requests: a git ls-remote, a fetch of VERSION and, when that version equals yours but main has moved, a compare-API call; with telemetry on it also reports your gstack version and OS; on by default) turns off with gstack-config set update_check false; outside reviews (on by default; the first one prints a notice) send code to Codex or Claude Code under your own login and turn off with gstack-config set codex_reviews disabled. Every off-machine send writes a receipt you can audit with gstack-egress list. The full account, including the exact fields telemetry carries and the local state that is not telemetry: docs/privacy.md.
Troubleshooting
Not sure what's wrong? Run the doctor: ~/.claude/skills/gstack/bin/gstack-doctor
(on other hosts, ./setup --status in your gstack checkout ends with the
doctor's absolute path). Without starting a skill or spending anything, it
prints one row per check (install, state root, Bun, hooks, Codex and its cached
model probe, artifacts sync, the browse bundle, the other compiled binaries,
the /cso native helper, Claude Code, your largest session journal and recent
/autoplan guard codes), each ok, warn,
not configured or fail with the command that fixes it. It exits non-zero
only on fail. --live also runs the paid Codex model check (one short call).
Paste its output into bug reports.
A message says not run, unavailable or names a fix? Look it up in
docs/troubleshooting.md: every gate message gstack
prints, what it means, what was kept, and the command that fixes it.
Claude says it can't see the skills? Check that they are installed (ls ~/.claude/skills) and restart Claude Code; it lists every installed skill with its description, so CLAUDE.md does not need to enumerate them (a pasted list goes stale with each release). Your project's CLAUDE.md only needs the browsing rule:
## gstack
Use /browse from gstack for all web browsing. Never use mcp__claude-in-chrome__* tools.
If an older install prompt left an "Available skills:" line in your CLAUDE.md, delete it.
Skill not showing up, stale install, Codex skill descriptions, prefix modes, disabling skills, Chromium install problems: quick answers.
Free, MIT licensed, open source. No premium tier, no waitlist.
I open sourced how I build software. You can fork it and make it your own.
We're hiring. Want to ship real products at AI-coding speed and help harden gstack? Come work at YC — ycombinator.com/software Extremely competitive salary and equity. San Francisco, Dogpatch District.
License
MIT. Free forever. Go build something.