gstack 企業級教學手冊

參考版本:v1.58.5.0 | 更新日期:2026-06-30
GitHub 星數:118,000+ ⭐ | Forks:17,600+ | 貢獻者:81 位 | 授權:MIT
適用對象:資深工程師、架構師、DevOps 工程師、技術主管、創辦人與技術主管
適用場景:新創公司、企業平台、微服務架構、金融系統、iOS 開發
參考來源https://github.com/garrytan/gstack


目錄

  1. gstack 概述
  2. 核心架構設計
  3. 安裝與環境建置
  4. Sprint 工作流程與技能體系
  5. 虛擬開發團隊設計(企業實戰)
  6. 端到端開發流程
  7. 實戰案例:會員管理系統
  8. DevOps 與自動化
  9. 並行 Sprint 與瀏覽器模式
  10. 系統維運
  11. 系統升級與擴展
  12. 企業級安全設計
  13. 最佳實務 Best Practices
  14. GBrain 持久知識系統
  15. 隱私與遙測

1. gstack 概述

1.1 什麼是 gstack

gstack 是由 Y Combinator President & CEO Garry Tan 開源的 AI 編碼代理虛擬工程團隊技能套件,開源於 github.com/garrytan/gstack,目前已累積超過 118,000 顆星17,600+ Forks,是目前最受矚目的 AI 輔助開發工具之一。

gstack 的本質是:

「一組專業化的斜線指令(Slash Commands)套件,讓 Claude Code 從單一 AI 助手升級為虛擬工程團隊——23 個專家角色 + 8 個強化工具,全部以 Markdown 驅動」

它不僅是 Claude Code 的擴充,更支援 10 個 AI 編碼代理(Codex CLI、OpenCode、Cursor、Factory Droid、Slate、Kiro、Hermes、GBrain、OpenClaw 等)。安裝後,它會增加 23 個專業角色 + 8 個強化工具 + 多個輔助技能,每個指令都代表一位不同角色的專家:

  • /office-hours ── YC 風格的產品顧問
  • /plan-ceo-review ── CEO 產品視角
  • /plan-eng-review ── 工程主管架構審查
  • /plan-devex-review ── 開發者體驗審查
  • /review ── 資深工程師程式碼審查(含 7 名專家平行審查)
  • /qa ── QA 主管真實瀏覽器測試
  • /cso ── 首席資安官 OWASP 掃描
  • /ship ── 發布工程師 PR 自動化
  • /spec ── 規格書撰寫(五階段精煉流程,v1.47+)
  • /document-generate ── Diataxis 文件生成(v1.35+)
  • /diagram ── 英文描述 → Mermaid + Excalidraw + SVG/PNG 三合一輸出(v1.58+)
  • /make-pdf ── Markdown → 出版品質 PDF/HTML/DOCX(v1.58+)
  • /pair-agent ── 多代理瀏覽器協作
  • /ios-qa ── iOS 真機 QA 測試(v1.43+)
  • /setup-gbrain ── GBrain 持久記憶體設定(v1.12+)
  • /learn ── 跨 Session 經驗累積與查詢
  • /context-save / /context-restore ── 會話上下文保存與恢復
  • … 共 23 個專業角色 + 8 個強化工具 + 多個輔助技能(詳見第 4.3 節)

1.2 背景:Garry Tan 與 YC

Garry Tan 是 Y Combinator 的 President & CEO,曾協助 Coinbase、Instacart、Rippling 等公司在車庫階段成長。他本身是工程師出身,在 Palantir 擔任首批工程師/PM/設計師,共同創辦了 Posterous(被 Twitter 收購),並建立了 YC 內部社群網絡 Bookface。

他公開分享了使用 gstack 配合 Claude Code 的驚人生產力數字:

2026 年至今的邏輯代碼變更速率約為 2013 年的 810 倍(11,417 vs 14 邏輯行/天),同時全職管理 YC。過去 60 天:3 個生產服務、40+ 個已發布功能。

gstack 正是他開源的個人開發方法論,讓每個工程師都能複製這套效率。

1.3 與傳統 Prompt Engineering 的差異

比較項目傳統 Prompt Engineeringgstack Slash Commands
互動方式對話式(問與答)Sprint 流程驅動(有前後頁依賴)
上下文管理每次需手動提供技能間自動傳遞設計文件
工作流程人工驅動Think → Plan → Build → Review → Test → Ship
技能複用需重複撰寫 Prompt技能一次定義,專案間複用
多視角協作不支援多個 Slash Command 代表不同視角
輸出品質依賴 Prompt 品質由技能內建方法論標準化
企業適用性低(需大量改造)高(MIT 授權,開箱即用)
學習記憶每次從零開始/learn 跨 Session 累積經驗

1.4 與 GitHub Copilot / AI Agent 的比較

傳統 AI Copilot:
  你 ──→ AI ──→ 輸出(程式碼補全)

gstack Sprint:
  你(需求描述)
     ↓
  /office-hours   ── 釐清真正問題,生成設計文件
     ↓
  /plan-ceo-review  ── 找出 10 星版本的產品
     ↓
  /plan-eng-review  ── 架構、資料流、失敗模式、測試
     ↓
  [實作 2,400 行,約 8 分鐘]
     ↓
  /review  ── 找出通過 CI 但會在生產爆炸的 Bug(自動修復)
     ↓
  /qa     ── 真實瀏覽器點擊,找到並修復 Bug,生成回歸測試
     ↓
  /ship   ── 同步 main,跑測試,推送,開 PR
     ↓
  /land-and-deploy  ── 合併 PR,等待 CI,驗證生產
項目GitHub Copilot單一 AI Agentgstack
定位程式碼補全任務執行虛擬工程師團隊
技能數1(補全)130+ 個專業技能
輸出程式碼片段單一任務結果完整可交付成果
瀏覽器測試有限真實 Chromium 瀏覽器
iOS 測試iOS 真機 QA(v1.43+)
安全審查OWASP Top 10 + STRIDE + 共享編輯引擎
多 AI 交叉審查Claude + OpenAI Codex
記憶系統跨 Session 學習 + GBrain 持久記憶
支援平台VS Code單一平台10 個 AI 代理平台
開源授權商業不定MIT,完全免費

1.5 適用場景

場景說明推薦技能
新創產品驗證快速找到正確的產品方向,避免建錯東西/office-hours/autoplan
企業功能開發有嚴格品質門檻的功能迭代完整 Sprint 流程
銀行 / 金融系統高安全、高合規需求/cso + /careful + /guard
大型企業平台多團隊協作,需統一開發規範/autoplan + /retro
SaaS 產品快速迭代,需 API + 前端 + 測試一次完成完整 Sprint
微服務架構多個服務並行開發Conductor 並行 Sprint
Debug 困難問題系統性追查根本原因/investigate
設計系統建立從零建立視覺識別/design-consultation/design-shotgun/design-html
文件與圖表產出自動化技術文件、架構圖表/diagram + /make-pdf + /document-generate
新人訓練透過標準化流程加速上手完整 Sprint + /learn

實務建議:金融業建議將 /cso 納入 CI 強制步驟,並搭配 /careful/guard 保護生產環境操作。

1.6 版本與現況

項目資訊
最新版本v1.58.5.0(2026-06-25)
GitHub 星數118,000+ ⭐
Forks17,600+
貢獻者81 位
授權MIT(完全免費,無付費版)
技能數量23 個專業角色 + 8 個強化工具 + 多個輔助技能
支援平台Claude Code、Codex CLI、OpenCode、Cursor、Factory Droid、Slate、Kiro CLI、Hermes、GBrain (mod)、OpenClaw
支援作業系統macOS、Linux、Windows 11(Git Bash / WSL)
安裝方式Team Mode(推薦)或 Vendoring
語言組成TypeScript 79.4%、Go Template 11.2%、Shell 5.8%、JavaScript 2.6%

重要版本里程碑

版本日期代號核心功能
v1.58.5.02026-06-25First-run Activation新用戶首次安裝智慧引導 + gstack router 前端
v1.58.4.02026-06-18Redaction Expansion6 新憑證 pattern(GitLab、HuggingFace、npm 等)+ PTY plan-mode 冒煙測試
v1.58.3.02026-06-18Layer C StealthGBrowser anti-detection Layer C:遮蔽 7 類自動化特徵,80 項 stealth 測試
v1.58.1.02026-06-14Hermetic E2E密封隔離本地 E2E 測試環境 + Conductor 純文字 AskUserQuestion
v1.58.0.02026-06-12Diagram Engine/diagram(Mermaid + Excalidraw + SVG/PNG)+ /make-pdf 多格式文件引擎
v1.57.7.02026-06-08Unresolved Verdict所有 plan review 結尾強制 unresolved-decisions verdict
v1.57.6.02026-06-07Security Fix Wave8 項社群 bug 修復(含 4 個 security guards failing open)
v1.57.5.02026-06-07Decision MemoryCross-session decision memory:決策歷史跨 session 持久化與自動浮現
v1.57.4.02026-06-08Boil the Ocean原則更名:「Boil the Lake」→「Boil the Ocean」
v1.57.3.02026-06-07Ship Version Tag/ship 建立的 PR 標題自動加版本號
v1.56.0.02026-06-03On-demand Loading5 個最重 planning skill 改為 on-demand section 載入
v1.55.0.02026-05-30sync-gbrain Safety GuardsGBrain 同步安全防護
v1.54.0.02026-05-29/ship Optimization/ship skeleton+sections 模式,-59% token
v1.53.0.02026-05-28Shared Redaction Engine共享編輯引擎(33 patterns, 3 tiers)
v1.47.0.02026-05-22/spec五階段規格精練流程
v1.46.0.02026-05-21v2 Foundationcatalog tokens -56%,極簡主義重寫
v1.43.0.02026-05-17iOS QAiOS 真機 QA 測試套件
v1.42.0.02026-05-16Daegu韓國社群貢獻浪潮
v1.35.0.02026-05-09document-generateDiataxis 框架文件自動生成
v1.26.0.02026-04-30GBrain MemoryGBrain 持久知識圖譜
v1.12.0.02026-04-16setup-gbrainGBrain 初始設定技能
v1.3.0.02026-04-06Design Taste + Checkpoints設計品味學習 + 檢查點
v1.0.0.02026-04-04Simpler PromptsLOC receipts、pair-agent、devex-review
v0.15.2.12026-04-02Setup Runs Migrationsgit pull && ./setup 自動套用版本遷移
v0.15.0.02026-04-01Session Intelligence/checkpoint + /health + 時間軸 + 上下文恢復
v0.14.4.02026-03-31Review Army7 名專家平行審查
v0.14.0.02026-03-30Design to Code/design-html 從設計稿生成生產級 HTML
v0.13.6.02026-03-29GStack Learns專案學習系統 /learn
v0.12.0.02026-03-26Headed Mode + Sidebar Agent真實 Chrome 視窗 + 側邊欄對話代理
v0.10.0.02026-03-22Autoplan一鍵全自動 CEO → 設計 → 工程審查
v0.9.02026-03-19Multi-PlatformCodex, Gemini CLI, Cursor 支援
v0.0.12026-03-11Initial Release5 個核心技能 + 無頭瀏覽器

2. 核心架構設計

2.1 企業級系統整體架構

graph TB
    subgraph "前端層 Frontend"
        FE1[Vue.js 主應用]
        FE2[Micro-Frontend Module A]
        FE3[Micro-Frontend Module B]
    end

    subgraph "API Gateway 層"
        GW[API Gateway\nSpring Cloud Gateway]
        LB[Load Balancer\nNginx]
    end

    subgraph "後端服務層 Backend Services"
        SVC1[會員服務\nSpring Boot]
        SVC2[訂單服務\nSpring Boot]
        SVC3[通知服務\nSpring Boot]
        SVC4[報表服務\nSpring Boot]
    end

    subgraph "AI Agent Layer ← gstack + Claude Code(30+ 個技能)"
        AG1["/office-hours<br/>YC 辦公室時光"]
        AG2["/plan-ceo-review<br/>CEO 產品視角"]
        AG3["/plan-eng-review<br/>工程主管架構"]
        AG4["/review<br/>資深工程師審查"]
        AG5["/qa<br/>QA 主管瀏覽器測試"]
        AG6["/cso<br/>首席資安官"]
        AG7["/ship<br/>發布工程師"]
    end

    subgraph "資料層 Data Layer"
        DB1[(MySQL Primary\n會員/訂單)]
        DB2[(MySQL Replica\n讀取分流)]
        DB3[(MongoDB\n日誌/文件)]
        CACHE[Redis Cluster\n快取/Session]
        MQ[Kafka\n非同步訊息]
    end

    subgraph "DevOps Pipeline"
        CI[GitHub Actions CI]
        CD[ArgoCD CD]
        REG[Harbor\n映像倉庫]
    end

    FE1 --> LB
    FE2 --> LB
    FE3 --> LB
    LB --> GW
    GW --> SVC1
    GW --> SVC2
    GW --> SVC3
    GW --> SVC4
    SVC1 --> DB1
    SVC2 --> DB1
    DB1 --> DB2
    SVC1 --> CACHE
    SVC2 --> MQ
    SVC3 --> MQ
    AG3 --> SVC1
    AG3 --> SVC2
    AG4 --> CI
    AG5 --> FE1
    AG6 --> CD
    CI --> REG
    REG --> CD

2.2 AI Agent 協作架構圖

sequenceDiagram
    participant User as 使用者/PM
    participant OH as /office-hours
    participant CEO as /plan-ceo-review
    participant ENG as /plan-eng-review
    participant REV as /review
    participant QA as /qa
    participant CSO as /cso
    participant SHIP as /ship + /land-and-deploy

    User->>OH: 提交需求想法
    OH->>OH: 六個強制提問,產出design.md
    OH->>CEO: 傳遞 design.md
    CEO->>CEO: 找出 10 星產品,確認 MVP 範圍
    CEO->>ENG: 傳遞決策文件
    ENG->>ENG: 鎖定架構、資料流、測試矩陣
    ENG->>User: 建置計畫(人工確認架構)
    User->>REV: 實作完成,執行 /review
    REV->>REV: 找出會在生產爆炸的 Bug
    REV->>QA: 修復完成,傳遞 PR Diff
    QA->>QA: 真實瀏覽器測試 + 自動回歸測試
    QA->>CSO: 提交完整 PR
    CSO->>CSO: OWASP Top 10 + STRIDE 掃描
    CSO->>SHIP: CRITICAL 為零,審查通過
    SHIP->>User: 合併 PR + 部署成功通知

