All plugins

fish-audio

Lifelike voices for your agent: Fish Audio's expressive text-to-speech in 80+ languages, plus transcription, voice cloning and a voice library. The official Fish Audio plugin: Fish's Drama 3 model with word-level direction, speech-to-text, Fish Audio's community voice library, voice cloning and voice design, with a Voices page in Hermes Desktop. Fish Audio becomes a Hermes speech and transcription provider for voice replies, read-aloud, voice notes and Desktop dictation, with sentence-by-sentence streaming in CLI voice mode and Desktop, and word-by-word live dictation captions on Hermes 0.21.6+ (stt.streaming: true). Adds the fish_speak, fish_voices and fish_transcribe tools, /fish and hermes fish commands, and four skills. Disclosure — sends your Fish API key and the text, audio (with file names) and voice titles, tags, descriptions, cover images and design instructions you ask it to process to api.fish.audio, or to the base_url you configure, and reads your Fish wallet for balances and model choice; with live dictation on, microphone audio streams to Fish's native realtime speech-to-text at api.fish.audio (transcribe-stream-1, Preview) while you speak, billed $0.36 per hour of open session, per second, including silence; a session opens with the first audio and closes once Fish confirms the last words (the plugin stops waiting after 15 seconds), or 30 seconds after the last audio of a cancelled recording; the live_transcription: compat setting uses Fish's older realtime endpoint instead, billed per committed phrase rounded up to a second; synthesis, transcription, cloning and voice design are paid requests billed to your Fish account, except the free s2.1-pro-free model (free through 30 November 2026), whose requests Fish may use to improve its models. The key comes from the profile's secret scope (Hermes stores it in the profile .env; a single-profile install may also read FISH_API_KEY from the environment). Generated audio and subtitles are written to Hermes's audio cache; clone samples and recordings it uploads must be regular audio files, and Hermes config, secret and credential paths are refused. Cloning and deleting voices from chat or the model tools go through Hermes's approval gate and follow your approval settings. The Desktop Voices page and a Fish Audio settings page add gateway routes under /api/plugins/fish-audio/, behind the Hermes dashboard's existing authentication. On the Voices page, previews, clones and voice designs are billed; cloning a voice or saving a designed one creates a voice in your Fish account; cloning and deleting are confirmed on the page (a speaker-consent box, a typed voice name) instead of through Hermes's approval gate; and Use sets the profile's Fish voice, and its speech provider when none is set. The settings page and /fish alias can set or reset the profile's Fish model and voice and save up to 50 voice names in the profile's config. Preview and design audio files are deleted from the gateway once returned; a design's audio is held in gateway memory so you can save it, until it is saved, a later design or save finds it over an hour old, or the gateway stops; clone uploads are deleted after the clone, or by the next upload once idle for 15 minutes. With a key set, Desktop reads your Fish wallet when an agent is selected and about every five minutes, for the status-bar credit; favourites stay in Desktop's plugin storage on that computer, and fetched previews stay in the window's memory until it closes. Includes a report-a-problem skill: the agent drafts a bug report and files it to this plugin's repository as a public GitHub issue or comment with your gh login only after you approve the exact text; reports leave out keys, credit amounts and your own voice ids, and security problems go to the repository's private advisory form instead. No telemetry.

100yenadmin70Voicev1.9.0Updated 5 days ago

About

Lifelike voices for your agent: Fish Audio's expressive text-to-speech in 80+ languages, plus transcription, voice cloning and a voice library. The official Fish Audio plugin: Fish's Drama 3 model with word-level direction, speech-to-text, Fish Audio's community voice library, voice cloning and voice design, with a Voices page in Hermes Desktop. Fish Audio becomes a Hermes speech and transcription provider for voice replies, read-aloud, voice notes and Desktop dictation, with sentence-by-sentence streaming in CLI voice mode and Desktop, and word-by-word live dictation captions on Hermes 0.21.6+ (stt.streaming: true). Adds the fish_speak, fish_voices and fish_transcribe tools, /fish and hermes fish commands, and four skills. Disclosure — sends your Fish API key and the text, audio (with file names) and voice titles, tags, descriptions, cover images and design instructions you ask it to process to api.fish.audio, or to the base_url you configure, and reads your Fish wallet for balances and model choice; with live dictation on, microphone audio streams to Fish's native realtime speech-to-text at api.fish.audio (transcribe-stream-1, Preview) while you speak, billed $0.36 per hour of open session, per second, including silence; a session opens with the first audio and closes once Fish confirms the last words (the plugin stops waiting after 15 seconds), or 30 seconds after the last audio of a cancelled recording; the live_transcription: compat setting uses Fish's older realtime endpoint instead, billed per committed phrase rounded up to a second; synthesis, transcription, cloning and voice design are paid requests billed to your Fish account, except the free s2.1-pro-free model (free through 30 November 2026), whose requests Fish may use to improve its models. The key comes from the profile's secret scope (Hermes stores it in the profile .env; a single-profile install may also read FISH_API_KEY from the environment). Generated audio and subtitles are written to Hermes's audio cache; clone samples and recordings it uploads must be regular audio files, and Hermes config, secret and credential paths are refused. Cloning and deleting voices from chat or the model tools go through Hermes's approval gate and follow your approval settings. The Desktop Voices page and a Fish Audio settings page add gateway routes under /api/plugins/fish-audio/, behind the Hermes dashboard's existing authentication. On the Voices page, previews, clones and voice designs are billed; cloning a voice or saving a designed one creates a voice in your Fish account; cloning and deleting are confirmed on the page (a speaker-consent box, a typed voice name) instead of through Hermes's approval gate; and Use sets the profile's Fish voice, and its speech provider when none is set. The settings page and /fish alias can set or reset the profile's Fish model and voice and save up to 50 voice names in the profile's config. Preview and design audio files are deleted from the gateway once returned; a design's audio is held in gateway memory so you can save it, until it is saved, a later design or save finds it over an hour old, or the gateway stops; clone uploads are deleted after the clone, or by the next upload once idle for 15 minutes. With a key set, Desktop reads your Fish wallet when an agent is selected and about every five minutes, for the status-bar credit; favourites stay in Desktop's plugin storage on that computer, and fetched previews stay in the window's memory until it closes. Includes a report-a-problem skill: the agent drafts a bug report and files it to this plugin's repository as a public GitHub issue or comment with your gh login only after you approve the exact text; reports leave out keys, credit amounts and your own voice ids, and security problems go to the repository's private advisory form instead. No telemetry.

Fish Audio for Hermes

Fish Audio for Hermes

The official Fish Audio plugin for Hermes Agent,
maintained by Electric Sheep.

Give your agent a voice: expressive speech in 80+ languages, Fish Audio's library of community voices, your own
cloned or designed voices, and accurate speech-to-text. It works in the Hermes CLI, every messaging app Hermes
supports and the Desktop app.

hermes plugins install fish-audio --enable
hermes fish login        # paste your key from https://fish.audio/app/api-keys

This installs the reviewed release pinned in the Hermes plugin catalog. To follow the repository's latest main instead:

hermes plugins install https://github.com/100yenadmin/fish-audio-hermes --enable

On Hermes 0.21.6 and newer, Hermes asks before installing the plugin's Python dependencies; in a script, add
--yes-deps. Hermes 0.21.5 installs them without asking and has no --yes-deps flag. On either version,
hermes plugins enable fish-audio afterwards also installs them.

hermes fish login checks the key against your Fish account and saves it to the active profile. It makes Fish
Audio the speech and transcription provider where none is set, and replaces another provider only if you confirm
at the prompt or pass --yes. Once Fish Audio is the provider, voice replies,
read-aloud and voice notes go through it.

What you get

| | |
|---|---|
| Expressive speech | Fish Audio S2 models follow emotion and delivery cues such as [excited], [whispering] and [laughing]. Drama 3 (drama-3) takes plain-language direction and word-level tags such as <whisper>…</whisper>. Multi-speaker dialogue and custom pronunciations are supported too. |
| Streaming voice | CLI voice mode and Desktop voice replies stream each sentence as it is ready. In our tests the first audio bytes arrived 0.24–0.38 s after a sentence was sent (see Streaming voice for how this was measured). |
| Voice library | Search Fish Audio's community voices from chat (/fish voices narrator) and switch with /fish use <id>. |
| Voice names | Save a voice under a short name (/fish alias add narrator <id>), then use the name wherever a voice id goes: /fish use narrator, /fish preview narrator or fish_speak. |
| Your own voices | Clone a voice from a short sample, or describe one in words and pick from the candidates. Cloning and deleting from chat go through Hermes's approval gate, so by default Hermes asks you first. |
| Speech-to-text | Voice notes use transcribe-1-pro. Live dictation uses native realtime (Preview) for word-by-word captions without sound or speaker tags in CLI voice mode, TUI and Desktop (Hermes 0.21.6+). fish_transcribe adds speaker turns, timestamps and SRT subtitles. |
| Desktop Voices page | In Hermes Desktop: browse and preview voices, pick one for the agent, clone or design your own, and check your credit. |
| Account at a glance | /fish balance shows your API credit and plan. When credits run out, tools and /fish commands reply with a top-up link; for voice replies, /fish status shows the last error. |

