Install
openclaw skills install openclaw-voice-controlLocal macOS voice-control integration for OpenClaw. Use when setting up, deploying, troubleshooting, or operating wakeword-triggered voice access to a local OpenClaw agent with ASR, TTS, overlay UI, and launchd background support.
openclaw skills install openclaw-voice-controlOpenClaw Voice Control is a local macOS voice-control integration for OpenClaw.
Repository source:
It provides:
This skill adds a voice entrypoint, and that entrypoint is not identity-bound.
That means:
Recommended safety practice:
Treat this as a local deployment skill, not as a prompt-only helper.
When this skill is installed into OpenClaw:
SKILL.mdThe main installation guide is the repository README.md.
README.zh-CN.md is the Chinese companion guide.
Use this as the standard install path:
.venvpip install -e ..env.example to .env.env./scripts/deploy_macos.shBefore running any system-changing step in that path, explicitly tell the user what you are about to do and get confirmation for:
pip install -e . from the repositoryMinimum command path:
# from the current conversation agent's installed skill directory
git init
git remote add origin https://github.com/CarrotYuan/openclaw-voice-control.git
git fetch --depth 1 origin main
git checkout -B main FETCH_HEAD
# do not continue until the workspace contains scripts/, src/, config/,
# launchagents/, and README.md
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
./.venv/bin/modelscope download --model iic/SenseVoiceSmall --local_dir models/SenseVoiceSmall
./.venv/bin/python - <<'PY'
from funasr import AutoModel
AutoModel(model='fsmn-vad', disable_update=True)
PY
cp .env.example .env
# terminal 1, from the current installed skill workspace
python -m openclaw_voice_control --config config/default.yaml --env-file .env
# terminal 2, from the same workspace
python -m openclaw_voice_control.overlay_app --config config/default.yaml --env-file .env
Direct-run validation is not complete unless both commands above are running at the same time from the same installed skill workspace.
Before any next step after direct-run validation, stop that test first.
This includes:
If an old direct-run service and overlay are left running, two active voice runtimes can respond to the same wakeword and produce duplicate replies.
Before setup begins, make sure these prerequisites exist or can be provided:
OPENCLAW_TOKENFor the default route, the remaining setup can usually be handled by the AI or operator:
.env.example to .envThe default public route is:
WAKEWORD_PROVIDER=openwakewordOPENWAKEWORD_MODEL_NAME=hey jarvisOPENCLAW_AGENT_ID=mainOPENCLAW_MODEL=openclaw:mainOPENCLAW_USER=openclaw-voice-controlPrefer that route unless the user explicitly asks for something else.
These are the main values for the default route:
.env
OPENCLAW_BASE_URLOPENCLAW_TOKENSENSEVOICE_MODEL_PATHSENSEVOICE_VAD_MODEL_PATHWAKEWORD_PROVIDER=openwakewordOPENWAKEWORD_MODEL_NAME=hey jarvisOPENCLAW_AGENT_ID=mainOPENCLAW_MODEL=openclaw:mainOPENCLAW_USER=openclaw-voice-controlIf the user changes the macOS TTS voice, first make sure that voice has been downloaded in:
i button next to System VoicePicovoice / Porcupine is an optional fallback route, not the default path.
Only switch to it when the user explicitly wants to use a local .ppn wakeword
model.
If that route is chosen, set:
WAKEWORD_PROVIDER=porcupinePICOVOICE_ACCESS_KEYWAKEWORD_FILEOnly ask for those Porcupine-specific values when the user explicitly chooses that route.
To switch the default openWakeWord wakeword, change:
OPENWAKEWORD_MODEL_NAMECommon official pretrained examples include:
hey jarvishey mycrofthey rhasspyalexaThose pretrained wakeword models are downloaded automatically on first use.
The code path already supports changing OPENWAKEWORD_MODEL_NAME, but only the
default hey jarvis route has been smoke-tested in this repository so far.
When using this skill, follow these rules:
Use the declared GitHub repository first.
https://github.com/CarrotYuan/openclaw-voice-control.gitKeep deployment work in the current installed skill workspace.
Do not silently reuse an old environment.
.venv, local model cache, previous .env, or private runtime should be reused.Do not invent missing values.
.env, use the exact variable names required by the project, especially OPENCLAW_TOKEN.Handle secrets conservatively.
~/.openclaw/openclaw.json, specifically the gateway configuration.~/.openclaw/identity/device-auth.json as the token source for this project.Ask before any system-changing action.
pip install -e ., download models, or enable launchd behavior without user approval.Ask before enabling background resident behavior.
python -m openclaw_voice_control --config config/default.yaml --env-file .env and python -m openclaw_voice_control.overlay_app --config config/default.yaml --env-file .env from the same installed skill workspace../scripts/deploy_macos.sh when the user explicitly wants background resident behavior or auto-start.Primary scripts:
./scripts/deploy_macos.sh./scripts/restart_service.sh./scripts/uninstall_macos.sh./scripts/doctor.shDouble-click .command wrappers are also available in scripts/ for macOS users who prefer Finder-based execution.
Treat shutdown requests as one of these two user intents:
If the user says something ambiguous like "turn it off" or "stop voice", ask one short clarification question before acting.
The canonical background startup path is:
launchd -> host app -> shell script -> python./scripts/deploy_macos.sh builds the required host apps automatically.
Default-route required values:
OPENCLAW_BASE_URLOPENCLAW_TOKENSENSEVOICE_MODEL_PATHSENSEVOICE_VAD_MODEL_PATHDefault-route configurable values:
OPENCLAW_AGENT_IDOPENCLAW_MODELOPENCLAW_USERWAKEWORD_PROVIDEROPENWAKEWORD_MODEL_NAMEOPENWAKEWORD_MODEL_PATHIf the user explicitly switches to the optional Porcupine route, also configure:
PICOVOICE_ACCESS_KEYWAKEWORD_FILEInterpreter override variables still exist:
VOICE_CONTROL_PYTHON_BINVOICE_CONTROL_OVERLAY_PYTHON_BINThey are troubleshooting knobs only, not the main deployment model.
OPENWAKEWORD_THRESHOLD still exists as a tuning variable, but it is a
troubleshooting adjustment rather than a first-run requirement.
As a rule, machine-specific secrets and paths belong in .env, while wakeword
timing and threshold tuning should normally be adjusted in config/default.yaml.
After syncing the repository into the current installed skill workspace, read these sections in README.md:
What Must Exist Before SetupRequired VariablesWhere To Get Each RequirementPractical source notes:
OPENCLAW_BASE_URL: use the full OpenClaw chat completions endpoint, not only the host and port root. For the default local setup, use http://127.0.0.1:18789/v1/chat/completionsOPENCLAW_TOKEN: obtain it from the local OpenClaw gateway configuration in ~/.openclaw/openclaw.json, under gatewayhey jarvis modelPICOVOICE_ACCESS_KEY and the local .ppn file from PicovoiceREADME.md in the cloned repositoryREADME.zh-CN.md in the cloned repositorydocs/macos-install.md in the cloned repository