← Yaps Meeting TranscriptionCONTENT HISTORY

Update to Yaps Meeting Transcription

Snapshot Sep 30, 2026 · 23:13 UTC · version 0.1.10

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "yaps-meeting-transcription",
  "description": "Transcribe meeting, interview, podcast, webinar, focus-group, or call recordings with timed speaker labels using the installed Yaps desktop engine. Use for meeting transcription, speaker diarization, who-spoke-when transcripts, correcting or reassigning segments, renaming/adding/merging speakers, exporting reviewed transcripts, generating recaps or chapters, and grounded Q&A over one or all local meetings. Do not use for live dictation, single-speaker plain transcription, subtitles, burned-in captions, or dead-space video cutting.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 225
    }
  ],
  "skill_md_contents": "---\nname: yaps-meeting-transcription\ndescription: Transcribe meeting, interview, podcast, webinar, focus-group, or call recordings with timed speaker labels using the installed Yaps desktop engine. Use for meeting transcription, speaker diarization, who-spoke-when transcripts, correcting or reassigning segments, renaming/adding/merging speakers, exporting reviewed transcripts, generating recaps or chapters, and grounded Q&A over one or all local meetings. Do not use for live dictation, single-speaker plain transcription, subtitles, burned-in captions, or dead-space video cutting.\n---\n\n# Yaps Meeting Transcription\n\nCreate an editable, speaker-labelled Yaps meeting project from one recording. Keep the project in Yaps so the user can review it visually in the Meeting tab and continue correcting it from the AI client.\n\n## Runtime compatibility\n\nDo not try to guess the host or its locality from a user-agent, product name,\nor another host signal (for example ChatGPT web versus ChatGPT desktop). Test\nthe capability this workflow actually needs: before account, model, dependency,\nor input-file checks, resolve the local Yaps CLI through the plugin runner. The\nrunner validates it with a bounded, read-only `status` command. A cloud shell\nthat cannot see the installed Yaps app is not local access to the user's\ncomputer.\n\nIf the Yaps CLI is unreachable, do not claim that Yaps is uninstalled and do\nnot begin repeated sign-in, model, or permission troubleshooting. Explain that\nthe current AI session cannot reach the Yaps engine installed on this computer.\nDirect the user to a local-capable session on the\ncomputer where Yaps is installed: in Claude, that\nis Claude Code or the Claude desktop app; from ChatGPT web or a cloud session,\n[download or open ChatGPT desktop](https://chatgpt.com/download/) and retry in a\nlocal-capable Work or Codex session. They can also access this feature directly\nin the Yaps application. If they are already in a local-capable desktop session,\noffer [Download or update Yaps](https://yaps.ai/download), ask them to open it,\nand retry. Stop until local reachability is restored; only then follow the\naccount and CLI readiness steps below.\n\n## Private operational diagnostics\n\nRun every local Yaps CLI command and every bundled workflow script through the\nplugin's `scripts/yaps-plugin-runner.mjs`. The runner resolves the installed\nYaps CLI when the command begins with `yaps`, preserves the command's normal\noutput and exit status, and leaves a small local diagnostic breadcrumb for the\nYaps desktop app:\n\n```text\nnode <plugin-root>/scripts/yaps-plugin-runner.mjs --action auth.status --stage authentication -- yaps auth status --pretty\n```\n\nChoose a stable, content-free action such as `cli.reachability`,\n`auth.status`, `features.list`, `dictation.setup`,\n`transcription.run`, or `export.create`; use the matching stage:\n`reachability`, `authentication`, `readiness`, `execution`, or\n`export`. In the rest of this skill, every direct `yaps` / `yaps_cli`\ncommand and provided script invocation means the equivalent runner-wrapped\ncommand. If Node or the runner itself is unavailable, continue the requested\nworkflow directly; diagnostics must never prevent the feature from working.\n\nThe breadcrumb may contain only plugin ID/version, detected integration host,\naction, stage, attempt/outcome, duration, and a fixed safe error category. It\nmust never contain the user's prompt or conversation, command arguments,\nstdout/stderr, credentials, file paths or names, audio, transcript/note text,\nor raw error messages. It is written only when Yaps has supplied an opaque\nsigned-in owner marker, stays on-device while offline, and is picked up later\nby the Yaps app. Never create or guess an owner marker.\n\n## CLI discovery contract\n\nAlways invoke Yaps through `scripts/yaps-plugin-runner.mjs`; do not locate the\nbinary by hand. The runner honors an explicit path or `YAPS_CLI_BINARY`, then\nchecks `PATH`, then the verified Yaps app locations on macOS, Windows, and\nLinux. It accepts a candidate only after a bounded, read-only `status` check.\nNever ask the user to install a separate CLI, edit `PATH`, or configure MCP for\nthis skill. Never invoke the macOS GUI binary at\n`Yaps.app/Contents/MacOS/yaps`. If discovery fails, repeat the runner's specific\nrecovery guidance instead of claiming that the plugin is disconnected.\n\n## Account and CLI readiness\n\nYaps desktop 2.3.848 or newer supplies the current meeting commands, local models, project library, account state, and usage controls. Let the runner resolve and validate the CLI automatically. Run `meeting --help` after discovery. If it lacks `summarize`, `chapters`, `ask`, `speakers`, `merge-speakers`, or `add-speaker`, update Yaps before attempting those verbs.\n\nNever request Yaps credentials or payment details in the AI client. Yaps has no free tier. Require an active free trial or Yaps Pro, and let Yaps determine trial eligibility and current offer terms.\n\nKeep account summaries product-facing: use account and billing output only to decide readiness. Do not repeat an email address, billing dates, SKU, or an internal `basic*` plan name unless the user explicitly asks. Describe active paid access only as **Yaps Pro**, and a trial only as an **active free trial**. Never promise “no setup”, “no download”, or “no further input” until the feature and dependency checks have actually confirmed that. When checking several paths in one shell command, evaluate each result separately; one missing input must not be reported as a missing Yaps installation.\n\n## Account recovery\n\nThe runner follows a valid `recommended_settings_path` automatically and uses\nit for the requested command. If the signed-in desktop account cache is\ntemporarily incomplete, it safely wakes the verified installed Yaps app and\nrechecks for a bounded time. Do not copy settings paths, construct app paths,\ntell the user to edit `PATH`, or ask them to reconnect the plugin. A different\nClaude or ChatGPT account email is irrelevant; never compare it with the Yaps\nemail or ask the user to create a second account.\n\nSafe automatic account handoff requires Yaps 2.3.124 or newer. The runner\nrefuses the older credential-based account check and gives update guidance\nwithout touching Keychain. `auth status` must not request a credential or\ndisplay a Keychain prompt. Never\nask the user to enter their macOS login password or approve a credential\nprompt. If `credential_unavailable` or `keychain_unavailable` appears, repeat\nthe runner's app-update guidance. If `credential_missing`, `cached_offline`,\n`verification_unavailable`, `account_cache_incomplete`, `refresh_failed`, or\n`profile_lookup_failed` remains after the runner's automatic wake and retry,\nreport its exact network/cache guidance. Do not add a manual reconnection step.\nOnly `unauthenticated` / `signed_out` means sign-in is needed.\n\nFollow this order when setup is incomplete:\n\n1. Confirm through the runner that Yaps 2.3.848 or newer is installed. Do not ask the user to open it before downloading models or processing the recording.\n2. Run `yaps auth status --pretty`.\n3. Continue only when `authenticated` is `true` and `status` is `active`.\n4. If unauthenticated, ask the user to sign in or create an account inside Yaps, then check again.\n5. Do not run `auth billing` as an automatic gate. For another inactive state, direct the user to Yaps's account screen, which shows any available trial or Yaps Pro renewal without exposing a credential. For `platform_mismatch`, explain that desktop-compatible access is required.\n6. Run `yaps features list --pretty` and inspect the `meeting` entry.\n7. If Sherpa is missing, explain the model download and ask once for approval. After approval, run `yaps features meeting --enable`, verify readiness, and resume the original task automatically.\n8. On Apple Silicon only, offer the faster long-meeting option and its additional download size. After approval, install it with `yaps features meeting --enable --engine moss`. Never offer or attempt MOSS on Windows, Linux, or Intel Mac.\n9. Resolve the exact recording and confirm it exists.\n\n## Choose an engine\n\n- Use `auto` by default.\n- Auto uses MOSS for an imported meeting of at least five minutes only when MOSS is installed, the user did not provide a speaker count, and the machine supports it. Otherwise it uses Sherpa.\n- Use `sherpa` when the user provides the optional number of people, needs cross-platform behavior, or explicitly selects Sherpa. Accept 1–20 people.\n- Use `moss` for a longer meeting on Apple Silicon when it is installed. MOSS detects speakers itself, so do not pass a speaker-count hint.\n- Assume one spoken language per recording. Do not split a meeting into per-language jobs.\n\n## Transcribe\n\nUse the bundled script. Claude Code exposes the plugin directory through `CLAUDE_PLUGIN_ROOT`; in another host, resolve `<plugin-root>` to the installed plugin directory:\n\n```text\npython3 \"$CLAUDE_PLUGIN_ROOT/scripts/transcribe_meeting_with_yaps.py\" <recording> --engine auto\npython3 <plugin-root>/scripts/transcribe_meeting_with_yaps.py <recording> --engine auto\n```\n\nUseful options:\n\n```text\n--title \"Weekly product meeting\"\n--speakers 4\n--engine sherpa\n--engine moss\n--yaps-cli /explicit/path/to/yaps_cli\n```\n\nFor a video, the script first asks Yaps to extract a temporary WAV, then creates the meeting project and removes only that temporary working copy. The durable project keeps its own audio copy.\n\nReturn the meeting ID, engine and selection reason, duration, detected speaker count, segment count, project path, and the path of the persisted project audio. Do not claim success when no segments were produced.\n\n## Review and correct\n\nInspect stable segment IDs before editing:\n\n```text\nyaps meeting show <meeting-id> --pretty\n```\n\nCorrect only the requested segment text:\n\n```text\nyaps meeting correct <meeting-id> --segment seg-3 --text \"Corrected wording.\"\nyaps meeting correct <meeting-id> --segment seg-3 --text-file \"/path/correction.txt\"\n```\n\nUse either `--text` or `--text-file`, never both.\n\nReassign one segment to a 1-based speaker number:\n\n```text\nyaps meeting assign <meeting-id> --segment seg-3 --speaker 2\n```\n\nRename that speaker everywhere:\n\n```text\nyaps meeting rename-speaker <meeting-id> --speaker 2 --name \"Priya\"\n```\n\nExport the corrected speaker transcript:\n\n```text\nyaps meeting export <meeting-id> --output \"/path/Meeting transcript.md\"\n```\n\nNever rewrite the project JSON directly. Use the meeting commands so Yaps regenerates all companion transcript artifacts consistently. Suggest opening **Yaps → Meeting** for waveform playback, visual previews, notes, and larger correction passes.\n\n## Review speakers in bulk\n\nInspect the roster before any whole-meeting speaker edit:\n\n```text\nyaps meeting speakers <meeting-id> --pretty\n```\n\nThe returned speaker numbers are 1-based and match `assign`, `rename-speaker`, and `merge-speakers`. Present each name, segment count, speaking time, and first line when the mapping is not obvious.\n\nMerge diarization fragments only after the user confirms which labels are the same person:\n\n```text\nyaps meeting merge-speakers <meeting-id> --speakers 3,4 --into 2 --name \"Priya\"\n```\n\nThis rewrites every affected segment in the meeting. Never infer identity from voice alone, and never merge on an ambiguous name. Omit `--name` to keep the target label. To rename without absorbing another label, use `rename-speaker` rather than an empty merge.\n\nIf diarization missed a participant, add an empty roster entry and then assign only the confirmed segments:\n\n```text\nyaps meeting add-speaker <meeting-id> --name \"Marcus\"\nyaps meeting assign <meeting-id> --segment seg-7 --speaker 4\n```\n\n## Recaps, chapters, and questions\n\nBuild the structured on-device recap before requesting chapters:\n\n```text\nyaps meeting summarize <meeting-id>\nyaps meeting summarize <meeting-id> --template general\nyaps meeting chapters <meeting-id>\n```\n\nSummarization can take minutes because it processes the full transcript with the local chat model. Reuse an existing recap by default. Pass `--refresh` only when the user explicitly requests regeneration or the transcript/template changed materially. If Yaps reports that the chat model is missing, explain the download and obtain approval before installing it. Never represent generated recap text as verbatim transcript.\n\nAsk one meeting a grounded question:\n\n```text\nyaps meeting ask \"What did we decide about launch timing?\" --meeting <meeting-id> --scope meeting\n```\n\nSearch every local meeting only when the user requests cross-meeting scope:\n\n```text\nyaps meeting ask \"Which meetings mentioned data residency?\" --scope all\n```\n\nDo not silently broaden a one-meeting question to `--scope all`. Keep returned meeting/segment citations with the answer and say when the evidence is insufficient.\n\n## Generalist Yaps mode\n\nMeeting transcription is this plugin's default focus, not a boundary around what it can do. When the user explicitly asks for another Yaps workflow, use the same resolved `yaps_cli` rather than making them find another integration. The full local surface is:\n\n```text\nstatus\nsettings list|get|set|unset\nauth status|usage|billing\nfeatures list|dictation|cleanup|reading|subtitles|auto-captions|auto-cut|audio-cleaner|text-in-between|background-removal|translation|meeting\nvault status|list|get|create|update|move|rename|delete|search|search-semantic|daily-open|create-from-template|history-list|history-restore|pin|folders|tags|mentions|backlinks\nspeech synthesize (alias: tts)\nsrt generate\nmeeting transcribe|show|correct|assign|rename-speaker|export|summarize|chapters|ask|speakers|merge-speakers|add-speaker\ncaptions styles|create|show|correct|replace|split|merge|style|reset|render|verify\ncut presets|verify|create|list|show|plan|export-plan|set|redetect|render|delete (alias: autocut)\nmedia extract-audio|remove-background|generate-image\naudio clean\ntranslate\nhistory-list\nusage-local\n```\n\nRun `<cli> --help` and the relevant group help before an unfamiliar workflow. If the session cannot reach the local CLI (for example ChatGPT web), offer a local-capable session — Claude Code, or [ChatGPT desktop](https://chatgpt.com/download/) for a Work or Codex task — or offer to guide the user through the same workflow in **Yaps → Meeting**.\n\n## Friendly completion and discovery\n\nLead with a warm outcome such as “Done — your meeting transcript is ready,” then give a short summary and the next useful action. Link exports and report useful metadata; do not dump raw JSON or internal plan names. After a successful task, add one compact **More with Yaps** section with up to three relevant next steps, such as correcting speakers, exporting SRT captions, or saving the transcript to the vault. Skip it after a failure, a decline, or when the user asks for a terse result.\n\n## Boundaries\n\n- Confirm the user has permission to transcribe the participants; do not imply Yaps supplies consent.\n- Use Yaps Transcription for a plain single-speaker transcript.\n- Use Yaps SRT for timestamped subtitle files and Yaps Auto Captions for styled captions burned into a video.\n- Use Yaps Video Clipping for dead-space removal and Auto Cut projects; do not treat meeting transcription as a video editor.\n- Do not upload the recording to a hosted transcription service as a silent fallback.\n- Do not promise perfect speaker identity. Report detected labels, and use corrections or reassignment when the user identifies an error.\n- Do not delete the source recording.\n"
}

SHA-256: 8e55c9c91dbb3621b797a1701e4099ef76556a3123d016716ce9a045c665d61f