Cada instancia self-hosted de Kodus envía un heartbeat anónimo por día aDocumentation Index
Fetch the complete documentation index at: https://docs.kodus.io/llms.txt
Use this file to discover all available pages before exploring further.
https://telemetry.kodus.io. La carga útil contiene únicamente
contadores agregados y metadatos de runtime — nunca código, identidades,
ni nada que pueda rastrearse hasta ti o tus usuarios.
Esta página documenta exactamente qué se envía, por qué, dónde se almacena
y cómo desactivarlo.
Qué enviamos
Un únicoPOST /v1/heartbeat por día UTC, ~700 bytes. Ejemplo de carga
útil (UUID redactado para mayor claridad):
400.
Qué nunca enviamos
Por diseño, el schema no puede transportar:- Correos electrónicos de usuarios, nombres, tokens OAuth, API keys
- Nombres de repositorios, branches, títulos de PR, mensajes de commit, contenido de código
- Cadenas que identifiquen al cliente (slugs de organización, nombres de workspace, dominios personalizados)
- Direcciones IP (el receiver aplica un hash al IP de origen con un salt rotado diariamente solo para detección de abuso y nunca persiste el IP en claro)
- Cualquier campo de texto libre
Por qué recopilamos esto
Los heartbeats anónimos nos permiten responder preguntas que de otra forma no podríamos responder para usuarios self-hosted:- Qué versiones de Kodus siguen en uso, y con qué rapidez se adoptan los nuevos releases
- Cómo despliegan los operadores (Docker / Kubernetes / bare metal), para priorizar las plataformas que la gente realmente usa
- Si funciones como Kody Rules llegan a los usuarios self-hosted
- Señales de volumen (PRs revisados en la flota, repos conectados) para dimensionar decisiones de capacidad
Inspecciona qué enviaría tu instancia
Antes de que cualquier heartbeat salga de tu instancia, puedes imprimir la carga útil exacta que el cron diario construiría:jq para explorar:
Desactivar la telemetría
DefineKODUS_TELEMETRY_DISABLED=true en tu entorno. El cron salta
silenciosamente — ningún heartbeat se envía, jamás, hasta que lo
revistas.
1, true,
yes, on. Cualquier otro valor (incluyendo vacío) mantiene la
telemetría activada.
Dónde residen los datos
- Receiver: un pequeño servicio Node.js (Fastify) desplegado en
telemetry.kodus.io. Código fuente público: kodustech/kodus-beacon. - Almacenamiento: Neon Postgres, región US, cifrado en reposo, solo
TLS. Dos tablas —
telemetry_instances(una fila por instancia, last seen + version) ytelemetry_heartbeats(una fila por instancia por día UTC, carga útil como JSONB). - Retención: las filas individuales de heartbeat se guardan durante 12 meses. Después de eso, agregamos los contadores en estadísticas históricas (p.ej. “X instancias activas en enero/2026”) y borramos las filas por día. La fila de la instancia permanece — no lleva series temporales, solo la versión más reciente + timestamp de last seen.
- Acceso: solo el equipo de ingeniería de producto, mediante credenciales individuales de Neon con auditoría. Los datos nunca se comparten con terceros y nunca se usan para entrenar ningún modelo de IA.
Código fuente que puedes auditar
Ambos extremos son abiertos y lo suficientemente pequeños para leerse de principio a fin:- Cliente (lo que se ejecuta en tu instancia): el cron, coletor y
transporte HTTP están en
libs/telemetry/yapps/worker/src/cron/self-hosted-beacon.cron.ts. - Servidor (lo que se ejecuta en
telemetry.kodus.io): el receiver completo son ~80 líneas de ruta Fastify + un upsert en Postgres. Ver kodustech/kodus-beacon.