{"id":"f01efae0-12fb-4b71-9205-701af9781dc5","entityType":"agent","slug":"clawhub-runapi-ai-runapi-fish-audio","name":"fish-audio","canonicalUrl":"https://www.xpersona.co/agent/clawhub-runapi-ai-runapi-fish-audio","canonicalPath":"/agent/clawhub-runapi-ai-runapi-fish-audio","generatedAt":"2026-10-11T14:13:04.806Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":null},"description":"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. Skill: fish-audio Owner: runapi-ai Summary: Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. Tags: latest:0.4.1 Version history: v0.4.1 | 2026-09-04T11:36:07.98","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1771k6pjxksnjws51x2htfjvd876syh:runapi-fish-audio","sourceUrl":"https://clawhub.ai/runapi-ai/runapi-fish-audio","homepage":"https://clawhub.ai/runapi-ai/skills/runapi-fish-audio","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/runapi-ai/runapi-fish-audio","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/runapi-ai/skills/runapi-fish-audio","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-o"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":null},"stars":null,"forks":null,"downloads":1082,"packageName":null,"latestVersion":"0.4.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:56:17.821Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T10:56:17.889Z","lastCrawledAt":"2026-10-11T10:56:17.821Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T10:56:17.821Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.1","createdAt":"2026-09-04T11:36:07.988Z","changelog":"## Changed - Document terminal responses, 202 acceptance, and Task Result continuation for supported capabilities.","fileCount":3,"zipByteSize":4686},{"version":"0.4.0","createdAt":"2026-08-21T06:42:56.932Z","changelog":"## Added - Document account-owned voice creation, list and get workflows, readiness checks, and speech reuse.","fileCount":3,"zipByteSize":4701},{"version":"0.3.0","createdAt":"2026-08-17T09:48:08.273Z","changelog":"## Added - Document account-owned voice creation, list and get workflows, readiness checks, and speech reuse.","fileCount":3,"zipByteSize":4754},{"version":"0.2.2","createdAt":"2026-08-12T06:14:40.457Z","changelog":"## Changed - Generate the fish-audio skill from the shared RunAPI recipe with contract-discovered request rules and task behavior, direct local media inputs, complete result verification, and bounded recovery.","fileCount":3,"zipByteSize":4263},{"version":"0.2.1","createdAt":"2026-08-10T14:07:21.788Z","changelog":"## Changed - Complete marketplace distribution for the RunAPI Fish Audio skill.","fileCount":3,"zipByteSize":3313},{"version":"0.2.0","createdAt":"2026-08-07T12:54:10.411Z","changelog":"## Added - Add s2.1-pro guidance for managed MP3 and WAV speech generation.","fileCount":3,"zipByteSize":3163},{"version":"0.1.1","createdAt":"2026-07-21T07:20:08.259Z","changelog":"## Added - Document inline reference audio and exact transcript inputs for one-request voice matching.","fileCount":3,"zipByteSize":2959},{"version":"0.1.0","createdAt":"2026-07-20T11:42:01.043Z","changelog":"## Added - Add guided synchronous speech generation examples for s1 and s2-pro.","fileCount":3,"zipByteSize":3001}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1771k6pjxksnjws51x2htfjvd876syh:runapi-fish-audio","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T14:13:04.804Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-fish-audio/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":null},"readme":"Skill: fish-audio\n\nOwner: runapi-ai\n\nSummary: Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\n\nTags: latest:0.4.1\n\nVersion history:\n\nv0.4.1 | 2026-09-04T11:36:07.988Z | user\n\n## Changed\n- Document terminal responses, 202 acceptance, and Task Result continuation for supported capabilities.\n\nv0.4.0 | 2026-08-21T06:42:56.932Z | user\n\n## Added\n- Document account-owned voice creation, list and get workflows, readiness checks, and speech reuse.\n\nv0.3.0 | 2026-08-17T09:48:08.273Z | user\n\n## Added\n- Document account-owned voice creation, list and get workflows, readiness checks, and speech reuse.\n\nv0.2.2 | 2026-08-12T06:14:40.457Z | user\n\n## Changed\n- Generate the fish-audio skill from the shared RunAPI recipe with contract-discovered request rules and task behavior, direct local media inputs, complete result verification, and bounded recovery.\n\nv0.2.1 | 2026-08-10T14:07:21.788Z | user\n\n## Changed\n- Complete marketplace distribution for the RunAPI Fish Audio skill.\n\nv0.2.0 | 2026-08-07T12:54:10.411Z | user\n\n## Added\n- Add s2.1-pro guidance for managed MP3 and WAV speech generation.\n\nv0.1.1 | 2026-07-21T07:20:08.259Z | user\n\n## Added\n- Document inline reference audio and exact transcript inputs for one-request voice matching.\n\nv0.1.0 | 2026-07-20T11:42:01.043Z | user\n\n## Added\n- Add guided synchronous speech generation examples for s1 and s2-pro.\n\nArchive index:\n\nArchive v0.4.1: 3 files, 4686 bytes\n\nFiles: skill-card.md (2599b), SKILL.md (7332b), _meta.json (136b)\n\nFile v0.4.1:SKILL.md\n\n---\nname: fish-audio\ndescription: \"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\"\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.\n---\n\n# Fish Audio on RunAPI\n\n## Choose route\n\n- For a one-off artifact or result, use the registered `fish-audio` service in the `runapi` CLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command.\n- For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to **Integrate with SDK**. Never shell out to the CLI as the production runtime.\n\n## Discover contract\n\nAuthenticate, then inspect the installed command catalog and the selected operation's current contract:\n\n```shell\nrunapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md\n```\n\nIf authentication is false, stop before submitting. Ask the user to provide a valid `RUNAPI_API_KEY`, or import a user-provided key from stdin with `runapi auth import-token --token -`; use interactive browser login only when the user explicitly requests it. Choose `<operation>` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.\n\n## Build request\n\nCreate `request.json` as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.\n\nTraverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.\n\nFor a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in `request.json`. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use `runapi files create` only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.\n\nSemantic invariants:\n- For voice resources, select `create-voice`, `list-voices`, or `get-voice` from service help. Create requires `name` and `source_audio_url`; get requires the RunAPI `voice_id`; list accepts optional `page_number` and `page_size`.\n- Use a voice only after its state is `trained`; a returned `voice_id` is a best-effort reference and may stop working later.\n- The `references` accepted by `text-to-speech` apply only to the current request; they do not create a voice resource.\n- This version has no update, delete, revoke, or voice-library management operations. Do not assume a voice ID remains available or make claims about how source audio is used for training.\n\nValidate the file before sending it:\n\n```shell\njq empty request.json\n```\n\n## Execute\n\nSubmit exactly once and save the complete synchronous response:\n\n```shell\nrunapi fish-audio <operation> --input-file request.json > result.out\n```\n\nDo not add `--async` or call `runapi wait`. The operation completes in this response; preserve its exact JSON, text, subtitle, or other discovered response format.\n\n## Verify\n\nA success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.\n\nFor every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as `videos`, `images`, or `audios` in the API Reference. The Catalog-declared fallback families for this skill are `audio/*`. Stop only when no single expected type or family can be established from those sources.\n\nFor every downloaded file, require both a non-empty file and the expected MIME type or family:\n\n```shell\ncurl --fail --location <deliverable-url> --output <downloaded-file>\nfor file in <downloaded-files>; do\n  expected_mime=<expected-MIME-or-family-pattern-for-this-file>\n  test -s \"$file\"\n  [[ \"$(file --brief --mime-type \"$file\")\" == $expected_mime ]]\ndone\n```\n\nDo not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record `Skill Conformance` separately from `Task Outcome` so a service failure does not hide whether this recipe was followed.\n\n## Recover or stop\n\n- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.\n- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.\n- On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.\n- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.\n\n## Integrate with SDK\n\nUse this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and `Fish Audio`, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke `runapi` as a subprocess from production code.\n\n## References\n\n- Model overview, pricing, and rate limits: https://runapi.ai/models/fish-audio.md\n- Provider overview: https://runapi.ai/providers/fish-audio.md\n- Full model catalog: https://runapi.ai/models.md\n- SDK integration: https://github.com/runapi-ai/fish-audio-sdk\n\n## Variants\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\nFile v0.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.4.1\",\n  \"publishedAt\": 1788521767988\n}\n\nFile v0.4.1:skill-card.md\n\n## Description:\n\nCreate account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to manage Fish Audio voice resources, generate MP3/WAV speech, and integrate Fish Audio through RunAPI for one-off tasks or application workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses RunAPI authentication and may submit paid network operations.\n\nMitigation: Use a limited RunAPI API key where available, confirm authentication before submission, and review requests before starting paid operations.\n\nRisk: Local media inputs may be uploaded to RunAPI or the Fish Audio service.\n\nMitigation: Provide only media files intended for upload and verify request JSON before execution.\n\nRisk: The required runapi CLI is installed from a third-party Homebrew tap.\n\nMitigation: Verify the RunAPI Homebrew tap and CLI source before installing, and prefer a reviewed or pinned version where possible.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/runapi-ai/skills/runapi-fish-audio)\n- [RunAPI Fish Audio model overview](https://runapi.ai/models/fish-audio)\n- [Fish Audio model documentation](https://runapi.ai/models/fish-audio.md)\n- [Fish Audio provider overview](https://runapi.ai/providers/fish-audio.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Fish Audio SDK integration](https://github.com/runapi-ai/fish-audio-sdk)\n- [Fish Audio s1 variant](https://runapi.ai/models/fish-audio/s1.md)\n- [Fish Audio s2-pro variant](https://runapi.ai/models/fish-audio/s2-pro.md)\n- [Fish Audio s2.1-pro variant](https://runapi.ai/models/fish-audio/s2.1-pro.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands, JSON request examples, and verification steps]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce or validate MP3/WAV audio deliverables through RunAPI when the agent follows the discovered service contract.]\n\n## Skill Version(s):\n\n0.4.1 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.4.0: 3 files, 4701 bytes\n\nFiles: skill-card.md (2509b), SKILL.md (7332b), _meta.json (136b)\n\nFile v0.4.0:SKILL.md\n\n---\nname: fish-audio\ndescription: \"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\"\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.\n---\n\n# Fish Audio on RunAPI\n\n## Choose route\n\n- For a one-off artifact or result, use the registered `fish-audio` service in the `runapi` CLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command.\n- For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to **Integrate with SDK**. Never shell out to the CLI as the production runtime.\n\n## Discover contract\n\nAuthenticate, then inspect the installed command catalog and the selected operation's current contract:\n\n```shell\nrunapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md\n```\n\nIf authentication is false, stop before submitting. Ask the user to provide a valid `RUNAPI_API_KEY`, or import a user-provided key from stdin with `runapi auth import-token --token -`; use interactive browser login only when the user explicitly requests it. Choose `<operation>` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.\n\n## Build request\n\nCreate `request.json` as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.\n\nTraverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.\n\nFor a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in `request.json`. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use `runapi files create` only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.\n\nSemantic invariants:\n- For voice resources, select `create-voice`, `list-voices`, or `get-voice` from service help. Create requires `name` and `source_audio_url`; get requires the RunAPI `voice_id`; list accepts optional `page_number` and `page_size`.\n- Use a voice only after its state is `trained`; a returned `voice_id` is a best-effort reference and may stop working later.\n- The `references` accepted by `text-to-speech` apply only to the current request; they do not create a voice resource.\n- This version has no update, delete, revoke, or voice-library management operations. Do not assume a voice ID remains available or make claims about how source audio is used for training.\n\nValidate the file before sending it:\n\n```shell\njq empty request.json\n```\n\n## Execute\n\nSubmit exactly once and save the complete synchronous response:\n\n```shell\nrunapi fish-audio <operation> --input-file request.json > result.out\n```\n\nDo not add `--async` or call `runapi wait`. The operation completes in this response; preserve its exact JSON, text, subtitle, or other discovered response format.\n\n## Verify\n\nA success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.\n\nFor every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as `videos`, `images`, or `audios` in the API Reference. The Catalog-declared fallback families for this skill are `audio/*`. Stop only when no single expected type or family can be established from those sources.\n\nFor every downloaded file, require both a non-empty file and the expected MIME type or family:\n\n```shell\ncurl --fail --location <deliverable-url> --output <downloaded-file>\nfor file in <downloaded-files>; do\n  expected_mime=<expected-MIME-or-family-pattern-for-this-file>\n  test -s \"$file\"\n  [[ \"$(file --brief --mime-type \"$file\")\" == $expected_mime ]]\ndone\n```\n\nDo not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record `Skill Conformance` separately from `Task Outcome` so a service failure does not hide whether this recipe was followed.\n\n## Recover or stop\n\n- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.\n- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.\n- On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.\n- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.\n\n## Integrate with SDK\n\nUse this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and `Fish Audio`, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke `runapi` as a subprocess from production code.\n\n## References\n\n- Model overview, pricing, and rate limits: https://runapi.ai/models/fish-audio.md\n- Provider overview: https://runapi.ai/providers/fish-audio.md\n- Full model catalog: https://runapi.ai/models.md\n- SDK integration: https://github.com/runapi-ai/fish-audio-sdk\n\n## Variants\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\nFile v0.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.4.0\",\n  \"publishedAt\": 1787294576932\n}\n\nFile v0.4.0:skill-card.md\n\n## Description:\n\nCreate account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to manage Fish Audio voice resources, build RunAPI requests, generate speech, and integrate Fish Audio through the RunAPI CLI or SDK.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: RunAPI requests may require API authentication, can incur billing, and can upload source audio selected by the user.\n\nMitigation: Install and use the skill only when RunAPI/Fish Audio is intended; provide only audio that the user has rights and consent to process, and confirm authentication before submitting requests.\n\nRisk: Generated or retrieved voice IDs may not remain usable, and voice resources must be ready before reuse.\n\nMitigation: Check voice state and use a voice only after it is trained; treat returned voice IDs as best-effort references rather than permanent assets.\n\n## Reference(s):\n\n- [RunAPI Fish Audio homepage](https://runapi.ai/models/fish-audio)\n- [Model overview, pricing, and rate limits](https://runapi.ai/models/fish-audio.md)\n- [Provider overview](https://runapi.ai/providers/fish-audio.md)\n- [Full model catalog](https://runapi.ai/models.md)\n- [SDK integration](https://github.com/runapi-ai/fish-audio-sdk)\n- [s1 variant](https://runapi.ai/models/fish-audio/s1.md)\n- [s2-pro variant](https://runapi.ai/models/fish-audio/s2-pro.md)\n- [s2.1-pro variant](https://runapi.ai/models/fish-audio/s2.1-pro.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, Code, Text, Audio files]\n\n**Output Format:** [Markdown guidance with shell commands, JSON request files, integration code, text responses, and MP3/WAV outputs when requested.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the runapi CLI or SDK, optional RUNAPI_API_KEY authentication, contract discovery before execution, and verification of downloaded audio MIME types.]\n\n## Skill Version(s):\n\n0.4.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.3.0: 3 files, 4754 bytes\n\nFiles: skill-card.md (2632b), SKILL.md (7332b), _meta.json (136b)\n\nFile v0.3.0:SKILL.md\n\n---\nname: fish-audio\ndescription: \"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\"\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.\n---\n\n# Fish Audio on RunAPI\n\n## Choose route\n\n- For a one-off artifact or result, use the registered `fish-audio` service in the `runapi` CLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command.\n- For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to **Integrate with SDK**. Never shell out to the CLI as the production runtime.\n\n## Discover contract\n\nAuthenticate, then inspect the installed command catalog and the selected operation's current contract:\n\n```shell\nrunapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md\n```\n\nIf authentication is false, stop before submitting. Ask the user to provide a valid `RUNAPI_API_KEY`, or import a user-provided key from stdin with `runapi auth import-token --token -`; use interactive browser login only when the user explicitly requests it. Choose `<operation>` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.\n\n## Build request\n\nCreate `request.json` as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.\n\nTraverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.\n\nFor a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in `request.json`. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use `runapi files create` only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.\n\nSemantic invariants:\n- For voice resources, select `create-voice`, `list-voices`, or `get-voice` from service help. Create requires `name` and `source_audio_url`; get requires the RunAPI `voice_id`; list accepts optional `page_number` and `page_size`.\n- Use a voice only after its state is `trained`; a returned `voice_id` is a best-effort reference and may stop working later.\n- The `references` accepted by `text-to-speech` apply only to the current request; they do not create a voice resource.\n- This version has no update, delete, revoke, or voice-library management operations. Do not assume a voice ID remains available or make claims about how source audio is used for training.\n\nValidate the file before sending it:\n\n```shell\njq empty request.json\n```\n\n## Execute\n\nSubmit exactly once and save the complete synchronous response:\n\n```shell\nrunapi fish-audio <operation> --input-file request.json > result.out\n```\n\nDo not add `--async` or call `runapi wait`. The operation completes in this response; preserve its exact JSON, text, subtitle, or other discovered response format.\n\n## Verify\n\nA success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.\n\nFor every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as `videos`, `images`, or `audios` in the API Reference. The Catalog-declared fallback families for this skill are `audio/*`. Stop only when no single expected type or family can be established from those sources.\n\nFor every downloaded file, require both a non-empty file and the expected MIME type or family:\n\n```shell\ncurl --fail --location <deliverable-url> --output <downloaded-file>\nfor file in <downloaded-files>; do\n  expected_mime=<expected-MIME-or-family-pattern-for-this-file>\n  test -s \"$file\"\n  [[ \"$(file --brief --mime-type \"$file\")\" == $expected_mime ]]\ndone\n```\n\nDo not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record `Skill Conformance` separately from `Task Outcome` so a service failure does not hide whether this recipe was followed.\n\n## Recover or stop\n\n- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.\n- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.\n- On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.\n- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.\n\n## Integrate with SDK\n\nUse this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and `Fish Audio`, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke `runapi` as a subprocess from production code.\n\n## References\n\n- Model overview, pricing, and rate limits: https://runapi.ai/models/fish-audio.md\n- Provider overview: https://runapi.ai/providers/fish-audio.md\n- Full model catalog: https://runapi.ai/models.md\n- SDK integration: https://github.com/runapi-ai/fish-audio-sdk\n\n## Variants\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\nFile v0.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.3.0\",\n  \"publishedAt\": 1786960088273\n}\n\nFile v0.3.0:skill-card.md\n\n## Description:\n\nCreate account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and external teams use this skill to create or inspect account-owned Fish Audio voice resources and generate MP3/WAV speech through RunAPI for one-off work or application integration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Audio and voice data can be sensitive and may require rights or consent before use.\n\nMitigation: Confirm trust in RunAPI/Fish Audio and only create or reuse voices when the user has appropriate rights and consent.\n\nRisk: Submitted RunAPI requests may incur billing.\n\nMitigation: Submit only after authentication and contract checks, and avoid repeated paid requests without user authorization.\n\nRisk: The RUNAPI_API_KEY can grant access to the user's RunAPI account.\n\nMitigation: Prefer environment authentication or saved CLI configuration, keep the key scoped and protected, and use browser login only when explicitly requested.\n\nRisk: Voice IDs and voice readiness can change over time.\n\nMitigation: Use a voice only after its state is trained, treat returned voice IDs as best-effort references, and preserve service evidence when a request fails.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/runapi-ai/skills/runapi-fish-audio)\n- [RunAPI Fish Audio model overview](https://runapi.ai/models/fish-audio)\n- [RunAPI Fish Audio documentation](https://runapi.ai/models/fish-audio.md)\n- [Fish Audio provider overview](https://runapi.ai/providers/fish-audio.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Fish Audio SDK integration](https://github.com/runapi-ai/fish-audio-sdk)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, Code, Files]\n\n**Output Format:** [Markdown guidance with shell commands, JSON request files, CLI or SDK responses, and downloaded audio files when requested.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Responses and media deliverables should be preserved and verified against the discovered RunAPI contract.]\n\n## Skill Version(s):\n\n0.3.0 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.2: 3 files, 4263 bytes\n\nFiles: skill-card.md (2174b), SKILL.md (6555b), _meta.json (136b)\n\nFile v0.2.2:SKILL.md\n\n---\nname: fish-audio\ndescription: \"Generate MP3 or WAV speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\"\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.\n---\n\n# Fish Audio on RunAPI\n\n## Choose route\n\n- For a one-off artifact or result, use the registered `fish-audio` service in the `runapi` CLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command.\n- For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to **Integrate with SDK**. Never shell out to the CLI as the production runtime.\n\n## Discover contract\n\nAuthenticate, then inspect the installed command catalog and the selected operation's current contract:\n\n```shell\nrunapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md\n```\n\nIf authentication is false, stop before submitting. Ask the user to provide a valid `RUNAPI_API_KEY`, or import a user-provided key from stdin with `runapi auth import-token --token -`; use interactive browser login only when the user explicitly requests it. Choose `<operation>` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.\n\n## Build request\n\nCreate `request.json` as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.\n\nTraverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.\n\nFor a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in `request.json`. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use `runapi files create` only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.\n\nValidate the file before sending it:\n\n```shell\njq empty request.json\n```\n\n## Execute\n\nSubmit exactly once and save the complete synchronous response:\n\n```shell\nrunapi fish-audio <operation> --input-file request.json > result.out\n```\n\nDo not add `--async` or call `runapi wait`. The operation completes in this response; preserve its exact JSON, text, subtitle, or other discovered response format.\n\n## Verify\n\nA success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.\n\nFor every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as `videos`, `images`, or `audios` in the API Reference. The Catalog-declared fallback families for this skill are `audio/*`. Stop only when no single expected type or family can be established from those sources.\n\nFor every downloaded file, require both a non-empty file and the expected MIME type or family:\n\n```shell\ncurl --fail --location <deliverable-url> --output <downloaded-file>\nfor file in <downloaded-files>; do\n  expected_mime=<expected-MIME-or-family-pattern-for-this-file>\n  test -s \"$file\"\n  [[ \"$(file --brief --mime-type \"$file\")\" == $expected_mime ]]\ndone\n```\n\nDo not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record `Skill Conformance` separately from `Task Outcome` so a service failure does not hide whether this recipe was followed.\n\n## Recover or stop\n\n- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.\n- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.\n- On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.\n- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.\n\n## Integrate with SDK\n\nUse this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and `Fish Audio`, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke `runapi` as a subprocess from production code.\n\n## References\n\n- Model overview, pricing, and rate limits: https://runapi.ai/models/fish-audio.md\n- Provider overview: https://runapi.ai/providers/fish-audio.md\n- Full model catalog: https://runapi.ai/models.md\n- SDK integration: https://github.com/runapi-ai/fish-audio-sdk\n\n## Variants\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\nFile v0.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.2.2\",\n  \"publishedAt\": 1786515280457\n}\n\nFile v0.2.2:skill-card.md\n\n## Description:\n\nGenerate MP3 or WAV speech with Fish Audio through RunAPI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to generate speech audio with Fish Audio through RunAPI, either as one-off CLI requests or SDK-backed application integrations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill sends requests to RunAPI/Fish Audio and may upload referenced local media inputs.\n\nMitigation: Use only approved inputs, review request files before submission, and work from a private directory.\n\nRisk: RunAPI requests may incur paid API usage.\n\nMitigation: Authenticate deliberately and do not resubmit after terminal service failures without user authorization.\n\nRisk: Request, response, and generated audio files may be saved locally.\n\nMitigation: Avoid secrets in request files and delete generated artifacts when they are no longer needed.\n\n## Reference(s):\n\n- [RunAPI Fish Audio Homepage](https://runapi.ai/models/fish-audio)\n- [Model Overview, Pricing, and Rate Limits](https://runapi.ai/models/fish-audio.md)\n- [Provider Overview](https://runapi.ai/providers/fish-audio.md)\n- [Full Model Catalog](https://runapi.ai/models.md)\n- [SDK Integration](https://github.com/runapi-ai/fish-audio-sdk)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Files, Guidance]\n\n**Output Format:** [Markdown guidance with shell commands, JSON request files, SDK code, saved responses, and downloaded audio files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May save request, response, and generated audio files locally; downloaded media is verified for non-empty audio MIME output.]\n\n## Skill Version(s):\n\n0.2.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.1: 3 files, 3313 bytes\n\nFiles: skill-card.md (2682b), SKILL.md (4287b), _meta.json (136b)\n\nFile v0.2.1:SKILL.md\n\n---\nname: fish-audio\ndescription: Generate MP3 or WAV speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; prefer environment auth or saved CLI config.\n---\n\n# Fish Audio on RunAPI\n\nGenerate synchronous MP3 or WAV speech. Prefer `s2.1-pro` for production TTS with 83-language support and natural-language expression control; `s2-pro` remains available as a previous-generation option. Use the target-language SDK for application integration and the `runapi` CLI for one-off speech generation or manual verification.\n\n## Critical: Integration Runtime\n\n- Integration work (app, backend, worker, library, Rails service, Node service, Go service, webhook pipeline, or production codebase) uses the **SDK integration path** for the target language.\n- One-off generation, manual smoke tests, debugging, or user-requested CLI runs use the **CLI path** with the `runapi` binary. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill.\n- Never shell out to the `runapi` CLI as the production runtime integration layer.\n\n## SDK integration path\n\nWhen integrating Fish Audio into an application or production workflow, check the current SDK package and official usage. Confirm the install command, synchronous `run` method, request fields, managed audio response, and error classes before using CLI help or raw HTTP examples. Use a RunAPI SDK package:\n\n- JavaScript / TypeScript: `@runapi.ai/fish-audio`\n- Python: `runapi-fish-audio`\n- Ruby: `runapi-fish-audio`\n- Go: `github.com/runapi-ai/fish-audio-sdk/go`\n- Java: `ai.runapi:runapi-fish-audio`\n- PHP: `runapi-ai/fish-audio`\n\nThe synchronous `text_to_speech` resource accepts `model`, `text`, optional request-scoped `references`, `output_format`, `sample_rate_hz`, and MP3-only `bitrate_kbps`. `output_format` defaults to `mp3`; it also accepts `wav`. Each reference requires base64-encoded raw audio bytes in `audio` and its exact transcript in `text`. The resource returns a completed response with RunAPI-managed `audios`.\n\n## CLI path\n\nThe `runapi` binary is the one-off and manual testing runtime dependency. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill. Run `runapi auth status` first. Prefer `RUNAPI_API_KEY` or import a token with `printf '%s' \"$RUNAPI_API_KEY\" | runapi auth import-token --token -`.\n\nInspect current fields before creating a request:\n\n```shell\nrunapi fish-audio --help\nrunapi fish-audio text-to-speech --help\nrunapi fish-audio text-to-speech --input-file request.json\n```\n\nThe request file contains `model`, `text`, and optional `references` entries with `audio` and `text`. It may also select `output_format`, `sample_rate_hz`, and MP3-only `bitrate_kbps`; inspect command help for the current constraints. `references` applies only to that request; reusable `reference_id` values are not supported. The command returns one completed response, so do not add `--async` or call `runapi wait`.\n\n## Variants\n\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\n## Result handling\n\nThe response contains `id`, `status`, and one `audios` entry with `url`, `format`, `mime_type`, and `size_bytes`. The URL points to RunAPI-managed storage. Keep API keys in `RUNAPI_API_KEY` or saved RunAPI config.\n\n## References\n\n- Model overview: https://runapi.ai/models/fish-audio.md\n- s1: https://runapi.ai/models/fish-audio/s1.md\n- s2-pro: https://runapi.ai/models/fish-audio/s2-pro.md\n- s2.1-pro: https://runapi.ai/models/fish-audio/s2.1-pro.md\n- Provider page: https://runapi.ai/providers/fish-audio.md\n- Full catalog: https://runapi.ai/models.md\n\nFile v0.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.2.1\",\n  \"publishedAt\": 1786370841788\n}\n\nFile v0.2.1:skill-card.md\n\n## Description:\n\nGenerate MP3 or WAV speech with Fish Audio through RunAPI for one-off speech generation or application integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to generate text-to-speech audio with Fish Audio through RunAPI, either as one-off CLI requests or through language-specific SDK integration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: API keys can be exposed if copied into prompts, request files, shell history, or logs.\n\nMitigation: Use RUNAPI_API_KEY or trusted RunAPI CLI configuration, and avoid embedding credentials in generated code or request payloads.\n\nRisk: Speech text, reference voice samples, transcripts, and generated audio URLs may be processed or stored by RunAPI-managed services.\n\nMitigation: Avoid sending sensitive text, voice samples, or transcripts unless the user accepts RunAPI-managed processing and storage for that data.\n\nRisk: Using the CLI as a production integration layer can create brittle application behavior.\n\nMitigation: Use the target-language RunAPI SDK for application or production integration, and reserve the CLI for one-off generation, smoke tests, and debugging.\n\n## Reference(s):\n\n- [Fish Audio model overview](https://runapi.ai/models/fish-audio.md)\n- [Fish Audio homepage](https://runapi.ai/models/fish-audio)\n- [Fish Audio s1 variant](https://runapi.ai/models/fish-audio/s1.md)\n- [Fish Audio s2-pro variant](https://runapi.ai/models/fish-audio/s2-pro.md)\n- [Fish Audio s2.1-pro variant](https://runapi.ai/models/fish-audio/s2.1-pro.md)\n- [Fish Audio provider page](https://runapi.ai/providers/fish-audio.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [RunAPI CLI skill](https://github.com/runapi-ai/cli-skill)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands, SDK package names, request fields, and configuration notes.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance may include RunAPI CLI commands, SDK integration details, request JSON fields, and result-handling notes for RunAPI-managed audio URLs.]\n\n## Skill Version(s):\n\n0.2.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.0: 3 files, 3163 bytes\n\nFiles: skill-card.md (2306b), SKILL.md (4287b), _meta.json (136b)\n\nFile v0.2.0:SKILL.md\n\n---\nname: fish-audio\ndescription: Generate MP3 or WAV speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; prefer environment auth or saved CLI config.\n---\n\n# Fish Audio on RunAPI\n\nGenerate synchronous MP3 or WAV speech. Prefer `s2.1-pro` for production TTS with 83-language support and natural-language expression control; `s2-pro` remains available as a previous-generation option. Use the target-language SDK for application integration and the `runapi` CLI for one-off speech generation or manual verification.\n\n## Critical: Integration Runtime\n\n- Integration work (app, backend, worker, library, Rails service, Node service, Go service, webhook pipeline, or production codebase) uses the **SDK integration path** for the target language.\n- One-off generation, manual smoke tests, debugging, or user-requested CLI runs use the **CLI path** with the `runapi` binary. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill.\n- Never shell out to the `runapi` CLI as the production runtime integration layer.\n\n## SDK integration path\n\nWhen integrating Fish Audio into an application or production workflow, check the current SDK package and official usage. Confirm the install command, synchronous `run` method, request fields, managed audio response, and error classes before using CLI help or raw HTTP examples. Use a RunAPI SDK package:\n\n- JavaScript / TypeScript: `@runapi.ai/fish-audio`\n- Python: `runapi-fish-audio`\n- Ruby: `runapi-fish-audio`\n- Go: `github.com/runapi-ai/fish-audio-sdk/go`\n- Java: `ai.runapi:runapi-fish-audio`\n- PHP: `runapi-ai/fish-audio`\n\nThe synchronous `text_to_speech` resource accepts `model`, `text`, optional request-scoped `references`, `output_format`, `sample_rate_hz`, and MP3-only `bitrate_kbps`. `output_format` defaults to `mp3`; it also accepts `wav`. Each reference requires base64-encoded raw audio bytes in `audio` and its exact transcript in `text`. The resource returns a completed response with RunAPI-managed `audios`.\n\n## CLI path\n\nThe `runapi` binary is the one-off and manual testing runtime dependency. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill. Run `runapi auth status` first. Prefer `RUNAPI_API_KEY` or import a token with `printf '%s' \"$RUNAPI_API_KEY\" | runapi auth import-token --token -`.\n\nInspect current fields before creating a request:\n\n```shell\nrunapi fish-audio --help\nrunapi fish-audio text-to-speech --help\nrunapi fish-audio text-to-speech --input-file request.json\n```\n\nThe request file contains `model`, `text`, and optional `references` entries with `audio` and `text`. It may also select `output_format`, `sample_rate_hz`, and MP3-only `bitrate_kbps`; inspect command help for the current constraints. `references` applies only to that request; reusable `reference_id` values are not supported. The command returns one completed response, so do not add `--async` or call `runapi wait`.\n\n## Variants\n\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n- `s2.1-pro`: https://runapi.ai/models/fish-audio/s2.1-pro.md\n\n## Result handling\n\nThe response contains `id`, `status`, and one `audios` entry with `url`, `format`, `mime_type`, and `size_bytes`. The URL points to RunAPI-managed storage. Keep API keys in `RUNAPI_API_KEY` or saved RunAPI config.\n\n## References\n\n- Model overview: https://runapi.ai/models/fish-audio.md\n- s1: https://runapi.ai/models/fish-audio/s1.md\n- s2-pro: https://runapi.ai/models/fish-audio/s2-pro.md\n- s2.1-pro: https://runapi.ai/models/fish-audio/s2.1-pro.md\n- Provider page: https://runapi.ai/providers/fish-audio.md\n- Full catalog: https://runapi.ai/models.md\n\nFile v0.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.2.0\",\n  \"publishedAt\": 1786107250411\n}\n\nFile v0.2.0:skill-card.md\n\n## Description:\n\nGenerate MP3 or WAV speech with Fish Audio through RunAPI for one-off speech generation or application integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and external users use this skill to generate speech with Fish Audio through RunAPI, either through the RunAPI CLI for one-off requests or language SDKs for application integration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Submitted text, reference audio, transcripts, and generated audio URLs are handled by a third-party service.\n\nMitigation: Treat these inputs and outputs as third-party service data and avoid sending sensitive content unless the deployment's data handling requirements allow it.\n\nRisk: RunAPI API keys can grant access to speech generation services.\n\nMitigation: Store credentials in RUNAPI_API_KEY or saved RunAPI configuration and avoid embedding keys in prompts, source files, or request examples.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/runapi-ai/skills/runapi-fish-audio)\n- [RunAPI Fish Audio Homepage](https://runapi.ai/models/fish-audio)\n- [Fish Audio Model Overview](https://runapi.ai/models/fish-audio.md)\n- [Fish Audio Provider Page](https://runapi.ai/providers/fish-audio.md)\n- [RunAPI Model Catalog](https://runapi.ai/models.md)\n- [Fish Audio s1](https://runapi.ai/models/fish-audio/s1.md)\n- [Fish Audio s2-pro](https://runapi.ai/models/fish-audio/s2-pro.md)\n- [Fish Audio s2.1-pro](https://runapi.ai/models/fish-audio/s2.1-pro.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, Code]\n\n**Output Format:** [Markdown with inline shell commands and SDK integration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce request JSON guidance for text-to-speech inputs and audio response handling.]\n\n## Skill Version(s):\n\n0.2.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.1.1: 3 files, 2959 bytes\n\nFiles: skill-card.md (2380b), SKILL.md (3759b), _meta.json (136b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: fish-audio\ndescription: Generate MP3 speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; prefer environment auth or saved CLI config.\n---\n\n# Fish Audio on RunAPI\n\nGenerate synchronous MP3 speech with `s1` or `s2-pro`. Use the target-language SDK for application integration and the `runapi` CLI for one-off speech generation or manual verification.\n\n## Critical: Integration Runtime\n\n- Integration work (app, backend, worker, library, Rails service, Node service, Go service, webhook pipeline, or production codebase) uses the **SDK integration path** for the target language.\n- One-off generation, manual smoke tests, debugging, or user-requested CLI runs use the **CLI path** with the `runapi` binary. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill.\n- Never shell out to the `runapi` CLI as the production runtime integration layer.\n\n## SDK integration path\n\nWhen integrating Fish Audio into an application or production workflow, check the current SDK package and official usage. Confirm the install command, synchronous `run` method, request fields, managed audio response, and error classes before using CLI help or raw HTTP examples. Use a RunAPI SDK package:\n\n- JavaScript / TypeScript: `@runapi.ai/fish-audio`\n- Python: `runapi-fish-audio`\n- Ruby: `runapi-fish-audio`\n- Go: `github.com/runapi-ai/fish-audio-sdk/go`\n- Java: `ai.runapi:runapi-fish-audio`\n- PHP: `runapi-ai/fish-audio`\n\nThe synchronous `text_to_speech` resource accepts `model`, `text`, and optional request-scoped `references`. Each reference requires base64-encoded raw audio bytes in `audio` and its exact transcript in `text`. The resource returns a completed response with RunAPI-managed `audios`.\n\n## CLI path\n\nThe `runapi` binary is the one-off and manual testing runtime dependency. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill. Run `runapi auth status` first. Prefer `RUNAPI_API_KEY` or import a token with `printf '%s' \"$RUNAPI_API_KEY\" | runapi auth import-token --token -`.\n\nInspect current fields before creating a request:\n\n```shell\nrunapi fish-audio --help\nrunapi fish-audio text-to-speech --help\nrunapi fish-audio text-to-speech --input-file request.json\n```\n\nThe request file contains `model`, `text`, and optional `references` entries with `audio` and `text`. `references` applies only to that request; reusable `reference_id` values are not supported. The command returns one completed response, so do not add `--async` or call `runapi wait`.\n\n## Variants\n\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n\n## Result handling\n\nThe response contains `id`, `status`, and one `audios` entry with `url`, `format`, `mime_type`, and `size_bytes`. The URL points to RunAPI-managed storage. Keep API keys in `RUNAPI_API_KEY` or saved RunAPI config.\n\n## References\n\n- Model overview: https://runapi.ai/models/fish-audio.md\n- s1: https://runapi.ai/models/fish-audio/s1.md\n- s2-pro: https://runapi.ai/models/fish-audio/s2-pro.md\n- Provider page: https://runapi.ai/providers/fish-audio.md\n- Full catalog: https://runapi.ai/models.md\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1784618408259\n}\n\nFile v0.1.1:skill-card.md\n\n## Description: <br>\nGenerate MP3 speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to generate Fish Audio MP3 speech through RunAPI, either with the RunAPI CLI for one-off requests or language SDKs for application integration. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Text, reference audio, and transcripts are sent to RunAPI and Fish Audio for speech generation. <br>\nMitigation: Use the service only with content appropriate for RunAPI and Fish Audio, and avoid submitting sensitive text or audio unless approved for that workflow. <br>\nRisk: The skill relies on local RunAPI CLI or SDK authentication, including optional API keys. <br>\nMitigation: Prefer environment-based API keys or saved RunAPI configuration, and treat the CLI, SDKs, and stored tokens as trusted local tooling. <br>\n\n\n## Reference(s): <br>\n- [Fish Audio model overview](https://runapi.ai/models/fish-audio.md) <br>\n- [Fish Audio homepage](https://runapi.ai/models/fish-audio) <br>\n- [Fish Audio provider page](https://runapi.ai/providers/fish-audio.md) <br>\n- [Fish Audio s1 model](https://runapi.ai/models/fish-audio/s1.md) <br>\n- [Fish Audio s2-pro model](https://runapi.ai/models/fish-audio/s2-pro.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Code, Configuration] <br>\n**Output Format:** [Markdown with inline shell commands and SDK guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May reference RunAPI-managed audio response fields and environment-based API key handling.] <br>\n\n## Skill Version(s): <br>\n0.1.1 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.1.0: 3 files, 3001 bytes\n\nFiles: skill-card.md (2642b), SKILL.md (3504b), _meta.json (136b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: fish-audio\ndescription: Generate MP3 speech with Fish Audio through RunAPI. Use for one-off speech generation or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; prefer environment auth or saved CLI config.\n---\n\n# Fish Audio on RunAPI\n\nGenerate synchronous MP3 speech with `s1` or `s2-pro`. Use the target-language SDK for application integration and the `runapi` CLI for one-off speech generation or manual verification.\n\n## Critical: Integration Runtime\n\n- Integration work (app, backend, worker, library, Rails service, Node service, Go service, webhook pipeline, or production codebase) uses the **SDK integration path** for the target language.\n- One-off generation, manual smoke tests, debugging, or user-requested CLI runs use the **CLI path** with the `runapi` binary. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill.\n- Never shell out to the `runapi` CLI as the production runtime integration layer.\n\n## SDK integration path\n\nWhen integrating Fish Audio into an application or production workflow, check the current SDK package and official usage. Confirm the install command, synchronous `run` method, request fields, managed audio response, and error classes before using CLI help or raw HTTP examples. Use a RunAPI SDK package:\n\n- JavaScript / TypeScript: `@runapi.ai/fish-audio`\n- Python: `runapi-fish-audio`\n- Ruby: `runapi-fish-audio`\n- Go: `github.com/runapi-ai/fish-audio-sdk/go`\n- Java: `ai.runapi:runapi-fish-audio`\n- PHP: `runapi-ai/fish-audio`\n\nThe synchronous `text_to_speech` resource accepts `model` and `text` and returns a completed response with RunAPI-managed `audios`.\n\n## CLI path\n\nThe `runapi` binary is the one-off and manual testing runtime dependency. For full CLI-specific agent guidance, see https://github.com/runapi-ai/cli-skill. Run `runapi auth status` first. Prefer `RUNAPI_API_KEY` or import a token with `printf '%s' \"$RUNAPI_API_KEY\" | runapi auth import-token --token -`.\n\nInspect current fields before creating a request:\n\n```shell\nrunapi fish-audio --help\nrunapi fish-audio text-to-speech --help\nrunapi fish-audio text-to-speech --input-file request.json\n```\n\nThe request file contains only `model` and `text`; voice-cloning fields are not supported. The command returns one completed response, so do not add `--async` or call `runapi wait`.\n\n## Variants\n\n- `s1`: https://runapi.ai/models/fish-audio/s1.md\n- `s2-pro`: https://runapi.ai/models/fish-audio/s2-pro.md\n\n## Result handling\n\nThe response contains `id`, `status`, and one `audios` entry with `url`, `format`, `mime_type`, and `size_bytes`. The URL points to RunAPI-managed storage. Keep API keys in `RUNAPI_API_KEY` or saved RunAPI config.\n\n## References\n\n- Model overview: https://runapi.ai/models/fish-audio.md\n- s1: https://runapi.ai/models/fish-audio/s1.md\n- s2-pro: https://runapi.ai/models/fish-audio/s2-pro.md\n- Provider page: https://runapi.ai/providers/fish-audio.md\n- Full catalog: https://runapi.ai/models.md\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1784547721043\n}\n\nFile v0.1.0:skill-card.md\n\n## Description: <br>\nGenerate MP3 speech with Fish Audio through RunAPI for one-off speech generation or application integration. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to generate synchronous MP3 speech with Fish Audio through RunAPI. It guides application integration through RunAPI SDKs and one-off generation through the RunAPI CLI. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Using the RunAPI CLI as a production integration layer could make application behavior depend on shell execution and local CLI state. <br>\nMitigation: Use the target-language RunAPI SDK for production integration and reserve the CLI path for one-off generation, smoke tests, and debugging. <br>\nRisk: Speech generation sends request text to RunAPI/Fish Audio and may require a RunAPI API key. <br>\nMitigation: Review text for data sensitivity before submission and keep credentials in RUNAPI_API_KEY or saved RunAPI configuration. <br>\nRisk: Requests that include unsupported voice-cloning fields or asynchronous flow assumptions may fail or mislead users. <br>\nMitigation: Use only the documented model and text request fields for this skill and treat the command response as a completed synchronous response. <br>\n\n\n## Reference(s): <br>\n- [Fish Audio model overview](https://runapi.ai/models/fish-audio.md) <br>\n- [Fish Audio s1](https://runapi.ai/models/fish-audio/s1.md) <br>\n- [Fish Audio s2-pro](https://runapi.ai/models/fish-audio/s2-pro.md) <br>\n- [Fish Audio provider page](https://runapi.ai/providers/fish-audio.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n- [RunAPI CLI skill](https://github.com/runapi-ai/cli-skill) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Code, Shell commands, Configuration instructions] <br>\n**Output Format:** [Markdown with inline shell commands and SDK guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May produce RunAPI request examples that use model and text fields and may reference RunAPI-managed audio response URLs.] <br>\n\n## Skill Version(s): <br>\n0.1.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: fish-audio Owner: runapi-ai Summary: Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. Tags: latest:0.4.1 Version history: v0.4.1 | 2026-09-04T11:36:07.98","codeSnippets":[],"executableExamples":[{"language":"shell","snippet":"curl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md"},{"language":"shell","snippet":"runapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md"},{"language":"shell","snippet":"jq empty request.json"},{"language":"shell","snippet":"runapi fish-audio <operation> --input-file request.json > result.out"},{"language":"shell","snippet":"curl --fail --location <deliverable-url> --output <downloaded-file>"},{"language":"shell","snippet":"curl --fail --location <deliverable-url> --output <downloaded-file>\nfor file in <downloaded-files>; do\n  expected_mime=<expected-MIME-or-family-pattern-for-this-file>\n  test -s \"$file\"\n  [[ \"$(file --brief --mime-type \"$file\")\" == $expected_mime ]]\ndone"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: fish-audio\ndescription: \"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.\"\ndocumentation: https://runapi.ai/models/fish-audio.md\nprovider_page: https://runapi.ai/providers/fish-audio.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/fish-audio\n    requires:\n      bins:\n      - runapi\n    install:\n    - kind: brew\n      formula: runapi-ai/tap/runapi\n      bins:\n      - runapi\n    envVars:\n    - name: RUNAPI_API_KEY\n      required: false\n      description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.\n---\n\n# Fish Audio on RunAPI\n\n## Choose route\n\n- For a one-off artifact or result, use the registered `fish-audio` service in the `runapi` CLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command.\n- For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to **Integrate with SDK**. Never shell out to the CLI as the production runtime.\n\n## Discover contract\n\nAuthenticate, then inspect the installed command catalog and the selected operation's current contract:\n\n```shell\nrunapi auth status > auth.json\njq -e '.authenticated == true' auth.json\nrunapi fish-audio --help\nrunapi fish-audio <operation> --help\ncurl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.md\n```\n\nIf authentication is false, stop before submitting. Ask the user to provide a valid `RUNAPI_API_KEY`, or import a user-provided key from stdin with `runapi auth import-token --token -`; use interactive browser login only when the user explicitly requests it. Choose `<operation>` only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.\n\n## Build request\n\nCreate `request.json` as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.\n\nTraverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.\n\nFor a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in `r"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-fish-audio\",\n  \"version\": \"0.4.1\",\n  \"publishedAt\": 1788521767988\n}"},{"path":"skill-card.md","content":"## Description:\n\nCreate account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to manage Fish Audio voice resources, generate MP3/WAV speech, and integrate Fish Audio through RunAPI for one-off tasks or application workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses RunAPI authentication and may submit paid network operations.\n\nMitigation: Use a limited RunAPI API key where available, confirm authentication before submission, and review requests before starting paid operations.\n\nRisk: Local media inputs may be uploaded to RunAPI or the Fish Audio service.\n\nMitigation: Provide only media files intended for upload and verify request JSON before execution.\n\nRisk: The required runapi CLI is installed from a third-party Homebrew tap.\n\nMitigation: Verify the RunAPI Homebrew tap and CLI source before installing, and prefer a reviewed or pinned version where possible.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/runapi-ai/skills/runapi-fish-audio)\n- [RunAPI Fish Audio model overview](https://runapi.ai/models/fish-audio)\n- [Fish Audio model documentation](https://runapi.ai/models/fish-audio.md)\n- [Fish Audio provider overview](https://runapi.ai/providers/fish-audio.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Fish Audio SDK integration](https://github.com/runapi-ai/fish-audio-sdk)\n- [Fish Audio s1 variant](https://runapi.ai/models/fish-audio/s1.md)\n- [Fish Audio s2-pro variant](https://runapi.ai/models/fish-audio/s2-pro.md)\n- [Fish Audio s2.1-pro variant](https://runapi.ai/models/fish-audio/s2.1-pro.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands, JSON request examples, and verification steps]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce or validate MP3/WAV audio deliverables through RunAPI when the agent follows the discovered service contract.]\n\n## Skill Version(s):\n\n0.4.1 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. Skill: fish-audio Owner: runapi-ai Summary: Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration. Tags: latest:0.4.1 Version history: v0.4.1 | 2026-09-04T11:36:07.98","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1239,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T10:56:17.889Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:13:04.806Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}