Hermes Intelligence · Decision-grade (T-deep)

Meeting Transcription Engine — Refresh & Verify

meet.boas.dev · 2026-07-07 · extends the 2026-05-18 landscape arc
Owning board: metis #26 → Epic #110 Track D · Phase-1 infra #41
Lane A — fast-path Lane B — bilingual IS/EN Lane C — freshness + claim-verify

One-line verdict. The powerful live-transcription engine you want already exists and is already chosen (skynet + jigasi). It hasn't shipped because of infrastructure — a GPU host and the self-host Jitsi cutover — not tool choice. Meetily is the stopgap standing in exactly that gap. Don't re-tool; unblock the infra.

TL;DR

1 · The blocker is infra, not tooling

Every Meetily complaint is exactly what skynet+jigasi fixes:

Meetily limitationskynet + jigasi
Processes background OS audioJoins the conference server-side; transcribes the live call
No speaker attribution (one mixed stream)Per-participant RTP stream → XMPP-roster name, before ASR
Doesn't slot into the pipeline/summarize + /action-items → write-back to the meetings, CRM, and task tables
Single-machine operator dependencyServer-side service beside the Jitsi deploy

Why it's not live: per metis #26 — Epic #110 all at 🔬/❌, D1 gated on metis-051 GPU host; meet.boas.dev still on JaaS 8x8.vc (Phase-1 self-host cutover to jitsi.boas.dev not done, #41). Jigasi cannot attach to JaaS — it needs Prosody VirtualHost + brewery-MUC + Jicofo config that 8x8's closed service doesn't expose. The self-host dependency is hard, not arbitrary.

2 · Speaker attribution — VERIFIED (code-level), PARTIAL in practice

MECHANISM CONFIRMED JVB is an SFU → Jigasi gets N separate RTP streams (one SSRC/speaker, no mixing). Transcriber.findParticipant(ssrc) routes each buffer to its own Participant carrying getName()/getEmail() from XMPP presence; skynet just echoes the speaker_id|lang tag. Stronger than acoustic diarization for "who said this."

PARTIAL Caveats the build must handle: (1) unmapped-SSRC segments are silently dropped (GitHub issue #91, open; jigasi has no release trail to confirm a fix) → instrument for drops; (2) getName() falls back to literal "Fellow Jitser" for presence-less participants; (3) no independent accuracy study — forum traffic is setup pain, not misattribution. Keep a diarization fallback.

Cross-lane note: a secondary source claimed Jigasi "mixes all audio into one stream." The jigasi source code refutes this — per-SSRC separation, no mix step. Primary source wins.

3 · "Ship today" options — and the self-host wall

OptionToday?Speakers?Self-host / privacyEffortCost
JaaS-native transcriptionYesYesNo — Google Cloud STT hopLow$0.06/min
Jigasi → JaaSNoneeds Prosody/Jicofo access
Custom participant-botPossible, no OSS toolIf builtSTT stays localMed-high buildinfra
Phase-1 self-host + skynet/jigasi (ratified)Blocked (GPU+cutover)YesFully self-hostedscopedinfra

Under self-host mandatory, JaaS-native is disqualified as a standing solution — viable only as a deliberate bridge. No off-the-shelf tool reaches live + speaker-labeled + self-hosted without the cutover or a custom bot. Recall.ai / Vexa / Attendee / MeetingBaas — none support Jitsi.

4 · Bilingual IS/EN — the new axis

skynet's streaming_whisper requires a per-stream language hint (no auto-detect) — and that constraint is the answer:

CONFIRMED-with-build In-meeting language toggle (Lane D, source-verified across jigasi + lib-jitsi-meet + skynet master). A participant fires a command to flip IS↔EN; transcription switches from that point forward.

5 · Freshness — nothing displaces the stack

6 · Recommendation & action plan

Headline: don't re-tool. Unblock the infra, close two small gaps, update the PRD with the verified caveats.

For metis (build owner, #110)

For the operator — one decision (bridge policy while self-host lands)

OptionWhat you getTrade
(a) Stay on MeetilyNo third-party hop; keep waitingNo speaker attribution in the interim
(b) Bridge on JaaS-nativeLive, speaker-attributed, ~1 day, $0.06/minAudio → Google Cloud STT (flex self-host, time-boxed)
(c) Custom participant-botSelf-host STT, no waitReal build; ≈ cost of finishing cutover, no durable result — dominated

Hermes rec: (a) or (b) depending on urgency for live speaker-attributed notes — and push metis-051 + #41 as the actual fix. (c) is dominated.

Hermes research · research/meeting-transcription-refresh-2026-07-07/ · commit 01c964b
Full per-lane citations (all fetched 2026-07-07): sources/A-fast-path.md · B-bilingual-streaming.md · C-freshness-verify.md
Two checks before a build decision rests on them: (1) EN-WER of the chosen IS checkpoint, (2) NVIDIA streaming-ASR dates. Neither gates the headline (code-verified + deep-read tiers).