Claude Fable 5 小專案實戰:從需求到上線,全程 AI 完成了什麼?

AI 手記  ·   ·  約 10 分鐘閱讀

開發者用筆電推進小專案上線,象徵 Claude Fable 5 從需求到發布的全鏈路協作

結論先行:我們用 Claude Fable 5 從零做出一個叫 pulsecheck 的 CLI——批次檢查一組 URL/API 是否還能存取,結果寫成 JSON,方便掛 cron 或接告警。全文分兩塊:先講這個工具解決什麼問題、成品怎麼用(見下方說明與截圖);再按七個步驟覆盤Claude Code 裡 AI 寫了哪些程式碼、哪些環節必須你來定。只想快速了解用途和效果,讀到截圖即可;要親手做一遍,從步驟 1 開始。

pulsecheck 用來幹嘛?

一句話:幫你批次檢查一組網址/API 是否還能正常存取,不用手動一個個開瀏覽器或敲 curl

典型用法:把正式環境要盯住的位址寫進 config.yaml(例如 /health/ping),用 cron 每 5 分鐘跑一次 pulsecheck。若某個 API 回傳 503 或逾時,程式退出碼變成 1,你的告警腳本或監控系統就能抓到。它是輕量巡檢腳本,不是完整監控平台——沒有大盤、沒有簡訊,只負責「這批 URL 現在活沒活」並輸出 JSON 報告。

CLI
終端小工具
7
建構步驟
52
分鐘到 v0.1.0

用來幹嘛:三個真實場景

先別管 Go、YAML、JSON——這個小工具解決的是「我怎麼知道這些服務還活著」。下面三種情況,就是寫它的理由:

  • 定時巡檢 — 你有 5~20 個健康檢查 URL(支付回呼、開放 API、內部閘道)。以前用 shell 寫 for url in ...; do curl ...,難維護、沒統一報告。pulsecheck 讀一份設定,輸出結構化 JSON,cron 掛上去即可。
  • 發版 / 值班前手動確認 — 上線前跑一條指令:./pulsecheck -config prod.yaml -o /tmp/pre-deploy.json。全綠(退出碼 0)再發版;有紅(退出碼 1)先別推。
  • 接告警的「探針」 — 不需要 Prometheus 全家桶時,用退出碼接現有腳本:退出碼 1 就 curl 你的 Webhook 或發信。JSON 報告留給事後翻日誌。

它不負責的事:歷史趨勢、簡訊告警、多租戶後台——那些交給 Datadog 或雲端監控。pulsecheck 只管此刻這一批 URL 通不通

成品截圖

下面是 pulsecheck 全部做完之後在 Mac 終端裡的真實效果:讀設定、探測 URL、寫出 JSON,有一個站點回傳 503 所以退出碼是 1

pulsecheck 成品截圖:終端執行 ./pulsecheck 後輸出 report.json,含 api.example.com 200 與 status.example.com 503 兩條探測結果
成品示意:左側指令 ./pulsecheck -config config.example.yaml -o report.json;右側 report.json 列出每個 URL 的狀態碼、延遲與是否健康(ok)。

對應你本機的三條指令就是:

./pulsecheck -config config.example.yaml -o report.json
echo $?          # 1 = 有站點不健康
cat report.json   # 查看報告

輸入 / 輸出 / 技術形態

用途講清之後,再看技術上怎麼運轉:可以把它想成「批次 curl + 彙總成一份報告」,做成可編譯、可接 cron 的 CLI。

維度 說明 範例
輸入 YAML 設定檔,列出要檢查的 URL config.example.yaml
輸出 JSON 健康報告 + 行程退出碼 report.json;0=全綠,1=有失敗
典型用法 cron 定時巡檢;發版前手動確認;退出碼接告警 每 5 分鐘 */5 * * * * pulsecheck ...
技術棧 Go 1.22 單一二進位 無 GUI、無資料庫

你需要維護的只是一份 YAML 設定,列出要巡檢的 URL;探測與彙總由 pulsecheck 自動完成。範例如下:

config.example.yaml
targets:
  - https://api.example.com/health
  - https://status.example.com/ping

做完後的程式碼 repo約 400 行 Go,結構如下:

