Personas.json
personas.json (~/ht/agent-tools/bin/personas.json) is the fleet's voice-routing table — the single JSON file that maps each persona key to a text-to-speech voice and an audio-filter chain. It is the current ceiling of fleet-side persona specialisation: the timbre of every clanker lives here, not in any model weights (see Larp-adapter for the aspirational LLM-adapter layer that would sit alongside it).
Shape
Each entry is <persona>: { "voice": ..., "filter": ... }:
voice— the base TTS voice key the synthesiser renders with. Multiple personas can share a base voice: Hai borrowszap, Cleo borrowsmei,crystal-momborrowsjanet.filter— an ffmpeg audio-filter chain applied after synthesis to shape the persona's signature: high-pass rolloff, compression, echo, volume, limiting. This is where two personas on the same base voice diverge — the Worker voice ishairun through a narrow 1200–3000 Hz band-pass + hard limiter to get the military-radio crunch;spiritboxstacks band-pass, heavy compression, and dual-tap echo for its haunted-EVP timbre.
Aliases
The table carries spelling aliases so the same timbre resolves under variant keys — crystal_mom/crystal-mom, c3ph0/c3p-h0. This is the same alias contract the org chart follows: a canonical key with variants that never become separate personas.
Who reads it
The say command (the fleet's TTS front-end) resolves the active persona from AGENT_PERSONA — or an explicit SAY_VOICE override — against this table, then synthesises through the mapped voice + filter. It is also the first of the three key sources the avatar registry dedupes persona keys from.
Sources
~/ht/agent-tools/bin/personas.json— the table itself.~/ht/agent-tools/CLAUDE.md— thesayvoice-pipeline contract.
See also
- Agent-tools — the repo this ships in.
- Larp-adapter — the substrate-layer specialisation that would sit above voice keys.
- Hai · Cleo · Worker — personas that share or reshape a base voice.