carril verde (Hermes Agent): documentacion, panel, voz local y RAG

Rama JARVIS-GREEN, independiente de master (el nucleo naranja queda intacto).

- README propio del carril verde con diagrama de arquitectura y capturas del panel.
- verde/: arranque, panel web, puente de voz (escucha local con faster-whisper +
  habla con la voz del naranja), pruebas (07 voz, 08 escucha), config y notas.
- Integracion RAG: nucleo/saber/busca_cli.py + skill buscar-en-apuntes, para que
  el agente consulte el mismo indice que el nucleo.
- Todo local (127.0.0.1); sin datos personales (rutas y modelo de GPU scrubeados).
This commit is contained in:
sito 2026-08-18 11:26:42 +02:00
parent b1f8118272
commit 1e3e5ca20d
32 changed files with 3697 additions and 161 deletions

114
verde/docs/arquitectura.svg Normal file
View file

@ -0,0 +1,114 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1060 700" font-family="'DejaVu Sans',Verdana,sans-serif">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#08201c"/><stop offset="1" stop-color="#061713"/>
</linearGradient>
<marker id="ar" markerWidth="10" markerHeight="10" refX="7" refY="3" orient="auto">
<path d="M0,0 L7,3 L0,6 Z" fill="#3ddc84"/>
</marker>
</defs>
<rect width="1060" height="700" rx="16" fill="url(#bg)"/>
<rect x="1" y="1" width="1058" height="698" rx="16" fill="none" stroke="#123a33" stroke-width="2"/>
<!-- titulo -->
<text x="40" y="52" fill="#eef6f3" font-size="30" font-weight="bold">JARVIS · carril verde</text>
<text x="40" y="78" fill="#3ddc84" font-size="16" font-weight="bold">Hermes Agent</text>
<text x="182" y="78" fill="#7fa39b" font-size="15">— un arnés agéntico completo, 100 % local por configuración</text>
<!-- COLUMNA A: TU / entrada -->
<text x="40" y="128" fill="#7fa39b" font-size="13" font-weight="bold" letter-spacing="1"></text>
<g>
<rect x="40" y="140" width="200" height="86" rx="10" fill="#0d2823" stroke="#2dd4bf" stroke-width="1.5"/>
<text x="60" y="170" fill="#eef6f3" font-size="15" font-weight="bold">Voz</text>
<text x="60" y="192" fill="#9fc4bb" font-size="12.5">micro → whisper local</text>
<text x="60" y="210" fill="#6f938b" font-size="11.5">faster-whisper · en CPU</text>
</g>
<g>
<rect x="40" y="240" width="200" height="86" rx="10" fill="#0d2823" stroke="#2dd4bf" stroke-width="1.5"/>
<text x="60" y="270" fill="#eef6f3" font-size="15" font-weight="bold">Texto</text>
<text x="60" y="292" fill="#9fc4bb" font-size="12.5">panel web · TUI</text>
<text x="60" y="310" fill="#6f938b" font-size="11.5">chat · sesiones · logs</text>
</g>
<!-- COLUMNA B: HERMES -->
<rect x="300" y="120" width="440" height="470" rx="14" fill="#0b241f" stroke="#3ddc84" stroke-width="2"/>
<text x="320" y="150" fill="#3ddc84" font-size="18" font-weight="bold">HERMES AGENT</text>
<text x="320" y="171" fill="#7fa39b" font-size="12.5">el arnés: decide, encadena, recuerda</text>
<!-- herramientas -->
<text x="320" y="205" fill="#e8b923" font-size="13" font-weight="bold">23 herramientas</text>
<g fill="#0f2e28" stroke="#1d4b42" font-size="11.5">
<rect x="320" y="214" width="120" height="26" rx="6"/><text x="330" y="231" fill="#cfe6df">terminal</text>
<rect x="448" y="214" width="120" height="26" rx="6"/><text x="458" y="231" fill="#cfe6df">ficheros</text>
<rect x="576" y="214" width="140" height="26" rx="6"/><text x="586" y="231" fill="#cfe6df">navegador</text>
<rect x="320" y="246" width="120" height="26" rx="6"/><text x="330" y="263" fill="#cfe6df">código</text>
<rect x="448" y="246" width="120" height="26" rx="6"/><text x="458" y="263" fill="#cfe6df">web</text>
<rect x="576" y="246" width="140" height="26" rx="6"/><text x="586" y="263" fill="#cfe6df">delegación</text>
<rect x="320" y="278" width="120" height="26" rx="6"/><text x="330" y="295" fill="#cfe6df">cron</text>
<rect x="448" y="278" width="268" height="26" rx="6"/><text x="458" y="295" fill="#cfe6df">visión · TTS · computer-use…</text>
</g>
<!-- skills -->
<text x="320" y="336" fill="#e8b923" font-size="13" font-weight="bold">82 skills</text>
<text x="392" y="336" fill="#7fa39b" font-size="11.5">(chuletas que activa cuando tocan)</text>
<g font-size="11.5">
<rect x="320" y="345" width="396" height="26" rx="6" fill="#12352d" stroke="#3ddc84"/>
<text x="330" y="362" fill="#a9e9c9">★ buscar-en-apuntes → tu RAG (índice del naranja)</text>
<rect x="320" y="377" width="192" height="24" rx="6" fill="#0f2e28" stroke="#1d4b42"/>
<text x="330" y="393" fill="#cfe6df">ECC · security-review…</text>
<rect x="520" y="377" width="196" height="24" rx="6" fill="#0f2e28" stroke="#1d4b42"/>
<text x="530" y="393" fill="#cfe6df">github · research · devops…</text>
</g>
<!-- memoria / canales / webhooks -->
<g font-size="12">
<rect x="320" y="420" width="126" height="60" rx="8" fill="#0f2e28" stroke="#1d4b42"/>
<text x="333" y="444" fill="#e8b923" font-weight="bold">Memoria</text><text x="333" y="464" fill="#9fc4bb" font-size="11">aprende entre sesiones</text>
<rect x="454" y="420" width="126" height="60" rx="8" fill="#0f2e28" stroke="#1d4b42"/>
<text x="467" y="444" fill="#e8b923" font-weight="bold">Canales</text><text x="467" y="464" fill="#9fc4bb" font-size="11">telegram·discord…</text>
<rect x="588" y="420" width="128" height="60" rx="8" fill="#0f2e28" stroke="#1d4b42"/>
<text x="601" y="444" fill="#e8b923" font-weight="bold">Webhooks</text><text x="601" y="464" fill="#9fc4bb" font-size="11">+ cron · MCP</text>
</g>
<!-- aviso honesto -->
<rect x="320" y="500" width="396" height="72" rx="8" fill="#2a1410" stroke="#7a3b2c"/>
<text x="333" y="524" fill="#f0a58c" font-size="12.5" font-weight="bold">⚠ Local por configuración, no por construcción</text>
<text x="333" y="544" fill="#d9b3a6" font-size="11.5">el agente tiene terminal: puede salir a la red si lo decide.</text>
<text x="333" y="561" fill="#d9b3a6" font-size="11.5">cerebro, voz, oído y memoria sí son locales y comprobados.</text>
<!-- COLUMNA C: backends locales -->
<text x="800" y="128" fill="#7fa39b" font-size="13" font-weight="bold" letter-spacing="1">EN TU MÁQUINA</text>
<g>
<rect x="800" y="140" width="220" height="96" rx="10" fill="#0d2823" stroke="#2dd4bf" stroke-width="1.5"/>
<text x="820" y="170" fill="#eef6f3" font-size="15" font-weight="bold">Cerebro</text>
<text x="820" y="192" fill="#9fc4bb" font-size="12.5">Ollama · qwen3.5:4b-verde</text>
<text x="820" y="211" fill="#6f938b" font-size="11.5">64k contexto · 127.0.0.1</text>
<text x="820" y="228" fill="#6f938b" font-size="11.5">media red en GPU, media en CPU</text>
</g>
<g>
<rect x="800" y="252" width="220" height="86" rx="10" fill="#0d2823" stroke="#2dd4bf" stroke-width="1.5"/>
<text x="820" y="282" fill="#eef6f3" font-size="15" font-weight="bold">RAG</text>
<text x="820" y="304" fill="#9fc4bb" font-size="12.5">busca_cli → índice del naranja</text>
<text x="820" y="322" fill="#6f938b" font-size="11.5">~19.500 entradas · conocimiento</text>
</g>
<g>
<rect x="800" y="354" width="220" height="80" rx="10" fill="#0d2823" stroke="#2dd4bf" stroke-width="1.5"/>
<text x="820" y="384" fill="#eef6f3" font-size="15" font-weight="bold">Voz</text>
<text x="820" y="406" fill="#9fc4bb" font-size="12.5">Piper · davefx</text>
<text x="820" y="424" fill="#6f938b" font-size="11.5">misma voz que el naranja</text>
</g>
<!-- flechas -->
<g stroke="#3ddc84" stroke-width="2" fill="none" marker-end="url(#ar)">
<path d="M240,183 L296,240"/>
<path d="M240,283 L296,300"/>
<path d="M740,190 L796,188"/>
<path d="M740,300 L796,295"/>
<path d="M740,400 L796,394"/>
</g>
<!-- pie -->
<text x="530" y="628" fill="#3ddc84" font-size="13" font-weight="bold" text-anchor="middle">Todo en 127.0.0.1 · software libre (MIT · Apache-2.0)</text>
<text x="530" y="650" fill="#6f938b" font-size="12" text-anchor="middle">banco de pruebas: ¿un arnés de fábrica supera al núcleo naranja en skills, canales y memoria?</text>
<text x="530" y="676" fill="#4f6b64" font-size="11" text-anchor="middle">el precio: más lento en un 4B. la ganancia: capacidades que el núcleo aún no tiene.</text>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
verde/docs/panel-chat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
verde/docs/panel-skills.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB