Agent Skills: Transcribe and Extract

Transcribe voice memos/recordings with the local Qwen3-ASR pipeline in ~/LocalRepos/tools-playground/asr-tools, then extract structured information (summary, decisions, action items, people, notable quotes with timestamps) into a vault note. Use when the user wants to "转写录音", "转录并提取信息", asks to process new voice memos, or wants a meeting/interview/testimony recording turned into notes.

UncategorizedID: goodluckz/claude-code-config/transcribe-and-extract

Install this agent skill to your local

pnpm dlx add-skill https://github.com/goodluckz/claude-code-config/tree/HEAD/skills/transcribe-and-extract

Skill Files

Browse the full folder contents for transcribe-and-extract.

Download Skill

Loading file tree…

skills/transcribe-and-extract/SKILL.md

Skill Metadata

Name
transcribe-and-extract
Description
Transcribe voice memos/recordings with the local Qwen3-ASR pipeline in ~/LocalRepos/tools-playground/asr-tools, then extract structured information (summary, decisions, action items, people, notable quotes with timestamps) into a vault note. Use when the user wants to "转写录音", "转录并提取信息", asks to process new voice memos, or wants a meeting/interview/testimony recording turned into notes.

Transcribe and Extract

Two-stage pipeline over voice memos: (1) local, offline ASR transcription with timestamped chunks, resumable across crashes; (2) an extraction pass that turns the raw transcript into a structured vault note. General-purpose — works for daily voice-memo journaling, meeting/group recordings, and interview/testimony recordings alike; the extraction shape adapts to which one it is (see step 3).

0. Locate the engine and inputs

The transcription engine already exists at ~/LocalRepos/tools-playground/asr-tools/ — do NOT reimplement it. Key pieces:

  • transcribe_one.py: one audio file = one process (crash isolation), each 5-min chunk flushed to a .part file as it completes (crash loses at most one chunk), auto-resumes from an existing .part on rerun. Uses the local MLX Qwen3-ASR model (mlx-community/Qwen3-ASR-1.7B-4bit by default, or -bf16 for higher quality — set via ASR_MODEL env var).
  • .venv/: has mlx, qwen3_asr_mlx, ffmpeg dependency already installed.
  • Past run scripts (run0814.sh, run0819.sh) show the calling pattern — read one before writing a new one to match the idiom exactly.

Default voice memo source: /Users/zhaoliang/Resources/voice memo (the curated archive — 2018-present, both old .m4a and recent .qta files; distinct from the live, auto-pruned system buffer at ~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings, which only holds the last few weeks and isn't itself a transcription source), transcripts land in voice memo/transcripts/*.txt. If the user gives a different path or a specific file, use that instead.

1. Find what needs transcribing

List the source directory and cross-reference against voice memo/transcripts/ — anything without a matching .txt (or with a stale .part from a previous crash) needs a run. Ask the user to confirm the batch (file list + a one-line label each, e.g. "18:33-20:26 韩涛送别饭 前段(113min)") before running anything — labels matter for step 3 and the user knows context (who/where/what) that the filename alone doesn't carry.

2. Run transcription

Write a run script following the run0819.sh pattern: one process per file (.venv/bin/python transcribe_one.py <src> <out.txt> "<label>"), skip files whose output already exists, and run it. This can take a long time for long recordings — run it with run_in_background or in a fork agent, and don't block the conversation on it if the user has other things to do meanwhile.

Every transcript file carries a machine-transcription disclaimer in its header already (written by transcribe_one.py) — never strip it when copying content elsewhere, and never treat transcript text as a verified quote without checking the timestamp against the source audio, especially for anything used as testimony/evidence (see pages/PI-*.md precedent in this vault for how source reliability gets tracked).

3. Extract into a vault note

Read the finished transcript(s) and produce a structured note. Shape depends on what kind of recording it is — infer from the label/context, or ask if unclear:

  • Daily voice memo / personal reflection: short summary + key points, appended into that day's journals/YYYY-MM-DD.md under # Quick Notes (matching the existing manual Quick Notes entries — timestamp prefix, [[wikilinks]] for people/places/concepts mentioned), same as how manual entries already look in this vault.
  • Meeting / group discussion: summary, decisions made, open questions, action items (who owns what), as a new pages/YYYY-MM-DD <topic>.md note — model the structure on pages/2026-08-16 项目全景与文档分析.md or pages/2026-08-16 数据处理方法概要.md.
  • Interview / testimony recording: extract per-speaker claims with timestamps, flag anything that reads as motivated/self-serving (see the "flattery motive" downgrade already done in pages/PI-姜汉博.md for the pattern), and file into or link from the relevant person's page under pages/ (or acquaintances/ if it's about a person rather than a project). Carry the disclaimer forward explicitly in this note's own text, not just implicitly via the linked transcript.

Always link back to the source transcript file (not just summarize it away) so the original wording stays one hop away for verification.

4. Report back

Tell the user which files were transcribed (skipped vs newly run), where the transcripts landed, and which vault note(s) got the extracted content — don't re-paste the whole note in chat.