Ir al contenido

APX en un servidor

El core anda perfecto solo. Ponelo en un VPS chico o en una compu que esté siempre prendida, y tus agentes siguen trabajando (rutinas, canales, tareas) mientras tu notebook duerme. La app de escritorio y tu teléfono se conectan a él.

Nada de esto necesita root, y el servidor no necesita tener Node instalado: el paquete trae el suyo.

Corrélo en el servidor (se instala donde se corre), por SSH:

Ventana de terminal
curl -fsSL https://apxagent.app/install.sh | bash -s -- --server

O desde tu propia computadora en una sola línea, también desde PowerShell en Windows:

Ventana de terminal
ssh usuario@servidor 'curl -fsSL https://apxagent.app/install.sh | bash -s -- --server'

Opciones: --file <paquete> (un paquete que ya tenés, sin descargar), --version <x.y.z>, --feed <owner/repo>, --no-service, --uninstall. Por el pipe van después de bash -s --, por ejemplo curl -fsSL https://apxagent.app/install.sh | bash -s -- --no-service.

Ventana de terminal
bash install.sh --file apx-core-<version>-linux-x64.tar.gz

Qué hace el script:

  • Baja el paquete de APX más nuevo para tu sistema y lo verifica contra su .sha256.
  • Lo descomprime en ~/.apx/v2/app/versions/<version>/ y apunta ~/.apx/v2/app/current a esa carpeta. La versión que corría antes queda hasta la próxima actualización.
  • Escribe el comando apx en ~/.local/bin (y suma esa carpeta al archivo de arranque de tu shell si no estaba en el PATH).
  • Si tenés APX v1 instalado, frena su daemon y saca su comando apx. Sus archivos en ~/.apx quedan, para que puedas importarlos.
  • Arranca el core como servicio, salvo que hayas pasado --no-service.

Tus datos viven en ~/.apx/v2, aparte de la app.

Un solo comando termina de preparar el servidor:

Ventana de terminal
apx setup --headless --expose tailscale # o --expose lan

Sumá --import (con --keys, --skills y --services si los querés) para traer los proyectos y agentes de un APX v1 en la misma máquina.

Corre, en orden, los mismos pasos que podrías hacer a mano:

  1. Correr el core como servicio. apx service install escribe una unidad de usuario de systemd (Linux), un agente de launchd (macOS) o una entrada de inicio de sesión (Windows), arranca el core y espera a que responda. Vuelve a arrancar al iniciar sesión y cada vez que se cae.

  2. Importar APX v1 (solo con --import). Lo mismo que apx import-v1. Solo lee los archivos de v1.

  3. Exponer el core (solo con --expose). Lo mismo que apx expose tailscale o apx expose lan, seguido de apx service restart, porque el core lee su configuración al arrancar.

  4. Vincular un dispositivo. Lo mismo que apx pair: muestra un código de un solo uso, las direcciones y un enlace apx://pair.

Revisalo cuando quieras:

❯ apx service status
service  systemd: active
core     answers on http://127.0.0.1:7440

En Linux, el log del core está en el journal: journalctl --user -u apx -f. En macOS y Windows está en ~/.apx/v2/logs/core.log.

Por defecto el core solo le responde a su propia máquina. apx expose cambia eso:

Loopback impide el acceso directo desde Internet; no separa a los usuarios del mismo sistema operativo. Sin token, un proceso local puede controlar el core. En un servidor compartido, usá una cuenta dedicada y autenticación. APX administra una crew del mismo dueño: vincular un dispositivo concede acceso de operador, no acceso de invitado.

ComandoQué hace
apx expose tailscaleDeja el core en 127.0.0.1 y lo publica con tailscale serve en https://<machine>.<tailnet>.ts.net, alcanzable solo desde tu tailnet.
apx expose lanHace que el core escuche en todas las direcciones (APX_HOST=0.0.0.0), por ejemplo http://192.168.1.20:7440.
apx expose offVuelve a solo esta compu. El token queda.
apx expose statusQué está en vigor, el puerto, si hay token y dónde está el archivo de configuración.

Tanto tailscale como lan crean un token para el core si no tiene, y lo muestran una sola vez. Después reiniciá el core (apx service restart) para que lea el cambio.

