Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add shreyas-s-rao/claude-code-narrator/plugin install narratorWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/shreyas-s-rao/claude-code-narrator/cast)<a href="https://agentmods.dev/commands/shreyas-s-rao/claude-code-narrator/cast"><img src="https://agentmods.dev/badge/commands/shreyas-s-rao/claude-code-narrator/cast/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/shreyas-s-rao/claude-code-narrator/cast"><img src="https://agentmods.dev/badge/commands/shreyas-s-rao/claude-code-narrator/cast.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00005 | $0.00616 |
| Opus 5 | $0.00003 | $0.00308 |
| Sonnet 5 | $0.00001 | $0.00123 |
| Haiku 4.5 | $0.00001 | $0.00062 |
Grade A, and why
cast scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Change Narrator Voice
Available Voices
Kokoro provides these voices:
Female voices:
af_heart(default) - warm, expressiveaf_bella- clear, professionalaf_nicole- soft, gentleaf_sarah- bright, energeticaf_sky- calm, composed
Male voices:
am_adam- deep, authoritativeam_michael- warm, friendlyam_fenrir- bold, commanding
Determine Scope
Check if the user specified --local (e.g., /narrator:cast --local am_adam). If so, changes apply to the local config file in the current working directory.
- Global (default):
~/.claude-code-narrator/config - Local (
--local):<cwd>/.claude-code-narrator/config
Changing the Voice
If the user specifies a voice name (e.g., /narrator:cast am_adam), read the appropriate state file and use the Edit tool to change or add the voice= line to the requested voice.
Global mode (no --local):
Read ~/.claude-code-narrator/config and use the Edit tool to change the voice= line.
Local mode (--local):
Read <cwd>/.claude-code-narrator/config. If the file exists, use the Edit tool to change or add the voice= line. If the file does not exist, create the <cwd>/.claude-code-narrator/ directory if needed, then create the config file with the Write tool containing just voice=<requested_voice>.
IMPORTANT: Do NOT use sed to edit state files — use the Read and Edit tools instead.
If the user does not specify a voice, present the list above and ask which voice they would like to use.
After changing the voice, speak a test sentence to confirm:
echo "This is how I sound with the new voice." | bash "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/speak.sh" --force
Changing Speed
If the user asks to change speed, read the appropriate state file and use the Edit tool to change or add the speed= line to the new value.
For local mode, if the file does not exist, create the <cwd>/.claude-code-narrator/ directory if needed, then create the config file with the Write tool containing just speed=<value>.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 62 lines · 5 tokens per session scan A 2a6e00aabb7c
cast is a command published in the GitHub repository shreyas-s-rao/claude-code-narrator (26 stars, last pushed 3mo ago), licensed MIT. It adds 5 tokens to every session and 616 once invoked, about $0.0000 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
wp-cinematic-scene
Author, replace, or regenerate a single cinematic scene. Updates the matching cinematicscenes repeater row (eyebrow, headline, body, CTA, videos, poster) and — if the scene needs a non-default layout — emits a per-scene template fragment override at template-parts/cinematic/scene- .php. Cinematic equivalent of…
wp-cinematic-seed
Seed (or re-seed) all cinematic scenes from a manifest. Idempotent — skips scenes whose sceneid already has content unless --force. Sideloads sample videos from the kit if no Media Library attachments are pinned.
discover
Interview the user to capture their vision and write a Suhail-format plan that the rest of the pipeline can execute via /su:go.
init
Scan the current project and cache stack, layout, conventions, and module intel under .suhail/intel/. Required precursor for /su:go and /su:discover.
wp-cinematic-encode
Encode source videos for cinematic scroll-scrub (all-keyframe MP4) and mobile autoplay-loop (9:16 portrait crop). Thin wrapper over the kit's scripts/encode-keyframe.sh and scripts/encode-mobile-portrait.sh. Drops encoded files into /assets/videos/ and updates the matching ACF row if --scene=N is provided.
tts:voices
Show the deterministic project → voice map (which repo sounds like which voice), current repo highlighted.