我为什么做这个项目
我经常让 Codex 处理需要几分钟甚至更久的任务。任务开始以后,我不想一直盯着终端,但离开屏幕又可能错过权限确认,也不知道它是在分析、修改文件、运行测试,还是已经结束。
我真正需要的不是把日志全部读出来,而是几个简单的提醒:任务开始了、进入了哪个阶段、现在需要我确认,以及任务是否完成。Codex 语音进度播报就是为这个使用场景做的。
它现在能做什么
这是一个运行在 macOS 本地的 Codex Hook。脚本监听 UserPromptSubmit、PostToolUse、PermissionRequest 和 Stop 事件,并把其中适合播报的状态转换成简短中文语音。
如果任务使用 update_plan 管理步骤,脚本会读取当前的 in_progress 阶段。例如 Codex 从“检查现有实现”进入“运行自动化验证”时,我可以直接听到阶段变化。遇到权限请求时,它只提醒我回到屏幕确认,不会朗读完整请求内容。
为了避免工具调用频繁时连续播报,我增加了时间节流和会话级语音队列。语音会按顺序在后台生成和播放,不会阻塞 Codex 正在执行的任务。即使 edge-tts 或播放器失败,Hook 也只记录错误,不影响原任务。
我做出的几个取舍
这个项目的目标不是“朗读 Codex”,而是提供一个尽量克制的状态提示层。因此它默认不读取用户提示词、命令、工具输出和最终回复;包含密码、密钥或令牌等敏感词的阶段名称不会进入播报,URL 也会被替换成简短提示。
我目前把范围限定在 macOS,因为系统自带的 afplay 可以让播放流程保持简单。默认使用中文音色,但语速、音量、播报间隔、TTS 命令和播放器都可以通过环境变量调整。
Codex 和 GPT-5.6 如何参与开发
我在 Codex 中使用 GPT-5.6 Sol 完成了主要实现。Codex 不只是生成第一版脚本,还帮助我检查 Hook 事件格式、修改文件、模拟生命周期事件并运行真实 TTS 测试。
测试过程中,我们发现了工具计数并发更新、队列过早退出和异常日志不完整等问题。Codex 根据实际运行结果继续修改代码和复测。GPT-5.6 也帮助我梳理了哪些信息值得播报,以及隐私边界应该放在哪里。最终的产品范围、默认中文体验和“只播报状态、不复述内容”等关键决定由我确认。
如何体验
公开仓库包含 Hook 脚本、项目级配置示例、依赖文件和完整安装步骤。评委可以按 README 启用 Hook,也可以运行其中的手动事件命令验证核心流程,无需修改源代码。
当前版本需要 macOS、Python 3.9 或更高版本、edge-tts,并使用系统自带的 afplay 播放语音。
Repository: https://github.com/zhaodong1942-pixel/Codex-Voice-assistant
Built With
- codex-hooks
- edge-tts
- gpt-5.6
- macos-afplay
- python
Log in or sign up for Devpost to join the conversation.