agend-sh

Espacios de trabajo Linux persistentes para agentes de IA, con terminales interactivas, eventos de espera de entrada, transferencias de archivos y vistas previas HTTPS.

Documentación

agend

Una computadora real para tu agente de IA.

Espacios de trabajo Linux persistentes. Terminales interactivas. Vistas previas compartibles.
Trae tu agente MCP favorito. Déjalo trabajar.

Latest release CI MCP over stdio Linux, macOS, and Windows

Inicio rápido · Terminales interactivas · Conecta tu agente · Herramientas MCP · agend.sh


agend le da a tu agente un entorno Linux persistente y aislado que puede controlar a través de MCP. Puede ejecutar código, editar archivos, usar REPLs de Python y Vim, iniciar servicios y exponer una URL de vista previa. Puedes abrir una shell tú mismo o ver la terminal interactiva del agente mientras trabaja.

ConstruyeInteractúaMuestra el trabajo
Ejecuta comandos y tareas en segundo plano. Transfiere archivos. Mantén proyectos en tu espacio de trabajo remoto.Controla REPLs y aplicaciones de terminal a través de una PTY, con retroalimentación cuando la terminal entra en espera de entrada.Abre una vista previa en el navegador o refleja la sesión interactiva con agend watch.

Inicio rápido

1. Instalación

Linux / macOS

curl -fsSL https://agend.sh/i | sh

Windows · PowerShell

irm https://agend.sh/i.ps1 | iex

Homebrew · Linux / macOS

brew install agend-sh/tap/agend

Los instaladores de script verifican la firma de la versión y la suma de verificación SHA-256 del archivo. El instalador de Unix escribe en /usr/local/bin y puede solicitar sudo. El instalador de Windows escribe en %LOCALAPPDATA%\agend\bin y lo agrega a tu PATH de usuario. Las versiones son compatibles con amd64 y arm64 en las tres plataformas.

agend version

2. Inicia sesión

agend login

Completa la autenticación en el navegador. Crear una cuenta con correo electrónico y contraseña en su lugar:

agend signup --email you@example.com

signup solicita una contraseña y te inicia sesión al tener éxito. No necesitas ejecutar login nuevamente.

3. Crea tu espacio de trabajo

agend env create --name my-workspace
agend ping
agend exec 'python3 --version'

La creación selecciona el nuevo entorno para los comandos de CLI. Su tamaño sigue el perfil predeterminado de tu cuenta. Usa agend profiles para ver los tamaños disponibles, cuotas y políticas de suspensión; pasa un ID de perfil devuelto con agend env create --profile <profile-id> para elegir otro tamaño.

4. Conecta tu agente

agend config claude-code

O configura un cliente diferente:

agend config codex cursor gemini

Reinicia o recarga la integración MCP de tu cliente y luego prueba este mensaje:

Usa list_environments de agend para encontrar my-workspace. Inicia un REPL interactivo de Python allí, calcula 6 × 7 y luego sal del REPL.

Tu agente descubre el entorno y lo controla con herramientas MCP. Se requiere una cuenta de Agend y cuota de entorno disponible; la CLI por sí sola no aprovisiona una máquina local gratuita.

agend-sh está listado en el Registro oficial de MCP como io.github.agend-sh/agend-sh. Para instalación basada en Docker, consulta la guía de paquete de contenedor y conexión. También disponible en Smithery. Para clientes que admiten extensiones MCPB, consulta la guía de paquete.

Terminales interactivas

La terminal puede informar que entró en espera de entrada. Eso le da retroalimentación al proceso del agente mientras controla un REPL o una aplicación de terminal.

Por ejemplo, llama a shell_exec con:

{
  "environment": "my-workspace",
  "command": "python3 -q",
  "interactive": true
}

Una respuesta puede verse así:

status: awaiting_input
>>>
prompt_type: interactive
input_wait: true

Continúa a través de shell_send_raw:

{
  "environment": "my-workspace",
  "input": "print('hello from agend')\n"
}
status: awaiting_input
print('hello from agend')
hello from agend
>>>
input_wait: true

Luego envía exit()\n a través de shell_send_raw para cerrar Python.

Leyendo la respuesta

