Skip to content
Back to skills

Status

ASecurity

Report the current state of the voice channel connection, last utterance, and any errors.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
data-aibash

Works with

  • claude code
  • mcp

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add gtapps/voice-channel --skill status --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Status?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Status
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gtapps-status/badge)](https://www.skillsdirectory.com/skills/gtapps-status)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: voice:status
description: Report the current state of the voice channel connection, last utterance, and any errors.
allowed-tools:
  - Read
  - Bash(echo *)
---

# /voice:status

Report the current state of the voice channel connection.

## Resolve the state dir

First run:

```bash
echo "${VOICE_STATE_DIR:-$HOME/.claude/channels/voice}"
```

Use the output as `<STATE_DIR>` for all file paths below.

## What you do

Read `<STATE_DIR>/status.json` and `<STATE_DIR>/config.json` and report:

1. **Connection state** — `connecting`, `connected`, `disconnected`, or `error` (from `status.json`)
2. **Dispatcher URL** — from `config.json`, or "not configured" if no config exists
3. **Agent ID** — from `config.json`
4. **TLS** — if `dispatcher_url` starts with `wss://`, show "enabled (pinned)"; if `ws://`, show "disabled (plaintext)"
5. **Permission relay** — enabled or disabled
6. **Last activity** — `last_utterance_id` and `ts` from `status.json` if present
7. **Last error** — `last_close_code`, `last_close_reason`, or `last_error` if present

## Error states

### Certificate pin failure

If `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.

### Authentication failure

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.

### Generic disconnect

If `state` is `disconnected` or `error` without a pin-related `last_error`, show
the close code, reason, and last error normally.

## If status.json does not exist

The MCP server has not started yet. Tell the user to:
1. Ensure `/voice:configure` has been run
2. Restart the Claude Code session (the MCP server starts automatically from `.mcp.json`)

## If config.json does not exist

The plugin is not configured. Tell the user to run `/voice:configure`.

## Example output — connected

```
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)
```

## Example output — pin failure

```
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.
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.