AI 工具 14 min read

good night, have fun:讓 AI Agent 過夜自己跑迴圈的 orchestrator(實測 0.1.41)

gnhf(good night, have fun)是把 coding agent 包成自動迴圈的 orchestrator,GitHub 3.2k star。實測安裝、7 種 agent 支援、小步 commit + 失敗回滾 + 連續失敗中止機制,以及它跟 ralph-loop / 手寫 while 迴圈差在哪。

good night, have fun:讓 AI Agent 過夜自己跑迴圈的 orchestrator(實測 0.1.41)
本文目錄 · 9
懶人包
- 本文解決:看到「睡前把任務丟給 AI、隔天早上看成果」的 gnhf 紅到 3.2k star,想知道它到底是什麼、值不值得裝?
- 推薦給:已經在用 Claude Code / Codex,想讓 agent 在無人看管下多跑幾輪、又怕它把 repo 搞爛的工程師。
- 讀完你會知道:gnhf 是「orchestrator」不是「新的 coding agent」、它靠什麼機制不讓 agent 跑歪、怎麼裝跟實測、以及它跟 ralph-loop 那種土砲 while 迴圈差在哪。
kunchenguid/gnhf GitHub repo 社群預覽卡 — good night have fun,3k stars、229 forks、MIT 授權

📌 目錄

  • 一句話:gnhf 是什麼

  • 它解決的問題:agent 跑一輪就停

  • 核心機制:它憑什麼敢讓你去睡覺

  • 實測安裝與跑一輪

  • 支援哪些 agent

  • 它跟 ralph-loop、跟我自己的 loop 差在哪

  • 誰該用、誰別用

  • 延伸資源
  • 🌙 一句話: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 跑下一輪
    • 一直循環,直到達成你設的結束條件、或撞到中止條件
    換句話說,它把「你在旁邊一直按 Enter」這件事自動化掉了。

    🔁 核心機制:它憑什麼敢讓你去睡覺

    「讓 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 迴圈 / 土砲 loopgnhf
    重跑 agent要自己寫內建
    失敗回滾通常沒有,壞了就壞了內建 commit-failure 修復
    連續失敗中止要自己數內建,撞閾值自動收手
    token / 輪數上限自己 wrap--max-tokens / --max-iterations
    隔離(worktree/branch)自己開預設另開 gnhf 分支
    結束條件自己判斷字串--stop-when
    土砲 loop 的問題從來不是「跑不起來」,是跑歪的時候沒有煞車——它不會回滾、不會數失敗次數、不會自動收手,你早上起來可能看到 200 個爛 commit 跟燒光的額度。gnhf 把這些煞車都做成內建預設,這才是它值得單獨存在的理由。

    反過來說,如果你的需求只是「跑個三五輪、我就在旁邊看著」,那 /loop 或幾行 shell 就夠了,不必為它多裝一個工具。gnhf 的甜蜜點是無人看管、要跑久、且怕跑爛這三個條件同時成立的時候。

    🎯 誰該用、誰別用

    適合你,如果:你會用 Claude Code / Codex,手上有那種「方向明確、可以拆成很多小步、但總量很大」的任務(補測試、大量重構、把一個清單一項項清掉),而且你想利用睡覺 / 開會的時間讓它自己跑,又需要 rollback 跟上限來兜底。

    先別用,如果:

    • 你想把它塞進 CI / cron 這種無人、無 TTY 的排程——它的互動式 TUI 在這種環境能不能乾淨退出,我本輪沒驗成功,你得自己先試。
    • 你的任務需要頻繁的人為判斷(設計決策、要跟人確認的規格)——這種本來就不該讓 agent 無人看管地一路衝。
    • 你只是想跑三五輪:直接用 /loop 或手寫迴圈,不用多裝工具。
    還有一個現實提醒:無人看管 = 你在燒 token 的時候人不在。務必先用 --max-tokens / --max-iterations 把上限鎖死再去睡,別讓「連續失敗中止」是你唯一的煞車。

    🔗 延伸資源

    下一步很簡單:先在一個你不心疼的分支上,用 --max-iterations 3 跑一個小任務,親眼看它一輪一輪 commit 的節奏,再決定要不要真的睡前放它跑整晚。
    author
    陳彥彤

    AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

    support

    覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

    related

    相關文章

    [AI 工具] · 12min
    兩個 AI 真能「對等聊天」?Claude Code × Codex MCP 協作的真實邊界
    Claude Code 透過 MCP 可以直接呼叫本機 Codex 跑子任務——我下 prompt、Codex 在同一台機器讀檔/跑指令/回報。但這是「結構化輪流問答」(one-shot + threadId 延續),不是兩個 AI 自由聊起來。這篇紀錄我接通的全程:怎麼用三題本機驗證確認「真的接通而不是腦補」(它回傳 commit hash 6cf8254 我去對)、怎麼用 tmux pane 即時看 Codex 的推理與指令、以及最能說明「對等有限度」的坑——MCP 接過去的 Codex 預設 read-only sandbox,嘴上能聊手上卻寫不了檔。結論:接通 ≠ 協作,能聊 ≠ 能動手。
    [工程實作] · 11min
    12-Factor Agents vs 我的遊戲專案:3 條原則,同一個坑
    HumanLayer 的 12-Factor Agents 有 24.2k star,我對照自己寫 Splendor 網頁版時踩出的工程紀律,發現其中 3 條原則我半年前就已經做對,這是實測後的對照筆記。
    [AI 工具] · 20min
    CodeGraph vs grep:AI 讀 codebase 少 81% 工具呼叫的知識圖譜
    CodeGraph 把整個 codebase 預先建成一張「程式碼知識圖譜」(symbol 節點 + call 邊),讓 Claude Code、Codex、Cursor 這類 AI agent 不用一個一個檔案爬,一次 codegraph_explore 就拿到相關 source、call path 跟改動波及範圍。官方在 7 個真實開源專案實測:VS Code 少 81% tool call、少 64% token,Alamofire 便宜 40%、快 33%。這篇把它是什麼、三層架構(tree-sitter + SQLite + file watcher)、安裝三件套、跟 grep / LSP 的差別、以及我接的時候要注意的點寫一遍。100% 本機跑、MIT、支援 23 種語言、8 個 agent。