PTENES
MÓDULO 2.1

🧰 Requisitos previos y cuentas

Antes de construir: instala lo básico, crea las cuentas (Supabase, Telegram, OpenAI, Gemini, WHOOP) y armar el ~/.env. Cada pieza con su porqué, para que sepas qué estás conectando antes de seguir con la base de datos.

7
Temas
~35
Minutos
Intermedio
Nivel
Práctico
Tipo
Tu progreso en este módulo 0% · 0 de 7
1

🐍 Qué instalar en la máquina

El HealthOS es deliberadamente simple: los scripts son Python puro (stdlib) — solo el advice.py pide pip install requests. Antes de crear cualquier cuenta, deja cuatro herramientas básicas listas en la máquina. Las instalas una vez y sigues con el resto.

🟢 ¿Nuevo por aquí? Dos términos antes de continuar

  • CLI — «interfaz de línea de comandos»: un programa que ejecutas escribiendo en la terminal, sin una ventana gráfica. El Supabase CLI es lo que envía la base de datos a la nube mediante un comando.
  • Runtime — el "motor" que ejecuta un tipo de código. Python ejecuta los scripts; Node ejecuta el agente y el servidor del dashboard.
🐍 Python 3.9+ 🟢 Node 🎬 ffmpeg (clips) 🗄️ Supabase CLI ✅ Entorno listo para construir tu HealthOS

📊 Cómo leer: las cuatro herramientas básicas (cian, a la izquierda) solo necesitan existir una vez. Python y Node son obligatorios; ffmpeg solo hace falta si vas a generar clips de entrenamiento; Supabase CLI envía la base de datos en la Ruta 2.2.

Herramienta¿Obligatoria?Para qué
Python 3.9+SíEjecuta los scripts (stdlib). Solo advice.py usa pip install requests.
NodeSíEjecuta el agente y el servidor del dashboard.
ffmpegOpcionalSolo para exercise_clip.py (clips de demostración de entrenamiento).
Supabase CLISíAplica las migrations (crea las 14 tablas); se usó en la 2.2.
▶Objetivo: confirmar que Python y Node estén instalados (y en las versiones correctas)
python3 --version && node --version
Cómo verificar: debe imprimir dos líneas, p. ej.: Python 3.11.6 e v20.11.0. Si Python aparece por debajo de la versión 3.9 o muestra "command not found", instálalo o actualízalo antes de continuar. (ffmpeg y Supabase CLI: comprueba con ffmpeg -version e supabase --version — el primero solo si vas a usar clips.)

Conceptos clave

Stdlib

Los scripts no dependen de paquetes externos (casi no hay nada que instalar).

Python + Node

Los dos motores obligatorios: scripts y agente.

ffmpeg opcional

Solo para clips de entrenamiento.

Supabase CLI

Impulsa la base de datos; protagonista de la 2.2.

2

☁️ Crear el proyecto privado de Supabase

O Supabase es donde se almacenarán TODOS tus datos de salud —comida, entrenamiento, peso, análisis, signos vitales, metas y la memoria de los mensajes. Por eso tiene que estar privado, en tu cuenta. Aquí solo creas el proyecto y guardas cuatro secretos; crear las tablas es el paso 2.2.

🟢 ¿Nuevo por aquí?

Supabase es una base de datos PostgreSQL en la nube + almacenamiento de archivos, con un panel web. Piensa en él como el «disco duro del coach»: todo lo que registras se convierte en una fila ahí, y el agente consulta esos datos en cada conversación.

1

Crea la cuenta y un proyecto nuevo

En supabase.com, «New project». El plan gratuito es suficiente para una persona.

2

Elige una región adecuada

Prefiere la región más cercana a ti (menos latencia). Para Brasil, normalmente South America (São Paulo).

3

Define y guarda la contraseña de la base de datos

La contraseña de la base de datos se convierte en el SUPABASE_DB_PASSWORD — Supabase CLI la necesitará en la 2.2 para enviar las migrations.

4

Copia la URL y las claves (Settings → API)

Obtén el SUPABASE_URL, a SUPABASE_ANON_KEY (pública) y la SUPABASE_SERVICE_ROLE_KEY (servidor). Guárdalo para el tema 6.