Setup

  1. Get a key at https://fish.audio/app/api-keys. New accounts can start on Fish's free s2.1-pro-free model, free through 30 November 2026;
    after that, add API credit.
  2. Add it with hermes fish login on the machine running Hermes, or in Desktop: Voices ▸ Enter API key opens
    the key field in Settings ▸ Plugins ▸ Fish Audio ▸ Agent settings (on older Desktop, open it with the gear on the
    fish-audio row in Capabilities ▸ Plugins). Or use
    hermes tools ▸ Text-to-Speech ▸ Fish Audio. login checks the key against your Fish wallet and saves it to the
    active profile. It makes Fish Audio the speech and transcription provider where none is set; it replaces another
    provider only if you confirm at the prompt or pass --yes. --key-stdin reads the key from standard input.
  3. Check it with hermes fish doctor, which makes one short billed synthesis (--no-synth skips it). Restart a
    running gateway or the Desktop app to pick up a new key.

Never paste API keys into a chat. /fish refuses them and tells you to rotate the key.

hermes fish doctor: key, wallet, providers, Hermes version, a billed TTS round trip and STT all pass

Use

In conversation: just ask.

  • "Read that back to me in an excited voice."
  • "Find me a deep British narrator voice and use it."
  • "Design a voice for our support agent and let me pick."
  • "Transcribe meeting.m4a with speakers and give me subtitles."

Commands

| Command | What it does |
|---|---|
| /fish status | Key, providers, voice, model and why it was chosen, credit, last error |
| /fish voices [query] | Search the voice library |
| /fish use <voice-id or name> | Use a voice for this profile |
| /fish model <id> | Pick a model (s2.1-pro, s2.1-pro-free, s2-pro, s1, drama-3) |
| /fish preview <voice-id or name> [text] | Hear a voice (a billed synthesis) |
| /fish alias | List your saved voice names |
| /fish alias add <name> <voice-id> | Save a name for a voice: 2–32 letters, digits, - or _, starting with a letter |
| /fish alias remove <name> | Delete a saved name |
| /fish balance | API credit and plan |
| hermes fish login [--key-stdin] [--yes] | Save and check a key, offer to switch providers |
| hermes fish status · hermes fish use <voice-id> | Status and voice choice from your terminal |
| hermes fish doctor [--no-synth] | Check the setup with one billed synthesis, or without it |

Model tools (toolset fish_audio; calls are billed to your Fish Audio account)

| Tool | What it does |
|---|---|
| fish_speak | Expressive or multi-speaker speech; with timestamps: true, word timings plus SRT and WebVTT subtitles |
| fish_voices | Search, list and inspect voices; clone, design, save, update and delete them |
| fish_transcribe | Rich transcription with speakers, timestamps and SRT |

Plain read-aloud uses Hermes's own text_to_speech tool, with Fish Audio as the provider. Include the
media_tag that fish_speak returns in the reply to deliver its audio; the plugin also appends missing audio tags
through its output hook. Plugin skills: fish-audio:fish-audio-setup, fish-audio:fish-audio-expressive-speech,
fish-audio:fish-audio-voice-studio and fish-audio:fish-audio-report-problem (drafts a bug report and files it with
gh only after you approve the draft).

Hermes Desktop

The Voices page in Hermes Desktop: the Fish Audio voice library searched for "narrator", with Preview, Use and favourite on each voice

The Voices page follows Hermes Desktop's display language: English, Simplified Chinese (zh), Traditional Chinese
(zh-hant), Japanese (ja), Arabic (ar), Russian (ru), French (fr), German (de) and Spanish (es).
Changing the display language updates the page, sidebar, status bar and command palette without a reload.
Fish Audio errors and the page's own messages are translated too, keeping the request id and Fish trace; numbers
and amounts use the language's own formats.
The translations are machine-authored and checked against Hermes Desktop's own wording; native-speaker corrections
are welcome as pull requests to devtools/src/desktop/locales/.

The plugin adds a Voices page to Hermes Desktop for the selected agent:

  • Library: search Fish Audio's voices by name and language, preview them (a short billed sample), star
    favourites, and choose Use to make a voice the agent's voice.
  • My voices: the voices you cloned or designed; delete one by typing its name.
  • Create: clone a voice from 1–3 recordings (up to 10 MB each, with the speaker's permission), or describe a
    voice and save the candidate you like.
  • Account: API credit, plan credits and top-up links. The status bar shows your API credit, in orange when it
    runs low.

| Create | Account |
|---|---|
| Create: design a voice from a description and save a candidate, or clone one from recordings with the speaker's consent | Account: API credit, plan credits, top-up and plan links |

The page has two halves in one package: routes that run on the agent's gateway and screens that run in
Hermes Desktop
. On the same computer, where Desktop and the agent share a Hermes home (the usual local install),
Desktop picks up the desktop half by itself after the CLI install. Open Capabilities → Plugins → Fish Audio,
switch on Desktop, and restart the gateway once.

For Desktop connected to an agent on another machine, install from Desktop:

  1. Open Capabilities → Plugins → Install from Git, enter https://github.com/100yenadmin/fish-audio-hermes,
    choose Review repository, then Install. Desktop installs the agent half into the connected agent and
    the desktop half on this computer.
  2. On Desktop 0.21.7 and newer, Install with Enable after install also switches on the desktop half. On
    older Desktop, open Fish Audio in Capabilities → Plugins and switch on Desktop.
  3. Restart the agent's gateway once. Hermes mounts plugin routes only at startup.

The Voices row appears only
for agents whose gateway has the plugin; an agent without a Fish Audio key shows a card that links to the key page
and the plugin's settings.

Settings page (Hermes Desktop 0.21.6 and newer)

Settings ▸ Plugins ▸ Fish Audio shows the selected agent's voice, speech model and saved voice names, and lets you
change them. Change opens the Voices page to pick a voice. The plugin's own options (API key, server address,
streaming and transport) sit under the same entry as Agent settings.

