{
  "schemaVersion": "1.0",
  "item": {
    "slug": "voice-assistant",
    "name": "Voice Assistant",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/charantejmandali18/voice-assistant",
    "canonicalUrl": "https://clawhub.ai/charantejmandali18/voice-assistant",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/voice-assistant",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=voice-assistant",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "pyproject.toml",
      "scripts/__init__.py",
      "scripts/server.py",
      "static/index.html"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/voice-assistant"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/voice-assistant",
    "agentPageUrl": "https://openagent3.xyz/skills/voice-assistant/agent",
    "manifestUrl": "https://openagent3.xyz/skills/voice-assistant/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/voice-assistant/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Voice Assistant",
        "body": "Real-time voice interface for your OpenClaw agent. Talk to your agent and hear it respond — with configurable STT and TTS providers, full streaming at every stage, and sub-2 second time-to-first-audio."
      },
      {
        "title": "Architecture",
        "body": "Browser Mic → WebSocket → STT (Deepgram / ElevenLabs) → Text\n  → OpenClaw Gateway (/v1/chat/completions, streaming) → Response Text\n  → TTS (Deepgram Aura / ElevenLabs) → Audio chunks → Browser Speaker\n\nThe voice interface connects to your running OpenClaw gateway's OpenAI-compatible endpoint. It's the same agent with all its context, tools, and memory — just with a voice."
      },
      {
        "title": "Quick Start",
        "body": "cd {baseDir}\ncp .env.example .env\n# Fill in your API keys and gateway URL\nuv run scripts/server.py\n# Open http://localhost:7860 and click the mic"
      },
      {
        "title": "STT (Speech-to-Text)",
        "body": "ProviderModelLatencyNotesDeepgramnova-2 (streaming)~200-300msWebSocket streaming, best accuracy/speedElevenLabsScribe v1~300-500msREST-based, good multilingual"
      },
      {
        "title": "TTS (Text-to-Speech)",
        "body": "ProviderModelLatencyNotesDeepgramaura-2~200msWebSocket streaming, low costElevenLabsTurbo v2.5~300msBest voice quality, streaming"
      },
      {
        "title": "Configuration",
        "body": "All configuration is via environment variables in .env:\n\n# === Required ===\nOPENCLAW_GATEWAY_URL=http://localhost:4141/v1    # Your OpenClaw gateway\nOPENCLAW_MODEL=claude-sonnet-4-5-20250929        # Model your gateway routes to\n\n# === STT Provider (pick one) ===\nVOICE_STT_PROVIDER=deepgram                      # \"deepgram\" or \"elevenlabs\"\nDEEPGRAM_API_KEY=your-key-here                   # Required if STT=deepgram\nELEVENLABS_API_KEY=your-key-here                 # Required if STT=elevenlabs\n\n# === TTS Provider (pick one) ===\nVOICE_TTS_PROVIDER=elevenlabs                    # \"deepgram\" or \"elevenlabs\"\n# Uses the same API keys as above\n\n# === Optional Tuning ===\nVOICE_TTS_VOICE=rachel                           # ElevenLabs voice name/ID\nVOICE_TTS_VOICE_DG=aura-2-theia-en              # Deepgram Aura voice\nVOICE_VAD_SILENCE_MS=400                         # Silence before end-of-turn (ms)\nVOICE_SAMPLE_RATE=16000                          # Audio sample rate\nVOICE_SERVER_PORT=7860                           # Server port\nVOICE_SYSTEM_PROMPT=\"\"                           # Optional system prompt override"
      },
      {
        "title": "Provider Combinations",
        "body": "SetupBest ForDeepgram STT + ElevenLabs TTSBest quality voice outputDeepgram STT + Deepgram TTSLowest latency, single vendorElevenLabs STT + ElevenLabs TTSBest multilingual support"
      },
      {
        "title": "How It Works",
        "body": "Browser captures mic audio via Web Audio API and streams raw PCM over a WebSocket\nServer receives audio and pipes it to the configured STT provider's streaming endpoint\nSTT returns partial transcripts in real-time; on end-of-utterance the full text is sent to the OpenClaw gateway\nOpenClaw gateway streams the LLM response token-by-token via SSE (Server-Sent Events)\nTokens are accumulated into sentence-sized chunks and streamed to the TTS provider\nTTS returns audio chunks that are immediately forwarded to the browser over the same WebSocket\nBrowser plays audio using the Web Audio API with a jitter buffer for smooth playback"
      },
      {
        "title": "Interruption Handling (Barge-In)",
        "body": "When the user starts speaking while the agent is still talking:\n\nCurrent TTS audio is immediately cancelled\nThe agent stops its current response\nNew STT session begins capturing the user's interruption"
      },
      {
        "title": "Usage Examples",
        "body": "User: \"Hey, set up my voice assistant\"\n→ OpenClaw runs: cd {baseDir} && cp .env.example .env\n→ Opens .env for the user to fill in API keys\n→ Runs: uv run scripts/server.py\n\nUser: \"Start a voice chat\"\n→ Opens http://localhost:7860 in the browser\n\nUser: \"Switch TTS to Deepgram\"\n→ Updates VOICE_TTS_PROVIDER=deepgram in .env\n→ Restarts the server"
      },
      {
        "title": "Troubleshooting",
        "body": "No audio output? Check that your TTS API key is valid and the provider is set correctly\nHigh latency? Use Deepgram for both STT and TTS; ensure your gateway is on the same network\nCuts off speech? Increase VOICE_VAD_SILENCE_MS to 600-800ms\nEcho/feedback? Use headphones, or enable the built-in echo cancellation in the browser UI"
      },
      {
        "title": "Latency Budget",
        "body": "StageTargetActual (typical)Audio capture + VAD<200ms~100-150msSTT transcription<400ms~200-400msOpenClaw LLM first token<1500ms~500-1500msTTS first audio chunk<400ms~200-400msTotal first audio<2.5s~1.0-2.5s"
      }
    ],
    "body": "Voice Assistant\n\nReal-time voice interface for your OpenClaw agent. Talk to your agent and hear it respond — with configurable STT and TTS providers, full streaming at every stage, and sub-2 second time-to-first-audio.\n\nArchitecture\nBrowser Mic → WebSocket → STT (Deepgram / ElevenLabs) → Text\n  → OpenClaw Gateway (/v1/chat/completions, streaming) → Response Text\n  → TTS (Deepgram Aura / ElevenLabs) → Audio chunks → Browser Speaker\n\n\nThe voice interface connects to your running OpenClaw gateway's OpenAI-compatible endpoint. It's the same agent with all its context, tools, and memory — just with a voice.\n\nQuick Start\ncd {baseDir}\ncp .env.example .env\n# Fill in your API keys and gateway URL\nuv run scripts/server.py\n# Open http://localhost:7860 and click the mic\n\nSupported Providers\nSTT (Speech-to-Text)\nProvider\tModel\tLatency\tNotes\nDeepgram\tnova-2 (streaming)\t~200-300ms\tWebSocket streaming, best accuracy/speed\nElevenLabs\tScribe v1\t~300-500ms\tREST-based, good multilingual\nTTS (Text-to-Speech)\nProvider\tModel\tLatency\tNotes\nDeepgram\taura-2\t~200ms\tWebSocket streaming, low cost\nElevenLabs\tTurbo v2.5\t~300ms\tBest voice quality, streaming\nConfiguration\n\nAll configuration is via environment variables in .env:\n\n# === Required ===\nOPENCLAW_GATEWAY_URL=http://localhost:4141/v1    # Your OpenClaw gateway\nOPENCLAW_MODEL=claude-sonnet-4-5-20250929        # Model your gateway routes to\n\n# === STT Provider (pick one) ===\nVOICE_STT_PROVIDER=deepgram                      # \"deepgram\" or \"elevenlabs\"\nDEEPGRAM_API_KEY=your-key-here                   # Required if STT=deepgram\nELEVENLABS_API_KEY=your-key-here                 # Required if STT=elevenlabs\n\n# === TTS Provider (pick one) ===\nVOICE_TTS_PROVIDER=elevenlabs                    # \"deepgram\" or \"elevenlabs\"\n# Uses the same API keys as above\n\n# === Optional Tuning ===\nVOICE_TTS_VOICE=rachel                           # ElevenLabs voice name/ID\nVOICE_TTS_VOICE_DG=aura-2-theia-en              # Deepgram Aura voice\nVOICE_VAD_SILENCE_MS=400                         # Silence before end-of-turn (ms)\nVOICE_SAMPLE_RATE=16000                          # Audio sample rate\nVOICE_SERVER_PORT=7860                           # Server port\nVOICE_SYSTEM_PROMPT=\"\"                           # Optional system prompt override\n\nProvider Combinations\nSetup\tBest For\nDeepgram STT + ElevenLabs TTS\tBest quality voice output\nDeepgram STT + Deepgram TTS\tLowest latency, single vendor\nElevenLabs STT + ElevenLabs TTS\tBest multilingual support\nHow It Works\nBrowser captures mic audio via Web Audio API and streams raw PCM over a WebSocket\nServer receives audio and pipes it to the configured STT provider's streaming endpoint\nSTT returns partial transcripts in real-time; on end-of-utterance the full text is sent to the OpenClaw gateway\nOpenClaw gateway streams the LLM response token-by-token via SSE (Server-Sent Events)\nTokens are accumulated into sentence-sized chunks and streamed to the TTS provider\nTTS returns audio chunks that are immediately forwarded to the browser over the same WebSocket\nBrowser plays audio using the Web Audio API with a jitter buffer for smooth playback\nInterruption Handling (Barge-In)\n\nWhen the user starts speaking while the agent is still talking:\n\nCurrent TTS audio is immediately cancelled\nThe agent stops its current response\nNew STT session begins capturing the user's interruption\nUsage Examples\nUser: \"Hey, set up my voice assistant\"\n→ OpenClaw runs: cd {baseDir} && cp .env.example .env\n→ Opens .env for the user to fill in API keys\n→ Runs: uv run scripts/server.py\n\nUser: \"Start a voice chat\"\n→ Opens http://localhost:7860 in the browser\n\nUser: \"Switch TTS to Deepgram\"\n→ Updates VOICE_TTS_PROVIDER=deepgram in .env\n→ Restarts the server\n\nTroubleshooting\nNo audio output? Check that your TTS API key is valid and the provider is set correctly\nHigh latency? Use Deepgram for both STT and TTS; ensure your gateway is on the same network\nCuts off speech? Increase VOICE_VAD_SILENCE_MS to 600-800ms\nEcho/feedback? Use headphones, or enable the built-in echo cancellation in the browser UI\nLatency Budget\nStage\tTarget\tActual (typical)\nAudio capture + VAD\t<200ms\t~100-150ms\nSTT transcription\t<400ms\t~200-400ms\nOpenClaw LLM first token\t<1500ms\t~500-1500ms\nTTS first audio chunk\t<400ms\t~200-400ms\nTotal first audio\t<2.5s\t~1.0-2.5s"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/charantejmandali18/voice-assistant",
    "publisherUrl": "https://clawhub.ai/charantejmandali18/voice-assistant",
    "owner": "charantejmandali18",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/voice-assistant",
    "downloadUrl": "https://openagent3.xyz/downloads/voice-assistant",
    "agentUrl": "https://openagent3.xyz/skills/voice-assistant/agent",
    "manifestUrl": "https://openagent3.xyz/skills/voice-assistant/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/voice-assistant/agent.md"
  }
}