Inicio / Artículos / Notas prácticas: Ofrecer al agente Hermes acceso web seguro con un Chrome independiente.

Notas prácticas: Ofrecer al agente Hermes acceso web seguro con un Chrome independiente.

Guía paso a paso operativa de las notas prácticas: Proporcionar al agente Hermes acceso web seguro con un Chrome separado: contratos, cheques y espacios para código para los equipos que utilizan este patrón.

4114 palabras

Las notas siguientes reconstruyen un camino práctico para “Proporcionar a Hermes Agent acceso web seguro mediante un pod Podman separado de Chrome”. Se da énfasis en los contratos, las verificaciones y los marcadores de posición para código, en lugar de en un enfoque motivacional. Al trabajar en la etapa de descripción general, anote primero el contrato: los datos necesarios, la señal de éxito y qué ocurre en caso de un fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones de código. Documente tanto el camino óptimo como el camino de recuperación. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no de mejoras posteriores.

INTERNET
                              ▲
                              │
                       outbound only
                              │
                ┌────────────────────────┐
                │ Chrome Browser Pod     │
                │                        │
                │  Chrome Headless       │
                │  CDP :9222             │
                └───────────┬────────────┘
                            │
                    private CDP network
                            │
                ┌───────────▼────────────┐
                │ Hermes / Ollama Pod    │
                │                        │
                │ Hermes ─────► Ollama   │
                │          localhost:11434
                │                        │
                └────────────────────────┘
                            │
                            ▼
                         AMD GPU
Chrome → Internet             YES
Hermes → Chrome               YES
Hermes → Ollama               YES
Hermes → Internet directly    NO
Chrome → host filesystem      NO
Hermes → rest of host         NO
Either → Podman socket        NO

¿Por qué colocar Chrome en un pod separado?

El enfoque de implementar Chrome en fases funciona mejor cuando se trata como una superficie medible. Capture un registro exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una sola responsabilidad y no a un proceso complicado. Mantenga el estado de los gráficos simple y tipado. Los bloques anidados ocultan qué nodo escribió qué campo y causan problemas al reanudar después de interrupciones.

Untrusted Internet content
          ↓
Chrome container
          ↓
CDP
          ↓
Hermes

¿Por qué CDP?

La etapa Why CDP funciona mejor cuando se trata como una superficie medible. Capture una transcripción ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Considere esta etapa como un contrato entre las entradas y las salidas validadas. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Mantenga el estado del grafo plano y tipado; los bloques anidados ocultan qué nodo escribió qué campo y provocan interrupciones en la continuación del proceso.

chromedp/headless-shell

El diseño de red

La etapa de diseño de red funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Registre los tiempos y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la demostración a entornos compartidos. Mantenga el estado del grafo simple y tipado; los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso. La etapa de diseño de red funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Documente tanto el camino óptimo como el camino de recuperación. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

hermes-browser-link
browser-egress
Internet
                    ▲
                    │
              browser-egress
                    │
               Chrome Pod
                    │
           hermes-browser-link
                    │
               Hermes Pod
hermes-browser-link

Paso 1: Detener el entorno Hermes existente

En la Etapa 1, antes de modificar el código, detenga la fase definiendo las entradas, el responsable de la etapa y los criterios de finalización. Los operadores deben poder volver a ejecutar la etapa a partir de un punto de control conocido sin tener que adivinar el estado oculto. Es preferible utilizar unidades pequeñas y verificables en lugar de scripts extensos. Cuando una etapa falla, el error debe indicar una única responsabilidad y no un proceso complicado. Implemente la aprobación humana en aquellos casos en los que se gastan fondos o se modifican datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial.

systemctl --user stop hermes-local
systemctl --user disable hermes-local
podman volume ls
hermes-data
ollama-models

Etapa 2: Elegir una subred privada

En el Paso 2, seleccione una etapa, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Trate esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Incluya la aprobación humana en aquellos procesos que generen gastos o modifiquen datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial.

10.77.0.0/24
Hermes pod:   10.77.0.10
Chrome pod:   10.77.0.20
podman network ls
podman network inspect NETWORK_NAME

Paso 3: Crear la red de control del navegador privado

En el Paso 3 “Crear la etapa”, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. La visibilidad temprana del costo evita facturas inesperadas cuando el proceso pasa de entornos de demostración a entornos compartidos. Implemente la aprobación humana en aquellos casos en que se gasten fondos o se modifiquen datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial. En el Paso 3 “Crear la etapa”, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Documente tanto la ruta óptima como la ruta de recuperación. Las intentonas repetidas, las verificaciones humanas y el manejo de mensajes no entregados forman parte del producto, no son mejoras realizadas posteriormente.

