phoneticize — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited phoneticize (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A workflow for identifying pronunciation hazards in a TTS script, agreeing phonetic renderings with the user via audio previews, and emitting a phoneticized script ready for narration.
| Reference | When to read | Path |
|---|---|---|
| Detection heuristics | Before Phase 1 — patterns that find candidates and how to combine them | references/detection-heuristics.md |
| Respelling conventions | Before Phase 2 — how to write phonetic respellings that Eleven v3 actually obeys | references/respelling-conventions.md |
| Eleven v3 format notes | Before Phase 3 and Phase 5 — what the engine accepts and silently ignores | references/eleven-v3-notes.md |
surrounding context. A respelling that sounds right in isolation collapses inside a sentence. Render fragments throughout.
drops <phoneme> tags (see references/eleven-v3-notes.md). Inline respelling — Siobhán → shi-VAWN directly in the prose — is what actually changes the model's output. IPA goes in the table for archival precision; respelling goes in the script.
confidence is worse than an explicit ? the user resolves. When the pronunciation isn't obvious, ask.
(P01, P02, …) on first pass and keeps it for the lifetime of the table. The user references rows by ID; regenerate only the rows that changed.
accepted row —it wastes Higgsfield calls and the user will assume something broke when the audio differs subtly between takes.
Combine the regex helper with semantic reading. Neither alone catches everything: regex misses ordinary-looking words with non-obvious pronunciation (Worcester, Featherstonehaugh), and an LLM scan alone will miss tokens deep in long scripts.
python scripts/extract_candidates.py path/to/script.txt --out candidates.jsonThe helper applies the patterns documented in references/detection-heuristics.md and emits a JSON list of deduplicated candidates with category guesses, positions, and context fragments.
Read the script. For every candidate the helper found:
occasionally gets it wrong (a CamelCase brand name miscategorised as ART, etc.)
positions that aren't actually proper nouns, common acronyms the user clearly already pronounces a particular way
For everything the helper missed:
Featherstonehaugh)
YAML, GIF)
Atari and 2600separately; merge them by hand into a single candidate Atari 2600
For each entry, the table needs:
Siobhán's → Siobhán)NAM / CEL / BRA / MOD / ART / DOC / OTHsnapped to clause boundaries where possible
Build the pronunciation table in this exact column order:
| Col | Meaning |
|---|---|
ID | Stable identifier — P01, P02, … |
Token | The token as it appears in the script |
Cat | NAM / CEL / BRA / MOD / ART / DOC / OTH |
Original fragment | 5–6 word snippet, original spelling |
Respelling | Editable phonetic respelling — see conventions |
IPA | Archive form (optional; fill where confident) |
Phoneticized fragment | Same fragment with the respelling substituted in situ |
Sample | Path to rendered audio (filled in Phase 3) |
Status | pending / accepted / revised |
Respelling rules (full detail in references/respelling-conventions.md):
shi-VAWN, never shivawnshi-VAWN (stress on second), LLAN-fair(stress on first)
oo for /uː/, ayfor /eɪ/, aw for /ɔː/. The model reads letters, not symbols.
kat not cat if the model isreading the c soft; gohl not goal if the g is going wrong
S-Q-L (letters)or SEE-kwul (word) — both are valid; pick one and tell the user.
Atari 2600 →Atari twenty-six hundred; ADR-0012 → A-D-R twelve. Lose leading zeros when speaking.
Mark uncertain rows ? in the Respelling column. Don't fabricate.
If the Higgsfield TTS tool has not already been located, search:
tool_search keywords=["tts", "speech", "higgsfield", "eleven"]If nothing matches, surface the gap to the user via suggest_connectors and pause until the connection is in place.
For each row with status pending:
matters for prosody; syllable boundaries must land in surrounding speech to be correctly evaluated)
eleven_v3 (orwhatever string the tool exposes for the v3 model)
samples/<ID>_<lemma_slug>.mp3 —e.g. samples/P01_siobhan.mp3
Sample column with the relative pathRender in sequence, not in parallel. Higgsfield rate limits, and sequential rendering gives the user deterministic ordering for review.
Present the table with samples linked. Communicate the expected response shape to the user (acceptance, revision, rejection, addition — see Phase 4). Then wait. Do not proceed to Phase 5 without explicit sign-off.
The user's response will mix four kinds of update:
| Form | Example | Action |
|---|---|---|
| Acceptance | "P01, P03, P04 are good" | Mark those rows accepted. |
| Revision | "P02 should be 'dee-eff-TWELVE' not 'DEE-eff-twelve'" | Update Respelling and Phoneticized fragment, mark revised, queue for re-render. |
| Rejection | "drop P05, that pronunciation's fine as-is" | Remove the row entirely; the substitution won't happen in Phase 5. |
| Addition | "you missed 'Llanelli' in para 3" | Add a new row with the next free ID, mark pending, render in the next batch. |
Re-render only revised and newly-added pending rows. Never re-render accepted rows.
Loop until every remaining row is accepted. When the user signs off, proceed to Phase 5.
script.respelled.txtThe original script with respellings substituted inline. This is the deliverable that goes into Eleven v3.
Substitution rules:
apostrophe in possessive output as shown in skills/phoneticize/references/respelling-conventions.md lines 133-136: Siobhán's → shi-VAWN's; df12's → dee-eff-TWELVE's
Siobhán arrived →Shi-VAWN arrived (capitalize the first letter, keep the stress capitals where they were)
time
script.ssml.xmlFor engines that honour <phoneme> tags — Azure TTS, AWS Polly, Google Cloud TTS, older Eleven models. Wrap each substituted token in SSML using the IPA column:
I met <phoneme alphabet="ipa" ph="ʃɪˈvɔːn">Siobhán</phoneme> at the bar.Skip rows where IPA is empty — emit the bare token, not a malformed tag. The SSML version is best-effort archival; the primary respelling is what the user actually narrates from.
pronunciation_table.mdThe final agreed table, saved alongside the scripts. When the user re-narrates the same content months later, the table lets them reproduce the voicing without re-running Phase 3. Suggest exporting the table as an ElevenLabs PLS alias dictionary too — see references/eleven-v3-notes.md for format.
Final deliverables, presented via present_files:
output/
├── script.respelled.txt ← primary: feeds into Eleven v3
├── script.ssml.xml ← secondary: for SSML-aware engines
├── pronunciation_table.md ← archive of the agreed table
└── samples/
├── P01_siobhan.mp3
├── P02_df12.mp3
└── ...List script.respelled.txt first in the present_files call — that's the deliverable the user will reach for most often.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.