apx tailscale status, apx tailscale connect y apx tailscale off hacen lo mismo para Tailscale a través del core que está corriendo, como hace el panel en Configuración › Conexiones › Dispositivos.

apx expose escribe <home>/core.env (~/.apx/v2/core.env, salvo que APX_HOME diga otra cosa), que solo vos podés leer (modo 600). Solo puede definir estas claves: APX_HOST, APX_PORT, APX_TOKEN, APX_PUBLIC_URL, APX_ALLOWED_ORIGINS. Después de apx expose tailscale queda así:

# APX core settings (KEY=VALUE). Written by `apx expose`; the process environment wins over this file.
APX_TOKEN=<64 caracteres hexadecimales>
APX_PUBLIC_URL=https://<machine>.<tailnet>.ts.net

Las variables de entorno del proceso le ganan al archivo. El comando apx y la app de escritorio en la misma máquina leen el token de acá solos, así que no tenés que copiarlo a ningún lado. Los otros dispositivos nunca lo reciben: se vinculan.

Corré apx pair en el servidor cada vez que necesites un código (sirve una vez, por 10 minutos).

❯ apx pair
Pairing code: ABCD2345
Expires at 10:40:00 (in about 10 min)

Addresses a device may reach this core on:
https://<machine>.<tailnet>.ts.net

In the APX app, open Pair and paste the link, or enter an address and the code:
apx://pair?c=ABCD2345&u=https%3A%2F%2F<machine>.<tailnet>.ts.net
  • App de escritorio: en el primer arranque elegí Cliente, y después Dirección (la de Tailscale o la de la red local; el panel te pide el código) o SSH (usuario@servidor). SSH usa tus propias claves y trae el core a tu compu, así que anda aunque el servidor no esté expuesto a nadie. Detalles en App de escritorio.
  • Teléfono: escaneá el QR desde el panel, pegá el enlace apx://pair en la app de APX, o abrí la dirección en el navegador del teléfono y escribí el código. Mirá Tu teléfono.
  • Un navegador en otra compu: abrí la dirección del core (la de Tailscale, o la de la red local, como http://192.168.1.20:7440). El panel te pide Vinculá este dispositivo: escribí un código de apx pair (o de Configuración › Conexiones › Dispositivos › Vincular un dispositivo en un dispositivo ya vinculado), y ese navegador se guarda su propia llave. No hay que instalar nada en esa compu.

Cada dispositivo tiene su propia llave. Revocá uno con apx devices revoke <id> o en Configuración › Conexiones › Dispositivos.

Instalar APX en el VPS por una terminal SSH no registra tu computadora como nodo. La app de escritorio conectada por SSH sí presta su navegador al core mientras mantiene esa conexión. El control de pantalla, teclado y mouse requiere activar Uso de la computadora. Al cambiar conexión o cerrar la app, deja de prestar esas capacidades. Abrir una dirección del servidor en un navegador no presta automáticamente las capacidades de tu computadora.

Una instalación con el paquete se actualiza sola. Cada 6 horas (la primera vez, un minuto después de arrancar) el core le pregunta a los GitHub Releases de agentprojectcontext/apx si hay un APX más nuevo. El panel lo muestra en la barra de arriba, sea que lo abras en el servidor o desde una app de escritorio conectada a él, y Actualizar ahora baja el paquete nuevo, verifica su .sha256, lo descomprime al lado del que está corriendo, mueve current y reinicia el core.

Desde la terminal:

Ventana de terminal
apx upgrade --check # ¿hay un APX más nuevo?
apx upgrade # aplicarlo

Volver a correr el script de instalación también instala la versión más nueva. APX_UPDATES=off frena los chequeos; APX_RELEASES=<owner/repo> los apunta a otro origen (off también los frena).

Ventana de terminal
curl -fsSL https://apxagent.app/install.sh | bash -s -- --uninstall

Frena el servicio y borra ~/.apx/v2/app y el comando apx; tus datos en ~/.apx/v2 quedan. En Windows, guardá install.ps1 y correlo con -Uninstall (Desinstalar).

En una máquina donde trabajás en APX:

Ventana de terminal
pnpm install
alias apx="node $PWD/apps/terminal/src/main.ts"
apx service install