podman network create \
  --internal \
  --subnet 10.77.0.0/24 \
  hermes-browser-link
podman network inspect hermes-browser-link

Paso 4: Crear la red de salida del navegador

Al trabajar en el Paso 4, primero anote los requisitos del contrato: entradas necesarias, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación ayuda a mantener honestas las futuras modificaciones del código. Prefiera unidades pequeñas y probables sobre scripts extensos. Cuando un paso falla, el fallo debe referirse a una sola responsabilidad y no a un proceso complicado. Haga una verificación después de los pasos costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intente nuevamente un nodo posterior.

podman network create browser-egress

Paso 5: Volver a crear el pod de Hermes

Al trabajar en el Paso 5, Recrear la etapa, anote primero el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Trate esta etapa como un contrato entre los datos de entrada y las salidas validadas. Asigne nombres a los artefactos, defina comprobaciones de éxito y rechace las completaciones parciales silenciosas. Haga una verificación después de los pasos costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intenta nuevamente un nodo posterior.

podman pod rm -f hermes-local
podman pod create \
  --name hermes-local \
  --network hermes-browser-link:ip=10.77.0.10 \
  --userns=keep-id:uid=10000,gid=10000
10.77.0.10

Paso 6 — Recrear Ollama

Al trabajar en la etapa 6 de Recrear Ollama, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Registre los tiempos de ejecución y el costo en tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando se pasa de entornos de demostración a entornos compartidos. Registre el ID de la solicitud, el ID del modelo y la latencia en cada llamada. Sin ese registro, los errores intermitentes del proveedor parecen bugs de la aplicación. Al trabajar en la etapa 6 de Recrear Ollama, anote primero el contrato: las entradas requeridas, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Documente tanto la ruta óptima como la ruta de recuperación. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son mejoras adicionales realizadas posteriormente.

podman run -d \
  --name ollama \
  --pod hermes-local \
  --device /dev/kfd \
  --device /dev/dri \
  --group-add keep-groups \
  -e HOME=/root \
  -e OLLAMA_MODELS=/root/.ollama/models \
  -e OLLAMA_CONTEXT_LENGTH=64000 \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:rocm
http://127.0.0.1:11434
podman exec ollama ollama list

Paso 7: Recrear Hermes

La fase de Paso 7, “Recrear Hermes”, funciona mejor si se trata como una superficie medible. Capture una transcripción en formato dorado, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una sola responsabilidad y no a un proceso complicado. Mantenga el estado del grafo simple y tipado. Los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso.

export HERMES_WORKSPACE="$HOME/path/to/Hermes-Workspace"
podman run -d \
  --name hermes \
  --pod hermes-local \
  --security-opt=no-new-privileges \
  --pids-limit 512 \
  -v hermes-data:/opt/data \
  -v "$HERMES_WORKSPACE:/opt/data/workspace:rw,nodev,nosuid" \
  -w /opt/data/workspace \
  docker.io/nousresearch/hermes-agent:latest \
  sleep infinity
RW access:
$HERMES_WORKSPACE
/
$HOME
~/.ssh
~/.config
your normal browser profile
Podman socket
Docker socket

Paso 8: Obtener la shell sin interfaz de Chrome

La etapa 8 de extracción de Chrome funciona mejor cuando se trata como una superficie medible. Capture un registro exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Trate esta etapa como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace completaciones parciales silenciosas. Mantenga el estado del gráfico plano y tipado. Los bloques anidados ocultan qué nodo escribió qué campo y provocan interrupciones en la continuación posterior.

podman pull docker.io/chromedp/headless-shell:latest

Paso 9: Crear un pod de Chrome separado

El Paso 9, “Crear una etapa”, funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Registre los tiempos y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la demostración a entornos compartidos. Mantenga el estado del gráfico simple y tipado; los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso. El Paso 9, “Crear una etapa”, funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Documente tanto el camino óptimo como el camino de recuperación juntos. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

podman pod create \
  --name hermes-browser-pod \
  --network hermes-browser-link:ip=10.77.0.20 \
  --network browser-egress
Chrome
  │
  ├── 10.77.0.20 ─── private link to Hermes
  │
  └── browser-egress ─── Internet