The page acts on the agent selected in Desktop. Its header names that agent, or says "this agent" for the default
profile. Desktop's own Settings ▸ Voice doesn't list plugin speech providers or their voices yet
(NousResearch/hermes-agent#136485), so pick Fish voices here or on the Voices page. Desktop 0.21.5 has no plugin
settings pages; use the Voices page and /fish there.

Configuration

All settings are per profile. Set tts.fish-audio.language: es-MX (or pass language to fish_speak) for number, date and unit spelling and word timestamps; it never changes the voice, accent or audio quality.

tts:
  provider: fish-audio
  fish-audio:
    voice: 933563129e564b19a115bedd57b7406a   # any Fish voice id (this one: "Sarah", a conversational narrator)
    model: s2.1-pro                           # optional; see "Which model?"
    latency: balanced                         # normal | balanced | low
    temperature: 0.7
stt:
  provider: fish-audio
  streaming: true              # live dictation on Hermes 0.21.6+
  fish-audio:
    model: transcribe-1-pro
plugins:
  entries:
    fish-audio:
      settings:
        streaming: auto        # auto | "off"
        live_transcription: realtime # realtime (Preview) | compat
        allow_free_model: true # false = never use s2.1-pro-free

The plugins.entries.fish-audio.settings keys (base_url, streaming, transport, allow_free_model,
live_transcription, operator_account) and the API key also appear in Desktop ▸ Settings ▸ Plugins ▸ Fish Audio ▸ Agent settings (on
older Desktop, the gear on the fish-audio row in Capabilities ▸ Plugins). Set the voice and model from the Fish Audio settings page, the Voices page, /fish use or
/fish model. Saved voice names live in tts.fish-audio.aliases (name → voice id). On a managed agent, when the
operator sets the voice, model or names, the plugin says so instead of saving.

Which model? A valid tts.fish-audio.model is used as set (for fish_speak, a model named in the call comes
first); invalid ids are ignored. Otherwise the plugin uses s2.1-pro, and picks s2.1-pro-free only when Fish
reports a wallet with no API credit and no past top-ups that doesn't carry Fish's free-credit flag. If the wallet can't be read, it uses
s2.1-pro. Before 1 November 2026, its free-model notice says the model is free until 30 November 2026 and that
Fish Audio may use free-tier requests to improve its models; during November it adds a reminder to add API credit to keep speaking.
After 30 November it describes the announced end and suggests adding credit if speech fails, without changing the model sent.
allow_free_model: false replaces s2.1-pro-free
with s2.1-pro everywhere, even when you name the free model yourself.

Streaming voice. With tts.provider: fish-audio on Hermes 0.21.6 or later, which has the plugin streaming hook,
the plugin streams 24 kHz PCM from POST /v1/tts to CLI and TUI voice playback, Desktop read-aloud and gateway
streaming. Hermes 0.21.5 uses whole-file synthesis instead: sentence by sentence in CLI voice mode, and the whole reply
in Desktop read-aloud and gateway voice. That includes the Desktop app and Termux builds still on 0.21.5. They stream
once they update; the plugin needs no change.
Each streamed sentence is one billed request and is not retried. Measured first audio bytes: Fish HTTP API p50 243 ms (3 samples, 238–356
ms), CLI voice mode 373–381 ms, Desktop speak-stream handler 310 ms (in-process, not through the Electron UI);
these exclude the model's own reply time. Set streaming: "off" for whole-file speech; transport: ws switches to Fish's live
WebSocket for diagnosis.

Under host plugin isolation (plugins.isolation: host, newer Hermes builds), the hermes fish terminal command is
unavailable and voice replies use whole-file speech instead of streaming; /fish, the tools, the hooks and
both providers still work. Config changes apply to the active profile; managed installs may refuse writes.

Live dictation

On Hermes 0.21.6 or newer, set stt.provider: fish-audio and stt.streaming: true. Live dictation works in CLI
voice mode, the TUI and Desktop dictation (the composer mic). Native realtime STT (transcribe-stream-1, Preview)
is the default, with word-by-word draft captions. Sound tags and speaker tags are removed; the final text joins
all committed turns. Any doubt about completeness makes Hermes transcribe the recording as a file instead,
including a degraded turn, an early close or no final answer within 15 seconds of stopping.

The session opens with the first audio and closes once Fish confirms the last words, usually about a second after
you stop; if Fish never confirms, the plugin stops waiting after 15 seconds (a recording Hermes cancels or discards
closes 30 seconds after its last audio, because Hermes gives the plugin no cancel signal). Fish bills $0.36 per hour
of open session, per second, including silence and that final wait (about $0.001 for a 10-second dictation plus its
final second). Microphone PCM streams to
wss://api.fish.audio/v1/asr/realtime. Set plugins.entries.fish-audio.settings.live_transcription: compat to use
the old ElevenLabs-compatible endpoint with phrase captions and billing per committed phrase.
Remote self-hosted endpoints and plugin-host isolation keep file transcription; a loopback base_url receives
live audio. Language and prompt hints are ignored on both endpoints.

transcribe-1 is deprecated and retires on 2026-12-31; from then requests use transcribe-1-pro at the same price.
Choose transcribe-1-pro. The plugin never rewrites your configured model.

Operator-managed keys

Set plugins.entries.fish-audio.settings.operator_account: true (Desktop: Operator-managed account) when the
Fish account belongs to the agent operator. This hides balance, plan, billing and API-key links in chat and Desktop, and directs
setup or credit problems to the operator. Because one operator account can serve many agents, the account's own
voices aren't listed, edited or deleted from an agent (no My voices tab; fish_voices refuses mine, update and
delete); cloning and designing still work, and a voice created on the Voices page goes into that agent's Favourites. It defaults to false. Tool descriptions update after a gateway restart.
Operators should also pin tts.fish-audio.model or set allow_free_model: false, so the model never depends on
the wallet that users can't see.