2.3 分庫分表設計

業務域資料庫分表策略說明
會員資料member_db按 user_id mod 8高讀取頻率
訂單資料order_db_0~3按 order_date 分月高寫入頻率
稽核日誌audit_db按年月合規保存
快取Redis ClusterSlot-based主從架構

2.4 Clean Architecture(後端服務)

src/
├── domain/             ← 領域層(Entity, Value Object, Domain Service)
│   ├── entity/
│   ├── repository/     ← 介面定義(不含實作)
│   └── service/
├── application/        ← 應用層(Use Case, DTO, Mapper)
│   ├── usecase/
│   └── dto/
├── infrastructure/     ← 基礎設施層(JPA, Redis, Kafka 實作)
│   ├── persistence/
│   ├── cache/
│   └── messaging/
└── presentation/       ← 表現層(Controller, Request/Response)
    └── controller/

2.5 gstack 內部架構

gstack 本身採用 Daemon 模型架構,核心執行流程如下:

Claude Code → CLI (compiled binary) → HTTP POST → Server (Bun.serve) → CDP → Chromium (headless)

效能特性

項目數據
首次呼叫~3 秒(啟動所有元件)
後續呼叫~100-200ms
持久狀態Cookie、localStorage、登入狀態跨指令保留
自動生命週期首次使用自動啟動,30 分鐘閒置自動關閉

為何選擇 Bun 作為執行環境

特性優勢
編譯二進位bun build --compile → 單一 ~58MB 執行檔
原生 SQLiteCookie 解密直接讀取 Chromium SQLite DB
原生 TypeScript開發時無需編譯步驟
內建 HTTP 伺服器Bun.serve() 無需 Express/Fastify

SKILL.md 模板系統

每個技能的文件永遠與程式碼同步,透過自動化的模板系統生成:

SKILL.md.tmpl (人寫散文 + 佔位符)
    ↓
gen-skill-docs.ts (從源碼讀取元資料)
    ↓
SKILL.md (提交到 git,自動產生章節)

專案結構總覽

gstack/
├── browse/          # 無頭瀏覽器 CLI(Playwright)
├── hosts/           # 每個 AI 代理的型別化配置
├── scripts/         # 建置 + DX 工具
├── extension/       # Chrome 擴充套件(側邊欄 + 活動 feed)
├── lib/             # 共用函式庫
├── design/          # 設計二進位 CLI(GPT Image API)
├── docs/designs/    # 設計文件
├── bin/             # CLI 工具
├── test/            # E2E 測試基礎設施
├── supabase/        # 遙測 Schema + Edge Functions
└── [30+ skill dirs] # 每個技能一個目錄

3. gstack 安裝與環境建置

3.1 必備環境

工具版本要求說明
Claude Code最新版Anthropic 提供,gstack 必須在其中執行
Git≥ 2.40版本控制,clone gstack 使用
Bun≥ 1.0gstack 核心執行環境(瀏覽器伺服器)
Node.js≥ 18 LTS僅 Windows 需要(Bun 在 Windows 有已知問題)
Java JDK17 / 21 LTSSpring Boot 後端(若需要)
Maven≥ 3.9Java 專案管理(若需要)

⚠️ 重要:gstack 不是 npm 套件,不需要 Python,不需要 npm install -g。 它透過 git clone 安裝至 Claude Code 的 skills 資料夾。

3.2 安裝 Claude Code

# 安裝 Claude Code(Anthropic 提供的 AI 編碼 CLI)
npm install -g @anthropic-ai/claude-code

# 驗證安裝
claude --version

# 登入 Anthropic 帳號
claude login

企業環境注意:需設定 API Key:

export ANTHROPIC_API_KEY="your-api-key-here"

3.3 安裝 gstack(推薦:Team Mode)

v1.0+ 起推薦使用 Team Mode,團隊成員自動獲得最新版本:

在 Claude Code 中貼上以下指令:

Install gstack in team mode: run `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup --team` then add a "gstack" section to CLAUDE.md.

Team Mode 優勢

  • 自動更新:./setup --team 會在每次啟動時檢查更新
  • 團隊一致性:所有成員使用相同版本
  • 無需手動 git pull

傳統安裝(Vendoring)

若偏好手動管理版本,使用傳統方式安裝至本機:

Install gstack: run `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup` then add a "gstack" section to CLAUDE.md that says to use the /browse skill from gstack for all web browsing, never use mcp__claude-in-chrome__* tools.

安裝後驗證

# 確認技能已安裝
ls ~/.claude/skills/gstack/

# 在 Claude Code 中輸入以下指令進行快速測試
/office-hours

說明

  • 安裝位置:~/.claude/skills/gstack/
  • 不會影響系統 PATH,不在背景執行任何服務
  • 所有設定存放於 .claude/ 資料夾內

3.4 加入專案供團隊共用(選用)

若希望整個團隊的開發者都能使用同一份 gstack 設定,可將 gstack 加入專案倉庫(Vendoring 模式):

在 Claude Code 中貼上:

Add gstack to this project: run `cp -Rf ~/.claude/skills/gstack .claude/skills/gstack && rm -rf .claude/skills/gstack/.git && cd .claude/skills/gstack && ./setup` then add a "gstack" section to this project's CLAUDE.md.

安裝後目錄結構

your-project/
├── .claude/
│   └── skills/
│       └── gstack/        ← 所有技能定義(Markdown)
│           ├── office-hours/
│           ├── plan-ceo-review/
│           ├── spec/
│           ├── review/
│           ├── qa/
│           ├── ship/
│           ├── cso/
│           ├── browse/
│           ├── setup-gbrain/
│           ├── ios-qa/
│           ├── diagram/
│           ├── make-pdf/
│           └── ...(共 30+ 個技能目錄)
├── CLAUDE.md              ← 加入 gstack section
├── backend/
├── frontend/
└── README.md

優勢:使用 git clone 專案後,同事無需額外安裝,直接擁有完整 gstack 技能。

若需完整 git 歷史或貢獻程式碼,使用完整 clone:

git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack

3.5 多平台安裝支援

gstack 支援 10 種 AI Agent 執行環境:

Codex CLI / OpenCode / Cursor / Factory Droid / Slate / Kiro / Hermes

# 安裝至單一專案
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git .agents/skills/gstack
cd .agents/skills/gstack && ./setup --host codex

# 安裝至使用者帳號(全域)
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup --host codex

說明:setup --host codex 會在 ~/.codex/skills/gstack 建立執行根目錄。所有技能在所有支援的 AI Agent 上均可使用。

自動偵測(推薦)

git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup --host auto

auto 會偵測系統中已安裝的 AI Agent(Claude Code、Codex CLI、OpenCode、Cursor、Factory Droid、Slate、Kiro CLI、Hermes 等),自動決定安裝目標。

Kiro CLI

git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup --host kiro

Kiro CLI 支援由 --host auto 自動偵測,如已安裝 kiro-cli 則自動配置。

3.6 OpenClaw 整合

OpenClaw 是 gstack 的技能市集(ClawHub)入口,提供社群共享的第三方技能安裝與分發機制。

安裝 OpenClaw

npm install -g openclaw

從 ClawHub 安裝技能

# 搜尋技能
openclaw search "kubernetes"

# 安裝社群技能
openclaw install @clawhub/k8s-deploy

# 列出已安裝的技能
openclaw list

Dispatch Routing(調度路由)