Paso 10: Ejecutar Chrome dentro del pod del navegador

En la etapa Paso 10: Ejecutar Chrome, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el error debe indicar una única responsabilidad y no un proceso complicado. Incluya la aprobación humana en aquellas tareas que implican gastos o modificaciones en datos de producción. La configuración en tiempo de compilación no equivale a la completitud del proceso empresarial.

podman run -d \
  --name hermes-browser \
  --pod hermes-browser-pod \
  --init \
  --shm-size=2g \
  --security-opt=no-new-privileges \
  docker.io/chromedp/headless-shell:latest
-p 9222:9222
10.77.0.20:9222

Paso 11: Probar Chrome desde el contenedor Hermes

Para la fase de prueba de Paso 11 en Chrome, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Trate esta fase como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Incluya la aprobación humana en aquellos casos que impliquen gastos o cambios en datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial.

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").read().decode())'
{
  "Browser": "HeadlessChrome/...",
  "webSocketDebuggerUrl": "ws://10.77.0.20:9222/devtools/browser/..."
}
Hermes → Chrome

Paso 12: Verificar que Chrome tenga acceso a Internet

En la fase de Verificar paso 12, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. La visibilidad temprana del costo evita facturas inesperadas cuando el proceso pasa de entornos de demostración a entornos compartidos. Implemente la aprobación humana en aquellos casos en que se gasten fondos o se modifiquen datos de producción. La configuración en tiempo de compilación no equivale a la completitud del proceso empresarial. En la fase de Verificar paso 12, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Documente tanto la ruta óptima como la ruta de recuperación. Las intentonas repetidas, las verificaciones humanas y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

podman exec hermes-browser \
  curl -I https://example.com
browser-egress

Paso 13: Verificar que Hermes no tenga acceso directo a Internet

Al trabajar en la fase de verificación de Hermes del Paso 13, anote primero el contrato: los datos necesarios, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación ayuda a mantener honestas las futuras modificaciones del código. Prefiera unidades pequeñas y probables sobre scripts extensos. Cuando un paso falla, el fallo debe apuntar a una única responsabilidad y no a un proceso complicado. Haga una verificación después de los pasos costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intente nuevamente un nodo posterior.

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("https://example.com", timeout=5).status)'
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").status)'
200
Hermes → Internet      FAIL
Hermes → Chrome        PASS
Chrome → Internet      PASS

Paso 14: Dirigir Hermes hacia la instancia remota de Chrome

Al trabajar en la etapa Punto Hermes del Paso 14, anote primero el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Trate esta etapa como un contrato entre los datos de entrada y las salidas validadas. Asigne nombres a los artefactos, defina comprobaciones de éxito y rechace las completaciones parciales silenciosas. Haga una verificación después de los pasos costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intenta nuevamente un nodo posterior.

http://127.0.0.1:9222
http://10.77.0.20:9222
podman exec \
  --user 10000:10000 \
  hermes \
  hermes config set browser.cdp_url http://10.77.0.20:9222
podman exec hermes \
  grep -A3 '^browser:' /opt/data/config.yaml
browser:
  cdp_url: http://10.77.0.20:9222
podman restart hermes

Paso 15 — Pruébelo desde Hermes

Al trabajar en la fase de prueba del Paso 15, anote primero el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Registre los tiempos y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la versión de demostración a entornos compartidos. Haga una verificación después de los pasos más costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intenta nuevamente un nodo posterior. Al trabajar en la fase de prueba del Paso 15, anote primero el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Documente tanto la ruta óptima como la ruta de recuperación. Las intentonas, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son mejoras adicionales realizadas posteriormente.

podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes

Importante: se trata de acceso a través del navegador, no de acceso ilimitado a Internet en Hermes

Esta etapa basada en el navegador funciona mejor cuando se considera como una superficie medible. Capture una transcripción ejemplar, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una sola responsabilidad y no a un proceso complicado. Mantenga el estado del grafo simple y tipado. Los bloques anidados ocultan qué nodo escribió qué campo y provocan interrupciones en la continuación del proceso.

Hermes browser tools
        ↓
Chrome
        ↓
Internet
curl https://example.com

¿Por qué no poner Chrome en el pod de Hermes?

La fase “¿Por qué no probar con Chrome?” funciona mejor cuando se trata como una superficie medible. Capture un registro exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Considere esta fase como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Mantenga el estado del gráfico simple y tipado; los bloques anidados ocultan qué nodo escribió qué campo y provocan interrupciones en la continuación posterior.

