输入任意标题、正文关键词或分类开始搜索

按 Esc 关闭,按 Enter 查看完整页面

/ 程序员

让 Codex 每周更新六个命令行工具:从创建任务到确认结果

通过 Codex 定时任务每周一自动更新 agy、grok、codex、claude、mole 和 herdr,记录并行执行、退出码收集、Homebrew 限制排错与约束提示词配置。

我想把几项命令行工具的更新集中到每周一早上:agy、grok、codex、claude,后来又补上了 mole 和 herdr。要求很直接:在我的 Mac 上运行,时间固定为新加坡时间早上 6 点,结果回到原来的 Codex 聊天。

配置完成后,我又实际触发了一次任务:2 项更新成功、2 项已是最新、2 项失败。失败的 agy 后来用原命令重试成功;Herdr 则需要改用 brew upgrade herdr,随后也更新成功。

最有用的发现是:帮助里有 update,还不足以确定该用哪条更新命令。Herdr 通过 Homebrew 安装,运行自更新时直接拒绝执行。我已经据此修订了任务里的命令和约束。

实际跑出的结果

工具首次退出码首次运行后续结果
agy1从 1.4.0 检测到 1.4.2,下载中断原命令重试成功,版本确认为 1.4.2
grok0已是最新:1.0.62另有 privacy 未识别配置项警告,尚未处理
codex0更新成功版本确认为 0.163.0,提示需重启
claude0已是最新:2.1.302无需补跑
mole01.56.1 → 1.61.0版本查询确认 1.61.0
herdr1Homebrew 安装禁用自更新改用 Homebrew 后,0.9.3 → 0.9.5,版本查询确认

首次六项并行执行中,一项失败没有阻断其他项,每项输出和退出码也都收集到了。后面两个失败项是分别补跑成功的,修订后的六项任务还没有整轮重跑。

这次触发发生在 2026 年 10 月 18 日周日晚上 21:35,新加坡时间。它证明执行链路跑过一次;每周一早上 6 点是否按时触发,还要看对应时间的运行记录。版本号也只代表这次实测结果。

先把“配置完成”说清楚

这次配置里有三个需要分别检查的地方:

  • 命令入口:当前安装是否提供 update。
  • 任务配置:时间、命令清单、执行环境和结果归属是否被正确保存。
  • 执行结果:每个更新进程最终输出了什么,退出码是什么。

现在三类证据都有了:命令检查、配置回读,以及实际进程的结果。但任务显示 ACTIVE,仍然无法单独回答六项是否全部成功。这次外层执行器退出码为 0,内部 agy 和 Herdr 的退出码却都是 1,判断必须落到每个子进程。

说明:自动化任务在本地 macOS 运行,涉及权限与退出码逐层校验,建议在配置前明确各命令的更新机制。

第一步:确认六个命令在本机可用

先在本机终端检查命令位置:

zsh -lc 'command -v agy grok codex claude mole herdr brew'

逐项看输出。如果少了某个程序,先处理安装或 PATH 问题。固定写入某个 Node 版本下的绝对路径,会让任务依赖那一版 Node 的安装目录;我的配置要求每次运行时重新解析命令位置。

接着检查更新入口。这次使用的是:

zsh -lc 'agy help update'
zsh -lc 'grok update --help'
zsh -lc 'codex update --help'
zsh -lc 'claude update --help'
zsh -lc 'mole --help'
zsh -lc 'herdr --help'

这些命令只查看帮助。agy 的输出很简短;Mole 的帮助使用 mo update 这个写法,实际执行 mole update 成功;Herdr 虽然列出了 herdr update,运行时却因安装方式受限而失败。排错后,我保存的更新清单是:

agy update
grok update
codex update
claude update
mole update
brew upgrade herdr

具体入口要结合安装方式和真实输出判断。Mole 的自带更新命令会委托 Homebrew;Codex 的自带更新命令会调用 npm。这次也没有出现所有工具都必须直接改用包管理器的结论。

第二步:把任务要求写完整

只说“每周帮我更新”,会留下不少执行细节。我把时间、工作目录、失败处理和完成标准一起写进了要求。

下面是依据本次最终配置整理的提示词,可以复制到 Codex 聊天中,按自己的工具清单调整:

请在当前聊天创建一个定时任务:每周一早上 06:00,时区 Asia/Singapore,
在当前这台本地 Mac 上更新以下六个已安装程序:
agy update
grok update
codex update
claude update
mole update
brew upgrade herdr

我授权这个定时任务执行以上六项更新。结果返回当前聊天。