🔒 Anon × Service-role — dos claves, dos mundos

A anon es pública; con la RLS activada y sin políticas (lo haces en la 2.2), no lee nada. A service-role es la clave del servidor: ignora la RLS y tiene acceso total. Por eso, el rol de servicio nunca va al navegador ni a git — solo al ~/.env.

Conceptos clave

Privado

El proyecto es tuyo, en tu cuenta.

Región

Cerca de ti = menos latencia.

Contraseña de la base de datos

Se convierte en DB_PASSWORD para las migrations.

URL + 2 claves

Anon pública, service-role del servidor.

3

🤖 Crear el bot en Telegram (@BotFather)

Telegram es la puerta de entrada del coach: conversas por mensaje. Para que esto exista, creas un bot con el @BotFather (el "bot oficial que crea bots") y obtén su token: el HEALTH_BOT_TOKEN.

1

Abre @BotFather en Telegram

Busca @BotFather (el verificado, con la insignia azul) e inicia la conversación.

2

Envía /newbot y nombra

Elige un nombre para mostrar y un username que termine en bot (p. ej.: meu_health_os_bot).

3

Copia el token que te da

Viene algo como 123456789:AAH...xyz. Este es el HEALTH_BOT_TOKEN — guárdalo para el tema 6.

⚠️ El token es la llave de la puerta

Cualquiera con el HEALTH_BOT_TOKEN controla tu bot. No lo pegues en un chat ni lo subas a git. Si se filtra, usa /revoke en @BotFather para generar uno nuevo en el momento.

💡 Dónde se usa el token

Además de ~/.env, el agente apunta a esa variable en el agent.yaml (campo telegram_bot_token_env). De hecho, activas esto en la Trilha 2.3: aquí solo necesitas tener el token a mano.

Conceptos clave

@BotFather

El bot oficial que crea tu bot.

/newbot

Comando que genera el bot y el token.

HEALTH_BOT_TOKEN

La clave de la puerta de entrada.

/revoke

Cambia el token si se filtra.

4

🔑 Claves de OpenAI y Gemini

Dos claves cubren dos trabajos diferentes. La OpenAI genera los embeddings de la memoria (es como el coach recuerda tu historial). El Gemini (Google) hace la visión: transforma la foto de una comida o de un análisis en datos.

🟢 ¿Nuevo por aquí?

Embedding es convertir un texto en un vector de números que captura el «sentido». Los mensajes parecidos se convierten en vectores cercanos —así es como el coach encuentra lo que dijiste hace semanas (memoria semántica), en vez de guardar solo lo último que dijiste.

🧠 OPENAI_API_KEY

  • •Crea en platform.openai.com → Claves de API.
  • •Usada para embeddings de la memoria semántica.
  • •El costo de los embeddings es de centavos.

📸 GOOGLE_API_KEY

  • •Crea en aistudio.google.com → Obtener clave de API.
  • •Visión Gemini: foto de comida → macros, análisis → marcadores.
  • •Costo de centavos por foto.

💰 Cuánto cuesta

Para una persona, el uso típico ronda US$ 10–20/mes sumando las llamadas de LLM, con embeddings y visión, en centavos. Configura un límite de gasto en cada cuenta para dormir tranquilo.

Conceptos clave

Embeddings

OpenAI: la base de la memoria semántica.

Visión

Gemini: la foto se convierte en datos estructurados.

Dos cuentas

OpenAI y Google AI Studio.

Barato

Centavos por foto/embedding.

5

⌚ Cuenta WHOOP + app de desarrollo (opcional)

WHOOP es el ejemplo de wearable del blueprint, pero es 100% opcional. El mismo patrón (OAuth + sync diario) sirve para Oura, Garmin, Fitbit o el registro manual. El coach y el dashboard trabajan con lo que aparezca en la tabla vitals, venga de donde venga.

🟢 ¿Nuevo por aquí?

OAuth es el apretón de manos que permite que tu app lea tus datos en la WHOOP sin guardar tu contraseña. Autorizas una vez; WHOOP devuelve un refresh_token que el sync usa (y rota) cada mañana.