127.0.0.1:9222
Hermes pod:
private network only
Browser pod:
private network
+
Internet network

No monte su perfil normal de Chrome

El enfoque “No montes tu escenario” funciona mejor cuando se trata como una superficie medible. Registra un caso exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Anota los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la fase de demostración a entornos compartidos. Mantén el estado del gráfico simple y con tipos definidos; los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso. El enfoque “No montes tu escenario” funciona mejor cuando se trata como una superficie medible. Registra un caso exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Documenta tanto el camino óptimo como el camino de recuperación juntos. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

-v "$HOME/.config/google-chrome:/chrome-profile"

Opcional: perfil de navegador del agente persistente

Para la etapa opcional del agente persistente en el navegador, defina las entradas, el responsable de la tarea y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar la tarea a partir de un punto de control conocido sin tener que adivinar el estado oculto. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando una tarea falla, el error debe indicar una única responsabilidad y no un proceso complicado. Incluya la aprobación humana en aquellas acciones que implican gastos o modificaciones en datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial.

podman volume create hermes-browser-profile
Human browser profile       separate
Agent browser profile       separateHost filesystem             separate

El CDP debe permanecer privado

Para que el CDP permanezca en fase privada, se deben definir las entradas, el responsable de la etapa y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar la etapa a partir de un punto de control conocido, sin tener que adivinar el estado oculto. Trate esta fase como un contrato entre las entradas y los resultados validados. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Incluya la aprobación humana en aquellos procesos que generen gastos o modifiquen datos de producción. La conexión en tiempo de compilación no equivale a la completitud del proceso empresarial.

10.77.0.20:9222
hermes-browser-link
0.0.0.0:9222 -> Chrome

Verificar el aislamiento

En la fase de Verificar el aislamiento, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Registre los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. La visibilidad temprana del costo evita facturas inesperadas cuando el proceso pasa de entornos de demostración a entornos compartidos. Incorpore la aprobación humana en aquellos casos en que se gastan fondos o se modifican datos de producción. La configuración en tiempo de compilación no equivale a la completitud del proceso empresarial. En la fase de Verificar el aislamiento, defina las entradas, el responsable del paso y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar el paso a partir de un punto de control conocido sin tener que adivinar el estado oculto. Documente tanto la ruta óptima como la ruta de recuperación. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

podman pod inspect hermes-local
podman pod inspect hermes-browser-pod
Hermes pod
  └── hermes-browser-link
Browser pod
  ├── hermes-browser-link
  └── browser-egress
podman inspect hermes \
  --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
podman inspect hermes-browser \
  --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
podman port hermes-browser

Inicio automático de ambos pods

Al trabajar en la fase de inicio automático de ambos pods, anote primero el contrato: entradas requeridas, señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Prefiera unidades pequeñas y probables sobre scripts extensos. Cuando falla un paso, el fallo debe apuntar a una única responsabilidad en lugar de a un proceso complicado. Haga un punto de control después de los pasos costosos. La función de reanudación no debe volver a realizar la misma llamada al LLM cuando un operador intente nuevamente un nodo posterior.

