gnhf(Good Night, Have Fun)

睡前给编码代理一句话目标,它整夜迭代提交小改动,醒来得到一个干净的分支和完整日志。

Star 数
★ 4.2k
最近更新
17 天前
License
MIT
主语言
TypeScript

30 秒速览

运行形态
命令行工具
可在哪里用
通用 · 跨平台Codex · Claude Code
费用
软件免费,模型调用费用自付
上手难度
中 · 需要几步配置
开始前需要
Node.jsGitpnpm(源码构建时)编码代理 CLI,例如 claude、codex、copilot、pi、cursor-agent、acli rovodev 或 opencodeShell / 命令行网络访问本地文件系统
典型场景
想在睡觉或开会期间让代理推进一个长期目标(例如降低代码复杂度、补齐测试),早上直接审查分支的人。
不适合
  • 需要人工逐条审查每次提交、不接受无人值守改动的团队
  • 无法提供稳定登录态或额度充足的编码代理账号的用户
  • 不在 Git 仓库中工作、或要求干净工作树不被占用的场景

这个 Agent 能做什么,适合哪些场景?

gnhf 是一个命令行编排器,把 Claude Code、Codex、GitHub Copilot CLI、Pi、Cursor CLI、Rovo Dev、OpenCode 等编码代理包装成一个持续运行的循环。启动时它校验 Git 工作树是否干净、创建 gnhf/ 分支(或用 --current-branch 留在当前分支)、把目标写入 prompt.md,然后反复构建迭代提示、以非交互模式调用代理。每次成功迭代产生一个独立的 git 提交并把经验追加到 notes.md,失败迭代则通过 git reset --hard 回滚,连续三次失败会中止。运行元数据(prompt、notes、停止条件、end-state.json、gnhf.log)保存在本地 .gnhf/runs/ 目录并被忽略,因此分支上只留下有意的改动。它面向无人值守的夜间运行,提供迭代数、token 上限、sleep 防止、worktree 并行和退出摘要等控制手段。

在 Git 仓库内运行 gnhf "<prompt>" 后,它先检查工作树干净、写入 prompt.md 并建立或复用 gnhf/ 分支;每一轮把目标、notes.md 中累积的上下文和输出 JSON 结构拼成迭代提示,通过非交互模式调用所选代理(例如 claude、codex exec、copilot 的 JSONL 模式、opencode serve、acli rovodev serve,或 acpx 驱动的 acp:<target>)。代理返回结构化结果后,gnhf 判定成功则创建一次无签名提交、把摘要追加到 notes.md,失败则回滚并计数,可重试错误按指数退避,永久错误(如额度不足)直接中止并打印日志路径。遇到 Claude 用量窗口耗尽时,它读取限流事件中的重置时间,等待后自动重试同一迭代,并可用 --max-rate-limit-wait 设置总等待上限。运行时以 --max-iterations、--max-tokens、--stop-when 控制何时结束;交互式 TUI 在终端标题和统计行显示耗时、token 与提交数,Ctrl+C 第一次请求优雅停止、第二次强制停止。结束时输出包含分支、耗时、迭代与 token 总量、分支 diff 统计、notes 与日志路径以及复查命令的摘要,并把完整 JSONL 调试日志写入 .gnhf/runs/<runId>/gnhf.log。

  1. 想在睡觉或开会期间让代理推进一个长期目标(例如降低代码复杂度、补齐测试),早上直接审查分支的人。
  2. 需要同时在一个仓库上跑多个互不干扰任务时,用 --worktree 为每个代理开独立环境与分支。
  3. 希望边跑边部署或本地热更新的松散项目,用 --current-branch --push 让每次成功迭代推送到远端。
  4. 已经订阅 Claude Code、Codex 或 Copilot 并希望把闲置额度用满的开发者。
  5. 需要通过 ACP 接入 Gemini、Grok 等非原生代理,同时保留统一日志与回滚语义的团队。
  6. 想给代理设定硬性预算(迭代数、token 上限、限流等待上限)再放手的成本敏感用户。