CampoSignificado
status: completedEl comando terminó. Verifica exit_code.
status: awaiting_inputEl proceso interactivo sigue vivo. Este estado por sí solo no prueba que esté esperando entrada.
input_wait: trueSe observó un evento de espera de entrada al recopilar esta respuesta: el lector de terminal no tenía suficiente entrada y entró en su ruta de espera.
input_wait: falseNo se observó ningún evento nuevo en esta respuesta. No cancela un evento anterior ni prueba que el proceso dejó de esperar.
status: timeoutUn comando en primer plano excedió su presupuesto de tiempo.

La señal de espera de entrada es un evento, no una consulta de estado persistente ni una garantía de que una aplicación o servicio esté listo. Depende del soporte en la pila invitada del entorno.

Para REPLs y TUIs, establece interactive: true y usa shell_send_raw para entrada posterior. Incluye \n cuando quieras Enter. Usa shell_resize cuando cambie el viewport. Sal con el comando propio de la aplicación, o usa shell_interrupt para cerrar la sesión. Una sesión interactiva puede estar activa por entorno; termínala antes de iniciar otra shell_exec.

Un proceso interactivo permanece vivo entre llamadas de herramientas y no se mata cuando la recopilación de su respuesta expira. Después de una respuesta de herramienta completada, desconectar el cliente MCP no detiene el proceso por sí mismo: reconéctate al mismo entorno para continuar. La suspensión del entorno, un bloqueo o un reinicio en frío pueden afectar su vida útil.

Observa a tu agente trabajar

agend watch

Watch refleja la sesión interactiva del entorno seleccionado, reproduce la salida retenida y sigue las nuevas actualizaciones. No envía entrada al proceso remoto. Presiona q o Ctrl+C para dejar de observar; la sesión del agente continúa.

Para una grabación de pantalla:

agend watch --typing-delay 40ms

Ajusta el tamaño de tu terminal al de la sesión remota para una visualización precisa. Watch sigue la salida recopilada por las llamadas de herramientas del agente; no consulta al invitado por salida entre esas llamadas. Muestra sesiones interactivas, no salida de comandos ordinarios ni registros de tareas en segundo plano.

¿Quieres trabajar en el entorno tú mismo?

agend connect

Esto abre una terminal en vivo con entrada de teclado y redimensionamiento de terminal. Ejecuta exit para cerrar la shell. Requiere una terminal en stdin y usa el mismo espacio de sesión interactiva única que MCP, así que cierra primero la aplicación interactiva del agente.

Comparte una vista previa del navegador

Haz que tu agente inicie un servicio usando shell_exec:

{
  "environment": "my-workspace",
  "command": "python3 -m http.server 8080 --bind 0.0.0.0 --directory /home/agend-user/readme-demo",
  "run_in_background": true
}

Crea /home/agend-user/readme-demo y coloca tus archivos de demostración allí primero. Vincula el servicio a 0.0.0.0 para que el túnel pueda alcanzarlo.

Luego llama a port_expose:

{
  "environment": "my-workspace",
  "port": 8080
}

La respuesta contiene una URL HTTPS pública. Da tiempo para que el túnel y el DNS sean alcanzables. port_list muestra las exposiciones activas; port_unexpose elimina una. Exponer un puerto hace que ese servicio sea alcanzable desde internet.

Para tu propio dominio gestionado por Cloudflare, registra su zona con agend domain add example.com, luego pasa domain: "app.example.com" a port_expose. El registro solicita un token de API de Cloudflare con permisos de Zone:DNS:Edit, Zone:Zone:Read y Account:Cloudflare Tunnel:Edit; los scripts pueden proporcionarlo a través de AGEND_CF_TOKEN. agend domain list devuelve los IDs de dominio usados por agend domain remove <domain-id>.

Conecta tu agente

agend config detecta clientes compatibles instalados en tu máquina. Previsualiza sus opciones antes de escribir:

agend config --dry-run
agend config

También puedes seleccionar clientes explícitamente:

ClienteComando
Claude Codeagend config claude-code
Claude Desktopagend config claude-desktop
Codexagend config codex
Cursor / Windsurfagend config cursor windsurf
Gemini CLI / Antigravityagend config gemini antigravity
VS Code / Zed / JetBrainsagend config vscode zed jetbrains
Cline / Roo Codeagend config cline roo-code
OpenCode / GitHub Copilot CLIagend config opencode github-copilot-cli
Amazon Q / Goose / Continueagend config amazon-q goose continue