nano ~/.config/systemd/user/hermes-local.service
[Unit]
Description=Hermes Local AI and Browser Pods
After=default.target
[Service]
Type=oneshot
RemainAfterExit=yesExecStart=/usr/bin/podman pod start hermes-browser-pod
ExecStart=/usr/bin/podman pod start hermes-localExecStop=/usr/bin/podman pod stop -t 30 hermes-local
ExecStop=/usr/bin/podman pod stop -t 30 hermes-browser-podTimeoutStartSec=120
TimeoutStopSec=60[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now hermes-local
sudo loginctl enable-linger "$USER"
podman pod ps
hermes-local
hermes-browser-pod

Resolución de problemas

Al trabajar en la fase de resolución de problemas, anote primero el contrato: los datos requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación mantiene honestas las futuras modificaciones del código. Trate esta fase como un contrato entre los datos de entrada y las salidas validadas. Asigne nombres a los artefactos, defina comprobaciones de éxito y rechace las completaciones parciales silenciosas. Haga una verificación después de los pasos costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intenta nuevamente un nodo posterior.

Hermes no puede conectarse al puerto 9222

Cuando se trabaja con escenarios en los que Hermes no puede llegar a la fase deseada, primero hay que anotar el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Registre los tiempos de ejecución y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la fase de demostración a entornos compartidos. Haga una verificación después de los pasos más costosos. La función de reanudación no debe volver a facturar la misma llamada al LLM cuando un operador intenta nuevamente un nodo posterior. Cuando se trabaja con escenarios en los que Hermes no puede llegar a la fase deseada, primero hay que anotar el contrato: los datos de entrada requeridos, la señal de éxito y qué ocurre en caso de fallo parcial. Esa lista de verificación garantiza que los cambios posteriores en el código sean transparentes. Documente tanto la ruta óptima como la ruta de recuperación. Las intentonas repetidas, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son mejoras adicionales realizadas posteriormente.

podman ps
podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://10.77.0.20:9222/json/version").read().decode())'
hermes-browser-link

Chrome se inicia pero las páginas fallan

Chrome puede iniciarse, pero la etapa funciona mejor cuando se trata como una superficie medible. Capture una transcripción exitosa, un caso de fallo y la nota de reversión antes de ampliar el alcance. Prefiera unidades pequeñas y verificables en lugar de scripts extensos. Cuando un paso falla, el fallo debe apuntar a una sola responsabilidad y no a un proceso complicado. Mantenga el estado del gráfico simple y tipado; los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso.

--shm-size=2g

Chrome funciona pero las herramientas del navegador Hermes no aparecen

Chrome funciona, pero la etapa de Hermes rinde mejor cuando se trata como una superficie medible. Capture un registro exitoso, un caso de fallo y la nota de reversión antes de ampliar el alcance. Considere esta etapa como un contrato entre las entradas y las salidas validadas. Asigne nombres a los artefactos, defina verificaciones de éxito y rechace las completaciones parciales silenciosas. Exponga herramientas con esquemas limitados y etiquetas explícitas de efectos secundarios. Los hosts necesitan saber qué llamadas modifican el estado antes de aprobarlas automáticamente.

browser:
  cdp_url: http://10.77.0.20:9222

nano no está disponible dentro del contenedor de Hermes

La etapa en la que el nano no está disponible funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Registre los tiempos y el costo de tokens o consultas junto con los resultados funcionales. Tener visibilidad del costo desde el principio evita facturas inesperadas cuando el proceso pasa de la fase de demostración a entornos compartidos. Mantenga el estado del gráfico simple y tipado; los bloques anidados ocultan qué nodo escribió qué campo y causan interrupciones en la continuación del proceso. La etapa en la que el nano no está disponible funciona mejor cuando se trata como una superficie medible. Capture un registro ideal, un caso de fallo y la nota de reversión antes de ampliar el alcance. Documente tanto el camino óptimo como el camino de recuperación. Las reintentos, los controles humanos y el manejo de mensajes no entregados forman parte del producto, no son ajustes realizados posteriormente.

hermes config set
podman exec \
  --user 10000:10000 \
  hermes \
  hermes config set browser.cdp_url http://10.77.0.20:9222

El modelo de seguridad finalizado

INTERNET
                           ▲
                           │
                    browser-egress
                           │
                 ┌─────────┴──────────┐
                 │ Chrome Browser Pod │
                 │                    │
                 │ Headless Chrome    │
                 │ CDP :9222          │
                 └─────────┬──────────┘
                           │
               hermes-browser-link
                    INTERNAL ONLY
                           │
                 ┌─────────▼──────────┐
                 │ Hermes/Ollama Pod  │
                 │                    │
Host Workspace ─►│ Hermes             │
      RW         │     │              │
                 │     ▼              │
                 │   Ollama           │
                 │     │              │
                 └─────┼──────────────┘
                       ▼
                    AMD GPU
ACCESS
Hermes → designated host workspace       YES
Hermes → Ollama                           YES
Hermes → Chrome CDP                       YESChrome → Internet                         YESHermes → Internet directly                NO
Hermes → rest of host filesystem          NO
Hermes → SSH keys                         NO
Chrome → host filesystem                  NO
Chrome → normal browser profile           NO
Hermes → Podman/Docker socket              NO
Chrome → Podman/Docker socket              NO
Host/LAN → Chrome CDP                      NO

Por qué prefiere esta arquitectura

Give it the filesystem.
Give it Docker.
Give it Internet.
Give it Chrome.
Give it credentials.
one working directory
local-model access
browser-control access
model storage
GPU access
Internet access
CDP connectivity
my SSH keys
my entire home directory
my normal browser profile
my Podman socket

Lista de verificación operativa