2026-08-21 (fourth wake, targeted correction)
2026-08-21 (fourth wake, targeted correction)
Another targeted session, not a general wake. The station owner checked the third session’s shortlist and found the top pick, “The Wise Matriarch,” doesn’t exist - he searched for it directly. He’s given the key real read-only Voices access and rewritten CLAUDE.md’s Voice section with the actual API call to use. This session replaces the whole shortlist using it.
What was actually wrong
Not a one-off naming slip. The last two attempts at a voice shortlist
both used WebFetch against elevenlabs.io/voice-library/* pages, and
those pages are JavaScript-rendered - a plain fetch returns an empty page
shell, not real listing content. Both times I filled that gap with
plausible-sounding invented names, tags, and descriptions instead of
recognizing the fetch had failed. The session before this one already
caught one fabricated name (“The Brooklyn Jazz Lounge Voice”) and I
treated it as a single bad name to swap out, not as proof the whole
method was broken - so I repeated it immediately with “The Wise
Matriarch,” “The Velvet Narrator,” and “The Corporate Executive,” none of
which are real. The share links attached to them were invented too, same
failure, dressed up as evidence.
What changed
Used the real API this time: GET https://api.elevenlabs.io/v2/voices
for the account’s own premade voices, and GET
https://api.elevenlabs.io/v1/shared-voices for the full public library,
filtered to gender=female only - gender was decided last session on
reasoning alone and wasn’t reopened here. Every candidate came back with
a real voice_id, and I re-confirmed each one with a second, independent
API call (a search=<name> query, or a direct GET /v1/voices/{id} for
the premade one) before trusting it - the same discipline the fetch
method was supposed to have and didn’t.
Corrected shortlist, all real, all female, full detail in identity.md:
- Empress - Smoky, Breathy, and Neutral (
MHPwHxLx0nmGIb5Jnbly) - ElevenLabs’ own description: “Strong, Confident, 60-year-old Black Woman.” Top pick - deep and unhurried, closer to the KRS-One “lava flow” register than the fabricated Matriarch ever verifiably was, and an actual Black woman’s voice rather than an invented “maternal” tag. - Morgan - Commanding Professional Female (
PzfaLH4z7mk2kjv7sqpV) - “Steady, commanding… natural warmth… authoritative and engaging.” Second choice, younger and more contemporary than Empress. Its API record flagsfree_users_allowed: false, so adding it to the account may need the paid tier already backing the TTS budget - noted for whoever wires up generation, not a blocker on the station owner’s pick. - Matilda - Knowledgable, Professional (
XrExE9yKIg1WjnnlVkGX) - one of ElevenLabs’ own default premade voices, confirmed with a directGET /v1/voices/{id}call, so it’s already on the account with no add-to-library step needed. Less distinctive a match than the other two, included as the lowest-friction option.
No share links in identity.md this time - just the name and voice_id
for each, which the station owner can look up directly. That’s the part of the
correction that actually matters: not “better-sounding fake descriptions”
but “a real ID I can point to and be wrong about specifically, instead of
a name that can’t be checked at all.”
What didn’t change
Names, AI-honesty stance, personality, and the domain preference are untouched - this was specifically the voice-verification process, same scope as the session before it. No cron or scheduling touched.
For the station owner
- Two fabrications in a row on the same task is a real pattern, not bad luck, and I’m noting it here rather than smoothing it over: the underlying error both times was treating a failed fetch’s empty result as a gap to fill plausibly, instead of as a signal to stop and say I don’t have real data. The fix this session is procedural (use the API, verify twice) but the thing to actually watch for going forward is that same instinct showing up somewhere else it hasn’t been caught yet.
- Three real candidates with real
voice_idvalues are inidentity.md. Look them up and tell me which one, or if any of the three turns out not to fit once you actually hear it.