El problema que esto resuelve
Tomar notas en una junta importante mientras estás presente en la junta es imposible. O escuchas bien, o anotas bien — ambas no. Y la opción “le pago a Otter / Fireflies / Read.ai” tiene tres problemas:
- Cuesta entre $15 y $30 USD al mes por cuenta.
- Tu audio pasa por servidores que no controlas.
- La estructura que te devuelve es genérica, no la que tus agentes consumen.
Después de probar varias opciones, armé un pipeline propio. Cero costo de transcripción, todo procesamiento local o usando los planes que ya pago, y la estructura del output la decido yo — porque la consumen mis agentes después. Así se ve hoy:
- Costo marginal
- $0
- Procesar 1h de audio
- ~6 min
- Privacidad audio
- 100%
01 — Captura
Graba la junta con el Watch o el iPhone, sin apps de pago
La captura es la parte más sencilla y la que más gente sobre-piensa. La regla simple:
- Si la junta es presencial: Voice Memos en el iPhone, lo dejas boca arriba sobre la mesa.
- Si estás en movimiento (caminando, manejando, café rápido): abres Voice Memos en el Apple Watch y grabas desde la muñeca. Sincroniza solo al iPhone después.
- Si la junta es por Zoom/Meet: activas la grabación local de la plataforma — no usas Voice Memos.
Voice Memos viene gratis, ya está en tu iPhone, y los audios suben automáticamente a iCloud — los ves en tu Mac sin tocar nada.
Naming híbrido al guardar
Una vez termina la junta, renombras el archivo en el iPhone con un prefijo de cliente:
helthe-onboarding-2026-05-15.m4a
blackout-revision-mensual-2026-05-12.m4a
lexjets-kickoff-2026-05-10.m4a
bdb-interna-yael-1to1-2026-05-09.m4a El prefijo de cliente es obligatorio. Si te equivocas o no aplica, lo nombras 'inbox-' y lo clasificas después.
02 — Transcripción
Transcribe el audio a texto sin pagar nada
Aquí tienes dos opciones igual de válidas. Yo uso WhisperX local en mi Mac porque ya está pagada y nunca sale el audio. Si no tienes Mac con GPU decente, Groq Whisper API es gratis hasta 30 horas al mes — que es muchísimo.
Opción A — 100% local con WhisperX
WhisperX es Whisper large-v3-turbo + pyannote para diarización (saber quién dice qué). Lo instalas una vez y se queda.
pip install whisperx
# luego configuras tu HuggingFace token para pyannote
huggingface-cli login Necesitas aceptar los términos de pyannote-3.1 en HuggingFace antes del primer run.
whisperx helthe-onboarding-2026-05-15.m4a \
--model large-v3 \
--language es \
--diarize \
--output_format srt \
--output_dir ./transcripts/ Una hora de audio se procesa en ~6 minutos en un Mac M2. El SRT te marca speaker (SPEAKER_00, SPEAKER_01, etc.) por segmento.
Opción B — Groq Whisper gratis
Si prefieres no instalar nada local, Groq tiene Whisper hosted gratuito hasta 30 horas/mes. Más rápido que local, pero el audio sí sube a sus servidores.
curl https://api.groq.com/openai/v1/audio/transcriptions \
-H "Authorization: Bearer $GROQ_API_KEY" \
-H "User-Agent: angelbauts/1.0" \
-F "file=@helthe-onboarding-2026-05-15.m4a" \
-F "model=whisper-large-v3" \
-F "language=es" \
-F "response_format=verbose_json" Groq exige header User-Agent (Cloudflare lo filtra si no viene). El JSON te devuelve segmentos con timestamps.
03 — Estructuración
Convierte la transcripción en conocimiento accionable
La transcripción cruda no sirve para nada todavía. Es un muro de texto sin jerarquía. El siguiente paso es pasarle ese texto a Claude (o el LLM que prefieras) para que lo convierta en una nota estructurada.
Aquí uso claude --print desde la CLI con el login activo de mi suscripción Claude Pro/Max — sin API key, sin costo marginal extra. Si no tienes Pro, usas la API key normal con modelo Haiku (es baratísimo para esto).
El prompt que uso
Lo guardo como ~/junta-pipeline/prompt.md y se lo paso a Claude junto con la transcripción:
Eres mi asistente de notas de juntas. Recibes una transcripción
con diarización (SPEAKER_00, SPEAKER_01, ...).
Devuelve un Markdown con esta estructura exacta:
## Asistentes
- <SPEAKER_00 → nombre real si lo deduces del contexto>
## Resumen ejecutivo
<3-5 bullets de qué se decidió>
## Action items
- [ ] <acción> · owner: <persona> · fecha: <YYYY-MM-DD>
## Acuerdos
- <acuerdo concreto>
## Temas pendientes para próxima junta
- <tema>
## Citas textuales relevantes
> "<frase memorable>" — <speaker>
NO inventes nada. Si algo no quedó claro en la transcripción, marca
"⚠️ pendiente de confirmar". El prompt está fijado intencionalmente. Cuando cambias el prompt, todas las notas viejas dejan de ser comparables.
Ejecutarlo desde la terminal
cat transcripts/helthe-onboarding-2026-05-15.srt | \
claude --print \
--system "$(cat ~/junta-pipeline/prompt.md)" \
> memory/juntas/helthe/2026-05-15-onboarding.md claude --print toma stdin como mensaje del usuario, usa el system prompt que le pasas, e imprime la respuesta a stdout. Lo rediriges al archivo final.
04 — Almacenamiento
Guarda el conocimiento donde tus agentes lo encuentren
El output del paso anterior es un Markdown estructurado. La pregunta clave: ¿dónde lo dejas para que tus agentes lo lean después?
Mi convención:
Folder por cliente
memory/juntas/<cliente>/<fecha>-<tipo>.md — la estructura por cliente facilita que el agente de ese cliente solo lea lo suyo. Sin mezclas, sin filtrado runtime.
INDEX.md global
memory/juntas/INDEX.md es un índice plano: una línea por junta con fecha · cliente · tema · link al archivo. El agente lo lee al inicio de cada conversación para tener contexto histórico.
Embeddings opcionales (Fase 5)
Si tienes mucho contenido (>50 juntas), agregas embeddings en Pinecone para búsqueda semántica cross-juntas. No es necesario al principio — Markdown plano es más que suficiente los primeros meses.
05 — Automatización
Conviértelo en un watcher que corre solo
Una vez que el pipeline funciona manual, lo automatizas con un watcher que detecta cuando llega un audio nuevo a tu carpeta de Voice Memos y dispara los pasos 2-4.
En macOS lo armas con launchd (un plist en ~/Library/LaunchAgents/). El script processor.py toma cada archivo nuevo, infiere cliente del prefijo del nombre, transcribe, estructura, y guarda.
06 — Cuidados
Qué cuidar para que esto no te explote en la cara
Retención de audios originales
Los audios crudos pesan. Una junta de 1 hora son ~30MB. Si grabas 30 juntas al mes, en un año tienes ~10GB en iCloud. Mi regla: borrar audios originales a los 90 días — la transcripción y la nota estructurada se quedan para siempre.
Datos sensibles
No grabes juntas sobre temas financieros personales, legales en curso, o despidos. Para esos temas, tomas notas manuales y punto. La fricción del pipeline no vale los riesgos.
Validación humana
Cada nota estructurada tiene un owner humano (tú o un asistente). Esa persona la lee y corrige antes de marcarla como “confirmada”. El LLM se equivoca — más seguido en nombres de personas mal pronunciados, en fechas, y en owners de acciones. Una revisión humana de 2 minutos por nota te ahorra incidentes.
Aviso de grabación
Si trabajas con clientes EU o tienes empleados europeos, la grabación tiene reglas más estrictas (GDPR). Antes de meter una junta con un cliente EU al pipeline, formaliza el aviso y el derecho de borrado.
Lo que te llevas
- Pipeline 100% propio, $0 de costo marginal real.
- Audio nunca sale de tu Mac si usas WhisperX local.
- Estructura del output la decides tú — porque la consumen tus agentes.
- Prefijo de cliente en el naming desde el momento de grabar.
- Aviso obligatorio antes de cada grabación.
- Manual primero, watcher después.