Remote worker daemon for Harbor — runs AI coding agents and terminal sessions on remote servers.
Prototipo de primer corte: se registra contra un endpoint WebSocket saliente,
supervisa un comando (por defecto bash) dentro de un PTY, y transmite su
input/output por ese socket, reconectando con backoff exponencial sin matar
el proceso supervisado. El protocolo de framing usado acá es provisional
(ver comentarios en internal/wsclient) — no es la especificación formal de
Harbor.
go build -o bin/harbor-node ./cmd/harbor-node
go build -o bin/devserver ./cmd/devserverCopiar config.example.yaml a config.yaml y ajustar:
gateway_url: "ws://localhost:8080/ws"
token: "dev-token-placeholder"
command: "bash"config.yaml no se versiona (contiene el token de esta máquina).
No hace falta un Atlas/Reverb real para probar el mecanismo: cmd/devserver
es un servidor WS mínimo pensado solo para esto (no es parte del daemon, ni
del producto — se puede borrar cuando exista el gateway real).
-
Levantar el servidor de prueba:
./bin/devserver -addr :8080
Loguea cualquier envelope de control que reciba, imprime a stdout el output binario del PTY remoto, y reenvía como input cualquier línea que se tipee en su propio stdin.
-
En otra terminal, levantar el daemon apuntando al servidor de prueba:
./bin/harbor-node -config config.yaml
-
Tipear en la terminal del
devserver(por ejemplodate,ls) — debería verse el output real delbashremoto. -
Matar el
devserver(Ctrl+C) a mitad de sesión: elharbor-nodedebe loguear reintentos con backoff creciente, y el procesobashsupervisado debe seguir vivo (verificable conps). Al volver a levantar eldevserver, elharbor-nodedebe reconectar solo y la misma sesión debashdebe seguir respondiendo.
cmd/harbor-node— el daemon.cmd/devserver— servidor WS de prueba, solo para desarrollo.internal/config— carga del archivo de configuración local.internal/ptysession— supervisión del proceso del agente vía PTY.internal/wsclient— conexión WebSocket saliente, reconexión con backoff, heartbeat, y el framing de control/binario provisional.
Ver CLAUDE.md para el contexto completo de qué es este repo dentro de
Harbor y qué no le corresponde.