每次使用本机 zsh 登录 shell,以我的主目录为工作目录,
先用 command -v 重新确认每个命令的位置,不固定写入 Node 版本路径。

六项更新并行执行,分别保留输出与退出码,并等待全部结束。
一项失败不影响其他项。拿到最终输出和退出码后,再判断各项结果。

Herdr 使用 brew upgrade herdr,其余五项使用各程序自带的 update。
不要再执行 herdr update。保留当前发布通道。
不使用 sudo,不修改 shell 配置或项目文件。
遇到缺少程序、网络失败、权限不足或需要人工输入,报告具体原因;
不自动确认未知提示,不更换安装方式。

有更新或异常时,用简体中文简要列出各项结果与失败原因。
全部已经是最新版本且没有异常时,保持安静。

首次运行已经验证了并行与失败隔离。有更新和失败时也返回了汇总;全部已是最新且无异常时能否保持安静,仍待验证。实际执行器还关闭了标准输入,为每项更新设置了 20 分钟超时,但这些异常分支没有触发,超时值也没有固定写入任务提示词。

第三步:检查保存结果,后续修改原任务

创建后,我检查了工具返回的任务 ID 和 ACTIVE 状态,并回读任务配置,核对时间、命令清单和目标聊天。

后面补充 Mole 和 Herdr 时,我修改了同一个任务。这里需要一起更新命令清单,以及提示词中“四项”“五项”这样的数量描述,保留原时间和执行约束。

如果你也要补充工具,可以直接在原聊天提出:

请把 <工具名> update 加入刚才的每周更新任务。
先核对本机命令和帮助信息,保持原有调度时间、目标聊天和执行要求。
修改后回读配置,确认完整命令清单。

Herdr 报错后,我要求把原任务中的命令改成 brew upgrade herdr,同时修正“全部使用自带 update”的约束。修改后回读确认了新命令,任务仍为 ACTIVE,每周一 06:00 的时间保持不变。

首次执行器是按程序名统一拼接 update 的。换成 brew upgrade herdr 后,后续执行必须使用完整命令,不能继续套用原来的拼接方式。配置修改成功和新命令单独执行成功,都不能替代修订后整轮任务的测试。

创建时踩到的坑:本机执行与聊天目标

这次第一次创建失败,工具报错:

automation_update received invalid arguments: targetThreadId: Missing targetThreadId or destination=thread.

当时请求使用 kind: "heartbeat"、destination: "local",没有提供 targetThreadId。改成 destination: "thread" 后,创建成功。

这个错误让我把两件事分开描述:命令在本机运行,结果返回当前聊天。后续修改任务时,还要保留原来的目标聊天。

这是当次工具接口中发生的参数错误。以后遇到类似问题,应以当前工具定义为准;不能据此推断所有任务类型都必须填写同一套参数。

实跑后的两个排错过程

Herdr:安装方式决定这次该用的命令

herdr update 返回退出码 1,提示 Homebrew 安装禁用自更新。这个错误已经给出了明确原因,继续重试同一条自更新命令没有解决问题。

我先修改定时任务,再单独执行:

zsh -lc 'cd ~ && command -v brew && brew upgrade herdr' </dev/null
zsh -lc 'herdr --version'

Homebrew 输出 0.9.3 升级到 0.9.5,更新进程退出码为 0,随后查询返回 herdr 0.9.5。正在运行的 Herdr 会话没有重启,所以这个查询只能确认磁盘上的新命令版本。

agy:重试有效,下载中断原因仍不确定

agy 首次报 Download interrupted: unexpected EOF,还没有完成安装。我要求重试原命令:

zsh -lc 'cd ~ && command -v agy && agy update' </dev/null
zsh -lc 'agy --version' </dev/null

第二次下载、校验和安装都成功,退出码为 0,版本查询返回 1.4.2。没有切换安装方式,也没有改配置。但这只能证明本次重试有效,还不足以确定第一次中断是服务端、代理还是网络问题。

还需要继续验证的部分

原会话采用的运行前提是电脑开机、保持唤醒,并让 Codex App 正在运行。睡眠、关机或 App 退出后的补跑行为,这次没有测试。

后续还需要检查周一的真实调度、修订后六项命令的整轮执行,以及超时、交互提示和静默通知的实际表现。Grok 的 privacy 配置警告也没有处理,退出码为 0 并不代表日志里没有异常。

Codex 和 agy 更新后提示重启;Herdr 现有会话也未重启。安装版本已经核对,运行中进程是否切换到了新版本,需要另行确认。后续有新版本变更与真实调度证据会继续补充更新。