Codex Hooks 入门教程: 用音频通知告别漫长等待, 实现任务自动化
支持内容
## A. 相关脚本
> 1.1 .codex/config.toml
```
[features]
codex_hooks = true
```
> 1.2 .codex/hooks.json
```
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "\".codex/scripts/play-codex-audio.macos.sh\" \"start\" \".codex/audio/task-start.mp3\"",
"timeout": 5
}
]
}
],
"PermissionRequest": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "\".codex/scripts/play-codex-audio.macos.sh\" \"permission\" \".codex/audio/permission-needed.mp3\"",
"timeout": 5
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "\".codex/scripts/play-codex-audio.macos.sh\" \"stop\" \".codex/audio/task-complete.mp3\"",
"timeout": 5
}
]
}
]
}
}
```
> 2.1 .codex/scripts/play-codex-audio.macos.sh
```
#!/usr/bin/env bash
set -u
event_name="${1:-}"
audio_file="${2:-}"
case "$event_name" in
stop)
hook_input="$(cat)"
has_final_message="$(
printf '%s' "$hook_input" | python3 -c 'import json,sys; data=json.load(sys.stdin); print("yes" if data.get("last_assistant_message") else "no")' 2>/dev/null
)"
if [ "$has_final_message" != "yes" ]; then
exit 0
fi
;;
esac
if [ -z "$audio_file" ] || [ ! -f "$audio_file" ]; then
exit 0
fi
if command -v afplay >/dev/null 2>&1; then
nohup afplay "$audio_file" >/dev/null 2>&1 &
fi
exit 0
```
> 2.2 .codex/scripts/play-codex-audio.windows.ps1
```
param(
[string]$EventName,
[string]$AudioFile
)
if ($EventName -eq "stop") {
$hookInput = [Console]::In.ReadToEnd()
$hasFinalMessage = $false
if (-not [string]::IsNullOrWhiteSpace($hookInput)) {
try {
$data = $hookInput | ConvertFrom-Json
$hasFinalMessage = -not [string]::IsNullOrWhiteSpace([string]$data.last_assistant_message)
} catch {
$hasFinalMessage = $false
}
}
if (-not $hasFinalMessage) {
exit 0
}
}
if ([string]::IsNullOrWhiteSpace($AudioFile) -or -not (Test-Path -LiteralPath $AudioFile)) {
exit 0
}
try {
Add-Type -AssemblyName PresentationCore
$player = New-Object System.Windows.Media.MediaPlayer
$player.Open([Uri]::new((Resolve-Path -LiteralPath $AudioFile).Path))
$player.Play()
Start-Sleep -Milliseconds 1200
} catch {
}
exit 0
```
> 2.3 .codex/scripts/play-codex-audio.linux.sh
```
#!/usr/bin/env bash
set -u
event_name="${1:-}"
audio_file="${2:-}"
case "$event_name" in
stop)
hook_input="$(cat)"
has_final_message="$(
printf '%s' "$hook_input" | python3 -c 'import json,sys; data=json.load(sys.stdin); print("yes" if data.get("last_assistant_message") else "no")' 2>/dev/null
)"
if [ "$has_final_message" != "yes" ]; then
exit 0
fi
;;
esac
if [ -z "$audio_file" ] || [ ! -f "$audio_file" ]; then
exit 0
fi
if command -v paplay >/dev/null 2>&1; then
nohup paplay "$audio_file" >/dev/null 2>&1 &
elif command -v mpg123 >/dev/null 2>&1; then
nohup mpg123 -q "$audio_file" >/dev/null 2>&1 &
elif command -v ffplay >/dev/null 2>&1; then
nohup ffplay -nodisp -autoexit "$audio_file" >/dev/null 2>&1 &
fi
exit 0
```
## B. 音频文件
> 3.1 通知音频文件下载
```
https://pan.quark.cn/s/07c47e87f6e7
```
## C. links
> 4.1 Codex Hooks 官方文档
```
https://developers.openai.com/codex/hooks
```
总结内容
# Codex Hooks 入门教程: 用音频通知告别漫长等待, 实现任务自动化
## 告别无效等待, 让你的 Codex 任务“开口说话”
你是否也曾遇到过这样的场景: 启动一个需要一小时的 Codex 任务, 然后放心地去喝杯咖啡, 结果两小时后回来, 发现任务在10分钟时就因为一个授权请求而暂停了, 宝贵的时间被白白浪费. 本期视频将为你提供一个优雅的解决方案——**Codex Hooks**.
我们将通过一个简单而实用的教程, 教你如何在 Codex 任务的**关键生命周期节点** (如任务开始, 请求授权, 任务结束) 自动播放音频, 从而及时获得任务状态的反馈.
### 你将学到什么?
* **理解 Codex Hooks 的核心概念**: 了解什么是 Hooks 以及它的生命周期, 包括 `session_start`, `user_prompt_submit`, `permission_request` 和 `stop` 等关键节点.
* **手把手配置 Hooks**: 我们将一步步指导你如何在你的项目目录下创建 `. codex` 文件夹, 并配置 `config` 和 `hooks. json` 文件来定义自动化行为.
* **编写并集成自定义脚本**: 学习如何编写一个简单的脚本 (支持 macOS, Windows, Linux) 来执行播放音频的命令, 并将其与 Hooks 关联起来.
* **激活与测试 Hooks**: 掌握在 Codex 界面中审查并“信任”你的 Hooks 配置, 确保其能够正常工作, 并进行一个完整的删除文件测试来验证效果.
### 不仅仅是播放声音
虽然本视频以播放音频作为入门案例, 但这仅仅是冰山一角. Codex Hooks 的真正威力在于其**自动化**的潜力. 一旦你掌握了基础, 就可以实现更复杂的功能:
- **高级通知系统**: 将通知推送到你的手机或团队协作工具.
- **自动化日志记录**: 在任务的每个阶段自动记录详细日志.
- **代码质量检查**: 在代码生成后自动运行 Linter 或代码格式化工具.
- **Git 自动提交**: 在任务成功完成后, 自动将变更提交到版本控制系统.
### 项目级 vs. 全局级 Hooks
视频还会讲解**项目级 Hooks** 和 **全局级 Hooks** 的区别, 教你如何将配置应用于单个项目, 或设置为对所有项目都生效的全局规则, 让你的自动化工作流更加灵活.
如果你希望提升开发效率, 让 AI 协作体验更加智能和无缝, 那么这期关于 Codex Hooks 的视频绝对不容错过!
关联内容
Antigravity关闭自动更新, 选择稳定版本以避免BU...
时长: 00:00 | DPAntigravity Gemini 模型无限重试解决方案
时长: 00:00 | DP解锁“贾维斯”时刻: Codex AI 精准操控 Mac 与...
时长: 00:00 | DPCodex Skill 新手入门教程: 从0到1自动化你的 ...
时长: 00:00 | DPCodex AI 本地缓存清理终极指南: 为你的 . cod...
时长: 00:00 | DPCodex订阅大调整: Plus配额惨遭削减, Pro成新宠...
时长: 00:00 | DPOpenAI 震撼福利: 充10刀送500刀? Codex ...
时长: 00:00 | DP告别手动复制粘贴: 免费在线正则工具, 批量提取和格式化文本...
时长: 00:00 | DP一款免费在线文本对比工具 | 无需安装, 即开即用 | 使用...
时长: 00:00 | DPFCPX剪辑必备! 免费SRT字幕转FCPXML在线工具详解
时长: 00:00 | DPCodex 多账号管理终极指南: 使用 Cockpit-To...
时长: 00:00 | DPCodex 高手进阶: 利用官方缓存和 CC Switch ...
时长: 00:00 | DPOpenAI Codex 新手入门终极指南: 从安装配置到实...
时长: 00:00 | DPAntigravity 最新配额实测:Pro变试用? Ult...
时长: 00:00 | DPAI开源大模型LLM的“闭源”恐慌: 一场虚惊还是行业趋势的...
时长: 00:00 | DPAI新手必备: 命令行代理设置终极教程(临时与永久)
时长: 00:00 | DP重磅消息:Google Gemini 3.1 Pro 正式登...
时长: 00:00 | DPOpenAI 意外放水? Codex 免费账户重获 GPT-...
时长: 00:00 | DPGitHub Copilot 学生包重大调整: GPT-5....
时长: 00:00 | DPAntigravity Pro套餐反转: 24小时内从7天改...
时长: 00:00 | DPAntigravity Pro 套餐配额一降到底! AI 算...
时长: 00:00 | DPOpenAI 重磅调整: Codex 免费账号遭限制, 我们...
时长: 00:00 | DPGoogle Antigravity 2026年3月大规模封...
时长: 00:00 | DPGoogle Antigravity 账号解封指南, 官方解...
时长: 00:00 | DP相关推荐
Antigravity Pro 配额要增加了? 深度解析传闻...
00:00 | 405次最近科技圈流传着Antigravity Pro订阅配额即将增加的消息. 本期视频将追溯这一消息的源头...
爱快泛域名/部分泛域名 DDNS教程,iKuai os新手教...
05:04 | 149次欢迎来到爱快新手教程,本视频介绍了ikuai os使用内置DDNS技术,使用泛域名/部分泛域名的方式...
2025家庭网络升级方案分享
06:25 | 240次2025年家庭网络升级方案分享,分享思路,希望一次抛砖引入,欢迎大家一起来分享自己的优秀方案。
远行星号0.97, 网页船插数据库上线测试
02:46 | 148次远行星号在线工具网站(https://sst.lib00.com),已上线船插数据库v1.2,录个视...