Referencia de CLI
Cada verbo de bxAgents y sus flags.
En esta página
Referencia de CLI
Usage: boxlang module:bxAgents <verb> [options]
(o la forma más corta bxAgents <verb> [options] - ver Instalación.)
Flags globales
Estos se manejan antes del despacho de verbos y nunca llegan a un verbo - solo son significativos como el primer token, así nunca colisionan con un flag del mismo nombre propio de un verbo.
| Flag | Efecto |
|---|---|
-h, --help, help | Imprime el uso (cada verbo + descripción) y sale con 0. También se imprime (sale con 1) si no se da ningún verbo en absoluto. |
-v, --version | Imprime bxAgents v{version} y sale con 0. |
Todo verbo acepta
--projectRoot=<path> (o una ruta posicional simple como el primer argumento sin flag) para apuntar a un proyecto distinto del directorio actual. Precedencia: flag --projectRoot > primer argumento posicional > directorio de trabajo actual.
Sintaxis de argumentos
Sigue las propias convenciones documentadas de CLI de BoxLang:
| Forma | Resultado |
|---|---|
--option | true |
--option=value / --option="quoted value" | value (se eliminan las comillas envolventes) |
-o=value | forma corta con un valor |
-o | forma corta, true |
-abc | abreviatura combinada: a, b, c todos true |
--!option / --no-option | negación, false |
| cualquier otra cosa | un posicional (el primero se convierte en el respaldo de raíz de proyecto) |
Opciones repetidas: gana la última.
Verbos
Genera el andamiaje de un nuevo proyecto de agente.
Ejecuta el pipeline de build completo.
Ejecuta los propios tests/specs de tu proyecto vía TestBox.
Lanza un proceso real de boxlang-miniserver.
REPL interactivo contra el agente construido.
Un turno no interactivo - para scripting/CI.
Empaqueta un proyecto construido en un .bxa.
Envía a un destino de despliegue real.
Genera el hash de una contraseña en texto plano para una entrada de usuarios de webui.
Imprime de forma legible un manifest.json existente.
Elimina la salida .build/ y dist/ de un proyecto.
new
Crea un nuevo proyecto de agente de una de tres formas mutuamente excluyentes: generar el andamiaje desde una plantilla incorporada, clonar un repositorio de GitHub, o instalar un paquete de ForgeBox.
# Generar el andamiaje desde una plantilla incorporada (por defecto: minimal)
bxAgents new my-agent --model=openai/gpt-5 [--template=minimal|webui-chat|slack-bot|telegram-bot|github-bot|mcp-server|scheduled|multi-agent] [--name=...] [--description=...]
# Clonar un repositorio de GitHub existente
bxAgents new my-agent --repo=owner/repo-name
# Instalar un paquete de ForgeBox
bxAgents new my-agent --forgebox=some-package-slug
--template,--repoy--forgeboxnombran tres FUENTES de proyecto distintas - se aplica exactamente una. Combinar dos de ellas es un error.- Modo
--template(el predeterminado cuando no se pasa ninguna opción de fuente -minimal):--modeles requerido - un slugprovider/model(ver Agent.bx).--namepor defecto toma el propio nombre base del directorio destino.- Se niega a ejecutarse si el destino ya contiene un
Agent.bx. - Crea
Agent.bx,instructions.md, cada carpeta de convención (vacía), una carpetatests/lista para ejecutar (tests/box.json+tests/specs/AgentSpec.bx), un.envque declaraBOXLANG_HOME=.build/runtime(coincidiendo con el propio home de runtime delimitado que usaserve- ver limitaciones conocidas para exactamente qué cubre y qué no esto), y un.gitignore(.build/,dist/,.env). Nunca sobrescribe un.env/.gitignoreexistente. --templateelige una de 8 plantillas incorporadas, cada una añadiendo un poco de contenido preconfigurado sobre el esqueleto base anterior:minimal- el esqueleto desnudo, nada más.webui-chat- añade ungateways/webui.bxque expone la UI de chat web en/chat.slack-bot- añade un adaptador de canalgateways/slack.bx, más las líneas de marcador de posiciónSLACK_BOT_TOKEN/SLACK_APP_TOKENcorrespondientes en.env.telegram-bot- añade un adaptador de canalgateways/telegram.bx, más una línea de marcador de posiciónTELEGRAM_BOT_TOKENcorrespondiente en.env.github-bot- añade un adaptador de canalgateways/github.bx, más las líneas de marcador de posiciónGITHUB_TOKEN/GITHUB_WEBHOOK_SECRET/GITHUB_BOT_NAMEcorrespondientes en.env.mcp-server- añade un servidor de herramientas de ejemplomcp/exampleServer.bxy una entradagateways/mcpExpose.bxque lo expone como servidor MCP en/mcp.scheduled- añade unschedules/Scheduler.bxreal que llama al agente con un temporizador diario.multi-agent- añade unconfigure()alAgent.bxraíz que declara dos subagentes (researcher,writer), cada uno generado como su propiosubagents/<name>/Agent.bx+instructions.mdreales.
- También ejecuta
box installdentro de la nueva carpetatests/, así quebxAgents testfunciona de inmediato sin un paso separado decd tests && box install. Esto es de mejor esfuerzo: siboxno está enPATHo la instalación falla,newigual tiene éxito - el mensaje simplemente te indica ejecutarlo tú mismo. Pasa--skipInstallpara omitir este paso por completo.
- Modo
--repo(--repo=owner/repo-nameo una URL completa): clona el repositorio mediante una dependencia JGit incluida - no es necesario tener instalado el binariogit. Siempre clona de forma superficial (profundidad 1) y siempre elimina la carpeta.gitresultante después, de modo que el nuevo proyecto empieza con un historial limpio en lugar de quedar atado al propio remoto del repositorio plantilla. Se niega a ejecutarse en un directorio que ya existe y no está vacío, y falla claramente si no se encuentra ningúnAgent.bxen el repositorio clonado. - Modo
--forgebox(--forgebox=<slug>): instala un paquete de ForgeBox hablando directamente con la propia API REST de ForgeBox (no requiere el CLIbox). Falla claramente si el slug no existe, la descarga falla, o el paquete instalado no tiene unAgent.bxen su raíz (desenvolviendo primero un nivel de anidamiento, ya que muchos archivos de ForgeBox envuelven su contenido en una única carpeta de nivel superior). --model,--repoy--forgeboxse excluyen mutuamente en el sentido de que solo el modo--templatenecesita--model---repo/--forgeboxnunca lo requieren, ya que el proyecto fuente ya define el suyo propio.--name/--descriptionse ignoran (con una advertencia en la salida) cuando se usa--repo/--forgebox- el proyecto clonado/instalado define el suyo propio.- El paso de conveniencia
box installparatests/(y--skipInstall) solo aplican al modo--template- la propia carpetatests/de un proyecto clonado/instalado (si es que tiene una) se deja intacta.
build
Ejecuta el pipeline de build completo.
bxAgents build [--environment=production] [--verbose] [--generatorVersion=1.0.0]
Escribe .build/app/ y .build/manifest.json. Falla con todos los errores de validación recopilados si el proyecto no es válido.
--verboseimprime una línea por fase de build en vivo mientras se ejecuta - qué se resolvió/descubrió/validó, conteos por fase (modelos, tools, gateways, advertencias, etc.), qué agentes terminaron registrados enconfig/WireBox.bxy bajo qué nombres, si se encontró unschedules/Scheduler.bx, y una línea final de tiempoBuild completed in Xms. Útil para depurar un build lento o con comportamiento inesperado. Silencioso en cualquier otro caso ---verboseno cuesta nada cuando no se pasa.--generatorVersionsobrescribe la cadena grabada engenerator.versiondemanifest.json(ver El manifest) - por defecto"dev"cuando se omite. Existe para herramientas que construyen contra una versión publicada específica de este módulo y quieren que eso quede registrado en el manifest, en lugar del valor por defecto de desarrollo local.
test
Ejecuta los propios tests/specs de tu proyecto vía TestBox.
bxAgents test
- Requiere
testboxinstalado bajotests/testbox(cd tests && box install). - Construye tu agente contra el proveedor
mockpor defecto (el override de entornotest()deAgent.bx) - no se necesita clave de API ni acceso a red. - Imprime conteos de aprobados/fallidos/con error/omitidos más una línea por fallo, y sale con código distinto de cero si algo falló.
serve
Lanza un proceso real de boxlang-miniserver apuntado a .build/app.
bxAgents serve [--port=8080] [--host=127.0.0.1]
- Requiere un
buildprevio - falla claramente si.build/appno existe. - Falla claramente si
boxlang-miniserverno se encuentra enPATH. - Sirve siempre el agente en
/__bxagents(POST /invoke,POST /stream,POST /batch,GET /info), declare lo que declare el proyecto engateways/- consulta La ruta de agente siempre activa para exigir un token en ella, o desactivarla. - Escribe
.build/miniserver.json(reescrituras habilitadas,rewriteFileName: "index.bxm", health check activado) antes de lanzar. - Delimita el propio home de runtime de BoxLang del servidor a
.build/runtime(víaserverHome) en lugar del~/.boxlangcompartido por defecto, así que la caché de clases compiladas y los overrides de configuración de cada proyecto están aislados - ycleanlo elimina gratis, ya que de todos modos borra.buildpor completo.invoke --servertambién obtiene esto, ya que reutilizaserveinternamente. Esto no se extiende achat/build/test/invokepor defecto - ver limitaciones conocidas.
chat
REPL interactivo contra el agente construido, usando el propio MiniConsole de BoxLang para la lectura de líneas.
bxAgents chat # rápido, en el mismo proceso
bxAgents chat --server [--port=<puerto>] # aplicación completa, servidor propio desechable
bxAgents chat --connect=http://127.0.0.1:8080 # aplicación completa, servidor que ya tienes en marcha
Tres modos, un solo REPL:
| Modo | Con qué habla | Cuándo usarlo |
|---|---|---|
| por defecto | La factory de agentes generada, cargada directamente en este proceso | Solo quieres hablar con el agente. Lo más rápido, sin servidor. |
--server | Un boxlang-miniserver desechable que arranca y detiene | Necesitas la semántica real de la aplicación - models/, interceptores, el scheduler, los gateways. |
--connect=<url> | Un servidor que ya está en marcha | Tienes un serve abierto en otra terminal, o quieres hablar con un despliegue. |
- Requiere un
buildprevio - salvo con--connect, que habla con un servidor que mantiene otra persona y por tanto no necesita nada construido localmente. - Por defecto: carga
GeneratedAgentFactory.bxdirectamente (sin ningún contenedor ColdBox/WireBox involucrado) y llama abuildAgent()una vez por sesión - exactamente la misma factory que usan las rutas HTTP deserve, así que el agente en sí nunca diverge. Lo que sí cambia es todo lo que aporta ColdBox: sinmodels/, sin scheduler, sin interceptores, sin registro de gateways. Cuando eso importa, usa--server. --server: arranca un miniserver real en un puerto efímero de loopback y conduce el REPL sobre HTTP contra la ruta de agente/__bxagentssiempre activa del proyecto, y lo apaga al salir.--portfija el puerto en lugar de tomar uno libre.--connect: conduce el mismo REPL contra un servidor en marcha, sin arrancar ni detener nada. La URL es la raíz del servidor (http://host:puerto), no la ruta del agente -chatla añade por su cuenta.--servery--connectson mutuamente excluyentes: uno dice "arráncame un servidor", el otro "no lo hagas". Pasar ambos falla de inmediato en lugar de honrar uno en silencio.- Ambos modos HTTP hacen streaming de la respuesta: la contestación aparece token a token a medida que el agente la produce, por la subruta
/stream(SSE) de la ruta, en vez de llegar de golpe al terminar el turno. Si el stream no se puede abrir - un servidor antiguo sin subruta/stream, o un proxy que no deja pasartext/event-stream- recurre a/invokey obtienes la respuesta completa al final en lugar de un error. - Ambos modos HTTP arrastran el
threadIddel servidor entre turnos, así que una sesión es una sola conversación y no una serie de primeros mensajes inconexos. - Un turno que se detiene a esperar una decisión humana en el bucle lo indica en lugar de aparentar que responde con silencio, y señala el endpoint
/gateways/interactions/donde se envía la decisión. - Si la ruta está protegida tras
agentApi.tokenEnvVar, estos modos reciben un401claro en lugar de un timeout confuso - no envían ningún token. - Escribe
exitoquitpara salir. - Necesita una TTY interactiva real (
MiniConsoleinvocasttypara el modo raw) - no funcionará canalizado/no interactivo. Usainvokepara scripting.
invoke
Un solo turno no interactivo contra el agente construido: envía un mensaje, imprime la respuesta, sale. Existe para scripting/CI, donde el requisito de TTY de chat es un bloqueo absoluto.
bxAgents invoke --message="What's the weather in Boston?" [--json]
bxAgents invoke --message="..." --server [--port=<port>]
- Requiere un
buildprevio. - Por defecto (sin
--server): cargaGeneratedAgentFactory.bxdirectamente (sin contenedor ColdBox, sin HTTP) y llama al agente una vez - el mismo camino en proceso que usachatinternamente, solo sin el bucle del REPL. No hay ningún prerequisito deserve/gateway en absoluto. --server: lanza un proceso real y desechable deboxlang-miniserver(igual queserve), envía el mensaje como un request HTTP real a través de la ruta expuesta contoAi()del proyecto, luego apaga el servidor de nuevo. Ejerce el camino realmente servido (enrutamiento ColdBox, interceptores, gateways) en lugar del atajo en proceso. Requiere una entradagateways/*.bxcon{ exposes: "agent", path: "..." }(ver gateways) - falla claramente si ninguna existe.--portpor defecto usa un puerto efímero libre para que nunca colisione con unserveya en ejecución.--jsonimprime{"response": "..."}en lugar de la respuesta en texto plano.
package
Empaqueta un proyecto construido en un .bxa.
bxAgents package [--version=1.0.0]
- Requiere un
buildprevio - lee.build/manifest.json; falla claramente si falta. --versionpor defecto es1.0.0.- Escribe
dist/{agentName}-{version}.bxa, un.sha256hermano, y una copia redactada demanifest.json. Ver Despliegue y secretos.
deploy
Envía un proyecto construido/empaquetado a un destino de despliegue real vía la convención pluggable deploy/.
bxAgents deploy --name=production
# o, la forma abreviada solo con flags (solo local):
bxAgents deploy --destination=/path/to/somewhere [--target=local]
--name=<entry>despacha a cualquier destino que declare la entradadeploy/<entry>.bx/.jsonnombrada (local,ssh,ftp,sftp,docker, odigitalocean).- La forma solo con flags (
--target=local --destination=..., o sin--targeten absoluto) funciona sin ninguna carpetadeploy/presente - sololocalla soporta; cada otro destino requiere una entrada nombrada, ya que necesita más configuración de la que un par de flags puede transportar. local/ssh/ftp/sftprequieren unpackageprevio;docker/digitaloceanrequieren unbuildprevio (construyen directamente desde.build/app).ftp/sftpnecesitan el módulobx-ftpinstalado junto a BxAgents (ver Instalación).
hash-password
Convierte una contraseña en texto plano en el valor passwordHash que acepta el bloque users de una entrada webui.
bxAgents hash-password --password="<tu-contraseña>"
--passwordes requerido.- Imprime el hash a stdout -
pbkdf2$<iterations>$<salt>$<derivedKey>, PBKDF2-HMAC-SHA256, con salt por llamada. Seguro de commitear: es unidireccional, y hacer el hash de la misma contraseña dos veces produce dos hashes distintos (ambos válidos). - Se mantiene deliberadamente idéntico al hasher que la propia interfaz web generada usa para verificar un inicio de sesión - un hash producido aquí siempre se verifica allí.
inspect
Imprime de forma legible un .build/manifest.json existente sin reconstruir.
bxAgents inspect [--json]
- Requiere un
buildprevio. - Imprime nombre del agente, modelo, entorno, versión del manifest, nombre/versión del generador, y conteo de archivos.
--jsonimprime el manifest crudo como JSON en lugar del resumen legible para humanos - útil para scripting.
clean
Elimina la salida .build/ y dist/ de un proyecto.
bxAgents clean
- Solo elimina
.buildydist- las convenciones fuente (Agent.bx,tools/, etc.) nunca se tocan. - Reporta "Nothing to clean" si ninguno de los directorios existe.
doctor
Comprueba el entorno y el proyecto en busca de los problemas que más habitualmente rompen un build.
bxAgents doctor [--json]
- No requiere un
buildprevio - está pensado precisamente para ejecutarse cuando algo no funciona. - Informa de la versión de BoxLang, de si el módulo
bx-aiestá cargado, de si se encuentraAgent.bx, de si la estructura del proyecto valida, y de los módulos de apoyo que falten. - Distingue entre problemas (que impedirán un build) y avisos (que no), y termina con un recuento de ambos.
--jsonimprime el mismo informe como JSON, para scripting y CI.