Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add jianshuo/claude-skills --skill wjs-voicedrop-reading-aloudgit clone --depth 1 https://github.com/jianshuo/claude-skillsWrote 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/skills/jianshuo/claude-skills/wjs-voicedrop-reading-aloud)<a href="https://agentmods.dev/skills/jianshuo/claude-skills/wjs-voicedrop-reading-aloud"><img src="https://agentmods.dev/badge/skills/jianshuo/claude-skills/wjs-voicedrop-reading-aloud/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/skills/jianshuo/claude-skills/wjs-voicedrop-reading-aloud"><img src="https://agentmods.dev/badge/skills/jianshuo/claude-skills/wjs-voicedrop-reading-aloud.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Privilege Escalation · line 73 Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.Fix: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths.
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.00090 | $0.02087 |
| Opus 5 | $0.00045 | $0.01043 |
| Sonnet 5 | $0.00018 | $0.00417 |
| Haiku 4.5 | $0.00009 | $0.00209 |
Grade A, and why
wjs-voicedrop-reading-aloud 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 12d 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 — 104 lines — stays where its author put it; the contents beside it link to each section on GitHub.
wjs-voicedrop-reading-aloud
文字 → 有声书 mp3。不是照字面念,而是先编排:不同性质的内容换不同声音,关键转折处加语音指令,然后用火山引擎豆包 seed-tts-2.0 合成。
合成工具:~/code/volcano-tts/tts.py(先 source ~/code/.env)。
铁律
- 绝不把带【】/[ ] 标注的文本直接喂裸 API —— 裸 API 会把标注原样念出来(实测实锤)。永远走
tts.py,它把标注切段转成context_texts语音指令。 - 只能用 2.0 音色(
_uranus_bigtts后缀) —— moon/mars/tob 音色在 seed-tts-2.0 资源下报错resource ID is mismatched。 - 合成前把编排好的朗读脚本给用户看一眼(除非用户说直接出)——编排是再创作,声音分配和指令值得确认。headless/自动化场景跳过此步。
工作流
1. 取内容并认真通读
- 纯文本/文件:直接读。
- URL:WebFetch;SPA 页面(如 docs.volcengine.com)用 browse skill 渲染后取正文。
- VoiceDrop 文章:voicedrop MCP 的
read_article。
通读时标记出:正文叙述 / 直接引用(引号、blockquote)/ 大白话吐槽与内心 OS / 数据、列表、表格 / 标题与小节。
2. 编排重写成朗读脚本
这是核心步骤,是重写不是转录:
- 去掉一切视觉残留:markdown 符号、链接、图片说明、脚注编号。
- 表格、列表、数据改写成口语句子(「三个原因:第一…」)。
- 标题不逐字念,化进过渡句,或用停顿+换气带过。
- 太书面的长句改口语,但保留作者的用词风格。
- 按内容性质分配音色(见音色表):正文一个主声贯穿;引用换引用声;吐槽/大白话换插话声。声音切换是给听众的「格式信号」,等价于视觉上的引用块。
- 不要频繁换声:一般 2~3 个声音封顶,切换只发生在内容性质真正变化处。
3. 加语音指令(克制)
在句前加 [心理活动、细腻表情、肢体动作等描述],如 [放慢,一字一顿,点出要害]。
- 只在需要的地方加:情绪转折、节奏变化、重音、引用的口吻模仿。平铺直叙的段落一个不加,靠全局指令兜底。
- 经验密度:每 3~5 句最多一处;一段平静的叙述可以整段没有。
- 每处标注就是一次切段(一次 API 调用+拼接点),切太碎会让语流变散。
- 标注写成对朗读者说的表演提示(心理活动/表情/动作皆可),不要写成对听众的说明。
- 指令要戏剧化、情绪化才有效(实测):模型对情绪/音色类指令跟随很强(哭腔、耳语、亢奋大喊、像法官宣判、+50% 时长级别的变化),对含蓄舞台提示(「语气一沉」「带一丝惋惜」)和机械精确指令(「停顿一秒」「放慢一倍」)跟随很弱。写法上宁可夸张:「请把声音压到接近耳语,凑近话筒,像说破一个秘密」远强于「压低声音」。
4. 朗读脚本格式(tts.py --script)
# 注释行
@voice narrator zh_male_yuanboxiaoshu_uranus_bigtts
@voice quote zh_male_yizhipiannan_uranus_bigtts
@voice casual zh_male_fanjuanqingnian_uranus_bigtts
@narrator
[语气平静从容,像老朋友聊天]先讲一个真事。……他公开断言:
@quote
[带着当年的笃定与体面]股价已经站上了一个永久的高原。
@narrator
几天后,市场开始了最惨烈的下跌。
@casual
[像随口吐槽]这人判断力真差。
5. 合成与验收
source ~/code/.env
python3 ~/code/volcano-tts/tts.py -f script.txt --script -o out.mp3 \
-i "这是一段有声书朗读,自然口语化,像讲故事,不要播音腔"
-i全局指令必带,定整体基调;--speech-rate、--subtitle(字级时间戳)按需。- 验收:
afinfo out.mp3看时长是否与字数匹配(中文约 4~5 字/秒);如首次改动过工具或有疑虑,用~/.claude/skills/wjs-transcribing-audio/scripts/volc_asr_stream.py抽查一段,确认标注没被念出来。 - 用 SendUserFile 把 mp3 发给用户。
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.
- 12d ago First seen · 104 lines · 90 tokens per session scan A 8bc12b129b0a
wjs-voicedrop-reading-aloud is a skill published in the GitHub repository jianshuo/claude-skills (129 stars, last pushed 22d ago), licensed MIT. It adds 90 tokens to every session and 2,087 once invoked, about $0.0005 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 skills, from other repositories
exploratory-data-analysis
Perform bounded, local exploratory analysis of explicitly supported scientific files. Use for redacted CSV/TSV/JSON profiles; optional NumPy, HDF5, FASTA/FASTQ, and basic image metadata inspection; missingness/leakage audits; outlier and transformation sensitivity; and rigorous EDA report scaffolds. Other domain…
google-ads-audit
Google Ads account audit and business context setup. Use for account-health audits and business-context setup. Trigger on "audit my ads", "ads audit", "set up my ads", "onboard", "account overview", "how's my account", "ads health check", "what should I fix in my ads", or when the user is new to NotFair and hasn't run…
data-charts-tako
Search and visualize the world's data - get charts, insights, and embeddable knowledge cards for finance, economics, demographics, sports, and more.
webhook-management
Configure and validate CCAM webhook targets across supported chat, incident, automation, and generic providers. Use when listing provider requirements, creating or updating a target, scoping it to alert rules, sending a test notification, reviewing delivery history, or deleting a target.
gesellschaftsrechtliche-satzungen-agb
Für Gesellschaftsrechtliche Satzungen AGB Abgrenzung: ordnet Norm, Beweislast und Gegenargument; Ergebnis: Prüfprodukt mit Risiko und nächstem Schritt. Fachgebiet: AGB-Recht-Prüfer. Route: gesellschaftsrechtliche-satzungen-agb.
master-yinguang
A reference-based assistant for questions about Yinguang and Pure Land Buddhism, a Buddhist tradition focused on faith, ethical living, and practice connected with rebirth in the Pure Land. It can answer in Yinguang’s historical teaching style.