如何安装或部署这个 Agent?

需要 Node.js、Git 和已登录的编码代理 CLI;在 Git 仓库内使用。

npm install -g gnhf

从源码安装:

git clone https://github.com/kunchenguid/gnhf.git
cd gnhf
corepack enable
pnpm install
pnpm run build
pnpm link --global

首次运行会在 ~/.gnhf/config.yml 生成默认配置(默认代理为 claude),可按需修改:

agent: claude

maxConsecutiveFailures: 3

preventSleep: true

如何使用这个 Agent?

在干净的 Git 仓库中给出一句话目标即可开始:

$ gnhf "reduce complexity of the codebase without changing functionality"

加上迭代与 token 预算,适合短睡:

$ gnhf "reduce complexity of the codebase without changing functionality" \
    --max-iterations 10 \
    --max-tokens 5000000

并行跑多个任务:

$ gnhf --worktree "implement feature X" &
$ gnhf --worktree "add tests for module Y" &

在当前分支上每次成功迭代后推送:

$ gnhf --current-branch --push "keep improving this app"

切换代理或指定模型:

$ gnhf --agent codex --model gpt-5.4 "fix failing tests"
$ gnhf --agent 'acp:gemini' "polish the docs"

如需关闭匿名遥测:

export GNHF_TELEMETRY=0

这个 Agent 有哪些优点和局限?

优点
  • 单命令启动的完整循环:校验工作树、建分支、迭代、提交/回滚、退出摘要一次到位,无需自己写脚本。
  • 代理无关:原生支持七个编码代理 CLI,并可通过内置 acpx 运行任意 acp:<target> 或自定义 ACP 命令。
  • 失败语义明确:成功即提交、失败回滚、连续三次失败中止,提交失败会保留未提交改动让下一轮修复。
  • 针对夜间运行的细节完善:Claude 用量窗口自动等待重试、sleep 防止、交互式 TUI 显示 token 与提交数。
  • --worktree 让多个代理在同一仓库并行工作,互不干扰,且有提交的 worktree 会保留供审查。
  • 本地 .gnhf/runs/ 保存 prompt、notes、end-state.json 与 JSONL 调试日志,便于复盘且不污染分支。
局限
  • 本身不提供模型:你必须已安装并登录某个编码代理 CLI,成本由该代理的订阅或 API 用量决定。
  • 要求干净的 Git 工作树且不支持无 Git 的目录,--current-branch 与 --worktree 不能同时使用。
  • 默认向作者自托管分析发送匿名遥测,需要手动设置 GNHF_TELEMETRY=0 关闭。
  • 部分能力受上游限制:Copilot 不暴露完整输入/缓存 token 统计,OpenCode 与 Rovo Dev 的模型覆盖方式受限。
  • Linux 下以 systemd-inhibit 防睡眠时,无提交的 worktree 可能残留,需要手动 git worktree remove。
  • 无人值守意味着你需要接受代理自主提交的代码,合并前仍需人工复查分支 diff。

这个 Agent 与同类方案有什么区别?

README 明确将自身定位为 ralph(ghuntley.com/ralph)与 Karpathy autoresearch 风格的编排器,属于同一类“让代理持续迭代”的做法;它没有点名具体的竞品工具,因此不与其他产品做逐项对比。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
gnhf(Good Night, Have Fun) 当前 51 · 缺口较多 命令行工具免费 + 模型费 ★ 4.2k 17 天前 TypeScript Codex · Claude Code
Vicoa 52 · 缺口较多 桌面应用免费 + 模型费 ★ 516 10 天前 Python Codex · Claude Code
Cezar — AI 编码代理编排器 63 · 存在缺口 命令行工具免费 ★ 743 今天 TypeScript Codex · Claude Code
Maestro:AI 代理编曲指挥中心 43 · 缺口较多 桌面应用免费 + 模型费 ★ 3.5k 今天 TypeScript Codex · Claude Code

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
缺口较多
51/ 100 五分制 2.6 / 5
信任安全 12/29
可靠稳定 9/14
适用触发 10/18
规范维护 10/18
有效结果 7/13
证据核验 3/8
查看各维度的扣分理由
信任安全12 / 29 · 2.1/5