✓ Tiene WHOOP

  • ✓Crea una app en developer.whoop.com.
  • ✓Obtén el WHOOP_CLIENT_ID e o WHOOP_CLIENT_SECRET.
  • ✓La API es gratuita con la suscripción. El REFRESH_TOKEN la callback se completa en la 2.4.

○ No tienes WHOOP

  • ○Deja las tres variables WHOOP_* vacías.
  • ○Usa otro wearable con el mismo patrón o registra manualmente la recuperación y el sueño.
  • ○Todo lo demás del curso funciona igual.

💡 Dos trampas que la 2.4 resuelve

Cuando actives la sincronización de verdad (Ruta 2.4), hay dos cosas que pueden complicarse: Cloudflare bloquea el user-agent predeterminado de Python (envía uno de navegador) y el refresh-token debe ser rotado en cada run. Aquí solo necesitas tener las credenciales; el resto viene después.

Conceptos clave

Opcional

Cualquier fuente sirve, incluso manual.

App dev

Genera CLIENT_ID y CLIENT_SECRET.

OAuth

Autoriza sin guardar la contraseña.

Tabla vitals

El destino común de cualquier wearable.

6

📄 El archivo ~/.env

Todo lo que reuniste — token, URL, claves — converge en un único archivo: o ~/.env, en tu home (el ~ es el atajo a tu carpeta de usuario). Se encuentra fuera de git, siempre. El agente lee los secretos desde ahí para funcionar.

☁️ Supabase (URL+keys) 🤖 Telegram (token) 🧠 OpenAI (key) 📸 Gemini (key) ⌚ WHOOP (opcional) 📄 ~/.env un archivo, en tu home 🤖 Agente lee los secretos y ejecuta

📊 Cómo leer: las cinco fuentes (cian, a la izquierda) vierten sus claves en un solo lugar — el ~/.env (azul, en el centro). El agente solo lee este archivo. WHOOP aparece con línea discontinua porque es opcional.

Todas las variables y para qué sirven

VariablePara qué
HEALTH_BOT_TOKENToken del bot de Telegram (de @BotFather).
SUPABASE_URLDirección de tu proyecto: https://<ref>.supabase.co.
SUPABASE_SERVICE_ROLE_KEYAcceso del servidor a la base de datos (ignora la RLS). Nunca en el navegador.
SUPABASE_ANON_KEYClave pública — con RLS activada, no puede leer nada.
SUPABASE_DB_PASSWORDContraseña de la base de datos para que Supabase CLI ejecute las migrations.
OPENAI_API_KEYEmbeddings de la memoria semántica.
GOOGLE_API_KEYVisión Gemini (foto de comida / examen / entrenamiento).
DASHBOARD_TOKENProtege el dashboard web (un secreto aleatorio tuyo).
WHOOP_CLIENT_IDID de tu app WHOOP (opcional).
WHOOP_CLIENT_SECRETSecreto de tu app de WHOOP (opcional).
WHOOP_REFRESH_TOKENLa escribe la callback OAuth y se rota con cada sincronización.
▶Objetivo: crear el ~/.env completo (cambia las partes en <...> por tus valores)
# ~/.env — segredos do HealthOS. NUNCA versionar (fica na home, fora do git).

# Telegram (do @BotFather)
HEALTH_BOT_TOKEN=<seu-token-do-botfather>

# Supabase (Settings -> API e Database)
SUPABASE_URL=https://<project-ref>.supabase.co
SUPABASE_SERVICE_ROLE_KEY=<service-role-key>
SUPABASE_ANON_KEY=<anon-public-key>
SUPABASE_DB_PASSWORD=<senha-do-banco>

# Modelos
OPENAI_API_KEY=<sk-...>
GOOGLE_API_KEY=<sua-chave-gemini>

# Dashboard
DASHBOARD_TOKEN=<um-segredo-aleatorio-seu>