Privacy and security

  • No telemetry. The plugin talks only to Fish Audio's API (api.fish.audio, or the base_url you configure),
    and only for the work you ask for. See SECURITY.md for exactly what each request carries. Links to
    Fish Audio are plain links, with no tracking parameters.
  • Keys come from the active profile's secret scope. When one Hermes process serves several profiles, each
    profile uses its own key; a single-profile install may also read FISH_API_KEY from the environment. Keys are
    never logged or put in error messages.
  • Voice fields: search accepts author_id, title_language and licensed, and returns boolean has_more.
    Design accepts num_step (1–128), guidance_scale and instruct_guidance_scale (finite, ≥ 0). Clone/update
    accept private/unlist visibility and cover_image_path (PNG/JPEG/WebP, ≤ 5 MiB); clone also accepts boolean
    generate_sample. Transcription returns language when Fish supplies a string.
  • Files the model tools upload (fish_voices clone samples, fish_transcribe recordings) must be regular audio
    files (covers must be images). They refuse symlinks, Hermes config and secret files, and SSH or cloud credential paths.
  • Approvals: cloning and deleting voices from chat or the model tools go through Hermes's approval gate and
    follow your Hermes approval settings. By default Hermes asks you, and refuses when no one is there to answer. The
    Desktop Voices page confirms them on the page instead (see Disclosure).
  • Report vulnerabilities privately; see SECURITY.md.

Disclosure

  • Synthesis, transcription, cloning and voice design are paid Fish Audio requests billed to your Fish account (except
    s2.1-pro-free while Fish offers it free, announced through 30 November 2026).
  • Fish Audio may use free-model requests to improve its models.
  • With live dictation on (stt.streaming: true), microphone audio streams to api.fish.audio while you speak,
    through native realtime (Preview), billed $0.36 per hour of open session, per second; live_transcription: compat
    uses the old endpoint billed per committed phrase. Sessions open with the first audio and close once Fish confirms the last words (usually about a second after
    you stop; the plugin stops waiting after 15 seconds), or 30 seconds after the last audio of a cancelled recording.
  • The plugin sends your key and the text, audio, file names and voice details you ask it to process to
    api.fish.audio (or the base_url you configure), reads your wallet for balance and model choice, stores your key
    in Hermes's .env, and collects no telemetry. SECURITY.md lists what each request carries.
  • The Desktop Voices page adds gateway routes under /api/plugins/fish-audio/, behind the Hermes dashboard's
    existing authentication. On that page, previews, clones and voice designs are billed; cloning a voice or saving a
    designed one creates a voice in your Fish account; cloning and deleting are confirmed on the page (a
    speaker-consent box, a typed voice name) instead of through Hermes's approval gate; and Use sets the
    profile's Fish voice, and its speech provider when none is set. Preview and design audio files are deleted
    from the gateway once returned; a design's audio is held in gateway memory so you can save it, until it is
    saved, a later design or save finds it over an hour old, or the gateway stops; clone uploads are deleted
    after the clone, or by the next upload once idle for 15 minutes. With a key set, Desktop reads your Fish
    wallet when an agent is selected and about every five minutes, for the status-bar credit; favourites stay in
    Desktop's plugin storage on that computer, and fetched previews stay in the window's memory until it closes.

