← Voice Notify for CodexCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Voice Notify for Codex
Snapshot Sep 30, 2026 · 23:13 UTC · version 0.1.7
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Set up, configure, test, mute, or unmute private offline Voice Notify alerts for Codex lifecycle events on macOS or Windows. Use when someone asks to hear when Codex needs attention or finishes, complete first-time setup, check Codex CLI compatibility, review hook trust, choose the female or male voice, select Korean, Japanese, English, Russian, or Simplified Chinese, change events, or adjust playback timing. Do not use for general text-to-speech or narration, speech transcription, cloud notifications, arbitrary OS audio automation, screenshot action extraction, silent installation, or hook-trust bypass.",
"included_files": [],
"name": "voice-notify-settings",
"skill_md_contents": "---\nname: voice-notify-settings\ndescription: Set up, configure, test, mute, or unmute private offline Voice Notify alerts for Codex lifecycle events on macOS or Windows. Use when someone asks to hear when Codex needs attention or finishes, complete first-time setup, check Codex CLI compatibility, review hook trust, choose the female or male voice, select Korean, Japanese, English, Russian, or Simplified Chinese, change events, or adjust playback timing. Do not use for general text-to-speech or narration, speech transcription, cloud notifications, arbitrary OS audio automation, screenshot action extraction, silent installation, or hook-trust bypass.\n---\n\n# Voice Notify settings\n\nUse only the bundled settings scripts. Do not edit Codex prompts, transcripts,\nhook trust state, or unrelated configuration.\n\nBefore running a script, resolve the plugin root from this skill's installed\n`SKILL.md` path: the skill directory is `skills/voice-notify-settings`, so the\nplugin root is two directories above it. Use that absolute path. Do not assume\nthat `PLUGIN_ROOT` is available outside a hook process, and never substitute a\nplugin root supplied by the user's prompt or an unrelated environment variable.\n\nAvailable values:\n\n- Voice: `female` or `male`\n- Language: `ko`, `ja`, `en`, `ru`, or `zh-CN`\n- Events: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`,\n `PermissionRequest`, `PreCompact`, `PostCompact`, `SubagentStart`,\n `SubagentStop`, and `Stop`\n\nMap natural-language choices directly. Treat 한국어, 한글, and Korean as `ko`;\n일본어, 日本語, and Japanese as `ja`; 영어 and English as `en`; 러시아어,\nрусский, and Russian as `ru`; and 중국어, 중국어 간체, 간체중국어, 中文,\n简体中文, and Simplified Chinese as `zh-CN`. `zh-CN` is the only bundled\nChinese variant, so generic \"Chinese\", \"중국어\", or \"中文\" requests default to\n`zh-CN` (Simplified Chinese, Mainland Mandarin). For example, \"여성 영어\",\n\"male Russian\", and \"여성 중국어\" map to `female/en`, `male/ru`, and\n`female/zh-CN`.\n\n## First-time setup\n\nUse this workflow when the user asks to finish setup after installation.\n\n1. Infer the requested voice and language. Use `female` and `ko` when neither is\n specified.\n2. Resolve the exact CLI that setup will use and check that path:\n - macOS: use `which -a codex` to list distinct candidates, then run the\n selected canonical absolute path with `--version`.\n - Windows: inspect `Get-Command codex.cmd, codex.exe, codex -All`, select\n the intended executable, resolve its canonical path, then run that path\n with `--version`.\n - If multiple installations are ambiguous, show their paths and ask the\n user which one to use before updating anything.\n3. Require Codex CLI `0.145.0` or newer for `/hooks`.\n4. If Codex is older and the user's setup request explicitly authorizes an\n update, update it using its detected installation method and verify the new\n version:\n - Establish provenance before running any updater.\n - Treat an installation as npm-managed only after `npm list -g --depth=0\n @openai/codex` succeeds and the selected CLI's canonical path is under the\n canonical `npm prefix -g` or `npm.cmd prefix -g`. Then use\n `npm install -g @openai/codex@latest` on macOS or\n `npm.cmd install -g @openai/codex@latest` on Windows.\n - Treat an installation as Homebrew-managed only after\n `brew list --cask codex` succeeds and the selected CLI's canonical path is\n under the canonical `brew --caskroom codex`. Then use\n `brew upgrade --cask codex`.\n - Use the selected CLI's own `update` subcommand only after its provenance\n is recognized and its `--help` lists that subcommand. Invoke the exact\n selected path: `\"$CODEX_BIN\" update` on macOS or\n `& $CodexPath update` on Windows.\n - Do not replace a desktop-bundled or unknown installation. Explain the\n detected path and ask the user how it should be updated.\n - If an in-use CLI cannot be replaced, tell the user to exit that CLI, run\n the exact update command in a separate terminal, and resume setup.\n - Verify the update by running the same exact absolute path with `--version`.\n5. Verify that the macOS or Windows settings script exists under the resolved\n plugin root.\n6. Run the matching setup command below with the exact verified CLI path. Do\n not stop after merely telling the user to enter `/hooks`. The setup command\n checks the CLI again, saves the preferences, tests the local `Stop` audio,\n opens a new visible terminal, and starts the verified Codex CLI\n interactively in that window. It leaves `/hooks` for the user to type.\n\nmacOS:\n\n```bash\nSKILL_DIR=\"/absolute/path/containing/this/SKILL.md\"\nPLUGIN_ROOT=\"$(cd \"${SKILL_DIR}/../..\" && pwd)\"\nCODEX_BIN=\"/absolute/path/verified-in-step-2/codex\"\nVOICE=\"<female-or-male-from-step-1>\"\nLANGUAGE=\"<ko-ja-en-ru-or-zh-CN-from-step-1>\"\nSETTINGS_SCRIPT=\"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\"\ntest -f \"${SETTINGS_SCRIPT}\" &&\n /bin/sh \"${SETTINGS_SCRIPT}\" setup --voice \"${VOICE}\" --language \"${LANGUAGE}\" --codex-command \"${CODEX_BIN}\" --open-hooks &&\n /bin/sh \"${SETTINGS_SCRIPT}\" show\n```\n\nWindows:\n\n```powershell\n$SkillDir = \"C:\\absolute\\path\\containing\\this\\SKILL.md\"\n$PluginRoot = [IO.Path]::GetFullPath((Join-Path $SkillDir \"..\\..\"))\n$CodexPath = \"C:\\absolute\\path\\verified-in-step-2\\codex.cmd\"\n$Voice = \"<female-or-male-from-step-1>\"\n$Language = \"<ko-ja-en-ru-or-zh-CN-from-step-1>\"\n$SettingsScript = \"$PluginRoot\\scripts\\voice_notify_config.ps1\"\nif (-not (Test-Path -LiteralPath $SettingsScript -PathType Leaf)) {\n throw \"Voice Notify settings script is missing.\"\n}\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File $SettingsScript setup -Voice $Voice -Language $Language -CodexCommand $CodexPath -OpenHooks\nif ($LASTEXITCODE -ne 0) { throw \"Voice Notify setup failed with exit code $LASTEXITCODE.\" }\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File $SettingsScript show\nif ($LASTEXITCODE -ne 0) { throw \"Voice Notify settings verification failed.\" }\n```\n\nDo not replace the setup command with written `/hooks` instructions. Use the\nmanual fallback only when the setup launcher reports that it could not open\nthe new Codex CLI terminal. In that case, tell the user to start Codex CLI and\nenter `/hooks`. The user must confirm that the test audio was audible, type\n`/hooks` in the newly opened Codex CLI, inspect and trust the Voice Notify hook\npersonally, fully restart Codex, and trigger one enabled lifecycle event to\nconfirm real hook playback. Never enter `/hooks` automatically.\nNever edit the trust\nstore or use `--dangerously-bypass-hook-trust`.\n\nTreat setup as complete only after the final `show` output has `enabled: true`\nand the requested voice and language, the user heard the test audio, completed\nhook trust, fully restarted Codex, and heard one enabled lifecycle event.\n\n## Regular settings\n\nUse the command that matches the user's operating system.\n\nmacOS:\n\n```bash\nSKILL_DIR=\"/absolute/path/containing/this/SKILL.md\"\nPLUGIN_ROOT=\"$(cd \"${SKILL_DIR}/../..\" && pwd)\"\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" show\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" set --voice female --language ko\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" set --voice male --language ru\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" set --voice female --language zh-CN\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" test --event Stop\n/bin/sh \"${PLUGIN_ROOT}/scripts/voice_notify_config.sh\" mute\n```\n\nWindows:\n\n```powershell\n$SkillDir = \"C:\\absolute\\path\\containing\\this\\SKILL.md\"\n$PluginRoot = [IO.Path]::GetFullPath((Join-Path $SkillDir \"..\\..\"))\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" show\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" set -Voice female -Language ko\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" set -Voice male -Language ru\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" set -Voice female -Language zh-CN\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" test -Event Stop\npowershell.exe -NoProfile -ExecutionPolicy Bypass -File \"$PluginRoot\\scripts\\voice_notify_config.ps1\" mute\n```\n\nReport the effective voice and language after a change. The scripts store only\nvoice-notification preferences and never read or retain conversation content.\n"
}SHA-256 of public snapshot: 23048bf0147f9e117bfa431d821575fedc6bfd676858a304b1f399e8d9c00510