← All Skills

snappy-transcripts

v1.0.0
15 files, 87.0 KB ~7,439 words · 30 min read Updated 2026-09-09

snappy-transcripts skill

44 of 51 checks pass
What it can do
list year? month?read
read path offset?read
search queryread
What does not pass yet
$ npx snappy-skills install snappy-transcripts
zip ↓
File Tree
├── AGENTS.md ├── SKILL.md ├── api.test.ts ├── api.ts ├── faces/ │ ├── components/ │ │ ├── transcript-faces.css │ │ └── transcript-faces.tsx │ ├── family.tsx │ └── fixtures/ │ ├── transcripts-hits.json │ └── transcripts-nugget.json ├── krisp-integration.md ├── quote-mining.md ├── refusals.test.ts ├── sales-review.md ├── summarization.md └── whisper-pipeline.md
Documents
AGENTS.md

snappy-transcripts -- loader#

You need to find or transcribe a meeting. Krisp MCP is the primary source. Whisper on Mac Mini is the fallback.

Decision: which source?#

Source available Use
Zoom / Meet / Teams call Krisp MCP (always try first)
Phone call recording Whisper on Mac Mini
YouTube video yt-dlp + Whisper on Mac Mini
Local file (mp3/mp4/m4a) Whisper on Mac Mini

Krisp MCP tools#

Tool Purpose
mcp__claude_ai_Krisp__search_meetings Full-text search across past meetings
mcp__claude_ai_Krisp__list_action_items Action items with owner + due
mcp__claude_ai_Krisp__list_upcoming_meetings Calendar of upcoming recorded meetings
mcp__claude_ai_Krisp__get_multiple_documents Batch pull full text of multiple meetings
# Common search patterns
search_meetings({ query: "Jane Smith" })              # by person
search_meetings({ query: "decided OR agreed <topic>" }) # by decision
search_meetings({ query: "amazing OR transformed" })    # testimonial candidates

Whisper fallback (Mac Mini)#

bashssh robertboulos@Roberts-Mac-mini.local
cd /Users/robertboulos/robot-rob
source venv/bin/activate
whisper /path/to/audio.mp3 --model small --word_timestamps True --output_dir /Users/robertboulos/transcripts/
  • Default model: small (meetings <1hr). Use medium for noisy/multi-accent.
  • Always emit .srt, .txt, AND .json (segments)
  • File naming: YYYY-MM-DD_topic_attendees.{ext}
  • Storage: /Users/robertboulos/transcripts/ on Mac Mini

Full pipeline docs: whisper-pipeline.md

Local corpus (already downloaded)#