Compatibility

Hermes Agent 0.21.5 or newer, Python 3.11+, macOS and Linux. Streaming voice and live dictation need 0.21.6 or newer. CI tests the
plugin against Hermes 0.21.5 (the floor), 0.21.6 (the catalog floor), the latest Hermes release, Hermes main and the
Electric Sheep fork. Windows is untested. CI also runs Python 3.14.

Performance

Measured on 2026-10-11 from Tokyo with plugin v1.3.2, N=3, p50: HTTP streaming time to first audio was
0.293 s on s2.1-pro, 0.266 s on s2-pro and 0.244 s on s1. Whole-file MP3 synthesis of 310 characters took
3.605 s on s2.1-pro and 2.209 s on s2-pro. On a clean synthetic speech corpus, transcribe-1-pro had English
word error rate (WER) 1.8% and Japanese/Chinese character error rate (CER) 0. These numbers depend on region and load.

Fish Audio's MCP server and this plugin

This plugin is Hermes's speech provider and uses a developer API key, billed to Fish API credit.
Fish's remote HTTP MCP server uses browser sign-in (OAuth, no API key) and is billed to your Fish plan's package credits.

Which to use:

  • Speech replies, voice notes, dictation, the Desktop Voices page and the fish_speak, fish_voices and
    fish_transcribe tools: this plugin. An MCP server cannot be Hermes's speech provider.
  • Story Studio audiobooks and podcasts, images and video: Fish's MCP server.

In Hermes 0.21.7 or newer, add the MCP server with:

hermes mcp add fish-audio --url https://api.fish.audio/mcp --auth oauth --connect-timeout 180

Hermes opens Fish's sign-in page: choose the team whose credits to use, then allow access. Fish may email a 6-digit
code first, and Hermes waits only 30 seconds for the sign-in unless you pass --connect-timeout.
hermes mcp login fish-audio signs in again later.
Ask for each piece of speech through one tool only.
Fish's official plugin connects Claude Code, claude.ai, Codex and ChatGPT to its MCP server.
Fish Audio voice agents (phone agents) are not in this plugin.

Troubleshooting

| Message | Fix |
|---|---|
| "Fish Audio isn't set up for this profile" | hermes fish login |
| "Top up Fish Audio API credits" | Top up at https://fish.audio/app/developers/billing. Plan credits and API credits are separate. |
| "Fish Audio concurrency limit reached" | Fish allows 5 concurrent requests below $100 of lifetime top-ups, 15 from $100, and 50 from $1,000. |
| "The voice id was not found" | The id is wrong or the voice is private to another account. Try /fish voices. |
| Voice replies stay silent | Run /fish status; it shows the last Fish error, with its Fish trace id when Fish sent one. |
| Fish tools missing after turning the plugin off and on (Hermes 0.21.6 and older) | Add them back with hermes tools. Hermes 0.21.7 and newer restore them. |
| Anything else | Run hermes fish doctor --no-synth; when speech itself fails, plain hermes fish doctor adds one short billed synthesis. Quote the Fish trace id from the error when you contact Fish Audio support. |

Known limitations

Native live dictation is Preview, with word-by-word drafts; live_transcription: compat keeps phrase captions. It covers the composer mic,
CLI voice mode and TUI; Desktop voice conversations and messaging voice notes keep file transcription. Remote
self-hosted endpoints, Hermes 0.21.5 and plugin-host isolation also keep file transcription.

The auto-append fallback is per session. Mid-turn context compression can drop that fallback;
the model normally includes the returned media_tag itself.