La configuración registra agend mcp como un servidor stdio local. El cliente debe poder encontrar el binario instalado; en Windows, el escritor de configuración usa su ruta absoluta. Las rutas y formatos de configuración específicos del cliente son manejados por agend config.

Configurar otro cliente MCP manualmente

Para clientes que usan el formato JSON mcpServers:

{
  "mcpServers": {
    "agend": {
      "command": "agend",
      "args": ["mcp"]
    }
  }
}

Usa la ruta absoluta del binario si el cliente no hereda tu PATH de shell. Este es un ejemplo genérico; algunos clientes usan un esquema diferente. agend mcp lee JSON-RPC desde stdin y escribe respuestas de protocolo en stdout; los registros van a stderr. Los resultados de herramientas son contenido de texto MCP, incluidos campos como status y input_wait.

Herramientas MCP

La CLI expone 23 herramientas. Llama a list_environments para descubrir IDs y nombres. Las herramientas específicas del entorno requieren un argumento environment y aceptan un ID o un nombre. env_create, list_environments, profiles_list y reload_config no necesitan uno.

ÁreaHerramientaQué hace
Entornoslist_environmentsDescubre entornos, nombres, descripciones, estado y nivel.
profiles_listMuestra tamaños disponibles, cuotas y uso.
env_createCrea un entorno; opcional name, description y profile.
env_updateEdita o borra el nombre y la descripción de un entorno.
env_statusInspecciona estado y metadatos sin despertar el entorno.
env_wakeDespierta un entorno en suspensión.
env_cold_resetRecuperación de último recurso para un entorno atascado; requiere una razón de diagnóstico.
Shellshell_execEjecuta un comando con tiempo de espera, truncamiento de cabeza/cola, modo interactivo o modo en segundo plano.
shell_send_rawEnvía bytes a una aplicación interactiva; no se agrega nueva línea.
shell_provide_inputResponde un mensaje simple en una sesión de terminal activa; agrega una nueva línea. Usa shell_send_raw para REPLs y TUIs.
shell_resizeRedimensiona la PTY activa.
shell_interruptInterrumpe un comando o cierra la sesión interactiva.
shell_task_outputLee la salida y el estado de una tarea en segundo plano.
shell_task_stopDetiene una tarea en segundo plano.
Archivosfile_writeEscribe texto atómicamente en un archivo remoto.
file_uploadTransfiere un archivo local al entorno.
file_downloadTransfiere un archivo remoto a la máquina local.
file_moveMueve o renombra un archivo remoto.
Redport_exposeExpone un servicio a través de un túnel HTTPS público.
port_listLista puertos y URLs expuestos.
port_unexposeElimina una exposición; opcionalmente apunta a un dominio.
Diagnósticoenv_statsInspecciona disco, memoria, CPU y procesos.
reload_configRecarga credenciales después de cambios en otra terminal y restablece conexiones.

interactive y run_in_background son mutuamente excluyentes. La ejecución en segundo plano devuelve un task_id para las herramientas de tareas.

Las rutas locales en file_upload y file_download están confinadas al directorio de trabajo del servidor MCP, o a AGEND_LOCAL_ROOT si lo estableces en el entorno del servidor. Las descargas devuelven metadatos de transferencia; lee texto con shell_exec o abre el archivo local descargado. Para archivos grandes, descargar directamente dentro del entorno remoto con curl o wget suele ser más rápido.

Referencia de CLI

Los comandos de CLI operan en el entorno seleccionado. Usa IDs de entorno con agend env use y otros comandos de entorno de CLI; las herramientas MCP también resuelven nombres.

agend env list
agend env use <env-id>
agend exec 'pwd'

Entornos y cuentas