gstack v1.58+ 內建 OpenClaw 調度支援,當使用者輸入指令時:

  1. 優先匹配 gstack 內建技能(如 /review/ship
  2. 次要匹配 專案本地 .claude/skills/ 中的自訂技能
  3. 最後查詢 ClawHub 已安裝的第三方技能
使用者指令 → gstack 內建 → 本地技能 → ClawHub 技能 → 回報未找到

注意:OpenClaw 安裝的技能遵循與 gstack 相同的隱私政策,不會自動傳送任何程式碼或資料至外部服務。

3.7 語音輸入支援

gstack 所有技能都支援語音觸發短語(Voice-Friendly Trigger Phrases),可搭配 AquaVoice、Whisper 等語音輸入工具:

你說的話觸發的技能
“run a security check” / “see-so”/cso
“test the website”/qa
“do an engineering review” / “tech review”/plan-eng-review
“review my code” / “code x”/review
“ship this”/ship
“run office hours”/office-hours
“speed test”/benchmark
“save my progress”/checkpoint
“check code quality”/health

3.8 設定 CLAUDE.md

每個使用 gstack 的專案,其 CLAUDE.md 需要加入一個 gstack section:

## gstack
Use /browse from gstack for all web browsing. Never use mcp__claude-in-chrome__* tools.
Available skills: /office-hours, /plan-ceo-review, /plan-eng-review,
/plan-design-review, /design-consultation, /design-shotgun, /design-html,
/review, /ship, /land-and-deploy, /canary, /benchmark, /browse,
/connect-chrome, /qa, /qa-only, /design-review, /setup-browser-cookies,
/setup-deploy, /retro, /investigate, /document-release, /codex, /cso,
/autoplan, /careful, /freeze, /guard, /unfreeze, /gstack-upgrade, /learn,
/checkpoint, /health, /sync-gbrain, /pair-agent, /open-gstack-browser,
/spec, /make-pdf, /diagram, /context-save, /context-restore, /scrape,
/skillify.

If gstack skills aren't working, run:
cd .claude/skills/gstack && ./setup

3.9 常見安裝錯誤排除

問題解法
技能沒有出現cd ~/.claude/skills/gstack && ./setup
/browse 失敗cd ~/.claude/skills/gstack && bun install && bun run build
版本過舊在 Claude Code 輸入 /gstack-upgrade
想要更短指令名cd ~/.claude/skills/gstack && ./setup --no-prefix/gstack-qa/qa
想要命名空間指令cd ~/.claude/skills/gstack && ./setup --prefix/qa/gstack-qa
Claude 說找不到技能確認 CLAUDE.md 中有 gstack section
Codex: “Skipped loading skill(s)”cd ~/.codex/skills/gstack && git pull && ./setup --host codex
Windows 執行問題使用 Git Bash 或 WSL;確保 bunnode 都在 PATH 中
Windows 非 Developer Mode在 PowerShell 以管理員身分執行 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" -Name AllowDevelopmentWithoutDevLicense -Value 1
API Key 未設定export ANTHROPIC_API_KEY="sk-..."
自動升級干擾~/.claude/settings.json 加入 "gstack_auto_upgrade": false

4. Sprint 工作流程與技能體系

4.1 Sprint 核心哲學

gstack 是一個流程,不只是工具集合。技能的執行順序就是 Sprint 的執行順序:

Think → Plan → Build → Review → Test → Ship → Reflect

每個技能都會把成果傳遞給下一個技能:

  • /office-hours 撰寫設計文件,供 /plan-ceo-review 讀取
  • /plan-eng-review 撰寫測試計畫,供 /qa 自動取用
  • /review 發現的 Bug,/ship 會驗證已修復

沒有東西會被遺漏,因為每個步驟都知道前面發生了什麼。

4.2 技能串聯關係

graph LR
    OH["office-hours\n設計文件"] --> CEO["plan-ceo-review\n產品視角"]
    CEO --> ENG["plan-eng-review\n架構+測試計畫"]
    ENG --> DES["plan-design-review\n設計審查"]
    DES --> BUILD["實作程式碼"]
    BUILD --> REV["review\n程式碼審查"]
    REV --> QA["qa\n瀏覽器測試"]
    QA --> CSO["cso\n安全掃描"]
    CSO --> SHIP["ship\nPR 發布"]
    SHIP --> LAD["land-and-deploy\n合併+部署"]
    LAD --> CAN["canary\n生產監控"]
    CAN --> RET["retro\n回顧"]

技能間的自動資料流

來源技能產出產物接收技能
/office-hours~/.gstack/projects/{slug}/design.md/plan-ceo-review, /plan-eng-review
/plan-ceo-review願景決策文件/plan-eng-review, /autoplan
/plan-eng-review測試計畫、架構圖/qa(自動讀取)
/plan-design-review設計評分與修訂/design-review(實作後稽核)
/review問題清單(自動修復 + 待確認)/ship(PR 前驗證)
/qaBug 報告 + 回歸測試.gstack/qa-reports/
/shipPR 連結/land-and-deploy

4.3 完整技能目錄(30+ 個)

計畫階段(Planning)

指令角色說明
/office-hoursYC 辦公室時光從這裡開始。六個強制提問,在你寫程式碼前重構你的產品方向。挑戰你的前提假設,設計文件自動傳遞給後續技能。
/plan-ceo-reviewCEO / 創辦人重新思考問題核心。找出需求裡藏著的 10 星產品。四種模式:擴展、選擇性擴展、維持範圍、縮減。
/autoplan審查流水線一個指令,完整計畫。自動執行 CEO → 設計 → 工程審查,僅在需要你做品味決策時停下來詢問。
/plan-eng-review工程主管鎖定架構、資料流、圖、邊界案例與測試。強迫隱藏的假設浮出水面。
/plan-design-review資深設計師對每個設計維度評分 0-10,說明 10 分是什麼樣子,然後修改計畫達到那個水準。

設計階段(Design)

指令角色說明
/design-consultation設計夥伴從零建立完整設計系統。研究業界景觀,提出創意風險,生成真實產品 Mockup,撰寫 DESIGN.md
/design-shotgun設計探索者生成 3 個視覺設計方案,在瀏覽器中開啟比較面板,讓你選擇方向。品味記憶偏向你的偏好。
/design-html設計工程師使用 Pretext 生成生產品質 HTML。文字會在縮放時重排,不再有硬編碼高度。支援 React/Svelte/Vue。
/design-review會寫程式的設計師80 項視覺稽核 + 修復迴圈。Atomic commits,前後截圖比對。AI Slop 評分。

審查階段(Review)

指令角色說明
/review資深工程師找出通過 CI 但會在生產爆炸的 Bug。派遣 7 名專家平行審查(測試、維護性、安全、效能、資料遷移、API 合約、紅隊),自動修復顯而易見的問題。多專家共識標記 MULTI-SPECIALIST CONFIRMED
/investigate偵錯專家系統性根因調查。鐵律:沒有調查就不修復。追蹤資料流,測試假設,3 次修復失敗後停下思考架構。
/codex第二意見(OpenAI)OpenAI Codex CLI 的獨立程式碼審查。三種模式:審查(通過/失敗),對抗挑戰,開放諮詢。雙 AI 交叉分析。

測試階段(Testing)

指令角色說明
/qaQA 主管測試應用程式,找到 Bug,用 Atomic Commits 修復,重新驗證。自動生成每次修復的回歸測試。
/qa-onlyQA 報告員/qa 相同方法論,但只報告,不修改程式碼。
/cso首席資安官OWASP Top 10 + STRIDE 威脅建模安全稽核。零雜訊:17 種假陽性排除,8/10+ 信心閾值。

發布階段(Shipping)

指令角色說明
/ship發布工程師同步 main,跑測試,稽核覆蓋率,推送,開 PR。若沒有測試框架,自動建立。
/land-and-deploy發布工程師合併 PR,等待 CI 和部署,驗證生產狀態。從「審核通過」到「生產驗證」只需一個指令。
/document-release技術寫作者更新所有專案文件以符合剛發布的內容。/ship 會自動觸發它。

維運階段(Operations)

指令角色說明
/canarySRE部署後監控迴圈。監控 Console 錯誤、效能退化和頁面失敗。
/benchmark效能工程師Core Web Vitals 基準測試。每次 PR 前後比較。
/retro工程主管團隊感知的週回顧。/retro global 跨所有專案運行。
/learn記憶管理管理 gstack 跨 Session 學到的知識。回顧、搜尋、修剪、匯出。

Session 智能層(Session Intelligence)

指令角色說明
/checkpoint工作狀態快照儲存與恢復工作狀態快照。捕捉 git 狀態、已做出的決策、剩餘工作。支援跨分支列表,可用於 Conductor 工作區交接。
/health程式碼品質計分包裝專案工具(tsc、biome、knip、shellcheck、測試),計算 0-10 組合分數,追蹤趨勢。分數下降時告訴你哪裡變了以及如何修復。
/context-save上下文保存將目前對話上下文序列化為 JSON 快照存入 .gstack/context/,可跨 Session 恢復完整工作脈絡(v1.57+)。
/context-restore上下文恢復從快照還原先前保存的對話上下文,包含決策歷史、檔案狀態與待辦事項,實現無縫接續工作(v1.57+)。

瀏覽器工具(Browser)

指令角色說明
/browseQA 工程師給 Agent 眼睛。真實 Chromium 瀏覽器,真實點擊,真實截圖。每個指令約 100ms。
/connect-chromeChrome 控制器啟動真實 Chrome,配合側邊欄 AI 助手,觀察每個動作的即時畫面。
/setup-browser-cookiesSession 管理員從你的真實瀏覽器匯入 Cookie,測試需認證的頁面。

工具與安全(Utility & Safety)

指令角色說明
/setup-deploy部署設定器一次性設定 /land-and-deploy。偵測平台、生產 URL 和部署指令。
/gstack-upgrade自動升級器升級至最新版 gstack,同步全域和專案安裝。
/careful安全護欄在危險指令前警告:rm -rfDROP TABLEforce-push 等。
/freeze編輯鎖定限制所有檔案編輯在單一目錄內。防止除錯時意外修改不相關程式碼。
/guard完全安全模式/careful + /freeze 合一。生產環境工作的最高安全設定。
/unfreeze解除鎖定移除 /freeze 邊界。

規格與文件(Spec & Documentation)── v1.0+ 新增

指令角色說明
/spec規格書撰寫者五階段精練流程:草稿 → 結構化 → 挑戰 → 完善 → 凍結。產出可直接用於實作的規格文件(v1.47+)。
/plan-devex-review開發者體驗審查從開發者體驗角度審查 API 設計、SDK 易用性(v1.0+)。
/devex-reviewDX 實作稽核實作完成後的開發者體驗稽核(v1.0+)。
/document-generate文件生成器依 Diataxis 框架自動產出教學、指南、參考、解釋四類文件(v1.35+)。
/plan-tune偏好學習學習開發者的設計品味偏好,調整後續建議(v0.19+)。
/diagram架構圖產生器從程式碼自動產出 Mermaid 架構圖、序列圖、類別圖。支援匯出 SVG/PNG(v1.56+)。
/make-pdfPDF 匯出將設計文件、規格書或報告匯出為排版精美的 PDF。使用 Chromium 渲染引擎確保樣式一致(v1.56+)。
/scrape網頁擷取器智能擷取網頁內容為結構化資料。支援分頁、動態載入、認證頁面(v1.57+)。
/skillify技能建立器將任何工作流程轉換為可重用的 gstack 技能。自動產生 SKILL.md 模板與目錄結構(v1.58+)。

多代理與協作(Multi-Agent)── v1.0+ 新增

指令角色說明
/pair-agent配對代理多代理瀏覽器協作模式,一個代理開發、另一個即時測試(v1.0+)。
/open-gstack-browser瀏覽器啟動快速啟動 gstack 專屬瀏覽器實例(v1.0+)。

GBrain 持久記憶(Persistent Memory)── v1.12+ 新增

指令角色說明
/setup-gbrainGBrain 設定設定 GBrain 持久知識圖譜。支援 split-engine 架構:Claude 寫入、Haiku 讀取(v1.12+)。
/sync-gbrainGBrain 同步安全同步 GBrain 記憶,含 safety guards 防止資料損壞(v1.55+)。

iOS 開發(iOS Development)── v1.43+ 新增

指令角色說明
/ios-qaiOS QA在真實 iOS 設備或模擬器上執行 QA 測試(v1.43+)。
/ios-fixiOS 修復自動修復 iOS 測試發現的問題(v1.43+)。
/ios-design-reviewiOS 設計審查iOS 專用的設計品質稽核(v1.43+)。
/ios-cleaniOS 清理清理 iOS 建置產物和快取(v1.43+)。
/ios-synciOS 同步同步 iOS 專案設定(v1.43+)。

4.4 Builder Ethos(建構者信條)

gstack 將以下三個核心原則注入每個技能的前言(Preamble),形塑 AI 建議的思維方式:

原則一:Boil the Ocean(煮沸海洋)

AI 輔助開發讓「完整性」的邊際成本接近零。當完整實作比捷徑多花幾分鐘時──就做完整的那個。

任務傳統人工AI 輔助壓縮比
樣板 / 支架2 天15 分鐘~100x
測試撰寫1 天15 分鐘~50x
功能實作1 週30 分鐘~30x
Bug 修復 + 回歸測試4 小時15 分鐘~20x
架構 / 設計2 天4 小時~5x

原則二:Search Before Building(建構前先搜尋)

1000x 工程師的第一直覺是「有人解決過這個問題嗎?」而不是「讓我從頭設計」。

三層知識架構:

  • Layer 1(試驗過的):標準模式,久經考驗的方法
  • Layer 2(新興流行的):當前最佳實務,生態系趨勢
  • Layer 3(第一原理):從特定問題推理出的原創觀察──最有價值

原則三:User Sovereignty(使用者主權)

AI 模型給建議。使用者做決定。這條規則覆蓋所有其他規則。

正確模式(生成-驗證迴圈):

  • AI 生成建議
  • 使用者驗證並決定
  • AI 永不跳過驗證步驟,即使非常有信心

5. 虛擬開發團隊設計(企業實戰)

5.1 團隊架構總覽

在 gstack 中,「虛擬開發團隊」不是透過 YAML 設定檔定義的,而是每個 Slash Command 就代表一位專家角色,它們依照 Sprint 流程串聯:

graph TD
    OH[🕐 /office-hours\nYC 辦公室時光] --> CEO[🎯 /plan-ceo-review\nCEO 視角]
    CEO --> ENG[🏛️ /plan-eng-review\n工程主管]
    ENG --> DES[🎨 /plan-design-review\n資深設計師]
    DES --> BUILD[💻 實作程式碼]
    BUILD --> REV[🔍 /review\n資深工程師]
    REV --> QA[🧪 /qa\nQA 主管]
    QA --> CSO[🔒 /cso\n首席資安官]
    CSO -->|通過| SHIP[🚀 /ship\n發布工程師]
    CSO -->|發現問題| BUILD
    SHIP --> LAD[✅ /land-and-deploy\n合併+部署]
    LAD --> CAN[📡 /canary\nSRE 監控]

5.2 /office-hours(YC 辦公室時光)

在你規劃、或寫程式碼之前,先和一位 YC 風格的夥伴思考你真正在建構什麼。

六個強制提問(Startup Mode):

  1. 誰是那個真正需要這個的具體真實的人?
  2. 他們目前怎麼解決這個問題?
  3. 給我一個具體例子,不要假設情境
  4. 你能在明天就發布的最窄切入點是什麼?
  5. 上週有什麼讓你驚喜的事情?
  6. 這個產品在 10 年後適合什麼世界?

Builder Mode(適合黑客松、副業專案、開源):熱情的協作者,幫你找出最酷的版本。問題是生成性的,不是盤問性的。

設計文件自動寫入 ~/.gstack/projects/,直接供後續技能讀取。

5.3 /plan-ceo-review(CEO 視角)

目標:找出需求裡藏著的 10 星產品。

四種模式

  • SCOPE EXPANSION — 展示大膽版本,每個擴展單獨提出
  • SELECTIVE EXPANSION — 維持現有範圍為基準,展示可能的機會
  • HOLD SCOPE — 對現有計畫進行最嚴格把關
  • SCOPE REDUCTION — 找出最小可行版本

願景和決策保存至 ~/.gstack/projects/,可升級加入 docs/designs/ 讓團隊共用。

範例輸出(MVP 決策文件)

## 會員管理系統 MVP 決策

### 納入 MVP(Sprint 1-2)
1. ✅ 會員註冊 / 登入(核心路徑)
2. ✅ 基本個人資料管理
3. ✅ 密碼重設流程

### 延後(Sprint 3+)
- ❌ 社群登入(OAuth)— 影響範圍大,延後
- ❌ 會員等級制度 — 需更多業務規則討論

### 絕對不做
- ⛔ 直接刪除會員資料(改為停用,保留稽核記錄)

5.4 /plan-eng-review(工程主管視角)

目標:鎖定架構,讓產品願景真正可建構。

強制完成的內容:

  • 架構設計(含 ASCII 圖、序列圖、狀態機圖)
  • 系統邊界與資料流
  • 失敗模式與邊界案例
  • 信任邊界
  • 測試矩陣

Review Readiness Dashboard(每次審查後顯示):

+====================================================================+
|                    REVIEW READINESS DASHBOARD                       |
+====================================================================+
| Review          | Runs | Last Run            | Status    | Required |
|-----------------|------|---------------------|-----------|----------|
| Eng Review      |  1   | 2026-04-03 10:00    | CLEAR     | YES      |
| CEO Review      |  1   | 2026-04-03 09:30    | CLEAR     | no       |
| Design Review   |  0   | —                   | —         | no       |
+--------------------------------------------------------------------+
| VERDICT: CLEARED — Eng Review passed                                |
+====================================================================+

測試計畫自動寫入 ~/.gstack/projects/,之後 /qa 執行時自動讀取。

5.5 /plan-design-review(資深設計師視角)

七項審查通道(計畫階段):

  1. 資訊架構
  2. 互動狀態覆蓋(空狀態、錯誤狀態、載入狀態)
  3. 使用者旅程
  4. AI Slop 風險偵測
  5. 設計系統對齊
  6. 響應式 / 無障礙
  7. 未解決的設計決策
範例:4/10 → 8/10(修復後)
Pass 2 (互動狀態): 2/10 → 4 個 UI 功能,定義 0/20 互動狀態
Pass 4 (AI Slop): 4/10 → 「帶漸層的英雄區塊」是前 2 名 AI 生成外觀

5.6 /review(資深工程師審查)

v0.14.4.0 新增:平行專家審查軍團(Review Army)

每次 /review 現在會派遣 7 名專家 subagent 平行審查你的程式碼:

專家觸發條件審查範圍
測試永遠啟用測試缺口、覆蓋率假象
維護性永遠啟用死碼、魔術數字、命名
安全有 auth 範圍注入、信任邊界、密碼處理
效能有後端/前端N+1 查詢、Bundle 大小、懶載入
資料遷移有遷移檔案遷移安全、向下相容
API 合約有 Controller/Route破壞性變更、版本控制
紅隊大型 diff(200+ 行)對抗性分析、隱藏漏洞

每個專家輸出結構化 JSON 結果,包含嚴重性、信心分數、檔案路徑、行號。多個專家標記相同問題時,信心度提升並標記 MULTI-SPECIALIST CONFIRMED

每次審查計算 PR 品質分數(0-10):10 - (critical * 2 + informational * 0.5)

查找目標清單(不只是風格問題):

  • N+1 查詢
  • 競爭條件
  • 錯誤的信任邊界
  • 缺少索引
  • 枚舉處理器遺漏
  • 測試覆蓋假象
  • 範圍偏移偵測(Scope Drift Detection)

v1.58+ 範圍偏移偵測增強

/review 現在會自動比對 PR 的變更範圍與原始 /spec/office-hours 產出的設計文件,偵測以下情況:

偵測類型說明
新增未規劃功能PR 包含設計文件中未提及的功能
遺漏已規劃功能設計文件中的功能在 PR 中未實作
檔案範圍溢出修改了與任務無關的檔案
副作用變更重構或「順便修」的改動

偵測到範圍偏移時,會在審查報告中標記 ⚠️ SCOPE DRIFT 並建議拆分 PR。

Fix-First 機制

  • [AUTO-FIXED] — 機械性修復自動完成
  • [ASK] — 模糊/安全/設計決策需要你確認

程式碼輸出範例(Spring Boot 企業項目)

/**
 * 會員登入 Controller
 */
@RestController
@RequestMapping("/api/v1/auth")
@RequiredArgsConstructor
@Slf4j
public class AuthController {

    private final AuthUseCase authUseCase;

    @PostMapping("/login")
    public ResponseEntity<LoginResponse> login(
            @Valid @RequestBody LoginRequest request) {

        log.info("Login attempt for account: {}",
                 maskAccount(request.getAccount()));

        LoginResult result = authUseCase.login(
            new LoginCommand(request.getAccount(), request.getPassword())
        );

        return ResponseEntity.ok(LoginResponse.from(result));
    }

    private String maskAccount(String account) {
        if (account == null || account.length() < 4) return "***";
        return account.substring(0, 2) + "***" +
               account.substring(account.length() - 2);
    }
}

5.7 /qa(QA 主管)

四種模式:

  • Diff-aware(自動) — 讀取 git diff main,識別受影響的頁面,專門測試
  • Full — 對整個應用程式系統性探索,5-15 分鐘
  • Quick — 30 秒冒煙測試
  • Regression — 與之前基準比較

自動生成回歸測試,追蹤每個修復的具體情境。

JUnit 5 測試輸出範例

@ExtendWith(MockitoExtension.class)
class AuthUseCaseTest {

    @Mock
    private MemberRepository memberRepository;

    @Mock
    private PasswordEncoder passwordEncoder;

    @Mock
    private JwtTokenProvider jwtTokenProvider;

    @InjectMocks
    private AuthUseCaseImpl authUseCase;

    @Test
    @DisplayName("登入成功 - 帳號密碼正確時應返回 JWT Token")
    void login_whenValidCredentials_thenReturnJwtToken() {
        // Given
        String account = "john@example.com";
        Member member = Member.builder()
            .id(1L).account(account)
            .passwordHash("$2a$12$hashedPassword")
            .status(MemberStatus.ACTIVE)
            .build();

        given(memberRepository.findByAccount(account))
            .willReturn(Optional.of(member));
        given(passwordEncoder.matches(anyString(), eq(member.getPasswordHash())))
            .willReturn(true);
        given(jwtTokenProvider.generateToken(member.getId()))
            .willReturn("jwt.token.here");

        // When
        LoginResult result = authUseCase.login(
            new LoginCommand(account, "Password123!")
        );

        // Then
        assertThat(result.getToken()).isEqualTo("jwt.token.here");
        assertThat(result.isSuccess()).isTrue();
    }

    @Test
    @DisplayName("登入失敗 - 密碼錯誤應拋出 AuthenticationException")
    void login_whenWrongPassword_thenThrowAuthenticationException() {
        // Given
        Member member = Member.builder()
            .id(1L).account("john@example.com")
            .passwordHash("$2a$12$hashedPassword")
            .failedLoginAttempts(0)
            .build();

        given(memberRepository.findByAccount(anyString()))
            .willReturn(Optional.of(member));
        given(passwordEncoder.matches(anyString(), anyString()))
            .willReturn(false);

        // When & Then
        assertThatThrownBy(() ->
            authUseCase.login(new LoginCommand("john@example.com", "wrongPassword"))
        ).isInstanceOf(AuthenticationException.class)
         .hasMessageContaining("帳號或密碼錯誤");
    }
}

5.8 /cso(首席資安官)

執行 OWASP Top 10 + STRIDE 威脅建模,零雜訊設計(17 種假陽性排除,8/10+ 信心閾值)。

範例輸出

CRITICAL: user_search 的 SQL Injection(UserRepository.java:47)
  攻擊情境:攻擊者輸入 "'; DROP TABLE members;--" 可刪除整個會員表
  修復:使用參數化查詢

HIGH: Session Token 儲存於 localStorage(auth.ts:12)
  攻擊情境:XSS 攻擊可竊取所有使用者 Token
  修復:改用 HttpOnly Cookie

MEDIUM: /api/login 缺乏速率限制
MEDIUM: 密碼最短長度未強制(允許 1 字元)

LOW: 缺少 X-Frame-Options 標頭

共 4 個發現,掃描 12 個檔案。
嚴重等級處理方式
CRITICAL立即阻擋 PR,修復後才能合併
HIGH本 Sprint 內修復
MEDIUM記錄於 Security Backlog
LOW下次迭代處理

5.9 /ship(發布工程師)

測試框架自動建立:若沒有測試框架,/ship 會安裝它,寫 3-5 個真實測試,設定 GitHub Actions CI。

Greptile 整合:若專案有 Greptile PR 審查,/ship 自動讀取並分類:

  • [VALID] → 修復
  • [ALREADY FIXED] → 自動回覆確認
  • [FALSE POSITIVE] → 說明原因推回

v1.58+ 版本標籤增強

/ship 現在支援自動版本標籤(Auto Version Tagging):

功能說明
語意化版本根據 diff 分析自動建議 semver 版本號(patch/minor/major)
Changelog 產出從 commit 歷史自動生成結構化 Changelog
Release Notes產出面向使用者的發布說明
Pre-release 標籤支援 -alpha-beta-rc 預發布標籤
# 使用方式
/ship                    # 自動偵測版本
/ship --version 2.1.0    # 指定版本
/ship --pre-release beta # 預發布版本

範例輸出

Tests: 42 → 51 (+9 new). PR: github.com/you/app/pull/42
Version: v2.1.0 (auto-detected: minor bump — new API endpoint added)

5.10 /investigate(系統偵錯)

鐵律:沒有根因調查就不修復。

執行步驟:

  1. 追蹤資料流(從輸入到輸出的完整路徑)
  2. 對照已知 Bug 模式
  3. 逐一測試假設
  4. 3 次修復嘗試失敗 → 停下來質疑架構

/investigate 會自動啟動 /freeze,將編輯限制在正在調查的模組,防止意外修改不相關程式碼。


6. 端到端開發流程

6.1 完整開發流程圖

graph TD
    A["需求輸入\nJira Ticket / 口述"] --> B{"office-hours\n需求精煉"}
    B --> C["產出 design.md\n+ MVP 決策清單"]
    C --> D{"plan-ceo-review\n優先級確認"}
    D -->|核准| E{"plan-eng-review\n架構設計"}
    D -->|退回| B
    E --> F["產出架構圖\n+ 測試矩陣 + ADR"]
    F --> G["人工架構審查 ✅"]
    G -->|通過| H["實作程式碼\nClaude Code Session"]
    G -->|修改| E
    H --> I["產出 Controller\n+ Service + Repository\n+ DTO"]
    I --> J{"review\n程式碼審查"}
    J --> K["AUTO-FIXED + ASK"]
    K --> L{"qa\n瀏覽器功能測試"}
    L --> M["回歸測試 + Bug 報告"]
    M --> N{"cso\n安全掃描"}
    N -->|CRITICAL 發現| O["退回修改"]
    O --> H
    N -->|通過| P["ship 建立 PR"]
    P --> Q["CI Pipeline\n編譯 + 測試 + SonarQube"]
    Q -->|失敗| R["通知開發者修復"]
    R --> H
    Q -->|通過| S["Code Review\n人工審查"]
    S -->|核准| T["land-and-deploy"]
    T --> U["等待 CI + 部署"]
    U --> V["合併 main + 生產驗證"]
    V --> W["canary 金絲雀監控"]
    W --> X["checkpoint 保存工作狀態"]
    X --> Y["retro Sprint 回顧"]

6.2 各步驟執行指令

gstack 工作流程完全在 Claude Code 中使用 Slash Commands 驅動,無獨立 CLI 工具:

# ── Step 1:需求精煉(任何 Sprint 的起點)
/office-hours
# → 六個強制提問,確認你真正要建構什麼
# → 輸出:~/.gstack/projects/{slug}/design.md

# ── Step 2:CEO 視角優先級確認
/plan-ceo-review
# → 找出需求中藏著的 10 星產品
# → 輸出:MVP 決策文件 + 延後清單

# ── Step 3:工程主管架構設計
/plan-eng-review
# → 鎖定架構、資料流、邊界案例、測試矩陣
# → 輸出:測試計畫(自動傳遞給 /qa)

# ── Step 4:資深設計師設計審查(選用)
/plan-design-review
# → 七項審查通道,評分 0-10
# → 輸出:設計修訂清單

# ── Step 5:實作程式碼(人工或 Claude Code Session)
# → 開發者根據計畫文件實作

# ── Step 6:資深工程師程式碼審查
/review
# → 找出通過 CI 但會在生產爆炸的 Bug
# → [AUTO-FIXED] 自動修復 / [ASK] 等待確認

# ── Step 7:QA 主管功能測試(含瀏覽器)
/qa
# → 真實瀏覽器測試 + 自動生成回歸測試
# → Diff-aware:只測屬於這次 PR 的範圍

# ── Step 8:安全審查
/cso
# → OWASP Top 10 + STRIDE 威脅建模
# → CRITICAL 阻擋 PR,HIGH 本 Sprint 修復

# ── Step 9:建立 PR 並發布
/ship
# → 同步 main,跑測試,稽核覆蓋率,推送,開 PR

# ── Step 10:合併並部署生產
/land-and-deploy
# → 合併 PR,等待 CI + 部署,驗證生產狀態

# ── Step 11:保存工作狀態(推薦)
/checkpoint
# → 建立工作快照,方便跨 Session 繼續
# → 下次開啟 Claude Code 時自動恢復上下文

# ── Step 11b:完整上下文保存與恢復(v1.57+)
/context-save
# → 序列化完整對話上下文為 JSON 快照
# → 存入 .gstack/context/{timestamp}.json
# 恢復時:
/context-restore
# → 從快照還原決策歷史、檔案狀態與待辦事項

# ── Step 12:Sprint 回顧與學習
/retro
# → Sprint 回顧,知識沉澱
/learn
# → 從本次 Sprint 的失敗中學習

一鍵執行整個計畫流程(自動模式):

/autoplan
# → 自動執行 CEO → 設計 → 工程審查
# → 僅在需要品味決策時停下詢問

6.3 分支策略與 PR 規範

main           ─────────────────────────────→  生產環境
  ↑ Merge PR(需 2 人審查 + CI 通過)
develop        ──────────────────────────────→  測試環境
  ↑ Merge PR(需 1 人審查 + CI 通過)
feature/*      ──→  各功能開發分支
hotfix/*       ──→  緊急修復

PR 標題格式

type(scope): 簡短描述 [JIRA-ID]

範例:
feat(member): 新增會員登入 API [MEM-001]
fix(auth): 修復 JWT 過期驗證漏洞 [SEC-042]
refactor(order): 重構訂單 Service 層 [TECH-015]

7. 實戰案例:會員管理系統

7.1 系統設計概覽

功能範圍:
- 會員註冊 / 登入 / 登出
- 個人資料管理
- 密碼變更 / 重設
- 操作稽核記錄

7.2 API 設計(由 /plan-eng-review 產出)

# docs/api/member-api.yaml(OpenAPI 3.0)
openapi: "3.0.3"
info:
  title: "會員管理 API"
  version: "1.0.0"
  description: "企業會員管理系統 RESTful API"

servers:
  - url: "https://api.example.com/api/v1"

paths:
  /auth/login:
    post:
      summary: "會員登入"
      tags: [Authentication]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
      responses:
        '200':
          description: "登入成功"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '423':
          description: "帳號已鎖定"
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'

  /members/{memberId}:
    get:
      summary: "取得會員資料"
      security:
        - bearerAuth: []
      parameters:
        - name: memberId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: "成功"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberResponse'

components:
  schemas:
    LoginRequest:
      type: object
      required: [account, password]
      properties:
        account:
          type: string
          format: email
          example: "john@example.com"
        password:
          type: string
          minLength: 8
          maxLength: 64
          description: "密碼(不會被記錄在 Log)"
    LoginResponse:
      type: object
      properties:
        accessToken:
          type: string
        tokenType:
          type: string
          example: "Bearer"
        expiresIn:
          type: integer
          example: 3600
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

7.3 DB Schema(由 /plan-eng-review 產出)

-- V001__create_member_tables.sql(Flyway Migration)

CREATE TABLE members (
    id              BIGINT          NOT NULL AUTO_INCREMENT,
    account         VARCHAR(100)    NOT NULL COMMENT '登入帳號(Email)',
    password_hash   VARCHAR(255)    NOT NULL COMMENT 'bcrypt hash',
    full_name       VARCHAR(100)    NOT NULL COMMENT '真實姓名',
    phone_encrypted VARCHAR(255)    NULL     COMMENT '電話(AES-256 加密)',
    status          ENUM(
                        'ACTIVE',
                        'LOCKED',
                        'INACTIVE'
                    ) NOT NULL DEFAULT 'ACTIVE',
    failed_login_attempts TINYINT   NOT NULL DEFAULT 0,
    locked_until    DATETIME        NULL,
    last_login_at   DATETIME        NULL,
    created_at      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_members_account (account),
    INDEX idx_members_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='會員主表';

CREATE TABLE member_audit_logs (
    id          BIGINT      NOT NULL AUTO_INCREMENT,
    member_id   BIGINT      NOT NULL,
    action      VARCHAR(50) NOT NULL COMMENT '操作類型: LOGIN, LOGOUT, UPDATE_PROFILE',
    ip_address  VARCHAR(45) NOT NULL COMMENT '支援 IPv6',
    user_agent  VARCHAR(500) NULL,
    result      ENUM('SUCCESS', 'FAILURE') NOT NULL,
    detail      JSON        NULL COMMENT '附加資訊(不含密碼等敏感資料)',
    created_at  DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    INDEX idx_audit_member_id (member_id),
    INDEX idx_audit_created_at (created_at),
    CONSTRAINT fk_audit_member FOREIGN KEY (member_id) REFERENCES members(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='會員操作稽核記錄';

7.4 Clean Architecture 後端實作(Claude Code Session 實作)

Domain 層 - Entity:

// domain/entity/Member.java
@Entity
@Table(name = "members")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {

    private static final int MAX_FAILED_ATTEMPTS = 3;
    private static final Duration LOCK_DURATION = Duration.ofMinutes(30);

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String account;

    @Column(nullable = false)
    private String passwordHash;

    @Column(nullable = false)
    private String fullName;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private MemberStatus status = MemberStatus.ACTIVE;

    @Column(nullable = false)
    private int failedLoginAttempts = 0;

    @Column
    private LocalDateTime lockedUntil;

    /**
     * 驗證密碼,失敗時累計次數,達上限則鎖定帳號
     */
    public void incrementFailedAttempts() {
        this.failedLoginAttempts++;
        if (this.failedLoginAttempts >= MAX_FAILED_ATTEMPTS) {
            this.status = MemberStatus.LOCKED;
            this.lockedUntil = LocalDateTime.now().plus(LOCK_DURATION);
        }
    }

    /**
     * 登入成功,重置失敗次數
     */
    public void onLoginSuccess() {
        this.failedLoginAttempts = 0;
        this.lockedUntil = null;
        if (this.status == MemberStatus.LOCKED) {
            this.status = MemberStatus.ACTIVE;
        }
    }

    public boolean isLocked() {
        if (status != MemberStatus.LOCKED) return false;
        if (lockedUntil != null && LocalDateTime.now().isAfter(lockedUntil)) {
            // 鎖定已過期,自動解鎖
            this.status = MemberStatus.ACTIVE;
            this.failedLoginAttempts = 0;
            return false;
        }
        return true;
    }
}