README 说明默认在 gnhf/ 分支上运行、失败回滚、不强制推送,并允许通过 agentArgsOverride 覆盖权限标志;但默认会向编码代理传递非交互式权限默认值,且 --current-branch --push 会直接推送,缺少逐次确认机制。敏感数据处理(凭据、API key)仅以“不要通过覆盖传入”的方式提示,未给出完整的数据流说明。依赖仅 commander 与 js-yaml,锁定版本,依赖面较小,故 dependency_security 给 2;其余项因缺少显式最小权限与确认设计而扣分。

可靠稳定9 / 14 · 3.2/5

README 对失败处理、连续失败中止、速率限制等待、OpenCode 空响应等有较详细描述,且 CI 在三大平台运行 lint/typecheck/test,自洽性较好;但部分行为(如 systemd-inhibit 下 worktree 泄漏)仍为已知缺陷,故未给满分。依赖可用性由 npm 发布与 engines 约束支撑,给 2。

适用触发10 / 18 · 2.8/5

支持多代理、ACP、worktree、当前分支、stdin 提示等场景,边界说明较清楚;但触发精度依赖自然语言 --stop-when 与代理自报结果,缺少结构化判定,故 trigger_precision 仅 1。

规范维护10 / 18 · 2.8/5

README 结构清晰,含安装、CLI 参考、配置、限制说明;MIT 许可证完整。但版本号仅见于 package.json,CHANGELOG 由 release-please 生成且未在证据中展示,维护责任与发布者身份未验证,故相应项扣分。

有效结果7 / 13 · 2.7/5

输出可用性较好(退出摘要、notes.md、调试日志、审查命令),对夜间无人值守场景有明确边际价值;但成本控制依赖 token 上限与速率等待,缺少成本估算与预算告警,cost_benefit 仅 1。

证据核验3 / 8 · 1.9/5

README 中的行为声明多与代码/CI 配置相互印证(如 golden config 测试、CI 矩阵),但多数声明无法在静态证据中完全追溯,且未区分事实与推断,故各项给 1。

风险与缓解建议
  • 默认向编码代理传递非交互式权限标志,可能扩大代理权限,需用户自行审查 agentArgsOverride 与权限设置。
  • --current-branch --push 会在每次成功迭代后直接推送,缺少逐次确认,误推送风险需自行评估。
  • 发布者身份未经 FollowAgents 注册表验证,维护责任与更新路径不明确。
  • 触发条件依赖自然语言 --stop-when 与代理自报结果,判定精度有限。
  • 已知 Linux systemd-inhibit 下 worktree 泄漏问题,需手动清理。
证据充分度:低 评估于 2026年10月20日 审查版本 f2ad5baff8de
查看完整评分方法 →

常见问题

gnhf 自己会调用大模型吗?
不会。它只负责编排:调用你已安装并登录的编码代理 CLI,模型、额度和计费都由该代理决定。
中途失败或代理崩溃会怎样?
失败迭代会用 git reset --hard 回滚(提交失败除外,会保留改动待修复),可重试错误按指数退避,连续三次失败或永久错误(如额度不足)会中止并打印日志路径。
Claude 的 5 小时用量窗口用完了怎么办?
gnhf 会读取限流事件里的重置时间,回滚该次迭代但不计为失败,等待后自动重试;可用 --max-rate-limit-wait 设置总等待上限,默认 24 小时安全上限。
能不能在同一个仓库同时跑多个代理?
可以,使用 --worktree 为每个运行创建独立的 git worktree 和分支;有提交的 worktree 运行结束后会保留,方便合并或 cherry-pick。
运行数据会不会进入我的分支?
不会。prompt、notes、end-state.json 和 gnhf.log 都写在本地 .gnhf/runs/ 下并被忽略,分支上只有每次成功迭代的提交。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents