Privacidad de Anuncios en Terminal: Cómo Diseñamos Consentimiento y Redacción Primero
La privacidad de anuncios en terminal fue la restricción de la que partimos, no algo añadido después. Cuando decidimos explorar anuncios contextuales dentro de la terminal integrada de Tybre.md, la primera pregunta no fue "cómo ganamos dinero" sino "cómo construimos esto para que los secretos de un desarrollador nunca salgan de su máquina". Este artículo es un recorrido de ingeniería por ese diseño: por qué el sistema está desactivado por defecto, cómo funciona el consentimiento en dos pasos y cómo una pasada local de redacción en Rust enmascara secretos a ▮▮▮ antes de que un solo byte se envíe a ninguna parte.
Antes de nada, la parte honesta: este sistema todavía no te paga. La acumulación de ganancias está planeada, no activa; no hay retiro de dinero; y los anuncios propios que salen hoy pagan $0. Publicamos la arquitectura ahora, mientras la parte del dinero es solo andamiaje, precisamente para que el diseño de privacidad se juzgue por sí mismo.
Desactivado por defecto, siempre
El sistema de anuncios se distribuye deshabilitado. Una instalación nueva no muestra anuncios, no envía nada y no recopila nada. Nada del pipeline se ejecuta hasta que entras en ajustes y lo activas deliberadamente. Es lo contrario al defecto de la industria, donde la telemetría está activa hasta que buscas el interruptor para apagarla.
El desactivado por defecto importa más que cualquier control técnico concreto, porque significa que el estado seguro es el que obtienes sin tomar ninguna decisión. Quien nunca abre ajustes ni piensa en anuncios queda, por construcción, totalmente privado. Todo lo de abajo solo aplica a quien opta a propósito.
Consentimiento en dos pasos, no una casilla enterrada
Activar la función no es un único interruptor oculto en preferencias. Requiere dos pasos deliberados: una acción explícita de habilitar y luego una confirmación separada que detalla exactamente qué se recopila y qué no. Hay que pasar por ambos para activar algo.
Lo dividimos en dos a propósito. Un solo clic es demasiado fácil de hacer por accidente, y un consentimiento que se puede dar por accidente no es consentimiento. El segundo paso existe para que el momento en que podría empezar la recopilación sea un momento que elegiste con claridad, con los términos delante.
Redacción local en Rust, antes de que nada salga
El núcleo del diseño es dónde ocurre la redacción: enteramente en tu máquina, en la capa nativa de Rust, antes de cualquier llamada de red. Nada se envía en bruto para limpiarse en el servidor. El enmascarado corre primero en local, y solo el resultado enmascarado puede salir.
En concreto, la pasada de redacción escanea la entrada recopilada buscando cosas que parezcan secretos, claves de API, tokens y credenciales, y las reemplaza por ▮▮▮ en su sitio. Cuando el pipeline tiene algo que transmitir, las subcadenas sensibles ya desaparecieron. Hacerlo en Rust, en la misma capa que posee el PTY, significa que la redacción no es un añadido de JavaScript que un fallo de renderizado pueda saltarse.
Esto refleja la filosofía local-first del resto de la app. Igual que tus notas se quedan en disco, como describimos en notas markdown local-first, el sistema de anuncios trata tu máquina como la frontera de confianza.
Solo líneas de entrada enviadas, nunca pulsaciones ni salida
Una terminal ve mucho. Capturarlo todo sería trivial y erróneo: cada pulsación, cada salida, cada archivo que pasa. Deliberadamente no recopilamos nada de eso. Lo único que puede recopilarse es una línea de comando que enviaste de verdad pulsando Enter.
- No pulsaciones: escritura parcial, retrocesos y comandos abandonados nunca se capturan. Solo la línea final enviada con Enter cuenta.
- No salida: nada que impriman tus comandos, ni logs, ni contenidos de archivos, ni resultados entra en el pipeline.
- No contraseñas en prompts: los prompts interactivos que no hacen eco quedan fuera del camino de líneas enviadas.
- Incluso la línea enviada se redacta primero en local, así que un comando con un token lo enmascara a
▮▮▮antes de que algo se mueva.
Por qué esta forma y qué falta todavía
La arquitectura es así porque la relevancia contextual necesita casi nada. Para mostrar un anuncio relevante, por ejemplo, a quien usa Claude Code, el sistema solo necesita una señal gruesa de qué herramientas ejecutas, que una línea de comando enviada y redactada ya aporta. No necesita tus pulsaciones ni tus secretos, así que no los recopila.
Somos igual de claros con lo que no está construido. No hay un libro de ganancias real pagando dinero hoy, no hay retiro, y los anuncios en rotación son propios que generan $0. Para quien viene por el flujo de trabajo y no por las tripas, nuestra guía de flujo markdown con Claude Code es el complemento práctico de este análisis.
Preguntas frecuentes
¿El sistema de anuncios me da dinero ahora mismo?
No. La acumulación de ganancias está planeada pero no activa, no hay retiro y los anuncios propios actuales pagan $0. Lanzamos primero la arquitectura de privacidad y somos honestos: la parte de pago aún no existe.
¿Los anuncios están activados por defecto?
No. Se distribuye totalmente desactivado. Nada se recopila ni envía hasta que lo habilitas con un flujo de consentimiento en dos pasos, así que quien no toca el ajuste queda completamente privado.
¿Qué se recopila exactamente si opto por activarlo?
Solo líneas de comando que envías con Enter, y solo tras la redacción local en Rust que enmascara secretos. Pulsaciones, salida de comandos, contenidos de archivos y contraseñas en prompts nunca se recopilan.
¿Dónde ocurre la redacción de secretos?
En tu máquina, en la capa nativa de Rust, antes de cualquier petición de red. Los secretos se reemplazan por bloques opacos en local, así que las cadenas sensibles nunca salen del dispositivo.