Meeting Transcription
Purpose
Turn long local meeting audio into a validated transcript body without treating a successful model response as proof of quality. This skill owns media preparation, transcription, outlier detection, retry/rescue, assembly, and usage evidence. Downstream business summaries, CRM changes, knowledge-base updates, and customer communication remain the consuming repository's responsibility.
Dependencies
ffmpegandffprobenode,jq, andshasum- The separately managed
gemini-files-apiskill - Gemini authentication configured outside this skill
Install the wrapper dependency and this skill into the same reviewed manager root before running the canonical command:
npx --yes skills@1.5.14 add fiveonecode/agent-skills \
--skill gemini-files-api --agent codex --global --yes
npx --yes skills@1.5.14 add fiveonecode/agent-skills \
--skill meeting-transcription --agent codex --global --yes
bash ~/.agents/skills/gemini-files-api/scripts/bootstrap.sh
For Claude Code, use the same two pinned commands with --agent claude-code;
the bootstrap path is ~/.claude/skills/gemini-files-api/scripts/bootstrap.sh.
The script resolves the Gemini wrapper from:
GEMINI_MM, when set;${HOME}/.agents/skills/gemini-files-api/scripts/gemini-mm.mjs;${HOME}/.claude/skills/gemini-files-api/scripts/gemini-mm.mjs;${HOME}/.codex/skills/gemini-files-api/scripts/gemini-mm.mjsfor legacy installs.
The bootstrap script follows the same root order and can be overridden with
GEMINI_MM_BOOTSTRAP.
The wrapper must support --model, --temperature, --max-output-tokens, --json, --prompt, and --file, and return JSON containing text plus usageMetadata. The orchestration script intentionally omits model-specific thinking controls because supported knobs and levels vary by Gemini model family; a caller-selected model uses its compatible default.
Canonical Command
Run the bundled script from the installed skill directory:
scripts/transcribe_meeting_audio.sh \
--input /absolute/path/to/meeting.m4a \
--work-dir /tmp/meeting-transcription-account-date
Defaults:
gemini-3.1-flash-liteprimary model;300second primary chunks;60second retry chunks;- original spoken language preserved;
- temperature
0and minimal thinking; - no persistent Gemini file retention.
Use --prepare-only to verify source metadata, hashing, and chunking without API calls. Use --resume after an interrupted run; chunk sets are reused only when their completion marker matches the files on disk. Add --rescue-model <model> only when one-minute retries still fail validation.
Validation Contract
The primary response is suspect when it has:
- empty text or invalid JSON;
- any candidate finish reason other than
STOP; - output tokens at the configured cap;
- long generated runs of
I,Yeah, oruh; - the same substantial line repeated at least five times.
Only suspect five-minute chunks are split into one-minute retries. The script exits non-zero before assembly while any retry remains unresolved. A stronger rescue model may process only those unresolved one-minute pieces.
Outputs
The work directory contains:
source-metadata.jsonandsource.sha256;chunks/,raw/,retry/, and optionalrescue/evidence;validation.tsv,retry-validation.tsv, andunresolved-parts.txt;accepted-rescue-parts.txt, which limits assembly to rescue outputs accepted by the current validation pass;assembled-transcript-body.mdwith global chunk anchors;usage.jsonwith modality token counts;run-manifest.jsonwith source and output identity.
Pricing is intentionally not hardcoded. Compare usage.json with current first-party pricing when cost reporting is required.
Evidence Rules
- Treat output as a rough AI transcript, not certified verbatim evidence.
- Preserve original languages; do not silently translate.
- Use generic speaker labels unless identity is grounded independently.
- Prefer
[unclear],[inaudible], or[overlapping speech]over invented content. - Keep raw audio, chunks, and API envelopes outside downstream repositories unless the user explicitly requests approved retention.
- Create temporary evidence with owner-only permissions and repair restrictive permissions before resuming an existing work tree.
- Reconcile names, numbers, dates, prices, and commitments against the source before downstream use.
Completion Gate
unresolved-parts.txtis empty.validation.tsvand retry/rescue reports were reviewed.assembled-transcript-body.md,usage.json, andrun-manifest.jsonexist.bash -n scripts/transcribe_meeting_audio.shpasses.scripts/test_transcribe_meeting_audio.shpasses, including managed-root dependency discovery, interrupted-split recovery, and malformed-response retry coverage.- A short spoken fixture passes the normal path and an injected repetition/output-limit fixture reaches the retry path.