{"skill":{"slug":"voiceclaw-jp","displayName":"voiceclaw","summary":"Voice conversation interface for OpenClaw using wake word detection, streaming LLM responses, and text-to-speech. Use when a user wants to talk to their Open...","description":"---\nname: voiceclaw-jp\ndescription: Voice conversation interface for OpenClaw using wake word detection, streaming LLM responses, and text-to-speech. Use when a user wants to talk to their OpenClaw agent by voice, set up a voice assistant, or add speech input/output to OpenClaw. Supports configurable wake words, VOICEVOX TTS, and sentence-level streaming for low-latency responses.\n---\n\n# voiceclaw\n\nVoice conversation skill for OpenClaw: wake word → STT → LLM (streaming) → TTS → playback.\n\n## Requirements\n\n- **OpenClaw** running locally (gateway with `chatCompletions` enabled)\n- **Node.js** 18+\n- **VOICEVOX** running on localhost:50021 ([download](https://voicevox.hiroshiba.jp/))\n- **Chrome/Edge** (Web Speech API for STT)\n- **HTTPS** for remote mic access (localhost works without HTTPS)\n\n## Quick Start\n\n```bash\n# Install\ngit clone https://github.com/kentoku24/voiceclaw.git\ncd voiceclaw\nnpm install\n\n# Start (no .env needed if OpenClaw is running locally)\nnpm start\n# → [voiceclaw] OpenClaw config loaded from ~/.openclaw/openclaw.json\n# → [voiceclaw] listening on http://127.0.0.1:8788\n\n# Open browser\nopen http://127.0.0.1:8788\n```\n\nPress **開始**, say the wake word (default: **アリス**), then speak your command.\n\n## Configuration\n\nAll settings are optional. Set in `.env` or environment variables:\n\n| Variable | Default | Description |\n|---|---|---|\n| `WAKE_WORDS` | アリスちゃん,アリス,... | Comma-separated wake words |\n| `STT_LANG` | ja-JP | Speech recognition language |\n| `OPENCLAW_MODEL` | openclaw | LLM model name |\n| `VOICEVOX_URL` | http://127.0.0.1:50021 | VOICEVOX endpoint |\n| `VOICEVOX_SPEAKER` | 1 | VOICEVOX speaker ID |\n| `HOST` | 127.0.0.1 | Server bind address |\n| `PORT` | 8788 | Server port |\n\nGateway token is auto-detected from `~/.openclaw/openclaw.json`. Override with `OPENCLAW_GATEWAY_TOKEN` if needed.\n\n## Architecture\n\n```\nWake word (browser STT) → voiceclaw server → OpenClaw Gateway (streaming)\n                                           → sentence-level TTS (VOICEVOX)\n                                           → audio playback (Web Audio API)\n```\n\nSee [docs/architecture.md](docs/architecture.md) for the full sequence diagram.\n\n## API Endpoints\n\n| Method | Path | Description |\n|---|---|---|\n| GET | `/health` | Health check |\n| GET | `/api/config` | Client-safe settings (wake words, STT lang) |\n| POST | `/api/chat-stream` | Streaming LLM → sentence-level SSE |\n| POST | `/api/chat` | Non-streaming LLM (fallback) |\n| POST | `/api/tts` | Text → VOICEVOX → WAV audio |\n","topics":["Text-to-Speech"],"tags":{"latest":"0.1.0"},"stats":{"comments":0,"downloads":569,"installsAllTime":21,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1772585565836,"updatedAt":1778491711300},"latestVersion":{"version":"0.1.0","createdAt":1772585565836,"changelog":"Release 0.1.0","license":null},"metadata":null,"owner":{"handle":"kentoku24","userId":"s179zt15m2x8nxr9fw5zs54s4h884kwc","displayName":"kentoku24","image":"https://avatars.githubusercontent.com/u/975196?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089751412}}