自托管服务
Jia-Ethan/codex-keysmith avatar
Jia-Ethan/codex-keysmith

codex-keysmith:给 Codex 全局指令加一道可撤销的保险

版本无关的 Codex 指令部署,具有空运行、备份、挂钩隔离和恢复功能。

4,473 个 Star703 个 ForkPythonMIT
GitHub

秒懂

它是什么?
codex-keysmith 是一个面向 Codex 的全局指令部署工具,强调先预览、再写入、可撤销。它把 Markdown 指令部署到 ~/.codex,并隔离 hooks.json,适合需要频繁调整 Codex 行为但又怕改坏配置的工程师。
适合谁用?
codex-keysmith 适合那些经常修改 Codex 全局指令、需要可回滚操作的工程师,尤其是对 hooks.json 有依赖的用户。不适合只想快速改一行配置、不愿学习 dry-run 和恢复流程的人。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 3 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

解决什么问题:Codex 全局指令的不可逆风险

Codex 的全局指令存放在 ~/.codex 目录,通过 config.toml 的 model_instructions_file 指向一个 Markdown 文件。直接编辑这个文件或 config.toml 很容易,但改错了就可能让所有新会话加载到错误指令,而且没有内置的撤销机制。codex-keysmith 的目标就是把这种变更变成可预览、可回滚的事务。它面向的是那些需要频繁调整 Codex 行为、但又不想手动管理备份的工程师。文档明确警告,这会改变该 Codex 配置下的全局行为,不是项目级开关。

工作机制:指令通道与环境通道

codex-keysmith 有两条通道。指令通道把 Markdown 部署到 ~/.codex,默认使用 --preset unrestricted,写入 config.toml 的 model_instructions_file,并默认把整份 hooks.json 隔离为 hooks.json.disabled。环境通道通过 --scaffold 把残缺 fixture 工作区写到 ~/.codex-fixture-workspace/<pack>,不修改 ~/.codex。两通道可叠用,互不写对方目录。部署时,工具会创建 manifest 文件 .codex-keysmith-manifest.json,记录本层所有权,供卸载使用。卸载每次只撤销最新一层,这暗示它支持多层部署,但文档没有详细说明层数上限。

安装与快速开始:单文件脚本,无 pip 包

安装方式是下载 Release 中的单文件脚本,没有 pip install。文档给出的命令是:从 Releases 页获取 codex-instruct-vX.Y.Z.py 和 SHA256SUMS,用 shasum 校验后运行。例如:python3 codex-instruct-vX.Y.Z.py --codex-dir ~/.codex --status --lang zh-CN 查看状态,--dry-run 预览写入计划,确认后加 --yes 执行。省略 --codex-dir 会处理全部自动发现的配置目录。Windows 用户把 python3 换成 python。注意 Windows 新鲜部署被标记为 EXPLICIT_BETA,文档建议不要使用已发布的 v0.1.0。

撤销与恢复:事务机制的实际边界

撤销命令包括 --restore-hooks 和 --uninstall,前者立即执行且不接受 --yes,后者需要 --yes。v0.3.9 引入了 --reactivate,用于处理 inactive-by-config 状态,只补回缺失的顶层 model_instructions_file,不重走完整部署。文档强调,--recover 只处理 deploy/uninstall 中断事务,不创建 durable journal。这意味着硬中断后,你需要先运行 --status,无冲突时重跑 --reactivate --yes 完成其余目录。这里有一个明显限制:恢复机制依赖你遵循它的流程,如果手动删除 journal、备份或 manifest,恢复可能失效。文档明确说不要手工删除这些文件。

限制与失败模式:hooks 隔离的副作用

最大的限制是 hooks.json 被默认整体隔离为 hooks.json.disabled。如果你的 Codex 配置原本依赖 hooks.json 中的自定义钩子,部署后这些钩子会全部失效,直到你手动恢复。文档警告不要手工编辑 config.toml,也不要为补字段再走一遍完整部署。另一个限制是版本兼容性:推荐 Python 3.10-3.14,没有自动更新,版本以 Releases 页为准。Desktop Beta 仅支持 macOS Apple Silicon 和 Windows x64,未签名、未经公证,可能触发 Gatekeeper 或 SmartScreen。这些限制意味着它不适合那些依赖复杂 hooks 或需要跨平台 GUI 的用户。

替代方案:直接编辑 vs. 版本控制

最直接的替代方案是手动编辑 ~/.codex/config.toml 和 Markdown 指令文件,并用 Git 或手动备份管理变更。这种方式没有 dry-run 预览,也没有 hooks 隔离,但给了你完全的控制权,且不引入额外工具。另一个替代是使用 Claude Code 的 claude-keysmith,它部署到项目或用户的 CLAUDE.md import block,部署面更小,不涉及全局 hooks。关键区别在于,codex-keysmith 针对 Codex 的全局配置,而 claude-keysmith 针对 Claude Code 的 import 机制。如果你的需求是项目级指令,codex-keysmith 可能过重。

维护与升级成本:单文件脚本的利弊

维护成本集中在单文件脚本的更新上。没有 pip 包意味着你需要手动下载新版本并重新校验 SHA256SUMS。文档建议以 Releases 页为版本源,不要以 README 为基准。升级时,旧版本部署的 manifest 可能不兼容新版本,但文档没有明确说明兼容性策略。建议升级前先运行 --status 检查当前状态,并在测试目录中试用新版本。许可证是 MIT,允许自由使用和修改,但文档没有提供法律建议,只提到漏洞报告走 SECURITY.md 的私密渠道。

编辑结论

codex-keysmith 适合那些经常修改 Codex 全局指令、需要可回滚操作的工程师,尤其是对 hooks.json 有依赖的用户。不适合只想快速改一行配置、不愿学习 dry-run 和恢复流程的人。采用前先验证:检查当前 ~/.codex 下是否已有自定义 hooks.json,确认 --status 输出无误,并在非生产环境先跑一次 --dry-run。若你的 Codex 配置依赖 hooks.json 的现有行为,务必先备份并理解 --restore-hooks 的副作用。最终判断:它把配置变更变成显式事务,但要求你遵守其流程,否则恢复机制可能失效。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记