# WHOOP (OPCIONAL — qualquer wearable ou registro manual serve)
WHOOP_CLIENT_ID=<client-id-do-app-whoop>
WHOOP_CLIENT_SECRET=<client-secret-do-app-whoop>
WHOOP_REFRESH_TOKEN=<deixe-vazio-a-callback-preenche>
Cómo verificar: guarda como ~/.env. La recomendación para el repo es copiar de agent/.env.example y completar. No quedó ningún <...>? Entonces está listo para el siguiente paso.
▶Objetivo: confirmar que el archivo existe y que las claves están completas
# 1) o arquivo existe?
ls -l ~/.env

# 2) nenhum valor ficou como placeholder <...>?
grep -n '<' ~/.env || echo "OK: nenhum placeholder sobrando"
Cómo verificar: o ls debe listar el archivo (si aparece "No such file", no está en el directorio home). El grep debe imprimir OK: nenhum placeholder sobrando — si enumera filas, todavía hay <...> para intercambiar.

⚠️ Nunca hagas commit del ~/.env

  • •Vive en tu inicio (~/.env), nunca en un .env dentro del proyecto.
  • •Fuera de Git, siempre. Quien tenga estas claves tiene acceso a tus datos de salud.
  • •Si se filtra una clave, revócala y genera otra de inmediato en la cuenta de origen.

Conceptos clave

Un archivo

Todo converge en el ~/.env.

En la página de inicio

~/.env, no dentro del proyecto.

Fuera de Git

Los secretos nunca se versionan.

11 variables

3 de ellas (WHOOP) opcionales.

7

✅ Lista de verificación de preparación

Antes de seguir con la base de datos (Módulo 2.2), confirma que cada pieza esté en su lugar. El diagrama de abajo muestra qué va dónde — qué clave alimenta cada capacidad del coach. Si todo eso está listo, ya puedes empezar.

LA CLAVE LA CAPACIDAD HEALTH_BOT_TOKEN SUPABASE_* (url+keys) OPENAI_API_KEY GOOGLE_API_KEY WHOOP_* (opcional) 💬 Conversación en Telegram 🗄️ Base de datos + memoria (Supabase) 🧠 Memoria semántica (embeddings) 📸 Visión: la foto se convierte en datos ⌚ Wearable: recuperación, sueño

📊 Cómo leer: cada clave de la izquierda (cian) conecta UNA capacidad del coach de la derecha (azul). Si falta la de la izquierda, la de la derecha no se activa. Solo la última fila (WHOOP) es opcional — sin ella, el coach funciona igual, con registro manual.

✅ Estás listo si…

  • ✓python3 --version ≥ 3.9 e node --version responden.
  • ✓Proyecto privado de Supabase creado en una región adecuada; URL + 2 claves + contraseña de la base de datos guardadas.
  • ✓Bot creado en @BotFather; HEALTH_BOT_TOKEN en la mano.
  • ✓OPENAI_API_KEY e GOOGLE_API_KEY creadas.
  • ✓(Opcional) Creaste la app de WHOOP o decidiste registrar los datos manualmente.
  • ✓~/.env armado y verificado — sin ningún <...> sobrando.

✅ Autoevaluación (opcional): ¿dónde deben estar tus claves y secretos de HealthOS?

Conceptos clave

Qué va en cada lugar

Cada clave activa una capacidad.

Si falta = se borró

Sin la clave, la capacidad no se activa.

WHOOP opcional

La única línea que puede quedar vacía.

Listo p/ 2.2

Todo listo → vamos a la base de datos.

📋 Resumen del módulo

✓
Instala lo básico — Python 3.9+ y Node (obligatorios), ffmpeg (solo clips) y Supabase CLI. Los scripts usan la biblioteca estándar; solo advice.py requiere requests.
✓
Crea las cuentas — Supabase privado (URL + 2 claves + contraseña), bot en @BotFather (token), OpenAI (embeddings) y Gemini (visión).
✓
WHOOP es opcional — sirve cualquier wearable o registro manual; todo va a la tabla vitals.
✓
Todo converge en ~/.env — un archivo en tu directorio home, fuera de git; el agente lee los secretos desde allí.
✓
Qué va en cada lugar — cada clave activa una capacidad del coach; sin ella, esa parte no funciona.

Próximo módulo:

2.2 — La base de datos: aplicar las migraciones en Supabase, habilitar pgvector, crear las 14 tablas y el bucket de fotos, y bloquear todo con RLS.