ComandoPropósito
agend profilesLista los perfiles disponibles para tu cuenta.
agend env create [--name NAME] [--description TEXT] [--profile ID]Aprovisiona y selecciona un espacio de trabajo.
agend env listLista los entornos.
agend env use <env-id>Selecciona un entorno; lo activa si está en reposo.
agend env edit [env-id] --name NAME --description TEXTEdita metadatos; --clear-name y --clear-description eliminan valores.
agend env status [env-id]Inspecciona el estado sin activarlo.
agend env wake [env-id]Activa un entorno en reposo.
agend env cold-reset [env-id] --reason TEXTRecupera un entorno realmente bloqueado mediante un arranque en frío.
agend env delete [env-id]Elimina permanentemente un entorno y sus datos.
agend statusMuestra el estado de autenticación y del entorno seleccionado.
agend signup --email <email>Crea una cuenta e inicia sesión con un aviso de contraseña.
agend loginAutentica a través de tu navegador.
agend login --email <email>Inicia sesión con un correo electrónico y una contraseña.
agend login --token <token>Guarda un token de API directo.
agend account listLista las cuentas guardadas.
agend account switch <email>Cambia de cuenta.
agend account remove <email>Elimina una cuenta guardada.
agend logout [--all]Elimina las credenciales locales de la cuenta activa, o todas las cuentas guardadas.

El reinicio en frío conserva el disco de datos persistente, pero descarta la memoria invitada, los procesos, las sesiones y las instantáneas. Es una operación de recuperación. Crear, seleccionar o ejecutar en un entorno puede arrancarlo o activarlo; env status es la ruta de inspección de solo lectura.

Shell, archivos y tareas

ComandoPropósito
agend connect [--shell COMMAND]Abre una terminal interactiva en vivo.
agend watch [--typing-delay 40ms]Refleja la sesión interactiva sin enviar entrada.
agend exec <command>Ejecuta un comando remoto.
agend input <text>Responde a un aviso simple; añade una nueva línea.
agend resize <columns> <rows>Redimensiona el PTY activo.
agend interruptInterrumpe el comando/sesión activo.
agend pingComprueba la conectividad y muestra la versión del backend.
agend file-get <remote-path>Imprime el contenido de un archivo remoto en stdout.
agend file-put <remote-path> <content>Escribe el contenido proporcionado en un archivo remoto.
agend file-move <source> <destination>Mueve o renombra un archivo remoto.
agend task-output <task-id>Lee la salida de una tarea en segundo plano.
agend task-stop <task-id>Detiene una tarea en segundo plano.

exec admite --timeout en milisegundos (predeterminado: 30000), --head, --tail, --background y --interactive. Para una terminal en vivo, usa connect; para un agente que maneja un REPL o TUI, usa el flujo de trabajo de herramientas interactivas de MCP.

Por ejemplo:

agend file-put /home/agend-user/hello.txt 'hello from agend'
agend file-get /home/agend-user/hello.txt
agend exec --timeout 60000 'python3 --version'

file-get escribe metadatos de archivo en stderr. file-put toma contenido, no un nombre de archivo local; usa file_upload de MCP para transferencia de archivos locales. Ambos comandos de archivo de CLI admiten --encoding text o --encoding base64; file-put también admite --create-dirs, --overwrite y --mode.

Equipos y entornos compartidos

Un equipo posee entornos compartidos. Una concesión otorga a un miembro acceso exclusivo hasta que se libera o expira.

ComandoPropósito
agend team create <name>Crea un equipo que posees.
agend team listLista tus equipos.
agend team invite <team-id> <email>Invita a un miembro.
agend team accept <team-id>Acepta una invitación.
agend team members <team-id>Lista los miembros.
agend team envs <team-id>Lista los entornos compartidos y el estado de la concesión.
agend profiles --team <team-id>Inspecciona los perfiles disponibles para un equipo.
agend team env-create <team-id> [--profile ID]Aprovisiona un entorno compartido.
agend env acquire <env-id>Adquiere una concesión exclusiva.
agend env heartbeat <env-id>Extiende la concesión.
agend env release <env-id>Libérala.

Cuando el entorno seleccionado pertenece a un equipo, agend mcp intenta adquirir su concesión, envía latidos mientras está conectado y la libera en el apagado normal. Una concesión retenida por otro miembro bloquea el acceso. Un cliente terminado abruptamente puede dejar una concesión hasta su expiración.

Actualizaciones y solución de problemas

agend update

El actualizador verifica el manifiesto de suma de comprobación firmado y el archivo antes de reemplazar el binario. Un proceso MCP ya en ejecución continúa usando su versión actual hasta que se reinicia. Las compilaciones de lanzamiento también verifican automáticamente actualizaciones como máximo una vez cada 24 horas; establece AGEND_NO_AUTOUPDATE=1 para deshabilitar esas verificaciones automáticas. Para una instalación gestionada por Homebrew, usa brew upgrade agend.

