懶人包
- 本文解決:看到「睡前把任務丟給 AI、隔天早上看成果」的 gnhf 紅到 3.2k star,想知道它到底是什麼、值不值得裝?
- 推薦給:已經在用 Claude Code / Codex,想讓 agent 在無人看管下多跑幾輪、又怕它把 repo 搞爛的工程師。
- 讀完你會知道:gnhf 是「orchestrator」不是「新的 coding agent」、它靠什麼機制不讓 agent 跑歪、怎麼裝跟實測、以及它跟 ralph-loop 那種土砲 while 迴圈差在哪。
📌 目錄
🌙 一句話:gnhf 是什麼
gnhf(good night, have fun)是一支 CLI,它不自己寫程式碼——它是個 orchestrator,把你選定的 coding agent(Claude、Codex、Copilot 之類)包進一個會自動重跑的迴圈,讓它在你離線時一輪一輪推進同一個目標。
作者 kunchenguid 把它的精神寫進 repo 的 tagline:
Before I go to bed, I tell my agents: good night, have fun
名字就是它的用法:睡前給 agent 一個 objective,它自己跑到天亮。截至 2026-07-13 我查證時,這個 repo 有 3,181 個 star、229 個 fork、MIT 授權,TypeScript 佔 98.7%(數字來自 api.github.com/repos/kunchenguid/gnhf,可重現)。
要先講清楚一件事,免得被名字誤導:gnhf 本身不會寫任何一行 code。真正動手改檔案的還是 Claude 或 Codex。gnhf 幹的是外面那層——決定「這一輪跑完要不要繼續」、「跑爛了要不要 rollback」、「連續失敗幾次該收手」。這個定位決定了它適合誰、不適合誰,後面會講。
😴 它解決的問題:agent 跑一輪就停
你手動用 Claude Code 開發時,節奏大概是:給一個指令 → agent 做一段 → 停下來等你 → 你看結果、給下一個指令。agent 每做完一小段就停在那裡等人。
這在你盯著螢幕時沒問題。問題是你想離開的時候——去睡覺、去開會、去接小孩。agent 不會自己往下走,它就停在「做完上一步、等你回話」的狀態,一整晚什麼都沒發生。
gnhf 要補的就是這個「無人看管的往前推進」。你給它一個目標(例如「把這個模組的測試覆蓋率拉到 80%」),它會:
- 呼叫底層 agent 做一輪
- agent 做完、commit
- gnhf 判斷要不要繼續,要就再叫 agent 跑下一輪
- 一直循環,直到達成你設的結束條件、或撞到中止條件
🔁 核心機制:它憑什麼敢讓你去睡覺
「讓 AI 無人看管跑一整晚」聽起來很可怕——萬一它把 repo 改爛了呢?gnhf 的設計裡有幾個煞車,這也是它跟「寫個 while 迴圈狂叫 agent」最不一樣的地方。以下機制以官方 README 與 CLI --help 輸出為準(我實測 gnhf --help 逐項對過):
每輪一個小 commit。 gnhf 的模型是「每次迭代做一個小、可提交的改動」,而不是讓 agent 一口氣改一大坨。小步前進的好處是:出事的時候,壞掉的範圍就是那一個 commit,不是整晚的成果。
失敗會回滾。 某一輪如果 commit 失敗或跑爛了,gnhf 會做 commit-failure 的修復處理,而不是帶著壞狀態硬往下跑。
連續失敗會中止。 這是最重要的一道保險。gnhf 不會無限重試——連續踩雷到一定次數,它就停手,不會把 token 燒到天亮還在原地打轉。CLI 上也給了明確的天花板參數:
--max-iterations <n> Abort after N total iterations
--max-tokens <n> Abort after N total input+output tokens
--stop-when <condition> End when the agent reports this condition
--max-iterations 限制總輪數、--max-tokens 限制總 token、--stop-when 讓你定義「達成什麼就收工」。這三個加起來,就是「我敢去睡覺」的底氣:最壞情況也燒不超過我設的上限。
跑在獨立 worktree / 分支。 預設 gnhf 會另開一條 gnhf 分支跑(--worktree 還能開獨立 git worktree 讓多個 agent 同時跑),不會直接在你的 main 上亂改。要跑在當前分支得自己加 --current-branch。
--worktree Run in a separate git worktree (enables multiple agents)
--current-branch Run on the current branch instead of creating a gnhf branch
這幾個機制合起來,才讓「睡前丟給它」從一句玩笑話變成真的可以做的事。核心不是「AI 變強了」,是外圈的控制流程把爆炸半徑框住了。
🛠️ 實測安裝與跑一輪
裝法就是一個 npm 全域安裝。前置需求:Node.js(它是 TypeScript 寫的 CLI)、git(它靠 commit 推進),以及至少一個底層 coding agent 的 CLI(例如 claude)。
npm install -g gnhf
gnhf --version
我這台裝完查版本:
0.1.41
這裡有個要誠實講的落差:我從 npm 裝到的是 0.1.41(npm registry 上 gnhf 這個套件的 latest 就是 0.1.41,發布於 2026-05-07)。但 GitHub 上的最新 release tag 是 gnhf-v0.1.42(2026-05-13)。也就是說 GitHub 的 tag 比 npm 上能裝到的版本新一版——如果你要最新的 0.1.42,可能得從 source 裝,npm 上目前拿不到。本文所有實測都是在 0.1.41 上跑的,不替 0.1.42 的行為背書。
基本用法就是把目標當參數丟進去:
gnhf "把 src/utils 的測試覆蓋率補到 80%"
跑起來後它是一個常駐的互動式 TUI——會即時顯示目前跑到第幾輪、這輪 agent 在幹嘛、累積用了多少 token。這也是我要坦白的一個實測限制:這個 TUI 是持續互動式的,不是那種「跑完印一段 log 就結束」的批次工具。我在自動化環境裡想用 --max-iterations 1 讓它跑完一輪就退,它沒有乾脆地結束、而是停在 TUI 等互動,我最後是手動中斷的。所以如果你想把 gnhf 塞進 CI 或 cron 這種完全無 TTY 的場景,要先確認它在你的環境下能不能乾淨地非互動退出——這點我沒能在本輪驗成功,不騙你說「一定可以」。
它適合的場景還是原本設計的那個:你人在、開著終端機、睡前啟動它,讓它在你的機器上跑一整晚,早上回來看 TUI 的結果跟那條 gnhf 分支上的 commit。
我實測踩到的坑:別把它當批次工具塞進無 TTY 環境
上面那個「TUI 不乾淨退出」不是小事,值得單獨拉出來講,因為它會直接決定你能不能自動化。我原本的預期是「跑完設定的輪數就自己結束、印個總結」,結果 --max-iterations 1 跑完那一輪後,程式沒有 exit,而是停在互動式 TUI 等我操作。在有終端機、我人在的情況下這無所謂;但只要環境沒有 TTY(CI runner、cron job、nohup 背景跑),這種等互動的行為就可能讓它掛在那裡不動或直接報錯。
我的結論很直接:gnhf 現階段是「陪你過夜」的工具,不是「無人 CI 排程」的工具。前者它設計得很好,後者你得自己先在目標環境驗過它能不能非互動地跑完就退,再決定要不要接進 pipeline。我這輪沒把後者驗成功,所以不對它在 CI 裡的行為背書。
🤖 支援哪些 agent
gnhf 的價值在於它是 agent-agnostic 的殼,底層 agent 你自己挑。從 --help 直接抄它列的選項:
--agent <agent> Agent to use (claude, codex, rovodev, opencode,
copilot, pi, or acp:<target-or-command>)
也就是官方直接點名支援的有:claude、codex、rovodev、opencode、copilot、pi,再加上一個 acp: 讓你接任何走 ACP(Agent Client Protocol) 的 agent。前提是那個 agent 的 CLI 你本機已經裝好、能跑。
實務上最常見的組合就是 --agent claude(接 Claude Code)或 --agent codex。你原本習慣哪個 coding agent,gnhf 就繼續用那個,它只負責在外面幫你踩油門跟踩煞車。
⚖️ 它跟 ralph-loop、跟我自己的 loop 差在哪
「用迴圈把 AI agent 反覆叫起來跑」這個點子不是 gnhf 發明的。社群裡早就有人手寫 shell 迴圈狂叫 agent(俗稱 ralph-loop 那類土砲做法),我自己在 Claude Code 裡也常用 /loop 讓它自我循環推進一個任務。核心概念是共通的:讓 agent 不要做完一步就停,而是自己往下跑。
那 gnhf 多做了什麼、值得你為它裝一個工具?差別在「控制流程的完整度」:
| 面向 | 手寫 while 迴圈 / 土砲 loop | gnhf |
|---|---|---|
| 重跑 agent | 要自己寫 | 內建 |
| 失敗回滾 | 通常沒有,壞了就壞了 | 內建 commit-failure 修復 |
| 連續失敗中止 | 要自己數 | 內建,撞閾值自動收手 |
| token / 輪數上限 | 自己 wrap | --max-tokens / --max-iterations |
| 隔離(worktree/branch) | 自己開 | 預設另開 gnhf 分支 |
| 結束條件 | 自己判斷字串 | --stop-when |
反過來說,如果你的需求只是「跑個三五輪、我就在旁邊看著」,那 /loop 或幾行 shell 就夠了,不必為它多裝一個工具。gnhf 的甜蜜點是無人看管、要跑久、且怕跑爛這三個條件同時成立的時候。
🎯 誰該用、誰別用
適合你,如果:你會用 Claude Code / Codex,手上有那種「方向明確、可以拆成很多小步、但總量很大」的任務(補測試、大量重構、把一個清單一項項清掉),而且你想利用睡覺 / 開會的時間讓它自己跑,又需要 rollback 跟上限來兜底。
先別用,如果:
- 你想把它塞進 CI / cron 這種無人、無 TTY 的排程——它的互動式 TUI 在這種環境能不能乾淨退出,我本輪沒驗成功,你得自己先試。
- 你的任務需要頻繁的人為判斷(設計決策、要跟人確認的規格)——這種本來就不該讓 agent 無人看管地一路衝。
- 你只是想跑三五輪:直接用
/loop或手寫迴圈,不用多裝工具。
--max-tokens / --max-iterations 把上限鎖死再去睡,別讓「連續失敗中止」是你唯一的煞車。
🔗 延伸資源
- kunchenguid/gnhf 官方 repo(README、CHANGELOG、release notes 都在這)
- 想先搞懂「讓 agent 自己往下跑」的紀律,可以先看我寫過的 166k Star Skill 庫拆解:4 個 AI Agent 老問題,各自的解法——先把 agent 的工程紀律立好,再讓它無人看管地跑,順序不要反。
- 對「AI agent 該遵守哪些工程原則」有興趣,延伸讀 12-Factor Agents vs 我的遊戲專案:3 條原則,同一個坑。
--max-iterations 3 跑一個小任務,親眼看它一輪一輪 commit 的節奏,再決定要不要真的睡前放它跑整晚。