All Claude Code modskingchan818/claude-code-tts
read-aloud
Reads Claude's replies out loud on macOS with ElevenLabs (via OpenRouter) or the built-in say voice. /speak to control it.
read-aloud reaches L2 (writes or runs) and fails claude plugin validate on Claude Code 2.1.304: modules../register.tsx: read-aloud.hasReply is not declared: the manifest's types contract must name it in interface PluginState { read-aloud: { hasReply: ...….
- Events hooked: 5
- API methods referenced: 12
- Access from classified calls: L2, writes or runs: runs processes, writes files, reads files, reads mod state, persists state, draws
- Reads mod state: the scan does not record whose state, so this does not show that it reads another mod’s values
- Static scan, not a runtime test
Install hint
/plugin install read-aloud --marketplace kingchan818/claude-code-ttsFrom the repository's own marketplace. Confirm the plugin name in the repository's README before installing. Mods need Claude Code 2.1.287 or later. It fails validation in the latest scan, so it may not install.
Access
L2 Writes or runsruns processes, writes files, reads files, reads mod state, persists state, drawsValidation
fails on 2.1.304View the source on GitHub Back to the list
What the scan recorded
- Observed events
- every prompt
- Hooks
session.start, turn.complete, prompt.submit, ui.render {component=AbovePrompt}, command.run {command=speak}- API calls
$.clock.every, $.clock.now, $.command.register, $.fs.read, $.fs.write, $.process.run, $.state.get, $.state.set, $.store.get, $.store.set, $.ui.log, $.ui.resolve- Validation on 2.1.304
- fails on 2.1.304
- Validator output
- modules../register.tsx: read-aloud.hasReply is not declared: the manifest's types contract must name it in interface PluginState { read-aloud: { hasReply: ... } }; modules../register.tsx: read-aloud.speed is not declared: the manifest's types contract must name it in interface PluginState { read-aloud: { speed: ... } }; ./register.tsx hooks: session.start, turn.complete, prompt.submit, ui.render{component=AbovePrompt}, command.run{command=speak}; ./register.tsx answers its own command: command.run{command=speak}; ./register.tsx gating hook with .catch: prompt.submit; ./register.tsx calls: $.clock.every (via watchStatus), $.clock.now (via speak, watchStatus), $.command.register, $.fs.read (via watchStatus), $.fs.write (via setSpeed, speak, stopSpeaking), $.process.run (via speak, stopSpeaking), $.state.get, $.state.set, $.store.get (via getSpeed, isEnabled, speak), $.store.set, $.ui.log, $.ui.resolve; ./register.tsx state writes: read-aloud.hasReply, read-aloud.speed, read-aloud.status; ./register.tsx state reads: read-aloud.hasReply, read-aloud.speed, read-aloud.status
- Scanned revision
b536a77d55ce- Marketplace passed
- read-aloud
These are the hooks and API calls reported by claude plugin validate. Access levels describe the widest reach of those calls and are not safety ratings. Validation is a static check, not a runtime test, and a passing result does not prove that a mod works or is safe. What a mod can access and how the scan works.
Badge for your README
Authors can show the latest scan result in their README. Each badge links to this page.
[](https://mods.aidojo.si/mods/kingchan818--claude-code-tts--read-aloud/)
[](https://mods.aidojo.si/mods/kingchan818--claude-code-tts--read-aloud/)