{"id":554,"date":"2026-03-14T16:44:43","date_gmt":"2026-03-14T08:44:43","guid":{"rendered":"https:\/\/connectword.dpdns.org\/?p=554"},"modified":"2026-03-14T16:44:43","modified_gmt":"2026-03-14T08:44:43","slug":"garry-tan-releases-gstack-an-open-source-claude-code-system-for-planning-code-review-qa-and-shipping","status":"publish","type":"post","link":"https:\/\/connectword.dpdns.org\/?p=554","title":{"rendered":"Garry Tan Releases gstack: An Open-Source Claude Code System for Planning, Code Review, QA, and Shipping"},"content":{"rendered":"<p><strong>What if AI-assisted coding became more reliable by separating product planning, engineering review, release, and QA into distinct operating modes?<\/strong> That is the idea behind Garry Tan\u2019s <strong><a href=\"https:\/\/github.com\/garrytan\/gstack\" target=\"_blank\" rel=\"noreferrer noopener\">gstack<\/a><\/strong>, an open-source toolkit that packages <strong>Claude Code<\/strong> into 8 opinionated workflow skills backed by a persistent browser runtime. The tookit describes itself as <strong>\u2018Eight opinionated workflow skills for Claude Code<\/strong>\u2018 and groups common software delivery tasks into distinct modes such as planning, review, shipping, browser automation, QA testing, and retrospectives. The goal is not to replace Claude Code with a new model layer. It is to make Claude Code operate with more explicit role boundaries during product planning, engineering review, release, and testing.<\/p>\n<h3 class=\"wp-block-heading\"><strong>The 8 Core Commands<\/strong><\/h3>\n<p>The <strong>gstack<\/strong> repository currently exposes 8 main commands: <code>\/plan-ceo-review<\/code>, <code>\/plan-eng-review<\/code>, <code>\/review<\/code>, <code>\/ship<\/code>, <code>\/browse<\/code>, <code>\/qa<\/code>, <code>\/setup-browser-cookies<\/code>, and <code>\/retro<\/code>. Each command is mapped to a specific operating mode. <code>\/plan-ceo-review<\/code> is positioned as a product-level planning pass. <code>\/plan-eng-review<\/code> is used for architecture, data flow, failure modes, and tests. <code>\/review<\/code> is focused on production risk and code review. <code>\/ship<\/code> is used for preparing a ready branch, syncing with main, running tests, and opening a PR. <code>\/browse<\/code> gives the agent browser access, while <code>\/qa<\/code> is designed for systematic testing of affected routes and flows. <code>\/setup-browser-cookies<\/code> imports cookies from a local browser into the headless session, and <code>\/retro<\/code> is used for engineering retrospectives. <\/p>\n<h3 class=\"wp-block-heading\"><strong>The Persistent Browser Is the Core System<\/strong><\/h3>\n<p>The most important technical part of gstack is not the Markdown skills. It is the browser subsystem. gstack gives Claude Code <strong>a persistent browser<\/strong> and that the browser is the hard part, while the rest is mainly Markdown. Instead of launching a fresh browser for every action, gstack runs a <strong>long-lived headless Chromium daemon<\/strong> and communicates with it over <strong>localhost HTTP<\/strong>. The reason is latency and state retention. A cold start costs around <strong>3\u20135 seconds per tool call<\/strong>, while subsequent calls after startup are designed to run in roughly <strong>100\u2013200 ms<\/strong>. Because the browser stays alive, cookies, tabs, <code>localStorage<\/code>, and login state persist across commands. The server also shuts down automatically after <strong>30 minutes of idle time<\/strong>. <\/p>\n<h3 class=\"wp-block-heading\"><strong>How gstack Connects Browser Automation to QA<\/strong><\/h3>\n<p>That daemon architecture matters for QA and browser-driven development. In many agent workflows, browser automation is a separate debugging step or a screenshot utility. In gstack, browser access is part of the core workflow. The repo describes <code>\/browse<\/code> as the mode that lets the agent log in, click through the app, take screenshots, and inspect breakage. <code>\/qa<\/code> builds on top of that by analyzing the branch diff, identifying affected routes, and testing the relevant pages or flows. The sample flow in the repo shows <code>\/qa<\/code> inspecting <strong>8 changed files<\/strong> and <strong>3 affected routes<\/strong>, then testing those routes against a local app instance. This means the project is trying to tie source changes to actual application behavior instead of treating QA as a detached manual pass. <\/p>\n<h3 class=\"wp-block-heading\"><strong>Installation Requirements and Project Layout<\/strong><\/h3>\n<p>The repository\u2019s implementation choices are also fairly specific. gstack requires <strong>Claude Code<\/strong>, <strong>Git<\/strong>, and <strong>Bun v1.0+<\/strong>. The <code>package.json<\/code> shows the current version as <strong>0.3.3<\/strong>, lists <strong>Playwright<\/strong> and <code>diff<\/code> as runtime dependencies, and compiles a <code>browse<\/code> executable from the <code>browse<\/code> source tree. According to the repo\u2019s README, <code>\/browse<\/code> compiles a native binary and is supported on <strong>macOS and Linux<\/strong>, for both <strong>x64<\/strong> and <strong>arm64<\/strong>. The install flow copies the repo into <code>~\/.claude\/skills\/gstack<\/code>, runs <code>.\/setup<\/code>, and registers the skills for Claude Code. Teams can also copy the same setup into a repository-local <code>.claude\/skills\/gstack<\/code> directory so the workflow is shared inside a project. <\/p>\n<h3 class=\"wp-block-heading\"><strong>Why the Project Uses Bun<\/strong><\/h3>\n<p>The architecture document explains why the project uses <strong>Bun<\/strong> rather than a more conventional Node.js setup. There are 4 stated reasons: compiled binaries, native SQLite access, native TypeScript execution, and a built-in HTTP server with <code>Bun.serve()<\/code>. Those choices are practical rather than cosmetic. gstack reads Chromium\u2019s SQLite cookie database directly, and Bun\u2019s built-in database support removes the need for extra native packages. The compiled binary model also fits the repo\u2019s install style, because users are not expected to manage a separate runtime toolchain inside <code>~\/.claude\/skills\/<\/code>. <\/p>\n<h3 class=\"wp-block-heading\"><strong>Key Takeaways<\/strong><\/h3>\n<ul class=\"wp-block-list\">\n<li><strong>gstack is a workflow layer for Claude Code, not a new model or agent framework.<\/strong> It packages software delivery into 8 opinionated slash-command skills for planning, review, shipping, browser automation, QA, cookie setup, and retrospectives.<\/li>\n<li><strong>The persistent browser daemon is the main technical component.<\/strong> gstack runs a long-lived headless Chromium process over localhost HTTP so cookies, tabs, <code>localStorage<\/code>, and login state persist across commands.<\/li>\n<li><strong>QA is tied directly to code changes.<\/strong> The <code>\/qa<\/code> workflow analyzes branch diffs, identifies affected routes, and tests the relevant application paths instead of treating browser checks as a separate manual step.<\/li>\n<li><strong>The project is built around Bun for practical systems reasons.<\/strong> Bun is used for compiled binaries, native SQLite access, native TypeScript execution, and a built-in HTTP server for the browser daemon.<\/li>\n<li><strong>gstack\u2019s contribution is operational structure.<\/strong> Its main value is separating product review, engineering review, code review, release, and browser-driven validation into explicit modes with narrow responsibilities.<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<p>Check out\u00a0<strong><a href=\"https:\/\/github.com\/garrytan\/gstack\" target=\"_blank\" rel=\"noreferrer noopener\">Repo here<\/a>.\u00a0<\/strong>Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">120k+ ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/03\/14\/garry-tan-releases-gstack-an-open-source-claude-code-system-for-planning-code-review-qa-and-shipping\/\">Garry Tan Releases gstack: An Open-Source Claude Code System for Planning, Code Review, QA, and Shipping<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>What if AI-assisted coding bec&hellip;<\/p>\n","protected":false},"author":1,"featured_media":29,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=554"}],"version-history":[{"count":0,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/554\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/media\/29"}],"wp:attachment":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}