Skip to content
Back to skills

Lesson Review Audio

ASecurity

Use when reviewing a past lesson to read aloud via TTS.

  • 36 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 10, 2026
ai-agentspythonrustgobashtestinggitapi

Works with

  • terminal
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add theheavenlyd3mon/hermes-profiles --skill lesson-review-audio --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lesson Review Audio?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Lesson Review Audio
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/theheavenlyd3mon-lesson-review-audio/badge)](https://www.skillsdirectory.com/skills/theheavenlyd3mon-lesson-review-audio)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lesson-review-audio
description: Use when reviewing a past lesson to read aloud via TTS.
version: 1.0.0
platforms: [macos]
metadata:
  hermes:
    tags: [tts, pedagogy, audio, review, read-aloud]
    category: pedagogy
---

# Lesson Review + Read-Aloud

Revisit a previous lesson/session, verify it's still current, update the artifact, then read it aloud via TTS while the user works hands-free.

## When to Use

- User says "revisit/review a previous topic" or "read that lesson to me"
- User wants audio playback of educational material while they work
- A saved lesson/guide may be stale and needs refresh + narration

## Workflow

### Step 1 — Select the topic
- `session_search()` (no args) to browse recent sessions, or `session_search(query=...)` if the user named a topic.
- Present candidates via `clarify` (title + date + one-line hook each).
- Read the chosen material fully: `read_file` for saved artifacts, `session_search(session_id=..., around_message_id=...)` scrolling for chat-only lessons.

### Step 2 — Scope the listen
Ask via `clarify` how much to read: full / core-sections-only / core-plus-changes. This drives narration length (~160 wpm → minutes = words ÷ 160) and update depth.

### Step 3 — Verify currency (the differentiator)
Determine ground truth: source-repo commit (`git log --oneline -1`), live config (`hermes config get ...`), installed version (`hermes --version`).
- **Large document (5+ sections):** parallel `delegate_task` auditors — one per section cluster, each given an explicit claims list and told to answer CONFIRMED/STALE/CHANGED with `file:line` evidence.
- **Small document:** direct `execute_code` batches of ripgrep/sed checks.
- **Critical:** auditor summaries are SELF-REPORTS and auditors can be interrupted at the write-up stage. Always close gaps with your own direct source checks before trusting the audit. Live transcripts sit under `cache/delegation/live/<id>/task-N.log`.

### Step 4 — Update the lesson file
Rewrite the artifact: fix every stale claim, add new features, refresh the footer (date, version/commit, provider, model). Lead the user-facing summary with a "guide says X → actually Y" table.

### Step 5 — Choose the TTS provider (user's choice each time)
Check availability FIRST, then offer via `clarify`:

```bash
# API keys (presence only — never print values)
for k in ELEVENLABS_API_KEY OPENAI_API_KEY GEMINI_API_KEY XAI_API_KEY; do
  grep -q "$k" ~/.hermes/.env 2>/dev/null && echo "$k: PRESENT" || echo "$k: absent"
done
# Tooling
which edge-tts || pip3 list 2>/dev/null | grep -i edge-tts
```

| Provider | Cost | Quality | Voice examples | Notes |
|----------|------|---------|----------------|-------|
| `edge` (default) | Free, no key | Good neural | `en-US-AriaNeural` (news/narrator), `en-US-GuyNeural`, `en-US-JennyNeural` | `pip3 install edge-tts --break-system-packages` if missing |
| `openai` | Paid | High | `alloy`, `nova`, `shimmer`, `echo`, `sage`, `amber` | Needs OPENAI_API_KEY (check ~/.hermes/.env); use curl, not the python module |
| `elevenlabs` | Paid | Best | voice_id from config/env (`ELEVENLABS_VOICE_ID`) | Needs ELEVENLABS_API_KEY; use curl |
| `say` | Free offline | Robotic | `say -v '?' \| grep en_US` | Zero-dependency fallback |

**Pitfall:** the Hermes config `tts.provider` says nothing about what's callable from system Python — check keys/modules, not config. In this environment config says openai but the `openai` python module is absent; curl-based recipes work regardless.

### Step 6 — Write the narration script
Rewrite the updated lesson as SPOKEN PROSE (never read markdown aloud):
- No tables, code blocks, or symbols — expand them: `→` = "to", `~/.hermes` = "dot hermes", `A | B` = "A or B"
- Pronounce paths/commands in words so the listener can reconstruct them
- Add section intros ("Section two. Subagent delegation.") and a sign-off
- Front-load the "what changed since last time" summary
- Target: words ÷ 160 ≈ minutes; share the estimate before playing

### Step 7 — Play
```bash
python3 <skill-dir>/scripts/tts_read.py /tmp/narration.txt --provider edge --voice en-US-AriaNeural
```
- Run with `terminal(background=true, notify_on_complete=true)` — playback blocks for the full duration.
- The script chunks at ~3500 chars, synthesizes per provider, plays sequentially via `afplay`, prints progress, retries transient failures once.
- Before a long play, always do a one-line test: `edge-tts --voice V --text "Testing." --write-media /tmp/t.mp3 && afplay /tmp/t.mp3`

### Step 8 — Wrap up
- Session recap table (topic, audit findings, fixes, audio duration).
- Optional comprehension check: 3 recall questions with answers.
- Archive: copy narration + mp3s to `~/.hermes/profiles/<profile>/lessons/<date>-<topic>/` if the user may want a replay.

## Pitfalls

- **pip vs pip3:** macOS system Python has no `pip` alias — use `pip3 install --break-system-packages`.
- **edge-tts long-text failures:** keep chunks ≤ 3500 chars.
- **afplay is macOS-only**; this skill targets macOS.
- **/tmp is ephemeral:** persist anything reusable into the skill or profile dirs.
- **Subagent interruptions** during long audits are common — transcripts + direct follow-up checks close the gap.
- **Never read raw markdown aloud** — tables and symbols are gibberish in audio.

## Verification

1. Test-line playback confirmed before the long play (user hears it).
2. Narration word count → duration estimate shared with user.
3. Background process launched; first "▶ part 1/N playing" line in output.
4. Completion notification shows all N parts played, exit code 0.

Files in this skill

  • SKILL.md5.5 KB
  • scripts/tts_read.py6.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.