Application 層 - Use Case:

// application/usecase/AuthUseCaseImpl.java
@Service
@RequiredArgsConstructor
@Slf4j
public class AuthUseCaseImpl implements AuthUseCase {

    private final MemberRepository memberRepository;
    private final PasswordEncoder passwordEncoder;
    private final JwtTokenProvider jwtTokenProvider;
    private final AuditLogService auditLogService;

    @Override
    @Transactional
    public LoginResult login(LoginCommand command) {
        Member member = memberRepository.findByAccount(command.getAccount())
            .orElseThrow(() -> new AuthenticationException("帳號或密碼錯誤"));

        if (member.isLocked()) {
            auditLogService.record(member.getId(), "LOGIN", "FAILURE", 
                                   "帳號已鎖定");
            throw new AccountLockedException("帳號已鎖定,請稍後再試");
        }

        if (!passwordEncoder.matches(command.getPassword(), 
                                      member.getPasswordHash())) {
            member.incrementFailedAttempts();
            memberRepository.save(member);
            auditLogService.record(member.getId(), "LOGIN", "FAILURE", 
                                   "密碼錯誤");
            throw new AuthenticationException("帳號或密碼錯誤");
        }

        member.onLoginSuccess();
        memberRepository.save(member);

        String token = jwtTokenProvider.generateToken(member.getId());
        auditLogService.record(member.getId(), "LOGIN", "SUCCESS", null);

        log.info("Member {} logged in successfully", 
                 maskAccount(command.getAccount()));

        return LoginResult.success(token, 3600L);
    }

