gstack: How Garry Tan Turned Claude Into a Six-Person Engineering Team
Hook
What if you could give your AI assistant actual eyes on your application, complete with authentication cookies and screenshot capture? Garry Tan built that—and wrapped it in a system that makes Claude Code think like a CEO, eng manager, and QA engineer.
Context
AI coding assistants have a fundamental problem: they’re generalists trying to do specialized work. When you ask Claude or Copilot for help, you get the same cognitive mode whether you’re brainstorming product strategy, reviewing architecture, or hunting for edge cases. This creates a jarring context-switching problem—the AI doesn’t know if you want big-picture thinking or paranoid nitpicking, so it hedges with middle-of-the-road responses.
Garry Tan, Y Combinator CEO and prolific founder, solved this by building gstack: a skill system that transforms Claude Code into six distinct personas. Instead of one undifferentiated assistant, you get slash commands that invoke specialized modes—/ceo for product thinking, /em for architecture decisions, /paranoid for adversarial code review. The twist? Two of those skills ship with a compiled headless Chromium binary that gives Claude actual browser automation capabilities, complete with screenshot capture and cookie injection. This isn’t prompt engineering advice—it’s battle-tested infrastructure extracted from how one of tech’s most productive founders actually ships code.
Technical Insight
At its core, gstack is a TypeScript-based installer that copies Markdown prompt files into Claude Code’s ~/.claude/skills/ directory. Each skill is a carefully crafted context blob that rewires how Claude responds when you invoke its slash command. The magic isn’t in the code—it’s in the cognitive framing. Here’s how the paranoid reviewer skill is structured:
# Paranoid Code Reviewer
You are an extremely paranoid code reviewer. Your job is to find bugs.
Assume every change breaks something. Look for:
- Edge cases the author didn't consider
- Race conditions and timing issues
- Input validation gaps
- Memory leaks and resource cleanup
- Security vulnerabilities
- Performance regressions
Be specific. Quote line numbers. Suggest fixes.
When you type /paranoid in Claude Code, this Markdown gets injected as system context, fundamentally changing the AI’s behavior. Instead of helpful suggestions, you get adversarial scrutiny. The same code reviewed with /em (engineering manager) might get architectural feedback about modularity; with /paranoid, you get a list of ways it could crash in production.
The real innovation is the /browse and /qa skills, which ship with a native headless browser. The installer compiles a Chromium-based binary for your platform (macOS arm64/x64, Linux x64/arm64) and wires it into Claude’s tooling. This isn’t Puppeteer or Playwright—it’s a custom build optimized for AI-driven testing. Here’s the workflow:
// The /qa skill enables visual regression testing
// Claude can now actually see your application
// 1. Import cookies from your real browser
// Supports Chrome, Arc, Brave, Edge, Firefox
import { importCookies } from './browser/cookie-importer';
const cookies = await importCookies('chrome', 'https://app.yoursite.com');
// 2. Claude navigates with your authenticated session
// No manual login required
await browser.setCookies(cookies);
await browser.goto('https://app.yoursite.com/dashboard');
// 3. Screenshot capture for visual verification
const screenshot = await browser.screenshot();
// Claude sees the rendered page, not just HTML
This solves a critical gap in AI-assisted development: most coding assistants are blind to what your application actually looks like. They can read HTML and suggest CSS, but they can’t tell you that your modal is cut off on mobile or that your loading spinner never disappears. With /qa, you describe the test scenario, and Claude drives the browser, captures screenshots, and reports what it sees. The cookie injection is particularly clever—you browse your app normally in Arc or Chrome, then gstack extracts those cookies and injects them into the headless session. Claude can now test authenticated flows without you building fixture data or mock login systems.
The architecture assumes you’re running Conductor, Claude Code’s parallel session manager. Each Conductor workspace gets its own isolated browser instance, enabling true concurrent workflows. You can have one session running /ceo for product brainstorming, another running /em for architecture review, and a third running /qa against your staging environment—all simultaneously. The browser isolation prevents cross-contamination; cookies and local storage from one session don’t leak into others.
Installation happens via symlink, not copy, which means updates to gstack propagate immediately to all your projects. The TypeScript installer detects your platform, downloads the appropriate Chromium binary, sets executable permissions, and registers the skills with Claude Code:
// Simplified installer logic
const skillsDir = path.join(os.homedir(), '.claude', 'skills');
const gstackSkills = [
'ceo', 'em', 'paranoid', 'release', 'browse', 'qa'
];
for (const skill of gstackSkills) {
const source = path.join(__dirname, 'skills', `${skill}.md`);
const target = path.join(skillsDir, `gstack-${skill}.md`);
await fs.symlink(source, target);
}
// Download and install browser binary for /browse and /qa
const binary = await downloadChromium(platform, arch);
await fs.chmod(binary, 0o755);
The opinionated nature is intentional. These aren’t templates you customize—they’re hardened workflows that reflect how Garry Tan actually develops. The /release skill, for example, enforces a specific changelog format, version bump strategy, and deployment checklist. You either adopt the whole workflow or you don’t use the skill. This rigidity is a feature, not a bug—it trades flexibility for velocity by eliminating decision fatigue.
Gotcha
gstack is tightly coupled to the Claude Code environment, and that coupling creates real limitations. If you’re using Cursor, Aider, GitHub Copilot, or even vanilla Claude, none of this works. The skills rely on Claude Code’s slash command system and filesystem conventions. The browser automation assumes specific paths and process management that don’t exist in other tools. You can’t extract the prompts and paste them into ChatGPT—the whole system is Anthropic-specific infrastructure.
Platform support is another hard wall. The native browser binary only compiles for macOS and Linux (x64/arm64). Windows users are completely excluded, and there’s no WSL workaround because the browser needs desktop environment access for screenshot rendering. If you develop on Windows, gstack is a non-starter. The documentation is also minimal by design—Garry describes this as ‘not for beginners,’ and he means it. There’s no tutorial on when to use /ceo versus /em, no examples of effective /paranoid workflows, no guidance on structuring Conductor sessions. The assumption is you’re already a power user who ships code at high velocity and intuitively understands the role-switching model.
Verdict
Use gstack if you’re already embedded in the Claude Code ecosystem, run Conductor for parallel sessions, and want to systematize high-velocity AI workflows with clear role separation. It’s particularly valuable for solo founders or small teams shipping production code daily who need browser-level QA without a dedicated testing infrastructure. The cookie injection alone is worth it if you’re constantly testing authenticated flows. Skip it if you’re on Windows, new to AI-assisted development, prefer other AI coding tools like Cursor or Copilot, or want flexible prompting over opinionated frameworks. This is infrastructure, not inspiration—it assumes you want to work exactly like Garry Tan, not adapt his ideas to your style. If that trade-off works for you, gstack will make your AI assistant dramatically more useful.