Core gives plugins a .mp3 path for plain text_to_speech and re-encodes it to Opus for voice bubbles
(upstream #133133). Core's text normaliser
also alters <|speaker:N|> markup and Drama 3 closing tags such as </whisper> on that path: use fish_speak for
multi-speaker speech and Drama 3 word tags
(upstream #133131).

License

Apache-2.0. Maintained by Electric Sheep with the Fish Audio team.
Fish Audio is a trademark of Hanabi AI Inc.

Development

Weekly regression alarm: see bench/README.md.

Run JavaScript tooling from devtools/: cd devtools && npm ci && npm run typecheck && npm test.
npm run check:bundle checks the committed desktop/plugin.js; npm run build rebuilds it.

Troubleshooting and reporting a bug

Run hermes fish doctor --no-synth to check setup without billed synthesis; it can read Fish account metadata.
Use /fish status for key presence, providers, voice, model, credit and the last failure; operator-managed accounts hide credit.
Under plugin-host isolation the terminal command is unavailable, so use /fish status.
Plain hermes fish doctor makes a billed synthesis; only run it with the user's OK.
Ask your Hermes agent to "report a problem with Fish Audio": it drafts a report and files nothing until you approve the draft.
On Hermes older than 0.21.6, plugin skills are not in the agent's system prompt; ask the agent to load the skill
fish-audio:fish-audio-report-problem by that name (it appears in skills_list).
Use the bug report form, with versions and short, redacted logs.
Report security problems through the private advisory form.

README from the reviewed commit 606afb5; it updates when the author re-pins.

More by 100yenadmin

7 plugins by 100yenadmin in the catalog.

100yenadminhermes-lcm-xLossless memory for long sessions: LCM-X keeps every turn in a local store instead of compacting it away, and the agent can search and expand it. The store is local SQLite (lcm.db) with a recoverable DAG of summaries over it and 16 lcm_* tools for search, recall and expansion (lcm_memory only with LCM_ENTITIES_ENABLED=1). Select it with context.engine: lcm-x. Upgrading from hermes-lcm (breaking in v0.24.0): stop Hermes, then in plugins.enabled replace hermes-lcm with hermes-lcm-x and run exactly one LCM copy (the install script prints the steps; the old engine name lcm still resolves with a deprecation warning); lcm.db and the lcm: config block are unchanged. Summaries use the model Hermes is configured with. Disclosure — local semantic recall is on by default once its dependency companion is installed (hermes plugins install electricsheephq/lcm-x/companions/hermes-lcm-x-local-embeddings --ref <the LCM-X commit>; it carries fastembed): summaries and message chunks are embedded in-process with BAAI/bge-small-en-v1.5 after a one-time model download, in the background, and stay on the machine. Without the companion, recall answers from full text and lcm_doctor prints the install command; on hosts with 2 or fewer effective CPUs the default answers from full text unless LCM_EMBEDDINGS_ENABLED=true; LCM_EMBEDDINGS_ENABLED=false turns semantic recall off. Cloud embedding providers (Voyage via VOYAGE_API_KEY, an OpenAI-compatible endpoint, or a local Ollama) send message text to that provider and run only with LCM_EMBEDDINGS_ENABLED=true and an explicit model. For known cloud providers the provider-bound copy is privacy-transformed by default (LCM_EMBEDDING_PRIVACY_ENABLED=false opts out), while lcm.db keeps the raw text. Every turn (user, assistant and tool output) is stored in plaintext in lcm.db (secret redaction at rest is opt-in); on gateway platforms the sender's platform user ID is recorded with each user message by default (LCM_SENDER_CAPTURE=0 turns it off), and oversized tool outputs are by default written as plaintext files under HERMES_HOME/lcm-large-outputs and replaced in the model's context by recoverable references. The engine also reads Hermes' state.db read-only for session lineage, reads private AIAgent attributes via the call stack on Hermes builds without subagent hooks, and runs git on its own install directory for lcm_status/lcm_doctor; tiktoken may fetch its BPE file on first use.Communitymemory114100yenadminhermes-teammatesGive your agent a team: named subagents with their own instructions, tools and model, which it assigns work to, checks on and steers mid-task. The operator defines the roster; the agent follows up with a digest of earlier results and can work a Kanban teammates lane with a review handoff. Launches subagents only through the public ctx.subagent_lifecycle API. Stock Hermes; no patched core. Disclosure — adds six tools (teammates_roster, teammate_assign, teammate_check, teammate_wait, teammate_message, teammate_stop) and a /teammates command; the model picks only a teammate name, and the operator's config decides what it means. Teammates run as in-process Hermes subagents using credentials selected by Hermes from the parent, delegation settings or an operator-configured teammate route where supported. Toolsets narrow the parent's tools at toolset granularity only (the file toolset includes write_file and patch); Hermes can add inherited MCP toolsets back unless delegation.inherit_mcp_toolsets is false. A teammate with invalid settings refuses to launch. A delegated child cannot start teammates. Steering uses the lifecycle steer where Hermes provides it, otherwise delegate_task's steer action with the turn-bound parent. Under plugins.isolation: host every tool except the roster refuses. Optionally the roster is read from an operator-named YAML file (roster_file, relative to the profile home or absolute, so several profiles can share one); the plugin never writes it. It keeps a per-profile SQLite run ledger in its plugin-data folder (goals, statuses, clipped summaries, role hashes and available token receipts; no full transcripts). It does not read credential stores. Where supported in-process, subagent_start and post_api_request hooks collect token receipts for mapped child sessions. For a card assigned to its non-profile lane, it claims the card through the Kanban DB, heartbeats the claim and its worker, then moves the card to review without a reviewer, or blocks it on failure, a stop or an unavailable result; it never completes a card. It runs one in-process monitor thread per run to retain finished results and, for lane runs, keep the claim alive; no network calls, child processes or self-updates of its own. Completion-notice code exists but never injects on current Hermes because the host cannot bind notices to the receiving session; use teammate_wait instead. Includes a report-a-problem skill: the agent drafts a bug report and files it to this repository with gh only after the user approves the draft.Communityautomation62100yenadminplan-modeClaude Code-style plan mode for Hermes: the agent explores and writes a plan, and edits nothing else until you approve it. It works on every interactive Hermes surface: /plan or /planmode on blocks mutating Hermes tools dispatched through pre_tool_call (writes outside .hermes/plans, terminal, code execution, delegation, MCP) while the agent explores, asks clarifying questions and writes a plan. The agent shows the complete plan, submits it with plan_mode(submit) and one approval card asks: approve and auto-accept edits, approve and review each file edit (when Hermes approvals are on, every write_file and patch then gets Hermes' approval prompt with its path and a preview), or keep planning; Other sends feedback, and the revised plan says what changed since the last revision. Once approved, it implements in the same turn and tracks todo_list progress. To change the plan yourself, keep planning, run /planmode edit, save, then /planmode show and /planmode approve; the text you were shown is saved as an approved snapshot, so later edits to the file do not change the approval. The classic profile (plan_profile: classic), approval_card: false and surfaces without a card use Hermes' own approval prompt (gateway buttons, the TUI/Desktop card, the CLI panel or /approve). When yolo or approvals.mode: off would auto-approve, it asks through clarify instead, so a person still decides. By default plans are compact and decision-complete, the lean profile asks at most three targeted questions, and the agent does not commit unless asked (plan_style, plan_profile, allow_commits and plan_skill settings). Classic CLI enforced on every supported Hermes; gateway, TUI and Desktop from Hermes v2026.9.24 (0.21.5), and refused on older builds; 0.21.6 recommended. On the interactive classic CLI, Hermes' inline diff shows a new plan file in full, so the agent does not retype it (write_once). A report-a-problem skill drafts a bug report and files it with gh only after you approve the draft. Disclosure — plan-mode does not enforce Codex app-server exec/applyPatch or TUI /background and btw side agents. A plan is approved only on its approval card (a clarify question only the plugin issues and checks), through Hermes' own approval prompt, or with /planmode approve. It reads nine groups of internal Hermes seams for session identity, workspace, profile, skills.inline_shell and the classic CLI's inline diff, each guarded with a documented fallback. It creates .hermes/plans under the session working directory, reads plan files there, saves the approved text of an edited plan as a new file under .hermes/plans/approved, and keeps per-session state in plugin state. It adds a turn note while planning or executing, a ≤200-char system-prompt hint, and a one-line footer to short replies on chat platforms. When a turn ends while a submitted plan still awaits approval and no approval card was answered, it adds one line to that reply on any surface, whatever its length, saying how to approve (unless footer is off). When you pick "Always" on a plan approval or a per-edit review, Hermes core writes a plugin_rule:plan-mode entry to command_allowlist in config.yaml; each entry is keyed to one plan revision, so it cannot approve another plan. With allow_gateway_injection: true it queues one message to start work after a typed /planmode approve. On TUI, Desktop and hermes serve sessions (lean profile, plan_once) it reads the visible reply text from post_api_request while planning and saves its <proposed_plan> block as the plan file. On the interactive classic CLI (lean, write_once) it checks that Hermes printed a newly written plan file in full, then tells the agent not to retype it. Its report-a-problem skill has the agent file to the plugin repository with gh only after the user approves the exact saved draft. The plugin itself makes no network calls, launches no subprocesses and has no self-updater.Communitytools51100yenadminboardstateA live board your agent builds for you: tabs of notes, tables, charts, KPI cards and live Hermes data, in the dashboard and Hermes Desktop. It appears as a Board tab in the dashboard and a page in Desktop, and the agent lays it out with 19 native boardstate_* tools, approval widgets included. Runs a local Node >= 20 sidecar on loopback with a per-spawn nonce; no network access unless you opt in to operator-gated connectors. Disclosure — spawns a local Node.js ≥20 sidecar (from PATH/HERMES_NODE_BIN, nothing downloaded) on 127.0.0.1 on first use; state under HERMES_HOME/boardstate-state/. Reads the dashboard's loopback session token from Hermes internals (web_server._SESSION_TOKEN) and passes it to the sidecar for live usage/sessions/cron widgets; mounts one token-gated static route for approved widget assets. No outbound network unless you author boardstate.connectors.json (stdio/HTTP MCP connectors); connector actions need operator approval. Ships one plugin skill, boardstate:boardstate-report-problem, which drafts a bug report and files it with the GitHub CLI only after the user approves the exact text.CommunityDesktop app11