pulsecheck/ 目錄
pulsecheck/
├── cmd/pulsecheck/main.go      # 指令入口:-config -o
├── internal/checker/checker.go # 發 HTTP、記延遲
├── internal/config/config.go   # 解析 YAML
├── config.example.yaml
├── Makefile · README.md
└── .github/workflows/ci.yml

後半篇:AI 在七步裡寫了什麼

到這裡,pulsecheck 是什麼、用來幹嘛,應該已經清楚。從本節起進入建構過程:用 Claude Fable 5 + Claude Code,從空資料夾到打出 v0.1.0 tag,AI 逐步產出了哪些檔案、人在哪幾步必須插手。

一句話分工:AI 寫程式碼和測試;人定「做什麼 / 不做什麼」、Review 打回、最後簽字發布。下面七個步驟均可照抄 Prompt 複現;模型用 Claude Code 裡的 Fable 5 即可(不必上 Opus,見 檔位對比)。

環境準備

  • Go 1.22+go version 確認
  • Claude Code CLI — 模型選 Claude Fable 5(日常 Agent 循環夠用,見 模型檔位對比
  • 空目錄mkdir pulsecheck && cd pulsecheck && git init
  • (選用)GitHub repo — 步驟 6 推遠端跑 CI;也可先本機做完

步驟 1:建 repo、寫需求

你要做的:用三句話寫清痛點,落成 SPEC.md。可以手寫,也可以先口述讓 AI 擴寫,但非目標必須人刪(否則 AI 會加 Web UI、資料庫)。

發給 Claude Code 的 Prompt(步驟 1)
請閱讀下面需求,產生 SPEC.md 草案,不要增加任何未列出的功能:

- 工具名 pulsecheck,Go 1.22 CLI
- 讀取 YAML 設定中的 URL 清單,並發 HTTP GET
- 輸出 JSON 報告到 -o 指定路徑
- 欄位:url, status_code, latency_ms, ok
- 預設逾時 5 秒,環境變數 PULSECHECK_TIMEOUT 可覆寫
- 退出碼:0 全綠,1 有失敗,2 設定錯誤
- 非目標:無 GUI、無 DB、無 Docker、無告警推送

AI 會產出:SPEC.md你要檢查:有沒有擅自加功能;驗收指令是否寫上 go test ./...

驗收:cat SPEC.md,確認「必須 / 非目標 / 退出碼」三節齊全。

步驟 2:搭專案骨架

你要做的:讓 AI 只搭架子、不寫業務。這一步 Fable 5 幾乎全包。

發給 Claude Code 的 Prompt(步驟 2)
閱讀 SPEC.md,初始化 Go 模組 github.com/you/pulsecheck。
只建立專案骨架,業務邏輯回傳 stub:
- cmd/pulsecheck/main.go 解析 -config 和 -o
- internal/config 讀 YAML
- internal/checker 空實作
- Makefile:test、lint、build
- .github/workflows/ci.yml 占位
要求 go build ./... 通過,不要寫真實 HTTP 邏輯。

AI 會產出:上文目錄樹裡的 8 個檔案。耗時約 6 分鐘。

驗收:

go build ./...
./pulsecheck -h   # 應顯示用法

步驟 3:寫探測邏輯與測試

你要做的:要求先寫測試、再寫實作。這是整個專案裡最「像在做專案」的一步——AI 會自己跑 go test,失敗了改程式碼,直到綠。

發給 Claude Code 的 Prompt(步驟 3)
在 internal/checker 中:
1. 先寫 checker_test.go,用 httptest 模擬 200、500、逾時三種情況
2. 再實作 checker.go:HTTP GET、記錄 status_code 和 latency_ms
3. 循環執行 go test ./... 直到全部通過
4. main.go 串接 config → checker → 寫 JSON 到 -o 路徑

AI 會產出:核心探測程式碼。邏輯大致如下(節選):

internal/checker/checker.go(AI 產生 · 節選)
func CheckURL(ctx context.Context, client *http.Client, url string) Result {
    start := time.Now()
    req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
    resp, err := client.Do(req)
    if err != nil {
        return Result{URL: url, OK: false, LatencyMs: time.Since(start).Milliseconds()}
    }
    defer resp.Body.Close()
    ok := resp.StatusCode >= 200 && resp.StatusCode < 300
    return Result{
        URL: url, StatusCode: resp.StatusCode,
        LatencyMs: time.Since(start).Milliseconds(), OK: ok,
    }
}

實測中 Fable 5 跑了 3 輪 go test:第 2 輪自己修好了「逾時沒傳進 HTTP client」的 bug,人沒改程式碼。

驗收:

go test ./... -v   # 12 條表驅動測試全綠

步驟 4:Review 修補

你要做的:自己當 Code Reviewer,列問題清單讓 AI 改,不要親手改(否則測不出 AI 能不能按回饋迭代)。

發給 Claude Code 的 Prompt(步驟 4 · Review 打回)
按下面 Review 意見修改,改完 go test ./... 必須仍綠:
1. JSON 欄位 latency 改為 latency_ms,與 SPEC 一致
2. 多 URL 用 worker pool,預設最多 10 並發
3. stdout 只輸出 JSON 報告路徑提示;warn 日誌走 stderr

AI 會產出:並發 worker pool、欄位改名、日誌分流。人完成:判斷這三條是否該改——這是 AI 替不了的。

驗收:go test ./... 仍綠;手動跑一兩個 URL 看 JSON 欄位名對不對。

步驟 5:設定檔與 README

你要做的:讓 AI 寫維運能直接 copy 的文件和樣例設定。

發給 Claude Code 的 Prompt(步驟 5)
產生 config.example.yaml 和 README.md:
- 安裝:go install 或 go build
- 用法範例、退出碼表(0/1/2)
- cron 每 5 分鐘跑一次並追加日誌的範例
- 不要編造不存在的子指令

AI 會產出:

config.example.yaml
targets:
  - https://api.example.com/health
  - https://status.example.com/ping

驗收:把 example 裡的 URL 換成你能存取的位址,跑通步驟「成品長什麼樣」裡的指令,report.json 欄位齊全。

步驟 6:接 GitHub Actions

你要做的:推送到 GitHub,讓 AI 補全 CI 並在失敗時自修。

發給 Claude Code 的 Prompt(步驟 6)
完善 .github/workflows/ci.yml:
- go test -race ./...
- golangci-lint run
- 用 go 1.22
如果 lint 失敗,讀日誌並修復後重新提交。

首次 lint 報了 unused import,Fable 5 讀 CI 日誌後自己刪掉。若本機 16GB 記憶體跑 -race 會 Swap,可把 race 放到 GitHub RunnerCloud Mac 節點 上跑——與 Claude Code 執行環境 選型同一思路。

驗收:GitHub 上 CI 全綠。

步驟 7:驗收並打 tag 上線

你要做的:最後一步必須人親手做——smoke test、打 tag。AI 可以寫 CHANGELOG 草案,但上線簽字是你的事。

go test ./...
make build
./pulsecheck -config config.example.yaml -o /tmp/report.json
cat /tmp/report.json | jq .
git add -A && git commit -m "feat: pulsecheck v0.1.0"
git tag -a v0.1.0 -m "first release: YAML-driven HTTP health probe"
git push && git push --tags

到這一步,pulsecheck 就算從需求到上線做完了:一個能裝 cron、能接監控的 CLI 小工具,全程約 52 分鐘。

做完之後還能擴什麼

v0.1 故意沒做:Slack 告警、Prometheus exporter、Docker 映像。這些可以開新 Issue 再讓 Fable 5 做——小專案先閉環,再迭代

各步對照:AI 完成了什麼

做完專案後回頭看,七步裡 AI 與人的分工可以這樣記:

步驟 AI(Fable 5)完成 人必須完成
1 需求 把口語擴成 SPEC 結構 刪非目標、定退出碼
2 骨架 8 個檔案、go build 通過 確認 Go 版本與模組名
3 實作 測試 + checker + main 串接 看測試是否覆蓋 Spec
4 Review 按清單改程式碼 列 Review 意見
5 文件 README + config 樣例 copy-paste 跑通
6 CI workflow + 修 lint 定義「何謂綠」
7 發布 CHANGELOG 草案 smoke test、打 tag

可編碼產出大約 78% 由 AI 寫完;需求剪刀、Review 判斷、tag 簽字這三樣,換哪個模型都得人做。

場景怎麼選(決策矩陣)

如果你是… 推薦做法 原因
第一次跟 AI 做完整小專案 照本文七步 + 每步驗收指令 比抽象討論「AI 強不強」更快出成品
想做維運/內部 CLI(類似 pulsecheck) Go + Fable 5 Agent 循環 測試可自跑,適合表驅動驗收
對外 SaaS / 含使用者資料 AI 僅草稿 + Opus 安全審查 上線責任不能全給 Agent
老 repo 局部功能 跳過②,從 Issue 進 Agent 骨架已存在
16GB Mac + 長跑 CI Agent 本機,race/編譯上 Cloud Mac 避免 Swap 誤判為模型變慢
要一週內給老闆 demo 先鎖 Spec 非目標,再開 Agent 防止 AI 擴 scope 導致無法上線

推薦組合(可疊加)

  • 個人開發者 — Fable 5 跑 ②–⑥;Cursor Tab 做發布前微調;Opus 僅對外服務做審查。
  • 小團隊 — repo 模板內建七階段 checklist;新工具複製 pulsecheck 流程;Agent 掛在 Claude Code 生產級工作流
  • 省 token — Spec 潤色與 CHANGELOG 可用 Gemini Flash;編碼循環仍用 Fable 5;路由見 OpenRouter 定價結構

疊加 MCP 時:MCP 拉 Issue / 監控上下文,Fable 5 改 repo;⑦ 發布簽字仍建議人工

常見誤區

  • 誤區 1:沒寫清做什麼專案就開聊 — AI 會泛泛給方案;先定 pulsecheck 這類一句話目標。
  • 誤區 2:步驟 2 就讓寫業務邏輯 — 骨架和實作混在一起,後面難測。
  • 誤區 3:跳過步驟 4 Review — JSON 欄位名、日誌污染 stdout 等細節會漏進「成品」。
  • 誤區 4:不做步驟 7 就打 tag — 沒 smoke test 不算上線。
  • 誤區 5:本機 16GB 跑 race + Agent — 變慢是記憶體問題,把 CI 放 Runner / Cloud Mac。

FAQ

pulsecheck 用來解決什麼問題?

解決「一批 URL 現在能不能存取」——不用手寫 shell 迴圈 curl,也不用上重型監控平台。適合個人專案、小團隊或發版前的快速探活。

和 UptimeRobot、Prometheus 有啥區別?

pulsecheck 是自己機器上跑的輕量 CLI,設定在你手裡,無 SaaS 依賴;後者是完整監控方案,功能多、成本高。本文做的是前者——夠用、可自己改程式碼

能直接 clone repo 嗎?

本文是實測覆盤 + 可複現教學,按七步 Prompt 可在自己目錄產生等價實作,不必追求與文中 diff 逐行一致。

哪一步 AI 做得最多?

步驟 3(測試 + 實作)和步驟 2(骨架)幾乎全由 Fable 5 寫完;步驟 1 和 7 人動手最多。

和 Cursor Tab 補全有什麼不同?

Tab 適合改單檔;做完整專案要 Claude Code 多檔 + 跑測試。見 Copilot vs Cursor 實測

總結

成品:pulsecheck——讀 YAML 裡的 URL,批次檢查是否在線,輸出 report.json(見上文截圖)。過程:用 Claude Fable 5 按七步從空目錄做到可打 v0.1.0 tag,AI 寫了大部分 Go 程式碼與測試,人負責定範圍、Review 和發布。你若只想評估「AI 能不能做小專案」,先看截圖和輸入輸出表;若想自己做一遍,從步驟 1 的 Prompt 複製即可。

ZavCloud · 雲端 Mac

用 Cloud Mac 跑 pulsecheck 的 CI

Mac mini M4 獨享實例:Claude Code 寫程式碼,GitHub Actions 在同一 macOS 節點跑 test -race——步驟 6 不被本機 16GB 記憶體拖慢。

查看方案與定價
Cloud Mac 線上租用 Mac mini