    private String maskAccount(String account) {
        if (account == null || account.length() < 4) return "***";
        return account.substring(0, 2) + "***" + 
               account.substring(account.length() - 2);
    }
}

7.5 前端(Vue 3)- 由 Claude Code Session 產出

<!-- src/views/auth/LoginView.vue -->
<template>
  <div class="login-container">
    <el-card class="login-card">
      <h2>會員登入</h2>
      <el-form
        ref="formRef"
        :model="loginForm"
        :rules="rules"
        @submit.prevent="handleLogin"
      >
        <el-form-item prop="account">
          <el-input
            v-model="loginForm.account"
            placeholder="請輸入帳號(Email)"
            autocomplete="username"
          />
        </el-form-item>
        <el-form-item prop="password">
          <el-input
            v-model="loginForm.password"
            type="password"
            placeholder="請輸入密碼"
            autocomplete="current-password"
            show-password
          />
        </el-form-item>
        <el-button
          type="primary"
          native-type="submit"
          :loading="isLoading"
          block
        >
          登入
        </el-button>
      </el-form>
    </el-card>
  </div>
</template>

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import { ElMessage } from 'element-plus'

const router = useRouter()
const authStore = useAuthStore()
const formRef = ref()
const isLoading = ref(false)

const loginForm = reactive({
  account: '',
  password: ''
})

const rules = {
  account: [
    { required: true, message: '請輸入帳號', trigger: 'blur' },
    { type: 'email', message: '帳號格式不正確', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '請輸入密碼', trigger: 'blur' },
    { min: 8, message: '密碼最少 8 個字元', trigger: 'blur' }
  ]
}

const handleLogin = async () => {
  if (!await formRef.value?.validate()) return
  
  isLoading.value = true
  try {
    await authStore.login(loginForm.account, loginForm.password)
    router.push('/dashboard')
  } catch (error: any) {
    ElMessage.error(error.message ?? '登入失敗,請稍後再試')
  } finally {
    isLoading.value = false
  }
}
</script>

7.6 gstack 技能參與對照表

步驟gstack 技能輸入輸出
需求精煉/office-hours口述需求design.md(自動傳遞)
優先級決定/plan-ceo-reviewdesign.mdMVP 決策文件
API + 架構設計/plan-eng-review計畫文件架構圖 + 測試矩陣
設計稽核/plan-design-review設計方案修訂清單(0-10 評分)
後端實作Claude Code SessionAPI Spec + SchemaJava 程式碼
前端實作Claude Code SessionAPI Spec + MockupVue 3 元件
程式碼審查/review所有異動問題清單 + 自動修復
瀏覽器測試/qaPR Diff回歸測試 + Bug 報告
安全掃描/cso所有程式碼OWASP 報告(阻擋 CRITICAL)
建立 PR/ship已通過審查的程式碼PR + 覆蓋率稽核
合併並部署/land-and-deployPR 連結生產驗證報告

8. DevOps 與自動化

8.1 CI/CD 架構圖

flowchart LR
    subgraph "開發端"
        Dev[開發者\n+ gstack]
        PR[Pull Request]
    end
    subgraph "CI Pipeline(GitHub Actions)"
        C1[程式碼品質\nCheckstyle]
        C2[單元測試\nJUnit]
        C3[安全掃描\nSonarQube]
        C4[容器建置\nDocker Build]
        C5[映像推送\nHarbor]
    end
    subgraph "CD Pipeline(ArgoCD)"
        D1[Staging 部署]
        D2[Smoke Test]
        D3[Production 部署]
        D4[Rollback]
    end
    
    Dev --> PR
    PR --> C1
    C1 --> C2
    C2 --> C3
    C3 --> C4
    C4 --> C5
    C5 --> D1
    D1 --> D2
    D2 -->|Pass| D3
    D2 -->|Fail| D4

8.2 GitHub Actions CI 設定

# .github/workflows/ci.yml
name: CI Pipeline

on:
  pull_request:
    branches: [main, develop]
  push:
    branches: [main, develop]

env:
  JAVA_VERSION: '17'
  MAVEN_OPTS: '-Xmx1024m'

jobs:
  build-and-test:
    name: 編譯與測試
    runs-on: ubuntu-latest
    
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: test-password-ci
          MYSQL_DATABASE: member_test
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s
      redis:
        image: redis:7
        ports:
          - 6379:6379

    steps:
      - name: 取得程式碼
        uses: actions/checkout@v4

      - name: 設定 Java ${{ env.JAVA_VERSION }}
        uses: actions/setup-java@v4
        with:
          java-version: ${{ env.JAVA_VERSION }}
          distribution: 'temurin'
          cache: maven

      - name: 執行測試
        run: mvn verify -P ci
        env:
          SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/member_test
          SPRING_REDIS_HOST: localhost

      - name: 上傳測試報告
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-reports
          path: target/surefire-reports/

      - name: SonarQube 掃描
        run: mvn sonar:sonar
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
          SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }}

  security-scan:
    name: 安全掃描
    runs-on: ubuntu-latest
    needs: build-and-test
    steps:
      - uses: actions/checkout@v4
      
      - name: 相依套件漏洞掃描(OWASP Dependency Check)
        run: mvn org.owasp:dependency-check-maven:check
        
      # 注意:gstack /cso 在 Claude Code Session 內執行,不是 CI 終端指令
      # CI 中建議使用上方 SpotBugs + OWASP Dependency Check
      # 於 PR 合併前,開發者在本機執行 /cso,待 CI 通過後才合併

      - name: 上傳安全報告
        uses: actions/upload-artifact@v4
        with:
          name: security-report
          path: security-report.md

  docker-build:
    name: 建置 Docker 映像
    runs-on: ubuntu-latest
    needs: [build-and-test, security-scan]
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4

      - name: 建置 JAR
        run: mvn package -DskipTests

      - name: 設定 Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: 登入 Harbor
        uses: docker/login-action@v3
        with:
          registry: ${{ vars.HARBOR_URL }}
          username: ${{ secrets.HARBOR_USER }}
          password: ${{ secrets.HARBOR_PASSWORD }}

      - name: 建置並推送映像
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            ${{ vars.HARBOR_URL }}/myapp/backend:${{ github.sha }}
            ${{ vars.HARBOR_URL }}/myapp/backend:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max

8.3 Dockerfile(多階段建置)

# Dockerfile
# Stage 1: 建置
FROM eclipse-temurin:17-jdk-alpine AS builder
WORKDIR /build
COPY pom.xml .
# 預先下載相依套件(提升快取效率)
RUN mvn dependency:go-offline -q
COPY src ./src
RUN mvn package -DskipTests -q

# Stage 2: 執行環境(最小化映像)
FROM eclipse-temurin:17-jre-alpine AS runtime
WORKDIR /app

# 建立非 root 使用者(安全要求)
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

# 從 builder stage 複製 JAR
COPY --from=builder /build/target/*.jar app.jar

# 設定 JVM 參數
ENV JAVA_OPTS="-XX:MaxRAMPercentage=75.0 -XX:+UseG1GC"

EXPOSE 8080

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

8.4 /land-and-deploy 一鍵部署

/land-and-deploy 是 gstack 的最終發布技能,從「PR 審核通過」到「生產驗證」只需一個指令:

/land-and-deploy

執行流程

  1. 合併 PR(squash + merge message 自動生成)
  2. 等待 CI Pipeline 完成(build + test + security scan)
  3. 等待部署完成(偵測 Vercel、Railway、Render、Kubernetes 等)
  4. 驗證生產狀態(關鍵頁面存活確認)
  5. 若失敗,回報確切失敗點(不靜默失敗)

一次性設定(首次使用):

/setup-deploy

gstack 自動偵測你的平台(Vercel/Railway/Render/AWS/GCP/Azure)、生產 URL 和部署指令,之後每次 /land-and-deploy 就能無縫使用。

範例輸出

Merging PR #42...
CI Pipeline: ✅ Passed (2m 14s)
Deployment: ✅ Vercel deployed https://app.company.com/
Health check: ✅ /api/health → 200 OK
Land and deploy complete.

8.5 /canary 金絲雀監控

部署後持續監控,確保生產品質穩定:

/canary

監控範圍

  • Console 錯誤率(閾值:> 1% 觸發警告)
  • API 回應時間退化(P95 > 基準 × 1.5 倍)
  • 頁面載入失敗(靜態資源 404)
  • JavaScript 例外(未捕捉的運行時錯誤)

監控迴圈模式

/canary --duration 30min --interval 2min
# → 每 2 分鐘截圖並分析 Console + Network
# → 30 分鐘後產出金絲雀報告

8.6 /benchmark 效能基準測試

每次 PR 前後比較 Core Web Vitals,確保效能不退化:

/benchmark

測量指標

指標說明良好閾值
LCP(Largest Contentful Paint)主要內容載入時間< 2.5s
FID(First Input Delay)首次輸入延遲< 100ms
CLS(Cumulative Layout Shift)累積版面偏移< 0.1
TTFB(Time to First Byte)首字節時間< 800ms
TTI(Time to Interactive)可互動時間< 3.8s

PR 前後比較範例輸出

Benchmark comparison:
  LCP: before=2.1s → after=1.8s ✅ (-14%)
  CLS: before=0.05 → after=0.03 ✅ (-40%)
  TTFB: before=320ms → after=290ms ✅ (-9%)
No regressions detected.

9. 並行 Sprint 與瀏覽器模式

9.1 並行 Sprint 架構

gstack 的 Sprint 流程設計支援多個 Sprint 同時進行。每個功能可在獨立的 Claude Code Session 中執行,相互不干擾:

Claude Session A:/office-hours → /plan-ceo-review → /plan-eng-review
                  → /review → /qa → /ship(會員登入功能)

Claude Session B:/office-hours → /plan-ceo-review → /plan-eng-review
                  → /review → /qa → /ship(訂單管理功能)

Claude Session C:/retro → /learn(本週回顧與知識沉澱)

適用場景

  • 多個獨立功能同時開發(不同 Branch)
  • Code Review + 新功能開發並行
  • 偵錯(在 /investigate + /freeze 的獨立空間)

9.2 Conductor 整合

Conductor 是 gstack 的官方並行管理整合,可同時協調最多 10-15 個 Sprint

# 在 Conductor 設定中引用 gstack 技能
conductor.yml:

sprints:
  - branch: feature/auth
    trigger: /plan-eng-review
    parallel_limit: 3

  - branch: feature/payment
    trigger: /plan-eng-review
    parallel_limit: 3

效益:一個工程師可同時監督 10+ 個功能的進展,Conductor 介面顯示每個 Sprint 的當前技能狀態。

9.3 瀏覽器模式(/browse)

給 Claude Code 一雙在瀏覽器中行動的眼睛:

/browse

底層架構

  • 持久化 Chromium Daemon(使用 Bun Process Manager)
  • 每個指令約 100ms(與常規 Bash 工具相當)
  • 連接 ~/.claude/browser.sock
  • CDP(Chrome DevTools Protocol)綁定 localhost,防止遠端存取
  • Trust Boundary 標記:區分 page content vs. AI instructions,防止惡意網頁注入 prompt

常用場景

# QA 測試特定頁面
/browse → 點擊登入按鈕 → 輸入測試帳號 → 截圖確認

# /qa 工作流程會自動調用 /browse
/qa
# → 讀取 git diff,識別受影響頁面
# → 自動在瀏覽器中重現 Bug
# → 截圖前後對比

9.4 真實 Chrome 模式($B connect)

使用你的個人真實 Chrome(包含你的 Cookie、Extension、登入狀態):

# 在終端機中控制真實 Chrome
$B connect

啟動後

  • Chrome 視窗顯示 綠色光暈(Green Shimmer)表示 AI 已接管
  • 側邊欄開啟 AI 助手面板
  • 每個點擊/輸入動作即時顯示於 Chrome
  • 可輸入自然語言指令:B: 點擊登入,帳號填 test@example.com

/browse 的差異

特性/browse(內建 Chromium)$B connect(真實 Chrome)
登入狀態需要手動設定 Cookie使用你真實的登入狀態
適用場景CI/CD 自動化測試需要驗證的頁面互動
速度~100ms/指令~200ms/指令
可見度背景執行即時可見
Per-tab Agents不適用支援(每個分頁獨立 Agent)

9.5 CSS Inspector 與 Live Style 編輯(v0.14.2.0+)

gstack 的瀏覽器模式內建 CSS Inspector,可即時檢查並修改頁面樣式:

# 啟動 CSS Inspector
$B style

# 互動指令範例
$B style inspect .login-card           # 檢視元素的完整 CSS 規則
$B style edit .login-card padding 24px  # 即時修改樣式
$B style diff                           # 顯示所有樣式變更的 diff
$B style apply                          # 將變更寫回原始 CSS/SCSS 檔案

進階功能

  • LLM-Powered Page Cleanup:AI 分析頁面 DOM 結構,自動建議冗餘 CSS 移除方案
  • Pretty Screenshots:自動截取高品質截圖,附帶元素標註(用於 Design Review)
  • Per-tab Agents:真實 Chrome 模式下,每個分頁可指派獨立的 AI Agent,互不干擾
# Per-tab Agent 範例
Tab 1: Agent A 負責測試登入流程
Tab 2: Agent B 同時測試訂單頁面
Tab 3: Agent C 執行 CSS Inspector 優化

9.6 瀏覽器交接(Browser Handoff)

在 Claude Code 和人工操作之間無縫切換:

# Claude Code 完成測試後,將瀏覽器控制權交給人工
$B handoff
# → 側邊欄顯示:「瀏覽器控制權已交還」
# → 你繼續操作一段時間後...

# 再次讓 Claude Code 接管
$B resume

# 完全停止瀏覽器 Agent
$B stop

自動建議觸發

  • /qa 在同一 Bug 嘗試修復 3 次失敗後,自動建議 /investigate
  • /investigate 開始時自動啟動 /freeze
  • /freeze 確保偵錯時不會意外修改其他模組

9.7 持續檢查點模式(Continuous Checkpoint Mode)

v1.57+ 引入自動檢查點機制,確保長時間工作不會因意外中斷而遺失進度:

啟用方式

# 在 CLAUDE.md 中加入設定
## gstack
checkpoint_interval: 15  # 每 15 分鐘自動保存(預設:關閉)

運作機制

觸發條件動作
時間間隔checkpoint_interval 定期保存
重大變更新增/刪除檔案超過 5 個時自動觸發
分支切換切換 git branch 前自動保存
Session 結束Claude Code Session 結束前自動保存

快照內容

{
  "timestamp": "2025-06-28T10:30:00Z",
  "git_state": {
    "branch": "feature/user-auth",
    "uncommitted_files": ["src/auth/login.ts"],
    "stash_count": 0
  },
  "decisions": [
    "選擇 JWT + Refresh Token 方案",
    "資料庫使用 PostgreSQL 而非 MongoDB"
  ],
  "remaining_tasks": [
    "實作登出端點",
    "撰寫整合測試"
  ]
}

9.8 領域技能與 CDP Escape Hatch

領域技能(Domain Skills)

gstack v1.58+ 支援自訂領域技能,讓團隊將特定業務邏輯封裝為可重用技能:

# 使用 /skillify 從現有工作流程建立技能
/skillify

# → 互動式引導:
# 1. 選擇要封裝的工作流程
# 2. 定義輸入參數與輸出格式
# 3. 自動生成 SKILL.md + 目錄結構
# 4. 安裝至 .claude/skills/ 或全域

自訂技能結構

.claude/skills/my-domain-skill/
├── SKILL.md          # 技能定義(Prompt + 參數)
├── templates/        # 程式碼模板
├── validators/       # 輸出驗證規則
└── examples/         # 範例輸入/輸出

CDP Escape Hatch(Chrome DevTools Protocol 逃生艙)

/browse 的高階 API 無法滿足需求時,可直接使用 CDP 低階協定:

// 在 SKILL.md 中使用 CDP 指令
// 直接存取 Chromium DevTools Protocol
$B cdp Runtime.evaluate --expression "document.querySelectorAll('.price').length"
$B cdp Network.setCacheDisabled --cacheDisabled true
$B cdp Performance.getMetrics
使用場景CDP 指令範例
效能剖析Performance.getMetrics
網路攔截Fetch.enable + Fetch.fulfillRequest
Console 監聽Runtime.consoleAPICalled 事件
DOM 快照DOMSnapshot.captureSnapshot
無障礙樹Accessibility.getFullAXTree

10. 系統維運

10.1 日誌策略(Log4j2 + ELK)

<!-- src/main/resources/log4j2.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Properties>
    <!-- 結構化日誌格式(JSON),方便 ELK 解析 -->
    <Property name="LOG_PATTERN">
      {"timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}","level":"%level",
       "service":"member-service","traceId":"%X{traceId}",
       "spanId":"%X{spanId}","thread":"%thread",
       "logger":"%logger{36}","message":"%message"}%n
    </Property>
  </Properties>

  <Appenders>
    <!-- 控制台輸出(開發環境) -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="${LOG_PATTERN}"/>
    </Console>
    
    <!-- 檔案輸出(生產環境,含每日 Rotate) -->
    <RollingFile name="RollingFile"
                 fileName="logs/application.log"
                 filePattern="logs/application-%d{yyyy-MM-dd}-%i.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
        <SizeBasedTriggeringPolicy size="100MB"/>
      </Policies>
      <DefaultRolloverStrategy max="30"/>
    </RollingFile>
    
    <!-- 稽核日誌(獨立檔案,保存 90 天) -->
    <RollingFile name="AuditLog"
                 fileName="logs/audit.log"
                 filePattern="logs/audit-%d{yyyy-MM-dd}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
      </Policies>
      <DefaultRolloverStrategy max="90"/>
    </RollingFile>
  </Appenders>

  <Loggers>
    <!-- 稽核日誌 Logger -->
    <Logger name="AUDIT" level="INFO" additivity="false">
      <AppenderRef ref="AuditLog"/>
    </Logger>
    
    <!-- 應用程式日誌 -->
    <Root level="INFO">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

日誌規範(避免 PII 洩露):

// ✅ 正確:只記錄可識別但不敏感的資訊
log.info("Member {} login attempt from IP {}", 
         member.getId(), maskIp(ipAddress));

// ❌ 錯誤:記錄敏感資料
log.info("Member {} login with password {}", 
         member.getEmail(), password); // 絕對禁止

10.2 監控儀表板(Prometheus + Grafana)

# Prometheus 監控指標設定
management:
  endpoints:
    web:
      exposure:
        include: "health,info,prometheus,metrics"
  metrics:
    tags:
      application: ${spring.application.name}
      environment: ${spring.profiles.active}
    export:
      prometheus:
        enabled: true

關鍵監控指標

指標警告閾值嚴重閾值說明
http_server_requests_seconds_p95> 1s> 3sAPI 回應時間 P95
jvm_memory_used_bytes> 70%> 90%JVM 記憶體使用率
login_failure_rate> 5%> 20%登入失敗率(異常偵測)
db_connection_pool_pending> 5> 20DB 連線池等待數
kafka_consumer_lag> 1000> 10000訊息消費落後量

10.3 AI 協助 Debug(/investigate)

/qa 測試失敗,或生產環境出現異常,使用 /investigate 進行系統性根因調查:

/investigate

執行流程

  1. 自動啟動 /freeze(鎖定修改範圍,防止意外改動)
  2. 追蹤資料流(從輸入到輸出的完整路徑)
  3. 對照已知 Bug 模式資料庫
  4. 逐一測試假設
  5. 3 次修復嘗試失敗 → 停下來質疑架構,要求你做架構決策

日誌輔助分析範例

# 在 Claude Code 中貼上日誌片段後呼叫 /investigate
# 範例:貼上以下內容後執行 /investigate
# 
# ERROR 14:32:15 - login API P99 延遲從 120ms 升至 3200ms
# WARN  14:32:16 - DB connection pool pending queue: 45
# ERROR 14:32:17 - MemberRepository.findByAccount() timeout
#
# → /investigate 會追蹤到 MemberRepository,
#   識別遺漏的 account 欄位索引,生成 Migration SQL

10.4 錯誤追蹤(Sentry 整合)

// infrastructure/config/SentryConfig.java
@Configuration
public class SentryConfig {

    @Value("${sentry.dsn}")
    private String sentryDsn;

    @PostConstruct
    public void init() {
        Sentry.init(options -> {
            options.setDsn(sentryDsn);
            options.setTracesSampleRate(0.1); // 10% 採樣
            options.setEnvironment(activeProfile);
            // 過濾敏感資料
            options.setBeforeSend((event, hint) -> {
                event.setUser(null); // 移除使用者 PII
                return event;
            });
        });
    }
}

11. 系統升級與擴展

11.1 gstack 升級策略

gstack 透過 Git 管理,升級即是 git pull。自 v0.15.2.1 起,./setup 會自動執行 Migration(資料結構遷移),確保升級過程零手動干預:

# 自動升級(推薦)
/gstack-upgrade
# → 同步全域安裝(~/.claude/skills/gstack)
# → 同步專案安裝(.claude/skills/gstack,若有)
# → 自動執行 Migration(./setup 內建)
# → 顯示 Changelog 摘要

# 手動升級(等同效果)
cd ~/.claude/skills/gstack && git pull && ./setup
# ↑ v0.15.2.1 起 ./setup 自動偵測並套用 pending migrations

# 強制重新安裝(跳過快取)
/gstack-upgrade --force

# 查看目前版本
cat ~/.claude/skills/gstack/package.json | grep version

# 查看 Changelog
cat ~/.claude/skills/gstack/CHANGELOG.md | head -100

Migration 系統(v0.15.2.1 新增):

  • ./setup 執行時自動掃描 migrations/ 目錄中的待執行 migration
  • 每次 migration 只執行一次,狀態記錄在 ~/.gstack/migration-state.json
  • 支援資料結構遷移(如 timeline.jsonl 格式升級、設定欄位重命名)
  • Migration 失敗時自動回滾,不影響現有安裝

升級前檢查清單

  • 閱讀 Changelog(注意 Breaking Changes)
  • 在開發環境驗證主要 Sprint 流程
  • 通知所有團隊成員同步升級(/gstack-upgrade

11.2 多平台自動升級

gstack 支援多個 AI 平台,升級時各平台的整合設定會一併更新:

平台升級方式設定路徑
Claude Code/gstack-upgradegit pull && ./setup~/.claude/skills/gstack/
Codex CLI同上(偵測 ~/.codex/ 自動同步)~/.codex/skills/gstack/
OpenCode同上(偵測 ~/.opencode/ 自動同步)~/.opencode/skills/gstack/
Cursor同上(偵測 .cursor/ 自動同步).cursor/skills/gstack/
Factory Droid同上(自動偵測)平台預設路徑
Slate同上(自動偵測)平台預設路徑
Kiro CLI同上(偵測 ~/.kiro/ 自動同步)~/.kiro/skills/gstack/
Hermes同上(自動偵測)平台預設路徑
# 檢視已偵測的平台
/gstack-upgrade --dry-run
# 輸出範例:
# Detected platforms: Claude Code, Codex CLI, Cursor
# Pending migrations: 3
# Would sync to: ~/.claude/skills/gstack, ~/.codex/skills/gstack, .cursor/skills/gstack

11.3 自訂 SKILL.md 擴展

gstack 的每個技能都是一個 SKILL.md 文件。你可以建立自己的技能,放在 .claude/skills/ 目錄下:

<!-- .claude/skills/dba-review.md -->
# 資料庫優化師

你是一位資深資料庫優化工程師。分析以下程式碼中的資料庫存取模式:

1. **N+1 查詢偵測**:識別所有在迴圈中執行的資料庫查詢
2. **索引建議**:對缺少索引的 WHERE / ORDER BY 欄位提出添加建議
3. **Slow Query 風險**:預估超過 100ms 的查詢並說明原因
4. **Migration 腳本**:自動生成修復所需的 ALTER TABLE / CREATE INDEX SQL

輸出格式:
- `[N+1]` 加上程式碼位置和建議的 Eager Loading 改法
- `[INDEX]` 加上完整 SQL 語句
- `[SLOW]` 加上預估毫秒數和改善方向
# 使用說明:在 Claude Code 中直接調用
/dba-review

詳見 gstack 官方 SKILL.md 範本:~/.claude/skills/gstack/SKILL.md

11.4 多專案管理

gstack 使用~/.gstack/projects/ 目錄結構管理多個專案,每個專案有獨立的設計文件和 QA 報告:

~/.gstack/
  projects/
    member-service/      ← /office-hours 輸出至此
      design.md
      qa-reports/
    order-service/
      design.md
      qa-reports/
    platform/
      design.md
      qa-reports/

企業多團隊最佳實務

  • 每個服務團隊維護自己的 CLAUDE.md(定義技術棧、禁止行為)
  • 平台團隊統一管理 .claude/skills/ 自訂技能
  • 安全技能(/cso)建立為共用企業標準,各團隊引用
  • 每週執行 /retro global 產出跨專案學習摘要

11.5 Plugin 與 Skill 擴充

技能擴充完全基於 Git 和 Markdown,無需額外 Registry:

# 安裝社群技能(任何公開 Git repo 均可)
git clone https://github.com/community/spring-batch-skill   ~/.claude/skills/spring-batch-skill

# 開發自訂企業技能
mkdir -p ~/.claude/skills/my-company
cat > ~/.claude/skills/my-company/code-standards.md << 'EOF'
# 公司程式碼標準審查員
你是 XYZ 公司的程式碼標準守門人...
EOF

# 分享給整個團隊(透過 Git 倉庫)
git init my-company-skills
cp -r ~/.claude/skills/my-company my-company-skills/
cd my-company-skills && git push origin main
# 團隊成員執行:
# git clone <url> ~/.claude/skills/my-company

11.6 解除安裝(gstack-uninstall)

gstack 提供完整的解除安裝指令,清除所有安裝的檔案與設定:

全域解除安裝

# 方法一:使用內建解除安裝腳本
cd ~/.claude/skills/gstack && ./uninstall

# 方法二:手動移除
rm -rf ~/.claude/skills/gstack
rm -rf ~/.gstack

專案級解除安裝

# 移除 Vendoring 模式安裝
rm -rf .claude/skills/gstack

# 清除 CLAUDE.md 中的 gstack section
# (手動移除 ## gstack 區塊)

解除安裝檢查清單

項目路徑說明
全域技能~/.claude/skills/gstack/技能定義檔案
專案狀態~/.gstack/設計文件、QA 報告、檢查點
GBrain 資料~/.gstack/gbrain/持久記憶資料庫(PGLite)
瀏覽器快取~/.gstack/browser/Chromium 瀏覽器 Profile
CLAUDE.md各專案根目錄移除 gstack section
Codex 安裝~/.codex/skills/gstack/若有 Codex CLI 安裝

注意:解除安裝不會影響已建立的 PR、已合併的程式碼或 Git 歷史。GBrain 資料庫預設保留,如需完全清除需手動刪除 ~/.gstack/gbrain/


12. 企業級安全設計

12.1 /cso 安全審查流程

/cso 是 gstack 內建的首席資安官技能,在 PR 合併前執行完整安全掃描。

觸發時機

# 手動觸發(建議在 /qa 之後)
/cso

# 在 /ship 前自動觸發(推薦設定)
# 在 CLAUDE.md 加入:
# Always run /cso before /ship

覆蓋範圍

類別檢查項目
OWASP Top 10A01-A10 全覆蓋
STRIDE偽造、竄改、否認、洩漏、拒絕服務、提權
JWT 安全算法(RS256 vs HS256)、過期時間、吊銷機制
輸入驗證SQL Injection、XSS、Path Traversal
Session 管理Cookie flags、Secure、HttpOnly、SameSite
API 安全速率限制、身份驗證、授權邊界
相依套件已知 CVE(整合 OWASP Dependency Check)

零雜訊設計(17 種假陽性排除):

  • 信心閾值 8/10 以上才報告
  • 排除測試程式碼中的已知測試 Token
  • 排除隱私無關的本地配置檔

12.2 身份驗證(OAuth2 + JWT)

// infrastructure/security/JwtTokenProvider.java
@Component
@Slf4j
public class JwtTokenProvider {

    private static final String ISSUER = "member-service";
    private static final long ACCESS_TOKEN_VALIDITY = 3600L;    // 1 小時
    private static final long REFRESH_TOKEN_VALIDITY = 604800L; // 7 天

    @Value("${jwt.private-key}")
    private RSAPrivateKey privateKey;

    @Value("${jwt.public-key}")
    private RSAPublicKey publicKey;

    /**
     * 使用 RS256 簽發 JWT
     */
    public String generateToken(Long memberId) {
        Instant now = Instant.now();
        return Jwts.builder()
            .issuer(ISSUER)
            .subject(memberId.toString())
            .issuedAt(Date.from(now))
            .expiration(Date.from(now.plusSeconds(ACCESS_TOKEN_VALIDITY)))
            .signWith(privateKey, Jwts.SIG.RS256)
            .compact();
    }

    /**
     * 驗證並解析 JWT
     */
    public Long validateAndGetMemberId(String token) {
        try {
            return Long.parseLong(
                Jwts.parser()
                    .verifyWith(publicKey)
                    .requireIssuer(ISSUER)
                    .build()
                    .parseSignedClaims(token)
                    .getPayload()
                    .getSubject()
            );
        } catch (ExpiredJwtException e) {
            throw new TokenExpiredException("Token 已過期");
        } catch (JwtException e) {
            log.warn("Invalid JWT token: {}", e.getMessage());
            throw new InvalidTokenException("無效的 Token");
        }
    }
}

12.3 RBAC 權限控管

// 角色定義枚舉
public enum Role {
    ADMIN,      // 系統管理員
    MANAGER,    // 部門主管
    STAFF,      // 一般員工
    GUEST       // 訪客(唯讀)
}

// 操作權限枚舉
public enum Permission {
    MEMBER_READ,
    MEMBER_WRITE,
    MEMBER_DELETE,
    REPORT_EXPORT
}

// 權限對應表
public class RolePermissionConfig {
    public static final Map<Role, Set<Permission>> ROLE_PERMISSIONS = Map.of(
        Role.ADMIN,   EnumSet.allOf(Permission.class),
        Role.MANAGER, EnumSet.of(MEMBER_READ, MEMBER_WRITE, REPORT_EXPORT),
        Role.STAFF,   EnumSet.of(MEMBER_READ, MEMBER_WRITE),
        Role.GUEST,   EnumSet.of(MEMBER_READ)
    );
}

// Controller 使用方式
@PreAuthorize("hasPermission(null, 'MEMBER_DELETE')")
@DeleteMapping("/members/{id}")
public ResponseEntity<Void> deleteMember(@PathVariable Long id) {
    memberUseCase.delete(id);
    return ResponseEntity.noContent().build();
}

12.4 SAST / DAST 整合

# .github/workflows/security.yml
name: Security Scan

on:
  pull_request:
    branches: [main]

jobs:
  sast:
    name: SAST 靜態分析
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      # SpotBugs(含 Find Security Bugs 外掛)
      - name: SpotBugs 安全掃描
        run: mvn com.github.spotbugs:spotbugs-maven-plugin:check
        
      # OWASP Dependency Check
      - name: 相依套件 CVE 掃描
        run: |
          mvn org.owasp:dependency-check-maven:check \
            -DfailBuildOnCVSS=7
            
      # 注意:gstack /cso 在 Claude Code Session 內執行
      # 開發者在 PR 開立前須先執行 /cso,Critical 問題歸零才開 PR

  dast:
    name: DAST 動態分析
    runs-on: ubuntu-latest
    needs: [sast]
    steps:
      - name: 啟動測試服務
        run: docker compose -f docker-compose.test.yml up -d
        
      - name: OWASP ZAP 掃描
        uses: zaproxy/action-full-scan@v0.9.0
        with:
          target: 'http://localhost:8080/api'
          rules_file_name: '.zap/rules.tsv'

12.5 AI 生成代碼安全風險管控

風險類型說明防護措施
Prompt Injection惡意輸入影響 AI 行為共享編輯引擎 + ML 分類器 + Canary Token(v1.53+)
過度權限AI 生成代碼賦予過多權限/cso 強制審查(CRITICAL 阻擋合併)
敏感資料洩露AI 在 Log / Response 中洩露 PII共享編輯引擎(39 patterns, 3 tiers)+ pre-push hook
不安全的相依套件AI 引用已知漏洞版本Dependency Check 自動鎖版
業務邏輯漏洞AI 誤解業務規則QA + Security 雙重審查

v1.53+ 共享編輯引擎(Shared Redaction Engine)

gstack v1.53 引入了統一的敏感資料保護層,所有技能共用:

特性說明
偵測模式數39 種模式(API Key、JWT、PII、信用卡號、SSH 金鑰、雲端憑證等)
分級制度3 層分級(Tier 1: 阻擋、Tier 2: 遮蔽、Tier 3: 警告)
Pre-push HookGit pre-push 自動掃描,阻擋敏感資料進入遠端倉庫
整合範圍/ship/review/cso 等所有輸出技能均內建

v1.53+ Prompt Injection 防禦

防禦層技術說明
ML 分類器22MB 模型偵測惡意 prompt injection 嘗試
Haiku Transcript CheckClaude Haiku對話記錄二次審查
Canary Token標記追蹤偵測 prompt 逃逸
DeBERTa Ensemble(選用)DeBERTa 模型進階 ensemble 分類,降低誤報

12.6 瀏覽器模式安全加固

gstack 的瀏覽器功能(/browse$B connect)內建多層安全防護:

安全機制說明引入版本
CDP localhost 綁定Chrome DevTools Protocol 僅綁定 127.0.0.1,拒絕遠端連線v0.12.0.0
Trust Boundary 標記區分「頁面內容」與「AI 指令」,防止惡意網頁注入 promptv0.13.1.0
Extension Sender 驗證sidebar agent 僅接受已驗證來源的 Extension 訊息v0.13.4.0
CSP Fallback當頁面 Content-Security-Policy 阻擋注入時自動降級v0.13.8.0
Bash 指令白名單瀏覽器 Agent 僅允許執行預定義的安全指令集v0.13.8.0
Opus 預設 sidebarsidebar 預設使用 Opus 模型(推理能力最強,降低安全風險)v0.14.2.0
XML Prompt Framing使用 XML 標籤包裹 prompt,防止頁面內容逃逸至指令區v0.13.1.0

安全最佳實務

# ✅ 正確:在受控環境中使用瀏覽器模式
/browse → 導航到 localhost:3000 → 執行 QA 測試

# ❌ 危險:在不受信任的外部網站使用 $B connect
# 惡意網站可能包含 prompt injection 內容
# → 使用 /browse(隔離 Chromium)代替 $B connect

12.7 Layer C 反偵測機制(Anti-Detection)

gstack v1.58+ 引入 Layer C 防護層,專門防止 AI 生成內容被惡意偵測或回溯:

三層防護架構

層級名稱功能
Layer A共享編輯引擎敏感資料偵測與遮蔽(39 patterns)
Layer BPrompt Injection 防禦ML 分類器 + Canary Token
Layer C反偵測消除 AI 生成痕跡

Layer C 技術細節

機制說明
Token 頻率均衡調整 token 分布,消除 AI 特有的詞頻模式
風格混合混入專案既有程式碼風格,避免風格突變
Commit 歷史正規化生成自然的 commit 時間分布與訊息風格
Metadata 清理移除生成過程中的中繼資料(如 Claude 的回應 ID)

企業合規注意:Layer C 的目的是保護智慧財產權與商業機密,而非隱藏 AI 使用。企業應依內部政策揭露 AI 輔助開發的事實。


13. 最佳實務 Best Practices

13.1 企業導入十二大建議

  1. 從小規模 POC 開始
    選擇一個低風險的新功能作為 gstack 試點,驗證效果後再推廣。

  2. 首次使用從 /office-hours 開始
    每個 Sprint 必從 /office-hours 開始,確認問題定義正確後才進入實作,這是避免浪費的最高效投資。

  3. /cso 設為強制關卡
    在 CI Pipeline 中整合 /cso 的 OWASP 掃描,CRITICAL 等級阻擋 PR 合併,確保無安全漏洞進入主幹。

  4. 建立公司內部 SKILL.md Library
    將常用的自訂技能(如:Spring Boot 程式碼標準、DB Migration 檢查)以 SKILL.md 格式封裝,放在共用 Git Repo 供全體工程師引用。

  5. 人工審查不可省略
    架構設計階段和 PR 合併前,必須有人工審查。AI 生成代碼不能完全自動合併進主幹。

  6. 善用並行協作提升效率
    無相依的模組(如:會員服務 + 訂單服務)無相依的模組可在獨立的 Claude Code Session 中並行開發,詳見第 9 章「並行 Sprint 架構」。

  7. 版本化 CLAUDE.md
    使用 Git 管理 CLAUDE.md.claude/skills/ 目錄,變更同樣需要 Code Review 和工程師批准。

  8. 結合現有 JIRA / GitLab 工作流
    /office-hours 的設計文件中加入 Jira Ticket 連結,確保每個 Sprint 可追蹤至需求來源。

  9. 定期回顧 AI 生成品質
    每 Sprint 回顧一次 AI 生成代碼的技術債,調整 Role 定義持續改善。

  10. 培訓工程師「如何有效使用 Sprint 流程」
    gstack 的最大投資在於觸發正確的技能時機——尤其 /office-hours 在任何實作前必須執行,這個習慣建立後,開發品質大幅提升。

  11. 善用 Session Intelligence(v0.15.0.0+)
    每個 Sprint 結束前執行 /checkpoint 保存工作狀態,跨 Session 繼續時 gstack 會自動恢復上下文。長時間工作時定期使用 /health 檢查程式碼品質分數。

  12. 啟用學習系統(/learn
    Sprint 結束後執行 /learn 讓 gstack 從失敗中學習。學習成果存入 ~/.gstack/learnings/,下次遇到類似問題時自動注入最佳實務。注意 confidence decay 機制——長時間未驗證的學習會降低信心分數。

13.2 常見錯誤

❌ Anti-pattern 1: "跳過 /office-hours 直接寫 Code"
   問題:沒有問題定義就開始實作
   後果:建構了正確的功能,但解決了錯誤的問題
   ✅ 解法:任何功能,無論多小,都先執行 `/office-hours`

❌ Anti-pattern 2: "跳過 /cso 直接 /ship"
   問題:時間壓力下略過安全審查
   後果:包含 SQL Injection / XSS 漏洞的程式碼進入生產
   ✅ 解法:在 CLAUDE.md 中明確寫入「/ship 前必須執行 /cso」

❌ Anti-pattern 3: "完全信任 AI 修復 [AUTO-FIXED]"
   問題:/review 回報 [AUTO-FIXED] 後直接接受,不審查
   後果:AI 自動修復有時解決症狀而非根因
   ✅ 解法:[AUTO-FIXED] 需人工確認修復邏輯正確,[ASK] 必須回覆

❌ Anti-pattern 4: "AI 直接接觸生產資料"
   問題:用 /investigate 連接生產 DB 進行 Debug
   後果:違反資安合規,PII 可能進入 AI 訓練資料(訂閱合約需確認)
   ✅ 解法:/investigate 只在包含匿名化資料的測試環境執行

❌ Anti-pattern 5: "忽略 Token 成本"
   問題:在 CI 中對每個 commit 都執行 /review + /cso + /qa
   後果:Claude API 費用暴增,開發流程被費用限制拖慢
   ✅ 解法:只在 PR 建立時執行完整 Sprint(/qa + /cso + /ship),commit push 只做語法檢查(Checkstyle / ESLint)

13.3 Anti-patterns 對照表

Anti-pattern症狀改善方向
Prompt SoupRole 定義雜亂、輸出不穩定重構為單一職責 Role
AI Magic Box不理解 AI 輸出的程式碼要求 AI 輸出時附帶說明
No Human Loop完全自動化無人工確認關鍵節點加入審查點
Skill SprawlSkills 太多太雜無人維護建立 Skill 治理流程
Context Bleed不同任務共用同一 Agent 狀態每個任務啟動新的 Session
Checkpoint-Free長時間工作不保存 checkpoint每 30 分鐘或關鍵節點執行 /checkpoint
Learning Decay從不執行 /learn 累積知識Sprint 結束後執行 /learn + /retro

14. GBrain 持久知識系統

14.1 GBrain 概觀

GBrain 是 gstack v1.12+ 引入的持久知識圖譜系統,讓 AI Agent 在跨 Session 間保留學習成果與上下文記憶。傳統 AI 對話在 Session 結束後遺失所有上下文,GBrain 解決了這個根本問題。

核心特性

特性說明
知識持久化跨 Session 保留決策歷史、架構知識、Bug 修復經驗
Split-Engine 架構Claude Sonnet/Opus 寫入,Haiku 讀取,平衡成本與品質
Per-Repo 信任每個倉庫獨立的知識庫,防止跨專案知識污染
自動同步/sync-gbrain 安全同步,含 safety guards 防止資料損壞
知識衰減過時知識自動降權,確保 Agent 使用最新資訊

14.2 安裝路徑

GBrain 支援三種儲存後端,依據團隊規模與需求選擇:

PGLite(本地模式,推薦個人開發者)

/setup-gbrain
# → 自動安裝 PGLite(嵌入式 PostgreSQL)
# → 資料存放於 ~/.gstack/gbrain/
# → 無需外部服務,零配置
項目規格
儲存位置~/.gstack/gbrain/pgdata/
資料庫大小初始 ~5MB,典型使用 50-200MB
效能讀取 <10ms,寫入 <50ms
備份cp -r ~/.gstack/gbrain/ ~/backup/

Supabase(雲端模式,推薦小型團隊)

/setup-gbrain --backend supabase

# 需要設定環境變數
export SUPABASE_URL="https://your-project.supabase.co"
export SUPABASE_ANON_KEY="eyJ..."
項目規格
儲存位置Supabase PostgreSQL
團隊共享多人存取同一知識庫
Edge Functions自動部署知識查詢 API
成本Supabase Free Tier 含 500MB

Remote MCP(企業模式)

/setup-gbrain --backend mcp --endpoint https://gbrain.internal.company.com

# 需要設定 MCP 伺服器
export GBRAIN_MCP_ENDPOINT="https://gbrain.internal.company.com"
export GBRAIN_MCP_TOKEN="Bearer ..."
項目規格
儲存位置企業自建 PostgreSQL
存取控制整合企業 IAM(OAuth2/SAML)
審計日誌完整的知識存取紀錄
高可用支援 PostgreSQL HA 叢集

14.3 Per-Repo 信任機制

GBrain 的知識以倉庫為信任邊界,防止跨專案知識污染:

~/.gstack/gbrain/
├── repos/
│   ├── my-company/backend-api/     # 後端專案知識
│   ├── my-company/frontend-app/    # 前端專案知識
│   └── personal/side-project/      # 個人專案知識
└── global/                          # 跨專案通用知識

信任規則

規則說明
讀取Agent 只能讀取當前倉庫 + global 知識
寫入Agent 只能寫入當前倉庫的知識
提升手動將 repo 知識提升為 global(/learn --promote
隔離敏感倉庫可設定 gbrain_isolated: true 禁止 global 讀取

14.4 記憶同步與安全

# 手動同步
/sync-gbrain

# 自動同步設定(在 CLAUDE.md 中)
## gstack
gbrain_auto_sync: true        # 每次 Session 結束自動同步
gbrain_sync_interval: 30      # 每 30 分鐘同步一次(分鐘)

Safety Guards

防護機制說明
寫入鎖同時只有一個 Agent 可以寫入同一倉庫知識
衝突偵測多 Agent 並行時自動偵測知識衝突
回滾能力每次同步建立快照,可回滾至任意時間點
容量限制單一倉庫預設上限 500MB,可調整

14.5 Conductor 環境變數

GBrain 與 Conductor(多 Agent 協調器)整合時的完整環境變數:

環境變數預設值說明
GBRAIN_BACKENDpglite儲存後端(pglite/supabase/mcp)
GBRAIN_DATA_DIR~/.gstack/gbrain本地資料目錄
GBRAIN_MAX_MEMORIES10000單一倉庫最大記憶條數
GBRAIN_WRITE_MODELsonnet寫入使用的模型(sonnet/opus)
GBRAIN_READ_MODELhaiku讀取使用的模型(haiku/sonnet)
GBRAIN_AUTO_SYNCfalse是否自動同步
GBRAIN_SYNC_INTERVAL30自動同步間隔(分鐘)
GBRAIN_ISOLATEDfalse是否啟用倉庫隔離模式
SUPABASE_URLSupabase 端點(雲端模式)
SUPABASE_ANON_KEYSupabase 匿名金鑰(雲端模式)
GBRAIN_MCP_ENDPOINTMCP 伺服器端點(企業模式)
GBRAIN_MCP_TOKENMCP 認證 Token(企業模式)

15. 隱私與遙測

15.1 遙測機制

gstack 內建輕量級遙測系統,用於收集匿名使用統計以改善產品體驗。所有遙測資料預設僅儲存在本地

遙測架構

技能執行 → 事件記錄 → 本地 SQLite → (選擇性) 匿名上傳

控制方式

# 查看遙測狀態
cat ~/.gstack/telemetry.json

# 完全關閉遙測
# 在 ~/.claude/settings.json 加入:
{
  "gstack_telemetry": false
}

# 或設定環境變數
export GSTACK_TELEMETRY=false

15.2 資料收集範圍

收集項目是否收集說明
技能使用頻率✅ 本地哪些 /skill 被使用、頻率
技能執行時間✅ 本地各技能平均執行耗時
錯誤統計✅ 本地技能失敗次數與錯誤類型
程式碼內容❌ 永不不收集任何程式碼片段
檔案路徑❌ 永不不收集完整檔案路徑
API Key❌ 永不不收集任何憑證
Git 歷史❌ 永不不收集 commit 內容或作者
瀏覽器資料❌ 永不不收集 Cookie 或瀏覽紀錄
GBrain 記憶❌ 永不不收集知識圖譜內容

15.3 本地分析報告

gstack 提供本地分析功能,幫助開發者了解自己的使用模式:

# 查看使用統計(過去 7 天)
/health --telemetry

# 輸出範例:
# ┌─────────────────┬───────┬──────────┐
# │ Skill           │ Count │ Avg Time │
# ├─────────────────┼───────┼──────────┤
# │ /review         │    23 │    45s   │
# │ /ship           │    18 │    32s   │
# │ /qa             │    15 │   120s   │
# │ /office-hours   │     8 │   180s   │
# │ /cso            │     7 │    60s   │
# │ /browse         │    42 │     5s   │
# └─────────────────┴───────┴──────────┘
# Total sessions: 12 | Total time saved: ~18 hours

本地分析指標

指標計算方式
時間節省估算基於各技能的人工等效時間 × 執行次數
品質趨勢/health 分數隨時間變化
技能採用率團隊中各技能的使用比例
Bug 偵測率/review/cso 發現的問題數量

隱私承諾:gstack 遵循 MIT 授權條款,所有遙測程式碼完全開源可稽核。本地分析資料僅存在於使用者設備,絕不自動上傳至任何第三方服務。


附錄:快速上手 Checklist

新專案啟動清單

環境準備
□ Claude Code 已安裝(npm install -g @anthropic-ai/claude-code)
□ Claude Code 已登入(claude login)
□ Git 2.x+ 已安裝
□ Bun v1.0+ 已安裝(Windows 需 Node.js 18+)
□ ANTHROPIC_API_KEY 已設定

gstack 安裝
□ git clone --single-branch --depth 1 \
    https://github.com/garrytan/gstack.git \
    ~/.claude/skills/gstack
□ cd ~/.claude/skills/gstack && ./setup 已執行(含自動 Migration)
□ Claude Code 重啟後 /help 顯示 gstack 技能(30+ 個)
□ /office-hours 指令可正常調用
□ /checkpoint 可正常建立工作快照
□ /health 可正常顯示品質分數

CLAUDE.md 設定
□ 專案 CLAUDE.md 已建立(含技術棧、禁止行為)
□ 敏感目錄已加入 .claudeignore
□ 企業自訂技能已安裝(若有)

CI/CD 整合
□ CI 已整合 /cso OWASP 掃描腳本(CRITICAL 阻擋 PR)
□ /setup-deploy 已執行(一次性設定 /land-and-deploy)
□ GitHub Actions 已設定相依套件 CVE 掃描

團隊協作
□ 全體開發人員已安裝 gstack(git clone)
□ 企業 CLAUDE.md 範本已共用
□ /retro global 已設定為每週自動觸發

安全與合規
□ /cso 已在第一個 Sprint 執行並清零 CRITICAL
□ Log 過濾規則已加入(排除 PII)
□ JWT 設定已審查(RS256, 1小時有效期)
□ 相依套件 CVE 掃描已整合進 CI

每次 Sprint 技能清單

計畫階段
□ /office-hours → 需求精煉(或 /autoplan 一鍵)
□ /plan-ceo-review → MVP 範圍確認
□ /plan-eng-review → 架構 + 測試計畫
□ /plan-design-review → UI/UX 設計審查(若有視覺需求)

實作後
□ /review → 程式碼審查(AUTO-FIXED 驗收 + ASK 回覆)
□ /qa → 瀏覽器功能測試(Diff-aware)
□ /cso → 安全掃描(CRITICAL = 禁止繼續)
□ /health → 程式碼品質分數(建議 ≥ 7/10 才繼續)
□ /ship → PR 建立(覆蓋率 ≥ 80%)

發布後
□ /land-and-deploy → 合併 + 部署 + 生產驗證
□ /canary → 30 分鐘金絲雀監控
□ /benchmark → 效能回歸檢查
□ /checkpoint → 保存工作狀態快照
□ /context-save → 完整上下文保存(跨 Session)
□ /retro → Sprint 回顧與知識沉澱
□ /learn → 從失敗中學習(知識累積)
□ /sync-gbrain → 同步 GBrain 持久記憶

文件版本記錄

版本日期作者說明
v1.0.02026-04-03gstack Team初版發布
v1.1.02026-04-03gstack Team更新至 gstack v0.15.2.1;新增 Session Intelligence(/checkpoint、/health);新增 Review Army 7 專家並行審查;新增 CSS Inspector 與 Live Style 編輯;新增多平台自動升級;新增瀏覽器安全加固;修正亂碼文字;TOC 一致性校正
v2.0.02026-05-30gstack Team大幅更新至 gstack v1.55.0.0;新增 20+ 技能(/spec、/document-generate、/pair-agent、/setup-gbrain、/sync-gbrain、/ios-qa 等);新增 GBrain 持久記憶體系;新增 iOS QA 測試套件;新增共享編輯引擎(33 patterns)與 Prompt Injection 防禦;更新支援平台至 10 個 AI 代理;新增 Team Mode 安裝方式;更新版本里程碑至 v1.55.0.0
v3.0.02026-06-30gstack Team更新至 gstack v1.58.5.0;修正 GitHub 統計數據(118K stars、81 contributors);新增 §2.5 gstack 內部架構(Daemon model、Bun、SKILL.md 模板);新增 §3.6 OpenClaw 整合;新增 §9.7 持續檢查點模式、§9.8 CDP Escape Hatch;新增 §11.6 解除安裝;新增 §12.7 Layer C 反偵測;新增 §14 GBrain 持久知識系統(5 小節);新增 §15 隱私與遙測(3 小節);技能目錄新增 /diagram、/make-pdf、/scrape、/skillify、/context-save、/context-restore;共享編輯引擎擴充至 39 patterns;修正 Boil the Lake → Boil the Ocean;版本里程碑新增 11 個版本

聲明:本文件由 gstack 工具輔助生成,內容已由資深工程師審查確認。
如有疑問請聯絡架構團隊或於內部 Confluence 提出討論。