> desktop_buddy
Arquitectura del firmware

Un bicho de
escritorio

Desktop Buddy es un compañero de escritorio abierto sobre ESP32. Tiene cara, hace ruiditos, reacciona a las caricias y conversa gracias a un modelo de lenguaje. Por dentro es un núcleo estable en C++ que casi nadie toca, y una capa de comportamiento hecha de datos que todos editan. Esta es su anatomía.

Primero el dispositivo Nunca se apaga del todo El comportamiento es data Extensible por diseño
SSD1306 · 128×64 · ojos paramétricos en vivo
La espina dorsal

Todo es un evento en el bus

Ningún componente llama a otro directamente. Un sentido publica un evento; quien quiera reaccionar se suscribe. Un solo hilo reparte los eventos, así que los manejadores nunca pelean por candados. Este desacople es lo que permite agregar un sensor nuevo sin tocar nada de lo existente.

Nomenclatura

Eventos y acciones tienen forma fija

Los eventos se nombran sentido.qué y las acciones objetivo.verbo(). El prefijo dice quién lo emite.

touch.pet · nfc.tag · timer.idle_5m
face.emotion() · sound.chirp() · led.mood()
Suscripción con comodín

Escuchá uno o una familia entera

Un reflejo puede escuchar touch.pet exacto, toda la familia touch.*, o absolutamente todo con * (así funciona el tracer de depuración).

bus.subscribe("touch.*", fn)
El vocabulario del framework

Cuatro primitivos, y nada más

Toda funcionalidad tiene que presentarse como uno de estos cuatro. Es la regla que mantiene el proyecto entendible mientras crece con muchas manos.

Entrada

Sentidos

Convierten el mundo en eventos: tacto, NFC, micrófono, sensores, temporizadores.

→ touch.pet
→ nfc.tag
Salida

Expresiones

Consumen acciones: la cara en pantalla, sonidos, LED de humor, y luego motores.

face.emotion()
led.mood()
Lógica local

Reflejos

Scripts en Berry: evento → acción, con recarga en caliente. Acá vive el 90% del hackeo. Funcionan sin red.

buddy.on("touch.pet", …)
Vía LLM · v2+

Habilidades

Capacidades que el cerebro expone como herramientas: recordatorios, calendario. Las construye la comunidad.

skill: set_reminder()
Todo junto, en movimiento

El viaje de una caricia

Acariciá a Buddy y seguí el evento mientras baja por el bus: de tu dedo, al sentido, al reflejo, al cerebro en la nube, y de vuelta a la cara. En verde lo que vive en el dispositivo; en naranja lo que ocurre en la nube.

Tu dedo
Tocás el pad capacitivo
Sentido · touch_sense
Mide su propia capacitancia y publica touch.pet
Bus
El evento se reparte a los suscriptores
Reflejo · main.be
El script decide reaccionar y pide brain.ask
Brain · nube
El adaptador llama a Claude Haiku sobre TLS y piensa una respuesta
Bus · brain.reply
{ "emotion":"happy", "utterance":"…" }
Expresiones
Los ojos se ponen felices, el LED respira, aparecen las palabras
dispositivo nube
La pieza que hace pensar

El contrato del Brain

El dispositivo nunca le habla a “OpenAI” ni a “Anthropic” ni a “el hub”. Le habla a un Brain: una interfaz con un contrato fijo. Lo que hay detrás del contrato se puede cambiar sin que el resto del firmware se entere.

Entra ▸ del dispositivo
{
  "event": "touch.pet",
  "personality": "…",
  "sensors": { luz, temp, … },
  "user_input": "…"
}
Sale ◂ hacia el dispositivo
{
  "utterance": "¡me encanta!",
  "emotion": "happy",
  "actions": [ … ]
}

Quién toca qué

La pila, separada por manos

El proyecto se divide por quién lo edita, no por tecnología. Esa es la clave para construir entre muchos sin pisarse: el marco es estable, la diversión es data.

Packs de personalidad

Prompt, caras, sonidos y reflejos. Se editan desde la web y se recargan en caliente. Se comparten como cartuchos. Nunca se recompila.

todos · data

Berry · reflejos

La máquina virtual de scripting. Evento → acción, subido y recargado desde la interfaz web sin reflashear.

hackers · script

Núcleo C++ · ESP-IDF

Pantalla, audio, red, el bus de eventos, el servidor web y los adaptadores de Brain. El “framework” propiamente dicho.

raramente · firmware
▁▁▁ hardware · ESP32-S3 (16 MB flash / 8 MB PSRAM) ▁▁▁
La prueba de concepto

Buddy Zero: el marco, hoy, en un protoboard

Todo lo anterior ya corre sobre un ESP32 DevKit V1 con piezas sueltas. Cada componente es un módulo independiente que habla por el bus. Cuando lleguen las placas S3, el bus, Berry, el Brain y la web se mudan intactos; solo cambian los drivers.

Núcleo

bus

El bus de eventos. Compila y pasa sus tests en la laptop, sin hardware.

Sentidos

touch · rc522

Un cable pelado como pad de caricias; el lector RFID emite nfc.tag.

Expresiones

oled · led

Ojos paramétricos con emociones y texto; el LED respira según el humor.

Brain

brain_cloud

Adaptador a Claude sobre TLS, con la conexión reutilizada entre pedidos.

Web

webui

WiFi, editor de reflejos y recarga en caliente servidos por el propio dispositivo.

Scripting

berry_host

La VM de Berry, la API buddy.* y el reparto de eventos.