SituaciónQué hacer
El instalador imprime agend setup claude, o config claude fallaUsa agend config claude-code o agend config claude-desktop.
El agente no puede encontrar el servidorVerifica agend version, vuelve a ejecutar agend config <client> y reinicia su integración MCP. Una configuración manual puede necesitar una ruta absoluta al binario.
La CLI no tiene entorno seleccionadoEjecuta agend env list, luego agend env use <env-id>.
El nuevo entorno aún no es accesibleInspecciona agend env status; permite que el túnel se active y luego reintenta agend ping.
La entrada informa que no hay sesión activaInicia la aplicación con interactive: true. Los comandos de primer plano ordinarios no mantienen stdin abierto para llamadas de herramientas posteriores.
connect informa no active session waiting for input al salirEsto puede ocurrir de forma intermitente en el backend actual después de que un shell se haya ejecutado correctamente. Consulta el informe de verificación; inicia una nueva sesión de connect si necesitas continuar.
La ruta de archivo local es rechazadaMantenla dentro del directorio de trabajo de MCP o configura AGEND_LOCAL_ROOT.
La URL de vista previa del navegador no se abre aúnVerifica que el servicio esté en ejecución y vinculado a 0.0.0.0; permite la propagación del túnel/DNS y luego inspecciona port_list. Si el nombre de host aún no se resuelve, verifica tu resolutor DNS.
El entorno parece bloqueadoInspecciona env status primero. Usa un reinicio en frío solo después de que la reconexión/activación ordinaria sea insuficiente.
El proxy corporativo bloquea la conectividadEstablece HTTPS_PROXY / HTTP_PROXY; los binarios Go no usan la configuración de proxy del sistema de Windows.

Las credenciales y la selección de entorno por cuenta viven en ~/.config/agend/credentials.json, con permisos de archivo solo para el propietario en Unix. En Windows, ~ es tu perfil de usuario y el acceso se rige por los permisos del sistema de archivos de Windows. Para autenticación por correo electrónico/contraseña mediante scripts, usa AGEND_PASSWORD; la CLI solicita de lo contrario.

Desarrollo

Requiere Go 1.26.9+. Desde un checkout de la fuente:

git clone https://github.com/agend-sh/cli.git
cd cli
make build
./bin/agend version

make install compila y copia el binario a /usr/local/bin; ese directorio debe ser escribible. En Windows, compila directamente con go build -o agend.exe ./cmd/agend.

go test ./...
go vet ./...

CI compila, prueba y verifica en Linux y Windows, con verificaciones adicionales de compilación cruzada. Las etiquetas de versión activan GoReleaser para publicar archivos tar de Linux/macOS y archivos zip de Windows para amd64 y arm64, un manifiesto de suma de comprobación y su paquete de firma Sigstore. El tap de Homebrew se actualiza a través de su propio flujo de trabajo. make release es un objetivo local de compilación cruzada de Unix, no el flujo de trabajo de publicación.

Consulta el informe de verificación README para la versión probada, verificaciones en vivo, problemas actuales y límites de cobertura.

Cómo encaja todo
Your MCP agent
     │ stdio / JSON-RPC
     ▼
  agend mcp ──────────────── agend connect / agend watch
     │ authenticated gRPC over a WebSocket tunnel
     ▼
  Environment backend
     │
     ▼
  Isolated Linux workspace

El puente MCP resuelve el endpoint de cada entorno bajo demanda, mantiene un grupo de conexiones y maneja la recuperación de conexiones. El acceso directo al shell de la CLI usa el mismo backend. No necesitas instalar un cliente de túnel separado.

RutaPropósito
cmd/agend/Punto de entrada y versión inyectada.
internal/cmd/Comandos de CLI, configuración del cliente y actualizaciones.
internal/mcp/Servidor JSON-RPC, definiciones de herramientas, grupo de conexiones y reglas de ruta local.
internal/grpc/Cliente y transporte del backend.
internal/api/Cliente HTTP del plano de control.
internal/auth/Cuentas, credenciales y autenticación del navegador.
internal/recovery/Clasificación de errores de conexión.
proto/agentd/v1/Definiciones generadas de protobuf y gRPC.

Licencia

MIT.