listen
Skill1 starsChanged 7 months agoMITView on GitHub
Use when the user wants to turn an audio meeting recording into a project-aware transcript and notes, or invokes /listen
5 other projects use a version of this.
Adopted by
Most recently taken up by
- allthriveai/amplifytheir own version, first seen Aug 30, 2026
- theDRElabs/opencode-configtheir own version, first seen Aug 26, 2026
- PatrickJaiin/claude-code-connecttheir own version, first seen Jul 21, 2026
- adarsh-goswamii/skillstheir own version, first seen May 10, 2026
- shreyaskarnik/voice-mcptheir own version, first seen Feb 10, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- shreyaskarnik/voice-mcp★ 17same name
- PatrickJaiin/claude-code-connect★ 2same name
- adarsh-goswamii/skills★ 1same name
- theDRElabs/opencode-config★ 1same name
- allthriveai/amplify★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repositoryOne other file it gives its agents.
- CLAUDE.mdCLAUDE.md
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 12 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
12
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 34
Verify the audio file exists: If not, report the resolved path and stop.
- Very specific: line 41
Default model is small. For long recordings (>30min) on GPU, use --model medium or --model large-v3 for better quality.
- Very specific: line 48
Read the generated transcript: Read transcript.md from OUTPUT_DIR.
- Very specific: line 50
Read project context: Read $PROJECT_DIR/CLAUDE.md if present.
- Very specific: line 53
After they answer, rewrite transcript.md replacing each SPEAKER_XX with the real name (or the provided label).
- Distinctive: line 54
If the user skips, leave labels as-is.
- Distinctive: line 57
If their instruction focuses on action items / next steps: lead with those, deprioritize general summary.
- Distinctive: line 58
If it focuses on decisions: lead with decisions, include rationale where audible.
- Distinctive: line 59
If it focuses on technical content: expand the technical section, cite speakers on specific claims.
- Distinctive: line 60
If no instruction, use the full default structure below.
- Distinctive: line 62
Default structure (include only sections that have real content — don't invent to fill):
- Distinctive: line 71
Use project vocabulary from CLAUDE.md when it's more precise than a generic word.
- Distinctive: line 72
Don't editorialize. If attribution matters ("X said we should Y"), attribute.
- Distinctive: line 73
Don't include small talk, throat-clearing, or tangents unless they're load-bearing.
- Distinctive: line 74
Prefer short bullets over paragraphs.
- Distinctive: line 81
If the transcript is in a language other than English and the user's instruction is English, write the notes in English but quote …
- Very specific: line 82
Never overwrite an existing meetings/<timestamp>/ directory.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/listen — audio recording to project-aware notes
Turn an audio recording into two artifacts: a speaker-labeled transcript and a set of structured notes written in the vocabulary of the current project. The user invokes this with an audio path and an optional free-text instruction describing what to extract.
Invocation
/listen <audio-path> [free-text instruction]Example: /listen ~/recordings/standup.m4a extract action items and decisions that affect the project roadmap
<audio-path>is required. Supports any format ffmpeg reads (mp3, wav, m4a, flac, ogg, opus, webm, mov).- The free-text instruction, if given, guides what to emphasize in the notes. If absent, produce the full default structure described below.
Skill location
The transcription script lives at ~/.claude/skills/listen/scripts/transcribe.py. The uv project (for deps) is the same directory. If the skill is installed elsewhere, adjust the paths in the commands below.
Steps
- Parse args from the user's message. First token after
/listenis the audio path. Everything after it is the free-text instruction (may be unquoted). If no audio path is given, ask via AskUserQuestion and stop — don't guess. - Resolve paths.
PROJECT_DIR= current working directory (the dir Claude was started in).OUTPUT_DIR=$PROJECT_DIR/meetings/<YYYY-MM-DD-HHMM>/where the timestamp is now. Usedate +%Y-%m-%d-%H%Mvia Bash.- Create
OUTPUT_DIR.
- Verify the audio file exists. If not, report the resolved path and stop.
Run the transcription script. Tell the user what's about to happen (one sentence, not a list), then run:
uv run --project ~/.claude/skills/listen python ~/.claude/skills/listen/scripts/transcribe.py \ --audio <audio-path> --output-dir <OUTPUT_DIR>Default model is
small. For long recordings (>30min) on GPU, use--model mediumor--model large-v3for better quality. Never pick a larger model on CPU without the user's go-ahead — it gets slow quickly.If transcription fails:
- Missing
HF_TOKEN: tell the user the two setup steps (create token at hf.co/settings/tokens, accept ToS at hf.co/pyannote/speaker-diarization-3.1). Suggest--no-diarizeas a temporary workaround if they want a single-speaker transcript right now. - Missing ffmpeg: tell them to install it via their package manager.
- Other errors: surface the actual error. Don't retry blindly.
- Missing
- Read the generated transcript. Read
transcript.mdfromOUTPUT_DIR. If it's long, read it in chunks (useoffsetandlimit) and build understanding incrementally rather than forcing everything into one pass. - Read project context. Read
$PROJECT_DIR/CLAUDE.mdif present. Also glance atREADME.mdand anydocs/dir. Use this vocabulary in the notes — prefer the project's terms over generic ones. - Remap speakers to real names. Collect the set of
SPEAKER_XXlabels present in the transcript, find each speaker's first substantive utterance (skip filler like "yeah", "uh", one-word turns), and ask the user to identify them via AskUserQuestion. Offer "skip / keep anonymous" as an option.- After they answer, rewrite
transcript.mdreplacing eachSPEAKER_XXwith the real name (or the provided label). Do the same substitution in the JSON. - If the user skips, leave labels as-is.
- After they answer, rewrite
Write
meeting-notes.mdinOUTPUT_DIR. Tailor the emphasis to the user's instruction:- If their instruction focuses on action items / next steps: lead with those, deprioritize general summary.
- If it focuses on decisions: lead with decisions, include rationale where audible.
- If it focuses on technical content: expand the technical section, cite speakers on specific claims.
- If no instruction, use the full default structure below.
Default structure (include only sections that have real content — don't invent to fill):
- Summary — 2 to 3 sentences of plain prose. What was the meeting about, what was the outcome.
- Decisions — bullets: who decided, what was decided, key rationale if it was stated.
- Action items — bullets:
[owner] thing to do (timing if mentioned). - Open questions — bullets: things raised but not resolved.
- Technical discussion — subheadings by topic. Attribute non-obvious claims to speakers.
- Flagged for follow-up — things that sounded important but weren't resolved in the meeting.
Rules while writing:
- Use project vocabulary from
CLAUDE.mdwhen it's more precise than a generic word. - Don't editorialize. If attribution matters ("X said we should Y"), attribute. If the speaker doesn't matter, don't.
- Don't include small talk, throat-clearing, or tangents unless they're load-bearing.
- Prefer short bullets over paragraphs. Keep the whole doc skimmable.
- Report back. One or two sentences. Paths to the three files (
transcript.md,transcript.json,meeting-notes.md) and a one-line summary of what the meeting was about.
Notes
- Diarization is imperfect. If the transcript looks wrong (e.g., one speaker attributed to another across a whole segment), surface this to the user rather than silently trusting it.
- If the transcript is in a language other than English and the user's instruction is English, write the notes in English but quote original-language phrases verbatim where they matter.
- Never overwrite an existing
meetings/<timestamp>/directory. Timestamps include minute granularity so collisions are rare, but if one happens, append-2,-3, etc.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

