{
  "schemaVersion": "1.0",
  "item": {
    "slug": "claw-voice",
    "name": "ClawVoice",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/niczy/claw-voice",
    "canonicalUrl": "https://clawhub.ai/niczy/claw-voice",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/claw-voice",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=claw-voice",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "client.py",
      "skill.md"
    ],
    "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/claw-voice"
    },
    "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/claw-voice",
    "agentPageUrl": "https://openagent3.xyz/skills/claw-voice/agent",
    "manifestUrl": "https://openagent3.xyz/skills/claw-voice/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/claw-voice/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": "Claw Voice",
        "body": "You are connected to a live user session via voice. The user is speaking to you through a voice interface. Use the bundled client.py script to communicate with them in real time.\n\nThe script is located at $skill_dir/client.py."
      },
      {
        "title": "Sending a message to the user",
        "body": "To say something to the user, run:\n\nuv run python $skill_dir/client.py send \"Hello! How can I help you today?\"\n\nThe server echoes back a confirmation as JSON:\n\n{\"type\": \"echo\", \"content\": \"Hello! How can I help you today?\"}"
      },
      {
        "title": "Receiving the next message from the user",
        "body": "To wait for the user to say something:\n\nuv run python $skill_dir/client.py recv\n\nThis blocks until the user speaks, then prints their message as JSON and exits:\n\n{\"type\": \"message\", \"content\": \"What's the weather like?\"}\n\nUse --timeout to control how long to wait (default 30s):\n\nuv run python $skill_dir/client.py recv --timeout 60\n\nIf the timeout expires with no message, it prints an error and exits with code 1."
      },
      {
        "title": "Listening for multiple messages",
        "body": "To receive a stream of messages over a period of time:\n\nuv run python $skill_dir/client.py listen --timeout 60\n\nThis prints each incoming message as a JSON line until the timeout expires:\n\n{\"type\": \"message\", \"content\": \"Tell me a joke\"}\n{\"type\": \"message\", \"content\": \"Actually, make it about cats\"}"
      },
      {
        "title": "Running as an agent bridge",
        "body": "The agent command creates a loop: it listens for user messages, forwards each one to openclaw agent --agent main --message '<message>', captures the stdout, and sends it back to the user over the WebSocket.\n\nuv run python $skill_dir/client.py agent\n\nThis runs indefinitely by default. Use --timeout to limit the session:\n\nuv run python $skill_dir/client.py agent --timeout 300\n\nThe flow for each message:\n\nUser speaks -> server sends {\"type\": \"message\", \"content\": \"...\"} to the client\nClient runs openclaw agent --agent main --message '...' and captures stdout\nClient sends the agent's response back: {\"type\": \"message\", \"content\": \"<stdout>\"}\n\nLogs are printed to stderr-style output as [user] and [agent] prefixed lines."
      },
      {
        "title": "Connection options",
        "body": "All commands accept --url to override the default WebSocket address:\n\nuv run python $skill_dir/client.py --url ws://$host:$port/connect send \"Hi\"\n\nDefault URL: ws://localhost:3111/connect"
      },
      {
        "title": "Messages you send (agent -> user)",
        "body": "TypeFieldsDescriptionmessagecontent (string)Text to speak/display to the user"
      },
      {
        "title": "Messages you receive (user -> agent)",
        "body": "TypeFieldsDescriptionmessagecontent (string)What the user said (transcribed text)echocontent (string)Server confirmation of your sent message — ignore thesepongConnection health check response — ignore these"
      },
      {
        "title": "Behavior guidelines",
        "body": "Respond promptly to every message you receive from the user.\nKeep responses conversational and concise — the user is speaking, not reading.\nSend one message at a time. Do not batch multiple sends.\nIgnore echo messages — they are confirmations, not user input.\nUse recv for turn-based conversation. Use listen when you expect the user to say multiple things."
      }
    ],
    "body": "Claw Voice\n\nYou are connected to a live user session via voice. The user is speaking to you through a voice interface. Use the bundled client.py script to communicate with them in real time.\n\nThe script is located at $skill_dir/client.py.\n\nSending a message to the user\n\nTo say something to the user, run:\n\nuv run python $skill_dir/client.py send \"Hello! How can I help you today?\"\n\n\nThe server echoes back a confirmation as JSON:\n\n{\"type\": \"echo\", \"content\": \"Hello! How can I help you today?\"}\n\nReceiving the next message from the user\n\nTo wait for the user to say something:\n\nuv run python $skill_dir/client.py recv\n\n\nThis blocks until the user speaks, then prints their message as JSON and exits:\n\n{\"type\": \"message\", \"content\": \"What's the weather like?\"}\n\n\nUse --timeout to control how long to wait (default 30s):\n\nuv run python $skill_dir/client.py recv --timeout 60\n\n\nIf the timeout expires with no message, it prints an error and exits with code 1.\n\nListening for multiple messages\n\nTo receive a stream of messages over a period of time:\n\nuv run python $skill_dir/client.py listen --timeout 60\n\n\nThis prints each incoming message as a JSON line until the timeout expires:\n\n{\"type\": \"message\", \"content\": \"Tell me a joke\"}\n{\"type\": \"message\", \"content\": \"Actually, make it about cats\"}\n\nRunning as an agent bridge\n\nThe agent command creates a loop: it listens for user messages, forwards each one to openclaw agent --agent main --message '<message>', captures the stdout, and sends it back to the user over the WebSocket.\n\nuv run python $skill_dir/client.py agent\n\n\nThis runs indefinitely by default. Use --timeout to limit the session:\n\nuv run python $skill_dir/client.py agent --timeout 300\n\n\nThe flow for each message:\n\nUser speaks -> server sends {\"type\": \"message\", \"content\": \"...\"} to the client\nClient runs openclaw agent --agent main --message '...' and captures stdout\nClient sends the agent's response back: {\"type\": \"message\", \"content\": \"<stdout>\"}\n\nLogs are printed to stderr-style output as [user] and [agent] prefixed lines.\n\nConnection options\n\nAll commands accept --url to override the default WebSocket address:\n\nuv run python $skill_dir/client.py --url ws://$host:$port/connect send \"Hi\"\n\n\nDefault URL: ws://localhost:3111/connect\n\nMessage types reference\nMessages you send (agent -> user)\nType\tFields\tDescription\nmessage\tcontent (string)\tText to speak/display to the user\nMessages you receive (user -> agent)\nType\tFields\tDescription\nmessage\tcontent (string)\tWhat the user said (transcribed text)\necho\tcontent (string)\tServer confirmation of your sent message — ignore these\npong\t\tConnection health check response — ignore these\nBehavior guidelines\nRespond promptly to every message you receive from the user.\nKeep responses conversational and concise — the user is speaking, not reading.\nSend one message at a time. Do not batch multiple sends.\nIgnore echo messages — they are confirmations, not user input.\nUse recv for turn-based conversation. Use listen when you expect the user to say multiple things."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/niczy/claw-voice",
    "publisherUrl": "https://clawhub.ai/niczy/claw-voice",
    "owner": "niczy",
    "version": "0.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/claw-voice",
    "downloadUrl": "https://openagent3.xyz/downloads/claw-voice",
    "agentUrl": "https://openagent3.xyz/skills/claw-voice/agent",
    "manifestUrl": "https://openagent3.xyz/skills/claw-voice/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/claw-voice/agent.md"
  }
}