# JARVIS verde

Banco de pruebas con **Hermes Agent** debajo, para medir si un arnés agéntico
aporta algo sobre el núcleo. **100 % software libre**, y **local por
configuración pero no por construcción** — ver el aviso de aquí abajo.

> ⚠ **La frase "no sale nada de esta máquina" era falsa y se ha corregido.**
> El 16 de agosto, pidiéndole un cartel en ASCII, el agente encontró que
> `pyfiglet` no estaba instalado y **se fue a una API de terceros por su
> cuenta**. Nadie le dijo que podía. El cerebro, la voz, el oído y la memoria
> siguen siendo locales y comprobados; lo que no es local es **lo que el agente
> decida hacer con la terminal que le has dado**. Está contado entero en
> `NOTAS.md`.

> **Estrenado el 16 de agosto de 2026.** Arranca, contesta y llama herramientas.
> Lo que costó llegar aquí fueron **dos topes encadenados**, los dos anotados en
> `NOTAS.md`:
>
> 1. El prompt fijo de Hermes son **~20.500 tokens** y `qwen3.5:4b-jarvis` va con
>    `num_ctx 4096`. Por eso existe `qwen3.5:4b-verde`.
> 2. Y Hermes **rechaza de plano** cualquier modelo por debajo de **64.000**
>    tokens de contexto. Eso invalidó la primera medida (24576, lo máximo que
>    cabía en la tarjeta) y obligó a bajar media red a la CPU.
>
> El precio de esa segunda concesión es el tiempo de respuesta. Está medido en
> `NOTAS.md` y es **el dato que decide si este carril vale la pena**.

Los tres se distinguen por color: **cian** el de Newelle (congelado), **naranja**
el núcleo (en desarrollo), **verde** este.

## De dónde sale esto

De un reel de 75 s que vende *"construye tu Jarvis en un fin de semana"* en
nueve pasos. Siete de los nueve ya estaban hechos aquí, y mejor. Los tres que
no: **skills que el agente se crea solo, canales de mensajería y memoria**. Eso
es lo que este carril viene a probar.

## El stack

| Capa | Pieza | Licencia | ¿Sale algo? |
|---|---|---|---|
| Arnés | Hermes Agent | MIT | no |
| Cerebro | Ollama · `qwen3.5:4b-verde` | Apache 2.0 | **no** — `127.0.0.1:11434` |
| Oír | faster-whisper local | MIT | **no** |
| Hablar | Piper 1.2.0, vía `jarvis-piper.sh` | MIT | **no** |
| Memoria de conversación | SQLite FTS5 de Hermes | MIT | **no** |
| Memoria de conocimiento | `boveda/`, ficheros Markdown | — | **no** |
| Navegador | Playwright + Chromium | Apache 2.0 / BSD-3 | solo si navega |

**Cero claves, cero cuentas, cero euros.** Descartados por eso: ElevenLabs,
Honcho, Groq, Firecrawl, Nous Portal. Y **Edge TTS**, que es gratis pero es un
servicio de Microsoft y era la única pieza no libre del carril.

## Qué hay aquí

```
verde/
├── arrancar.sh          LA PUERTA DE ENTRADA: mide, configura y dictamina
├── pruebas/             las 7 comprobaciones; ninguna abre el TUI
├── ESCALERA.md          el guion del primer arranque a mano, con huecos que rellenar
├── PLAN-ARRANQUE.md     el plan del que salió todo esto
├── instalar.sh          baja el instalador oficial, lo enseña y lo corre sin arrancar nada
├── install-oficial.sh   el instalador tal cual, para poder auditarlo y diffearlo
├── instalacion.log      lo que hizo
├── config.yaml          la configuración → se copia a ~/.hermes/config.yaml
├── env.ejemplo          plantilla del .env, sin una sola clave
├── voz-verde.sh         adaptador para que hable con la voz del naranja
├── verde-launcher.sh    arranca el TUI en verde fósforo
├── jarvis-verde.svg     el icono
├── boveda/              memoria de conocimiento — vacía a propósito
└── NOTAS.md             lo medido y lo que queda abierto
```

Se entra siempre por el mismo sitio:

```bash
./arrancar.sh            # deja el carril listo, y se planta si algo no cuadra
./pruebas/ejecutar.sh    # 46 comprobaciones, ninguna abre el TUI
./verde-launcher.sh      # el TUI → y se sigue ESCALERA.md
```

El código de Hermes vive en `~/.hermes/`, igual que el HUD de Newelle vive en
`~/.var/app/…`. Aquí solo está lo que se edita a mano.

## Uso

```bash
./verde-launcher.sh --status   # qué hay y cuánta VRAM, sin arrancar nada
./verde-launcher.sh            # el TUI, en verde fósforo
./verde-launcher.sh --stop     # cerrar
```

`--status` es el que se puede correr hoy: no toca la gráfica.

## La voz: por qué suena igual que el naranja

Hermes trae un proveedor de TTS **por comando** que no está en su web pero sí en
su código (`tools/tts_tool.py`). Eso permite llamar al mismo
`config/jarvis-piper.sh` del naranja, con su binario Piper MIT, su `.onnx` y su
cadena de audio.

No es un detalle estético: si el verde hablara con una voz que Piper se descarga
por su cuenta, comparar la voz de los dos carriles no diría nada. Detalles y
trampas en `NOTAS.md` y en la cabecera de `voz-verde.sh`.

## El aviso que hay que leer antes de comparar

El naranja tiene **150 acciones rápidas que se saltan el modelo**. Hermes no
tiene ese atajo: allí toda orden pasa por el cerebro.

**El verde va a medir más lento, y no será culpa del modelo.** Para comparar de
verdad hay que usar solo frases que en el naranja también acaben en el cerebro.
Está desarrollado en `NOTAS.md`.

## Lo comprobado el primer día, y lo que falta

**Llama herramientas bien.** Era la duda que abría este carril —la guía de
Hermes marca *sin* tool calling todo lo de 9B para abajo— y salió a favor: pide
la herramienta cuando toca, acierta los argumentos, y **no** la llama cuando la
pregunta no la necesita.

**Es flojo con las rutas relativas.** Se le pidió `verde/README.md` y leyó el
`README.md` de la raíz. El detalle está en `NOTAS.md`, con la observación que
más pesa: cuando una herramienta le devuelve un **error**, se recupera y busca
otro camino; cuando le devuelve **un fichero que existe pero no es el pedido**,
no tiene forma de notarlo.

Falta lo que solo se juzga a mano: los escalones 5 (una skill), 6 (la voz dentro
de Hermes) y 7 (la escucha por micrófono) de `ESCALERA.md`.