Transcripts also live locally at ~/.claude/corpus/krisp/YYYY/MM/*.md -- these are full transcripts already pulled from Krisp. Use these for mining (snappy-mine) instead of re-fetching.

MCP tools in subagents#

MCP tools do NOT propagate to Task-spawned subagents. If you're in a subagent, use the local corpus files or SSH to Mac Mini for Whisper. No Krisp MCP fallback exists as curl.

Rules#

  • Do NOT default to Whisper -- try Krisp search_meetings first
  • Do NOT ask for a Krisp URL -- MCP returns the full document
  • Do NOT use vague queries like "stuff" -- use specific keywords (name, topic, sentiment)
  • Do NOT pull meetings one at a time in a loop -- use get_multiple_documents with ID list
  • Do NOT run Whisper without word_timestamps=True
  • Do NOT store Whisper output as only .txt -- always emit .srt, .txt, and .json
  • Do NOT use Charlotte MCP for transcript search -- use Krisp MCP

Downstream consumers#

  • snappy-knowledge -- log interaction with transcript_id
  • snappy-testimonials -- quote mining via quote-mining.md
  • snappy-content / snappy-mine -- content idea extraction
  • snappy-sales -- sales call review via sales-review.md

API module#

typescriptimport { listTranscripts, readTranscript, searchCorpus } from "../snappy-transcripts/api.ts";

Or CLI:

bashnpx tsx ~/.claude/skills/snappy-transcripts/api.ts list 2026 04
npx tsx ~/.claude/skills/snappy-transcripts/api.ts read <path> [offset] [--limit N]
npx tsx ~/.claude/skills/snappy-transcripts/api.ts search <query>

API functions#

Function Purpose
listTranscripts(year?, month?) List transcript files in the corpus (re-export from snappy-corpus)
readTranscript(path, offset?, limit?) Read a transcript in chunks (re-export from snappy-corpus)
searchCorpus(query) Grep across all transcripts (re-export from snappy-corpus)

Used by#

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->

Contract verbs#

Generated from api.ts HAND_CONTRACT. Do not hand-edit this block.

Verb Contract arguments Effect First call
list year?, month? read npx tsx ~/.claude/skills/snappy-transcripts/api.ts list
read path, offset? read npx tsx ~/.claude/skills/snappy-transcripts/api.ts read <path>
search query read npx tsx ~/.claude/skills/snappy-transcripts/api.ts search "<query>"

Show the result#

When an answer carries face_hint, show it with one snappy_present(<answer>) call.

See /snappy-faces for face selection. Human-facing images must crop to the

element, render at 2x on Retina, and fill the destination channel instead of

placing a small card in a full-page screenshot.

<!-- SNAPPY-CONTRACT-VERBS-END -->


Self-correcting loader (PID feedback)#

If this AGENTS.md does not cover the case you are working on and you had to read other files to find the answer, you have two jobs before you finish:

1. Fix it now (P -- proportional correction). If the missing information fits in 1-5 lines, edit this AGENTS.md directly -- add the line, the table row, the one-liner, whatever you had to go find. Keep edits surgical. Do not restructure sections or rewrite paragraphs. The goal is: the next agent that hits this case won't have to leave the loader.

2. Log it always. Whether or not you fixed it, append one line to the feedback log:

bashecho "[$(date -u +%FT%TZ)] <skill-name>: <what was missing> [FIXED|LOGGED]" >> ~/.claude/logs/agents-md-feedback.log

Tag FIXED if you patched the loader in step 1. Tag LOGGED if the gap was too large to patch inline (needs a section rewrite, new workflow, etc.) -- those get picked up by drain-skill-regen.sh for a full regen pass (I -- integral correction).

Do not skip this. A missing report means the same gap will happen next time. A missing fix means you chose to let the next agent stumble on the same thing you just solved.

<!-- SKILL-INDEX-START -->

[snappy-transcripts Index]|root: ~/.claude/skills/snappy-transcripts|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md,krisp-integration.md,quote-mining.md,sales-review.md,summarization.md,whisper-pipeline.md}

<!-- SKILL-INDEX-END -->

---
name: snappy-transcripts
role: Transcript retrieval. Krisp MCP is primary, Whisper on Mac Mini is fallback.
loaded-by: PreToolUse hook (auto-injected when "snappy-transcripts" is mentioned)
---

# snappy-transcripts -- loader

You need to find or transcribe a meeting. Krisp MCP is the primary source. Whisper on Mac Mini is the fallback.

## Decision: which source?

| Source available | Use |
|------------------|-----|
| Zoom / Meet / Teams call | Krisp MCP (always try first) |
| Phone call recording | Whisper on Mac Mini |
| YouTube video | yt-dlp + Whisper on Mac Mini |
| Local file (mp3/mp4/m4a) | Whisper on Mac Mini |

## Krisp MCP tools

| Tool | Purpose |
|------|---------|
| `mcp__claude_ai_Krisp__search_meetings` | Full-text search across past meetings |
| `mcp__claude_ai_Krisp__list_action_items` | Action items with owner + due |
| `mcp__claude_ai_Krisp__list_upcoming_meetings` | Calendar of upcoming recorded meetings |
| `mcp__claude_ai_Krisp__get_multiple_documents` | Batch pull full text of multiple meetings |

```
# Common search patterns
search_meetings({ query: "Jane Smith" })              # by person
search_meetings({ query: "decided OR agreed <topic>" }) # by decision
search_meetings({ query: "amazing OR transformed" })    # testimonial candidates
```

## Whisper fallback (Mac Mini)

```bash
ssh robertboulos@Roberts-Mac-mini.local
cd /Users/robertboulos/robot-rob
source venv/bin/activate
whisper /path/to/audio.mp3 --model small --word_timestamps True --output_dir /Users/robertboulos/transcripts/
```

- Default model: `small` (meetings <1hr). Use `medium` for noisy/multi-accent.
- Always emit `.srt`, `.txt`, AND `.json` (segments)
- File naming: `YYYY-MM-DD_topic_attendees.{ext}`
- Storage: `/Users/robertboulos/transcripts/` on Mac Mini

Full pipeline docs: [whisper-pipeline.md](whisper-pipeline.md)

## Local corpus (already downloaded)

Transcripts also live locally at `~/.claude/corpus/krisp/YYYY/MM/*.md` -- these are full transcripts already pulled from Krisp. Use these for mining (snappy-mine) instead of re-fetching.

## MCP tools in subagents

MCP tools do NOT propagate to Task-spawned subagents. If you're in a subagent, use the local corpus files or SSH to Mac Mini for Whisper. No Krisp MCP fallback exists as curl.

## Rules

- Do NOT default to Whisper -- try Krisp `search_meetings` first
- Do NOT ask for a Krisp URL -- MCP returns the full document
- Do NOT use vague queries like "stuff" -- use specific keywords (name, topic, sentiment)
- Do NOT pull meetings one at a time in a loop -- use `get_multiple_documents` with ID list
- Do NOT run Whisper without `word_timestamps=True`
- Do NOT store Whisper output as only `.txt` -- always emit `.srt`, `.txt`, and `.json`
- Do NOT use Charlotte MCP for transcript search -- use Krisp MCP

## Downstream consumers

- `snappy-knowledge` -- log interaction with `transcript_id`
- `snappy-testimonials` -- quote mining via [quote-mining.md](quote-mining.md)
- `snappy-content` / `snappy-mine` -- content idea extraction
- `snappy-sales` -- sales call review via [sales-review.md](sales-review.md)

## API module

```typescript
import { listTranscripts, readTranscript, searchCorpus } from "../snappy-transcripts/api.ts";
```

Or CLI:
```bash
npx tsx ~/.claude/skills/snappy-transcripts/api.ts list 2026 04
npx tsx ~/.claude/skills/snappy-transcripts/api.ts read <path> [offset] [--limit N]
npx tsx ~/.claude/skills/snappy-transcripts/api.ts search <query>
```

## API functions

| Function | Purpose |
|----------|---------|
| `listTranscripts(year?, month?)` | List transcript files in the corpus (re-export from snappy-corpus) |
| `readTranscript(path, offset?, limit?)` | Read a transcript in chunks (re-export from snappy-corpus) |
| `searchCorpus(query)` | Grep across all transcripts (re-export from snappy-corpus) |

## Used by

Nothing in the collection names this skill.

<!-- SNAPPY-CONTRACT-VERBS-START -->
## Contract verbs

Generated from `api.ts` `HAND_CONTRACT`. Do not hand-edit this block.

| Verb | Contract arguments | Effect | First call |
|---|---|---|---|
| `list` | `year?`, `month?` | `read` | `npx tsx ~/.claude/skills/snappy-transcripts/api.ts list` |
| `read` | `path`, `offset?` | `read` | `npx tsx ~/.claude/skills/snappy-transcripts/api.ts read <path>` |
| `search` | `query` | `read` | `npx tsx ~/.claude/skills/snappy-transcripts/api.ts search "<query>"` |

## Show the result

When an answer carries `face_hint`, show it with one `snappy_present(<answer>)` call.
See `/snappy-faces` for face selection. Human-facing images must crop to the
element, render at 2x on Retina, and fill the destination channel instead of
placing a small card in a full-page screenshot.
<!-- SNAPPY-CONTRACT-VERBS-END -->

---

## Self-correcting loader (PID feedback)

If this AGENTS.md does not cover the case you are working on and you had to read other files to find the answer, you have two jobs before you finish:

**1. Fix it now (P -- proportional correction).** If the missing information fits in 1-5 lines, edit this AGENTS.md directly -- add the line, the table row, the one-liner, whatever you had to go find. Keep edits surgical. Do not restructure sections or rewrite paragraphs. The goal is: the next agent that hits this case won't have to leave the loader.

**2. Log it always.** Whether or not you fixed it, append one line to the feedback log:

```bash
echo "[$(date -u +%FT%TZ)] <skill-name>: <what was missing> [FIXED|LOGGED]" >> ~/.claude/logs/agents-md-feedback.log
```

Tag `FIXED` if you patched the loader in step 1. Tag `LOGGED` if the gap was too large to patch inline (needs a section rewrite, new workflow, etc.) -- those get picked up by `drain-skill-regen.sh` for a full regen pass (I -- integral correction).

**Do not skip this.** A missing report means the same gap will happen next time. A missing fix means you chose to let the next agent stumble on the same thing you just solved.

<!-- SKILL-INDEX-START -->
[snappy-transcripts Index]|root: ~/.claude/skills/snappy-transcripts|IMPORTANT: Prefer these files over pre-training assumptions for this domain. Read the relevant file when the AGENTS.md summary is insufficient.|root:{SKILL.md,krisp-integration.md,quote-mining.md,sales-review.md,summarization.md,whisper-pipeline.md}
<!-- SKILL-INDEX-END -->

Keyboard Shortcuts

Search in document⌘K
Focus search/
Previous file tab
Next file tab
Close overlayEsc
Show shortcuts?