一键导入
voice-status
Report the current state of the voice channel connection, last utterance, and any errors.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Report the current state of the voice channel connection, last utterance, and any errors.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Configure the voice channel connection — dispatcher URL, pairing string (bundles agent ID, token, and dispatcher certificate), and optional permission-relay opt-in.
Cut a coordinated release of the voice-channel plugin — bump the version across all manifests, write a CHANGELOG entry, commit, push, tag, and publish a GitHub release. Use this skill whenever the user says "release", "cut a release", "version bump", "ship it", "publish", "do the release", "changelog and push", or finishes a batch of changes and wants to ship them. Optionally takes a bump-level hint (`patch`/`minor`/`major`) or an explicit version.
| name | voice:status |
| description | Report the current state of the voice channel connection, last utterance, and any errors. |
| allowed-tools | ["Read","Bash(echo *)"] |
Report the current state of the voice channel connection.
First run:
echo "${VOICE_STATE_DIR:-${CLAUDE_PROJECT_DIR:-$(pwd)}/.claude/channels/voice}"
Use the output as <STATE_DIR> for all file paths below.
Read <STATE_DIR>/status.json and <STATE_DIR>/config.json and report:
connecting, connected, disconnected, or error (from status.json)config.json, or "not configured" if no config existsconfig.jsondispatcher_url starts with wss://, show "enabled (pinned)"; if ws://, show "disabled (plaintext)"last_utterance_id and ts from status.json if presentlast_close_code, last_close_reason, or last_error if presentIf status.json has state: 'error' and last_error contains "cert pin mismatch" or "pin",
render it prominently as:
⚠ Certificate pin failure — token was NOT sent to the dispatcher.
The dispatcher's TLS certificate does not match the pinned certificate.
Fix: re-run /voice:configure with the correct pairing string from the dispatcher.
(Run 'voice-dispatcher config rotate-token <id>' to generate a fresh v2 pairing string.)
Do NOT treat this as a generic disconnect. It means the plugin detected an impersonation attempt or stale pinned certificate and refused to send the bearer token.
If status.json has last_close_code: 4001 or last_error contains "token was rejected" or
"authentication failed", render it prominently as:
⚠ Authentication failure — dispatcher rejected this agent token.
Fix: on the dispatcher host, run 'voice-dispatcher config rotate-token <agent_id>'
and then re-run /voice:configure on this Claude Code host with the new pairing string.
Do NOT keep presenting this as a transient reconnecting state. It means the local plugin config is stale or belongs to a different dispatcher agent.
If state is disconnected or error without a pin-related last_error, show
the close code, reason, and last error normally.
The MCP server has not started yet. Tell the user to:
/voice:configure has been run.mcp.json)The plugin is not configured. Tell the user to run /voice:configure.
If VOICE_STATE_DIR is unset, also note the migration case: configs created before the
project-local default lived at ~/.claude/channels/voice, which the MCP server still uses as its
fallback. So voice may actually be working even though this skill looks in the project dir and
reports "not configured" — re-running /voice:configure migrates the config to the project-local
path and pins VOICE_STATE_DIR, ending the mismatch.
Voice channel status
────────────────────
State: connected
Dispatcher: wss://192.168.1.50:7355
Agent ID: jarvis
TLS: enabled (pinned)
Permission relay: disabled
Last utterance: u-1748012345 (2026-05-24T10:30:00Z)
Voice channel status
────────────────────
State: error
Dispatcher: wss://192.168.1.50:7355
⚠ Certificate pin failure — token was NOT sent to the dispatcher.
The dispatcher's TLS certificate does not match the pinned certificate.
Fix: re-run /voice:configure with the correct pairing string from the dispatcher.