# Voice Post Call > Procesamiento post-llamada de voz: convierte el transcript en una página del brain, publica el resumen en la mensajería del operador y archiva el audio. Fuente: https://skillsagentes.com/skills/garrytan/gbrain/voice-post-call Markdown: https://skillsagentes.com/skills/garrytan/gbrain/voice-post-call.md Repositorio: https://github.com/garrytan/gbrain Autor: garrytan Licencia: MIT Actualizado: hace 10 días Coste de contexto: 68 tok instalada, 1.8k tok al activarse, 1.9k tok con todos los archivos del bundle Bundle: 2 archivos, 7 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add garrytan/gbrain --skill voice-post-call --agent claude-code # Cursor npx -y skills add garrytan/gbrain --skill voice-post-call --agent cursor # Codex npx -y skills add garrytan/gbrain --skill voice-post-call --agent codex # Gemini CLI npx -y skills add garrytan/gbrain --skill voice-post-call --agent gemini # Windsurf npx -y skills add garrytan/gbrain --skill voice-post-call --agent windsurf # Cline npx -y skills add garrytan/gbrain --skill voice-post-call --agent cline ``` ## Qué hace - Transcribe la llamada con Whisper y genera un resumen de 3-5 frases - Crea o actualiza meetings/YYYY-MM-DD-call-.md con frontmatter, transcripción y resumen - Añade enlaces cruzados a people/.md o companies/.md para entidades mencionadas - Publica el resumen en la superficie de mensajería del operador (Telegram, Slack, Discord) - Archiva la referencia de audio de la llamada en la página del brain ## Cuándo usarla - Cuando termina una llamada de voz y hay que procesar el transcript - Cuando la persona de voz invoca log_to_brain durante la llamada (Path A) - Cuando se necesita un resumen de la llamada publicado en el canal de mensajería del operador ## Cuándo no - Para meetings multipersona (usar meeting-ingestion en su lugar) - Para memos de voz grabados de un solo sentido (usar media-ingest en su lugar) ## Qué la activa - "Resume la llamada que acaba de terminar" - "Procesa el transcript de la llamada de voz con Venus" - "Archiva el audio y publica el resumen de la call" ## Antes de instalar - Requiere que el operador habilite log_to_brain en tools-allowlist.local.json o implemente un manejador de fin de llamada en el host repo. - Variables de entorno: TARGET_REPO - reads environment config ## Archivos - SKILL.md — 7 KB - routing-eval.jsonl — 591 B ## SKILL.md Reproducido tal cual desde garrytan/gbrain bajo MIT. Esta sección es el documento original y está en inglés. # voice-post-call — Post-session transcript + summary handling > **Convention:** see gbrain's `skills/conventions/quality.md` for citation rules + back-link enforcement, and `skills/_brain-filing-rules.md` for the filing decision protocol. (These are not copied by the install; the relative paths resolve only if your host repo mirrors gbrain's skills layout.) ## Iron Law **Every call gets processed, even on tool-call failure.** The voice persona MAY log mid-session via an opted-in write tool, OR the call may end without that tool firing (model forgot, WebRTC dropped, browser crashed). A call-end handler should post a structured signal regardless so the brain still gets the transcript + audio reference — see "Two firing paths" below for which of these ships today and which the operator implements. If both paths fire (the tool call AND the call-end handler), the second one is idempotent — it sees the brain page already exists and updates instead of duplicating. ## The pipeline ``` 1. CAPTURE → MediaRecorder on the host repo's voice-agent service captures the full call audio (webm/opus) to /tmp/calls/-.webm. The browser client at /call?test=1 also captures via WebAudio-tee for E2E asserts; production /call uses server-side capture only. 2. TRANSCRIBE → Whisper (via gbrain transcription) processes the audio. Output: full transcript (timestamped) + speaker labels where possible. 3. SUMMARIZE → A separate LLM call produces a 3-5 sentence summary covering key topics, decisions, and unresolved items. 4. WRITE → Create or update meetings/YYYY-MM-DD-call-.md with: - frontmatter (date, persona, duration, ratings) - full transcript in a "Transcript" block-quote section - summary in a "Summary" section - audio link (file://, or signed URL if uploaded to storage) - any entity cross-links (people, companies mentioned) 5. CROSS-LINK → For each entity in the transcript (person, company), append a timeline entry to people/.md or companies/.md pointing back to this call page. Iron Law: per conventions/quality.md. 6. POST → Send the summary to the operator's messaging surface (Telegram, Slack, Discord — whichever is wired in $TARGET_REPO/.env). ``` ## Two firing paths (both operator-wired today) **Path A — Persona-initiated mid-call (opt-in):** The voice persona calls `log_to_brain` via the WebRTC data channel; the host-repo `/tool` endpoint dispatches through `tools.mjs`. `log_to_brain` is in `OPTIONAL_OPS`, not `READ_ONLY_OPS`, so this only works if the operator's `tools-allowlist.local.json` opts in (there is no `log_call_summary` tool — the override can only enable ops listed in `OPTIONAL_OPS`). **Path B — Call-end handler (not yet shipped):** The shipped `server.mjs` has **no automatic call-end handler** — nothing fires when the WebSocket / WebRTC connection closes. To get the safety-net behavior, implement a post-call handler in your host repo that reads the captured audio + transcript on connection close and runs the pipeline above. Until you do, Path A (opt-in) is the only firing path, and calls where the persona never logs are NOT processed. ## Brain page format ```markdown --- type: meeting subtype: voice-call persona: venus date: 2026-05-17 duration_sec: 124 caller: operator rating: 7 issues: [] audio_url: "file:///tmp/calls/2026-05-17-1029-venus.webm" created: 2026-05-17 --- # Voice call: 2026-05-17 with Venus > Brief 3-5 sentence summary of what was discussed and any decisions made. ## Summary [Agent-authored 3-5 sentence summary covering topics, decisions, action items.] ## Transcript > [Verbatim per-turn transcript with speaker labels and timestamps. Pure quote > — do not paraphrase. Block-quoted because the exact wording matters more > than a cleaned-up version.] 🔊 [Audio](file:///tmp/calls/2026-05-17-1029-venus.webm) ## Entities mentioned - [Person](people/.md) - [Company](companies/.md) ## Timeline - **2026-05-17 10:29 PT** | voice call with Venus, 124s, rating 7 — [topic] ``` ## Citation format ``` [Source: voice call with , YYYY-MM-DD HH:MM PT] ``` ## Anti-patterns - ❌ Paraphrasing the transcript. The verbatim text IS the signal; the summary is the agent's interpretation. - ❌ Skipping the audio archive step. Every call has a recoverable audio file. - ❌ Skipping entity cross-links when people/companies are mentioned. Iron Law fail. - ❌ Posting to messaging WITHOUT writing the brain page first. The messaging summary is a notification, not the canonical record. - ❌ Letting Path A's success suppress Path B. They MAY both fire; the second one is idempotent and serves as a redundant safety net. ## Related skills Ships with this bundle (sibling directories after install): - [voice-persona-mars](../voice-persona-mars/SKILL.md) — the persona that may invoke this - [voice-persona-venus](../voice-persona-venus/SKILL.md) — the other persona that may invoke this Lives in gbrain's `skills/` (present on the host only if your repo mirrors gbrain's skills layout): - `meeting-ingestion` — analogous flow for multi-party meeting transcripts (different in that voice-call is typically 1:1) - `media-ingest` — for recorded one-way voice memos (different from live voice calls) ## Contract This skill guarantees: - Routing matches the canonical triggers in the frontmatter. - The post-call pipeline runs idempotently — second invocations update rather than duplicate. - Output written under `meetings/` or `voice-calls/` (consistent with `_brain-filing-rules.md`). - Conventions referenced (`quality.md`, `_brain-filing-rules.md`) are followed. - Privacy contract preserved: no real names in any committed sample; the operator's actual call transcripts contain whatever they say, which is the operator's data and not gbrain's concern. ## Output Format ```markdown --- type: meeting subtype: voice-call persona: date: YYYY-MM-DD duration_sec: N caller: rating: 0-10 audio_url: "" --- # Voice call: with > ## Summary ## Transcript > 🔊 [Audio]() ## Timeline - **