Guías

Graba tus juntas con el Apple Watch y mándaselas a tus agentes IA

El pipeline real que armé para que cada junta termine como conocimiento estructurado en mi sistema. Cero costo de transcripción, cero suscripciones, máximo control.

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:

  1. Cuesta entre $15 y $30 USD al mes por cuenta.
  2. Tu audio pasa por servidores que no controlas.
  3. 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:

Convención de naming del archivo
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.

Instalar WhisperX en macOS
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.

Transcribir una junta con diarización
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.

Transcribir con Groq Whisper (curl)
curl https://api.groq.com/openai/v1/audio/transcriptions \
-H "Authorization: Bearer $GROQ_API_KEY" \
-H "User-Agent: prefieroai/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:

Prompt de estructuració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

Pipeline completo en un comando
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.