Phone
BlockRunAI/ClawRouter
Verify phone numbers (carrier + SIM-swap fraud signals) and place AI-powered outbound voice calls via BlockRun's gateway (Twilio + Bland.ai).
OPS on-demand: This skill should be used when the user asks to "make a call", "facetime", or…
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voice --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude-ops/skills/ops-voice .claude/skills/ops-voice && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .claude/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voiceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voice --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .agents/skills && cp -r skills-src/claude-ops/skills/ops-voice .agents/skills/ops-voice && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .agents/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voice --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/claude-ops/skills/ops-voice .cursor/skills/ops-voice && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .cursor/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Lifecycle-Innovations-Limited/claude-ops.git --path claude-ops/skills/ops-voice--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voice --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/claude-ops/skills/ops-voice .gemini/skills/ops-voice && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .gemini/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voiceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .github/skills && cp -r skills-src/claude-ops/skills/ops-voice .github/skills/ops-voice && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .github/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-voice --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/claude-ops/skills/ops-voice .opencode/skills/ops-voice && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ops-voice" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-voice into .opencode/skills/ops-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-voice", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ops-voiceOPS on-demand: This skill should be used when the user asks to "make a call", "facetime", or…
Ops Voice is an agent skill from Lifecycle-Innovations-Limited/claude-ops. OPS on-demand: This skill should be used when the user asks to "make a call", "facetime", or…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Twilio. The repository describes itself as: Business operating system for Claude Code — 57 skills, 21 agents, smart daemon. Unified inbox (WhatsApp/Email/Slack/Telegram), autonomous PR merge, full-AWS monitoring, revenue… The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ee9c784. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteAskUserQuestionWebFetchFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curljqFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
meet.google.commeet.newdemo.twilio.comapi.bland.aiapi.elevenlabs.ioapi.groq.comzoom.usapi.twilio.comapi.zoom.usus05web.zoom.usFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
ELEVENLABS_API_KEYGROQ_API_KEYZOOM_API_TOKENTWILIO_AUTH_TOKENBLAND_AI_API_KEYEL_KEYGROQ_KEYZOOM_CLIENT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ops Voice loads about 3.6k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 1,016 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, AskUserQuestion, WebFetchAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Lifecycle-Innovations-Limited/claude-ops at commit ee9c784, republished under its MIT licence (© Lifecycle-Innovations-Limited). 1,016 words, ~3,558 tokens.
.claude/skills/ops-voice/SKILL.md (or your agent's skills folder).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.
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 ContinuityRoutes through the linked iPhone. Requires macOS + iPhone signed in to the same iCloud account with Calls on Other Devices enabled. No credentials.
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/audioDefaults to video. Pass --audio for FaceTime Audio (free, Apple↔Apple). Accepts phone numbers or Apple-ID emails.
bin/ops-voice facetime user@example.com # video
bin/ops-voice facetime "+1234567890" --audio --json # audioUnder the hood: open "facetime://<handle>" or open "facetime-audio://<handle>".
zoom start|join|schedule — Zoom meetings# Open zoom.us app and start a new instant meeting
bin/ops-voice zoom start
# Join an existing meeting
bin/ops-voice zoom join 1234567890 --pwd <password>
# Schedule a meeting via Zoom REST API (requires ZOOM_API_TOKEN — Server-to-Server OAuth access token)
bin/ops-voice zoom schedule "<topic>" --start "2026-05-22T15:00:00Z" --duration 30 --json
# {"ok":true,"channel":"zoom","detail":"scheduled meeting 12345 — https://us05web.zoom.us/j/..."}Native start/join use zoommtg:// URL scheme. Schedule requires ZOOM_API_TOKEN resolved via the order above. Generate a Server-to-Server OAuth app in your Zoom Marketplace, then exchange for an access token.
meet start|join — Google Meet# Open a brand-new instant meeting (https://meet.new)
bin/ops-voice meet start
# Join by meeting code (xxx-yyyy-zzz) or full URL
bin/ops-voice meet join abc-defg-hij
bin/ops-voice meet join https://meet.google.com/abc-defg-hij --jsonmeet start opens https://meet.new in the default browser (creates a fresh meeting and lands you in it). meet join accepts a 3-4-3 Google Meet code, a bare code, or a full URL — all are normalized to https://meet.google.com/<code>. No credentials needed; the user must be signed into Google in the browser.
whatsapp-call <number> [--video] — WhatsApp Desktop voice/video call# Voice call (default)
bin/ops-voice whatsapp-call "+1234567890"
# Video call
bin/ops-voice whatsapp-call "+1234567890" --video --jsonOpens WhatsApp Desktop via the whatsapp://call?phone=<digits> or whatsapp://video?phone=<digits> URL scheme. Requires WhatsApp Desktop installed and signed in. The leading + is stripped — WhatsApp expects digits only after phone=. No credentials needed; the WhatsApp session lives in the desktop app.
join [--at now|next|HH:MM] [--window MIN] [--dry-run] — Smart calendar-driven meeting joinerAuto-joins the meeting that's happening now (within ±window minutes, default 10) or the next future meeting if nothing is current. Reads gog calendar events --all --today -j --sort start, extracts a conference URL from hangoutLink → conferenceData.entryPoints[] → location → description scan (supports Zoom, Google Meet, Microsoft Teams, Webex), applies the smart AV policy below, and hands off to the native opener (which honors Rule 7 on SSH/mobile).
bin/ops-voice join # join current/next meeting
bin/ops-voice join --at next # skip current, go to next future
bin/ops-voice join --window 5 # only consider events within ±5min of now
bin/ops-voice join --dry-run # show what would happen — no launch
bin/ops-voice join --dry-run --jsonAV policy (smart heuristic):
| Attendees | Camera | Microphone |
|---|---|---|
| 1–2 | ON | ON |
| 3–9 | ON | MUTED |
| 10+ | OFF | MUTED |
Per-event overrides — tag the event description (case-insensitive):
[cam:on] [mic:off] → force camera on, mic muted
[cam:off] → force camera off (keep heuristic mic)
[mic:muted] → force mic mutedMic source — lid state:
ioreg AppleClamshellState → Yes=closed (external mic), No=open (MacBook mic)./proc/acpi/button/lid/*/state → "open"/"closed".default; the meeting app uses whatever the system has selected.Note: the script reports the policy and launches Camera Hub when present, but it does not programmatically flip Zoom/FaceTime/Meet in-app device settings — those apps remember the last-selected device, so flipping it once per app is permanent. (A future patch could AppleScript Zoom's preferences pane.)
Elgato Virtual Camera: if Elgato Camera Hub is installed (any OS), it's launched before the meeting opens so the virtual cam is registered. Detection paths:
/Applications/Elgato Camera Hub.app, ~/Applications/Elgato Camera Hub.app, /Applications/Camera Hub.appelgato-camera-hub on PATH, or AppImage at ~/Applications/Elgato*CameraHub*.AppImage${PROGRAMFILES}/Elgato/CameraHub/CameraHub.exeZoom URL rewriting: when the picked event has a https://zoom.us/j/<ID>?pwd=<PWD> link, it's converted to zoommtg://zoom.us/join?confno=<ID>&pwd=<PWD> so the desktop app opens directly (no browser prompt). If cam=off from the policy, &zc=0 is appended.
Dry-run output (text mode):
dry-run: would join "Weekly Sync" (meet, 3 attendees)
url=https://meet.google.com/abc-defg-hij
cam=on mic=muted
lid=closed mic_source=external
elgato_hub=/Applications/Elgato Camera Hub.apptwilio-call <to> <from> --twiml <URL> — Programmatic outbound voiceReal telco call (per-minute cost). Requires TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN. The --twiml URL must return TwiML XML describing call behavior — e.g. https://demo.twilio.com/docs/voice.xml or a custom Function/Studio flow.
bin/ops-voice twilio-call "+1234567890" "+15551234567" \
--twiml "https://demo.twilio.com/docs/voice.xml" --jsontwilio-sms <to> <from> "<body>" — Programmatic outbound SMSbin/ops-voice twilio-sms "+1234567890" "+15551234567" "<body>" --jsonFor inbound SMS / WhatsApp routing, point your Twilio webhook at the ops daemon (out of scope for v1).
bland-call <number> "<prompt>" — Bland AI agent phone callAI agent calls the number and follows the natural-language prompt. Recordings + transcripts available via the poll URL printed on success.
bin/ops-voice bland-call "+1234567890" "<task prompt>" --jsonPoll with: curl -H "authorization: $BLAND_AI_API_KEY" https://api.bland.ai/v1/calls/<call_id>.
tts [text] [--voice voice_id] [--out file.mp3] — ElevenLabs text-to-speechRequires: ELEVENLABS_API_KEY (env / keychain / Doppler).
EL_KEY="${ELEVENLABS_API_KEY:-$(doppler secrets get ELEVENLABS_API_KEY --plain 2>/dev/null || true)}"
VOICE_ID="${ELEVENLABS_VOICE_ID:-21m00Tcm4TlvDq8ikWAM}" # Rachel
TEXT="<from $ARGUMENTS>"
OUT_FILE="${OUT_FILE:-/tmp/ops-tts-$(date +%s).mp3}"
curl -s -X POST "https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}" \
-H "xi-api-key: $EL_KEY" \
-H "Content-Type: application/json" \
-d "{
\"text\": \"$TEXT\",
\"model_id\": \"eleven_monolingual_v1\",
\"voice_settings\": {\"stability\": 0.5, \"similarity_boost\": 0.75}
}" \
--output "$OUT_FILE"
command -v afplay >/dev/null && afplay "$OUT_FILE" &
echo "Audio saved to: $OUT_FILE"transcribe [file_path] — Groq Whisper transcriptionRequires: GROQ_API_KEY (env / keychain / Doppler).
GROQ_KEY="${GROQ_API_KEY:-$(doppler secrets get GROQ_API_KEY --plain 2>/dev/null || true)}"
AUDIO_FILE="<from $ARGUMENTS>"
[ -f "$AUDIO_FILE" ] || { echo "ERROR: $AUDIO_FILE not found"; exit 1; }
curl -s -X POST "https://api.groq.com/openai/v1/audio/transcriptions" \
-H "Authorization: Bearer $GROQ_KEY" \
-F "file=@$AUDIO_FILE" \
-F "model=whisper-large-v3" \
-F "response_format=json" | \
jq -r '.text'setup — Configure voice channelsBefore asking for anything, auto-scan ALL sources in one background batch (Rule 4: run_in_background: true):
# Env vars
printenv \
TWILIO_ACCOUNT_SID TWILIO_AUTH_TOKEN TWILIO_FROM_NUMBER \
BLAND_AI_API_KEY ELEVENLABS_API_KEY GROQ_API_KEY \
ZOOM_API_TOKEN ZOOM_ACCOUNT_ID ZOOM_CLIENT_ID ZOOM_CLIENT_SECRET 2>/dev/null
# Shell profiles
grep -hE 'TWILIO|BLAND|ELEVENLABS|GROQ|ZOOM' \
~/.zshrc ~/.bashrc ~/.zprofile ~/.envrc 2>/dev/null | grep -v '^#'
# Doppler — ALL projects
for proj in $(doppler projects --json 2>/dev/null | jq -r '.[].slug'); do
for cfg in dev stg prd; do
doppler secrets --project "$proj" --config "$cfg" --json 2>/dev/null | \
jq -r --arg p "$proj" --arg c "$cfg" \
'to_entries[]
| select(.key | test("TWILIO|BLAND|ELEVENLABS|GROQ|ZOOM"; "i"))
| "\(.key)=\(.value.computed | .[0:12])... (doppler:\($p)/\($c))"'
done
done
# Keychain
for svc in twilio bland-ai elevenlabs groq zoom; do
security find-generic-password -s "$svc" -w 2>/dev/null >/dev/null \
&& echo "[keychain] $svc ✓"
done
# Native macOS prerequisites
ls /Applications/zoom.us.app \
/System/Applications/FaceTime.app \
/System/Applications/Phone.app 2>/dev/nullValidate found keys (in parallel):
| Channel | Probe |
|---|---|
| Twilio | curl -u "$SID:$TOKEN" https://api.twilio.com/2010-04-01/Accounts/$SID.json |
| Bland | curl -H "authorization: $KEY" https://api.bland.ai/v1/me |
| ElevenLabs | curl -H "xi-api-key: $KEY" "https://api.elevenlabs.io/v1/voices?page_size=1" |
| Groq | curl -H "Authorization: Bearer $KEY" https://api.groq.com/openai/v1/models |
| Zoom | curl -H "Authorization: Bearer $TOKEN" https://api.zoom.us/v2/users/me |
Report each as [service] ✓ connected or [service] ✗ <error>. Rule 3 applies — never silently skip a channel. For each unset service, present AskUserQuestion with [Paste manually] / [Deep hunt — spawn agent] / [Skip].
Persist to preferences.json:
{
"channels": {
"voice": {
"backend": "native+twilio+zoom+bland",
"native": { "phone": true, "facetime": true, "zoom": true },
"twilio": { "status": "configured", "from_number": "env:TWILIO_FROM_NUMBER" },
"bland": { "status": "configured" },
"zoom": { "status": "configured" }
}
},
"default_channels": ["whatsapp", "email", "telegram", "slack", "voice"]
}/ops:commsVoice is wired into /ops:comms send-flow. The router resolves intent like:
| User says | Resolves to |
|---|---|
call <name> | ops-voice phone <number> |
facetime <name> | ops-voice facetime <handle> |
start a zoom | ops-voice zoom start |
text <name> "..." | ops-voice twilio-sms ... "..." |
have an AI call <name> and tell ... | ops-voice bland-call <number> "..." |
Contact-number lookup uses the same contact resolver as WhatsApp (mcp__whatsapp__search_contacts) plus an optional contacts.json map in preferences.json.
When $SSH_CONNECTION$SSH_CLIENT$SSH_TTY is set or $OPS_MOBILE=1:
bin/ops-voice still works for API channels.phone, facetime, zoom start|join) require a local macOS session — the script returns a plain-text instruction to open the URL on the host instead of calling open directly. The script must source lib/opener.sh and use ops_open_url for URL handoff.(v1 of bin/ops-voice calls /usr/bin/open directly — Rule 7 adapter is a v1.1 follow-up; tracked in CHANGELOG.)
$ARGUMENTS (first word).bin/ops-voice — exit fast./ops:ops-voice setup.AskUserQuestion → send → next.© Lifecycle-Innovations-Limited, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in claude-ops/skills/ops-voice of Lifecycle-Innovations-Limited/claude-ops.
Open the folder on GitHubat commit ee9c784
Ops Voice next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ops Voice this skillLifecycle-Innovations-Limited/claude-ops | 542 | — | ~3.6k | Automated safety check: Notes | MIT | |
| PhoneBlockRunAI/ClawRouter | 6.6k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Smscoreyhaines31/marketingskills | 54k | 1 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Breach Patternsbriiirussell/cybersecurity-skills | 413 | — | ~3.5k | Automated safety check: Notes | MIT | |
| Brigade Voice Callsspinabot/brigade | 11k | — | ~288 | Automated safety check: Pass | MIT | |
| Twilio Communicationsdavila7/claude-code-templates | 33k | 5 repos | ~2.3k | Automated safety check: Pass | MIT |
BlockRunAI/ClawRouter
Verify phone numbers (carrier + SIM-swap fraud signals) and place AI-powered outbound voice calls via BlockRun's gateway (Twilio + Bland.ai).
coreyhaines31/marketingskills
When the user wants to plan, build, or optimize SMS, MMS, or WhatsApp marketing — including welcome flows, abandoned cart texts, post-purchase, win-back, promotional sends, or transactional/auth SMS.
briiirussell/cybersecurity-skills
Learn from public breach disclosures — extract the audit question each one implies and check your own stack.
spinabot/brigade
Starts and inspects phone calls through the Brigade voice-call plugin, using a CLI command or the voice_call tool, with Twilio, Telnyx, Plivo or a mock provider.
davila7/claude-code-templates
Build communication features with Twilio: SMS messaging, voice calls, WhatsApp Business API, and user verification (2FA).
trpc-group/trpc-agent-go
Start voice calls via the OpenClaw voice-call plugin. An agent skill from trpc-group/trpc-agent-go.
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "ops dashboard", "pixel HQ", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "go to market", "GTM plan", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "klaviyo", "ads spend", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "tweet", "post to linkedin", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "yolo mode", "run the business today"…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "datadog", "APM alerts", or…
Works with
OPS on-demand: This skill should be used when the user asks to "make a call", "facetime", or…. Ops Voice is an agent skill from Lifecycle-Innovations-Limited/claude-ops.
Ops Voice fits situations like: asks to make a call.
Run `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a claude-code`. Or copy the skill folder (claude-ops/skills/ops-voice in Lifecycle-Innovations-Limited/claude-ops) into .claude/skills/ops-voice in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a codex`. Or copy the skill folder (claude-ops/skills/ops-voice in Lifecycle-Innovations-Limited/claude-ops) into .agents/skills/ops-voice in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-voice -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ops-voice, .gemini/skills/ops-voice, .github/skills/ops-voice and .opencode/skills/ops-voice in your project.
Going by SKILL.md and its folder, Ops Voice needs the command-line tools its instructions call (curl and jq) and credentials named ELEVENLABS_API_KEY, GROQ_API_KEY, ZOOM_API_TOKEN and TWILIO_AUTH_TOKEN. Our summary lists: A credential in ZOOM_API_TOKEN; A credential in TWILIO_AUTH_TOKEN. Its frontmatter pre-approves these tools: Bash, Read, Write, AskUserQuestion, WebFetch.
SKILL.md names 10 domains. In commands or code: meet.google.com, meet.new, demo.twilio.com, api.bland.ai, api.elevenlabs.io, api.groq.com, zoom.us, api.twilio.com, api.zoom.us and us05web.zoom.us; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Ops Voice is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ops Voice: Phone (BlockRunAI/ClawRouter, 6.6k stars), Sms (coreyhaines31/marketingskills, 54k stars), Breach Patterns (briiirussell/cybersecurity-skills, 413 stars) and Brigade Voice Calls (spinabot/brigade, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Lifecycle-Innovations-Limited (a GitHub organization) maintains it in Lifecycle-Innovations-Limited/claude-ops, which has 542 GitHub stars. The repository holds 67 skills in this directory. The repository was last updated on October 10, 2026.
Source: Lifecycle-Innovations-Limited/claude-ops on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.