技術筆記
用 Claude Code 寫篜馏程式:從規格到可長跑的行程
你使用的用語「篜馏」(先前亦見「篜留」寫法)在本文裡,都指同一類程式:在背景長時間執行、不會因為你關掉終端機就自動收掉的那種——Linux 的 daemon、Windows 的服務、常駐 worker、帶事件迴圈的長行程,都屬這個家族。為讀起來順,文中有時也寫成大家更熟的駐留/常駐,語意相同。
Claude Code(Anthropic 的終端編程助理)適合在「你已經有目錄結構、想快速反覆改檔、跑測試、看錯誤」的迴圈裡當共駕。下面是一篇可照做的流程與口令思路,不是官方文件;實際指令請以你安裝的版本為準。
一、先講清楚:篜馏程式要滿足什麼
在叫模型幫你寫之前,先用三句話寫在 README 或 issue 裡,之後每一輪對話都省時間:
- 平台:例如 Linux x64、Windows Server、單板電腦、還是純本機開發用。
- 觸發與結束:開機自啟?手動啟?收到
SIGTERM/ Ctrl+C 要不要優雅關閉? - 對外介面:只寫 log?要 HTTP?要讀寫佇列?要不要設定檔?
篜馏程式最容易踩雷的不是「語法」,而是生命週期:沒處理訊號、沒 flush log、沒釋放檔案鎖,看起來能跑,上線三天就歪掉。
二、用 Claude Code 的推薦節奏
- 骨架先行:請它建立專案目錄、依賴檔(
package.json/pyproject.toml/go.mod)、以及一個最小的main,裡面只有「印一行 + sleep 迴圈」,確認你真的能長跑。 - 加上「優雅關閉」:同一輪或下一輪,要求補上訊號處理、timeout、以及「關閉時把進行中的工作做完或寫 checkpoint」。
- 可觀測性:結構化日誌(JSON 一行一筆)、
health端點或簡單的檔案心跳,讓你將來掛 systemd / NSSM / Docker 時有東西可查。 - 部署故事:請它寫
systemdunit、Dockerfile、或 Windows 服務安裝步驟——模型很會產生範本,但路徑與使用者權限一定要你人工核對。
三、可以貼進對話的「口令」範本(請改成你的專案名)
這類提示的重點是限制範圍,避免它一次改十個檔還混進假 API:
我在 ./worker 要做一個 Node 篜馏程式(常駐 worker):
- 每 30 秒從環境變數讀 API_URL 拉一次資料,失敗要指數退避,最多等 5 分鐘。
- 收到 SIGINT/SIGTERM 時:停止排程、把當前 batch 寫完、flush log,然後 exit 0。
- 日誌用 pino,輸出到 stdout;不要寫死密鑰。
請只新增或修改 worker/ 底下檔案,並給我 npm scripts:dev / start。
四、你仍然必須親自檢查的四件事
- SECRET:API key、資料庫 URL 不要進 repo;用環境變數或祕鑰管理。
- 重啟策略:
Restart=always會掩蓋 bug,記得設StartLimitInterval或上限,避免打爆上游。 - 時區與時間:排程用 UTC 還是本地?夏令時間會不會讓「每天三點」歪掉?
- 資源上限:記憶體、檔案描述符、子行程——長跑程式遲早會碰到,請它幫你加簡單的 metrics 或週期性 self-check。
五、結語
把篜馏程式想成「會一直醒著的程序」:你要的是可預測的睡眠、可預測的醒來、可預測的死亡。Claude Code 適合加速你把這三件事寫進程式碼;最後一道門永遠是你自己的 code review 與 on-call 常識。
You asked for an article on using Claude Code for long-running / resident programs (daemons, services, workers). The Chinese heading uses the coined spelling 篜馏 (also written 篜留 earlier); here it means the same as 駐留/常駐 stay-resident processes.
Claude Code shines in tight loops: edit files, run tests, read stack traces, repeat. Before prompting, write three lines in your README: platform, startup/shutdown semantics (signals, graceful stop), and external interfaces (logs, HTTP, queues).
Workflow: (1) minimal main + infinite loop or scheduler; (2) add signal handling and clean shutdown; (3) structured logs and a health signal; (4) deployment unit (systemd, Docker, Windows Service)—always verify paths and permissions yourself.
Never trust the model with secrets in-repo, unbounded restart policies, or production credentials. Load secrets from the environment; cap restart storms; test SIGTERM the same way your orchestrator will.