Claude Code版に続いて、Codexでも作業完了をずんだもんに喋らせるようにした。
Codexで長めの修正や調査を任せていると、気づいたら処理が終わっていることがある。ターミナルをずっと見張るのも微妙なので、Codexが止まったタイミングでVOICEVOXのずんだもんが報告してくれるようにした。
作ったものはこちら。
GitHub: https://github.com/shotasten/codex-skills-zundamon
以前作ったClaude Code版
先にClaude Code版も作っていた。やりたいことはほぼ同じで、「AIエージェントが作業を終えたら音声で気づけるようにする」というもの。
今回はこれのCodex版。Claude Codeとは設定ファイルやhookの扱いが違うので、Codex用に作り直した。
codex-skills-zundamonでできること
codex-skills-zundamon は、Codexの作業報告をVOICEVOXで読み上げるためのSkillとhookをまとめたリポジトリ。
$zundamonで任意テキストや直前作業の報告を読み上げる- Codexのturn停止時にStop hookで最後のメッセージを読み上げる
- エラー・失敗・警告っぽい内容ならヒソヒソ声に切り替わる
- 再生中の読み上げを停止できる
対応OSはREADME上ではmacOS / WSL / Linux。私は「作業が終わったことに気づく」用途なので、まずはStop hookが本命。
前提条件
VOICEVOX EngineをDockerで動かすので、Dockerが使える状態にしておく。
また、読み上げスクリプトでは以下のコマンドを使う。
curljqpython3- macOSなら
afplay - WSLなら
powershell.exe - Linuxなら
ffplay(ffmpeg)
インストール
1. リポジトリをクローン
git clone https://github.com/shotasten/codex-skills-zundamon.git
cd codex-skills-zundamon2. VOICEVOXを起動
リポジトリには docker-compose.yml が入っているので、そのまま起動する。
docker compose up -dVOICEVOX Engineは http://localhost:50021 で待ち受ける。スクリプト側もデフォルトではこのURLを見に行く。
3. SkillをCodexに入れる
全リポジトリで $zundamon を使いたい場合は、CodexのグローバルSkillディレクトリへコピーする。
mkdir -p ~/.codex/skills
cp -R .agents/skills/zundamon ~/.codex/skills/特定のリポジトリだけで使いたい場合は、そのリポジトリに .agents/skills/zundamon をコピーすればよい。
4. Stop hookを有効にする
Codexが止まるたびに自動で読み上げるには、hookを設定する。全リポジトリで使うなら ~/.codex/hooks.json を作る。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "/usr/bin/env bash ${HOME}/git/codex-skills-zundamon/hooks/zundamon_stop.sh",
"timeout": 30,
"statusMessage": "ずんだもんに報告中"
}
]
}
]
}
}command の ${HOME}/git/codex-skills-zundamon/ は、自分がリポジトリを置いた場所に合わせて変更する。ここがずれているとhookは動かない。
Codex起動後、/hooks でhookを確認してtrustする。Codexは信頼していないhookを勝手には実行しない。
リポジトリ単位でhookを入れる場合
全体設定ではなく、特定のリポジトリだけで使いたい場合はrepo-local hookにする。
mkdir -p /path/to/repo/.codex /path/to/repo/hooks /path/to/repo/scripts
cp .codex/hooks.json /path/to/repo/.codex/
cp .codex/config.toml /path/to/repo/.codex/
cp hooks/zundamon_stop.sh /path/to/repo/hooks/
cp hooks/zundamon_stop_playback.sh /path/to/repo/hooks/
cp scripts/zundamon_say.sh /path/to/repo/scripts/
chmod +x /path/to/repo/hooks/zundamon_stop.sh /path/to/repo/hooks/zundamon_stop_playback.sh /path/to/repo/scripts/zundamon_say.shこの場合もCodex起動後に /hooks からtrustする。
使い方
Codex内では、以下のように依頼する。
$zundamon ここまでの作業を報告して
$zundamon テストが通ったのだ
ずんだもんの読み上げを止めて$zundamon にテキストを渡せばその内容を読み上げる。テキストなしで作業報告を頼むと、Codexが直近の作業を短くまとめて読み上げる。
Stop hookを入れておけば、こちらから $zundamon を呼ばなくてもCodexのturn停止時に自動で喋る。バックグラウンドでCodexに作業させるなら、個人的にはこっちが便利。
エラーっぽいときはヒソヒソ声になる
読み上げスクリプトは、テキストにエラー・失敗・警告などの単語が含まれるかを見ている。
- 通常時: ずんだもん ノーマル(ID: 3)、速度 1.3
- ネガティブ時: ずんだもん ヒソヒソ(ID: 38)、速度 1.2
たとえば「テストが失敗しました」みたいな報告だとヒソヒソ声になる。画面を見なくても、なんとなく「あ、何か失敗したな」と分かるのがよい。
Stop hookだけでもかなり便利
使ってみると、一番ありがたいのはCodexが止まった瞬間に気づけることだった。
Codexは調査、修正、テスト実行などで少し待つ場面がある。その間に別の作業をしていると、完了に気づくのが遅れる。Stop hookで音が鳴ると、ターミナルを見に戻るタイミングが分かりやすい。
読み上げ内容を細かく制御したいときは $zundamon、とにかく完了に気づきたいときはStop hook、という使い分けがよさそう。
さいごに
Claude Code版に続いて、Codex版もずんだもんに喋ってもらえるようにした。
地味な仕組みだけど、作業完了に気づけるだけでAIエージェントとの付き合い方が少しラクになる。Codexを別ウィンドウで動かしがちな人には、けっこう相性がよいと思う。
