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/on)<a href="https://agentmods.dev/commands/shreyas-s-rao/claude-code-narrator/on"><img src="https://agentmods.dev/badge/commands/shreyas-s-rao/claude-code-narrator/on/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/on"><img src="https://agentmods.dev/badge/commands/shreyas-s-rao/claude-code-narrator/on.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.00004 | $0.00721 |
| Opus 5 | $0.00002 | $0.00360 |
| Sonnet 5 | $0.00001 | $0.00144 |
| Haiku 4.5 | $0.00000 | $0.00072 |
Grade B, and why
on scanned grade B with 1 finding 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.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
Read `~/.claude/settings.json`. If it does not have a `UserPromptSubmit` hook that runs `hush-on-input.sh`, add one. This hook silences speech when the user provides input. How it starts
The opening of the file, as written. The whole thing — 75 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Enable Narrator Voice Output
To enable narrator voice output, perform the following steps in order:
Step 1: Determine Scope
Check if the user specified --local (e.g., /narrator:on --local). If so, all state changes apply to a local config file in the current working directory instead of the global one.
- Global (default):
~/.claude-code-narrator/config - Local (
--local):<cwd>/.claude-code-narrator/config
Step 2: Enable Narrator State
Global mode (no --local):
Read ~/.claude-code-narrator/config. If the file exists, use the Edit tool to change the enabled= line to enabled=true (preserve the existing voice and speed settings). If the file does not exist, create it with the Write tool:
enabled=true
voice=af_heart
speed=1.1
Local mode (--local):
Read <cwd>/.claude-code-narrator/config. If the file exists, use the Edit tool to change or add enabled=true. 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 enabled=true. Do NOT include voice or speed unless the user specifies them — missing keys fall back to the global state.
IMPORTANT: Do NOT use sed to edit state files — use the Read and Edit tools instead.
Step 3: Register Auto-Hush Hook
Read ~/.claude/settings.json. If it does not have a UserPromptSubmit hook that runs hush-on-input.sh, add one. This hook silences speech when the user provides input.
Use the Edit tool to add the following to the hooks object in ~/.claude/settings.json (create the hooks key if it doesn't exist, and merge with any existing hooks):
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/hush-on-input.sh",
"timeout": 3
}
]
}
]
IMPORTANT: Do NOT replace existing hooks — merge with them. Read the file first.
Step 4: Confirm
For global mode, inform the user: "Narrator is now enabled. I will speak responses aloud using the af_heart voice."
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 · 75 lines · 4 tokens per session scan B 7713f950b904
on is a command published in the GitHub repository shreyas-s-rao/claude-code-narrator (26 stars, last pushed 3mo ago), licensed MIT. It adds 4 tokens to every session and 721 once invoked, about $0.0000 per session on Opus 5. A static security scan graded it B with 1 finding (reads agent configuration directories). 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.