# Ops Voice

OPS on-demand: This skill should be used when the user asks to \"make a call\"...

- Repository: https://github.com/Lifecycle-Innovations-Limited/claude-ops (547 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -g -a claude-code -y`
Codex: `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -g -a codex -y`
Cursor: `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -g -a cursor -y`
Gemini CLI: `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add Lifecycle-Innovations-Limited/claude-ops`

## Description

OPS on-demand: This skill should be used when the user asks to \"make a call\", \"facetime\", or…

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# OPS:VOICE, Voice Operations

Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Workflow` are missing, follow Rule 10 in `ops-rules` (Hermes: numbered options / two-turn Telegram card; `delegate_task`).

Voice / phone / video interface. All API calls via curl, no SDK dependencies. Native macOS handlers (Phone.app, FaceTime, Zoom) require no credentials; programmatic channels (Twilio, Bland, ElevenLabs, Groq, Zoom schedule) resolve credentials via:

**Credential resolution order:** env vars → `ops_cred_get` (lib/credential-store.sh / keychain) → `preferences.json` → Doppler CLI (`doppler secrets get <KEY> --plain`) → password manager.

All sub-commands have a thin bash wrapper at `bin/ops-voice`, prefer it over inline curl when scripting.

**Outbound comms guardrail (Rule 6):** `twilio-call`, `twilio-sms`, and `bland-call` are 1:1 outbound channels and MUST follow the per-message approval gate, stage final draft, show full target+body, wait for explicit approval (`AskUserQuestion` or single-word chat approval), send one, then stage the next. Never batch.

---

## Sub-commands

Parse `$ARGUMENTS` for the command keyword, then execute. Native handlers exit fast; API calls report status and (where relevant) a poll command.

---

### `phone <number>`, Native Phone.app via Continuity

Routes through the linked iPhone. Requires macOS + iPhone signed in to the same iCloud account with **Calls on Other Devices** enabled. No credentials.

```bash
bin/ops-voice phone "+1234567890" --json
# {"ok":true,"channel":"phone","detail":"dialing +1234567890 via Phone.app (Continuity)"}
```

Under the hood: `open "tel:<E.164>"`.

---

### `facetime <number-or-email> [--audio]`, FaceTime video/audio

Defaults to video. Pass `--audio` for FaceTime Audio (free, Apple↔Apple). Accepts phone numbers or Apple-ID emails.

The rest: https://github.com/Lifecycle-Innovations-Limited/claude-ops/blob/HEAD/claude-ops/skills/ops-voice/SKILL.md
