Docs

Runs de agentes.

Un run le da una tarea a un agente dentro de uno de tus workspaces y lo deja trabajar solo. Escribes lo que quieres que haga, eliges el agente (Pi, Pi + Gentle Shell o Hermes, entre los que tengas instalados en ese workspace) y la carpeta, y el run se encarga del resto. Sigue adelante aunque cierres la página o la terminal.

Mientras trabaja, sigues su log en directo. Cuando termina tienes su resultado y, si la carpeta es un repositorio git, una rama con sus cambios lista para que la revises.

Puedes lanzar un run de tres formas, y las tres ven los mismos runs:

  • Desde la pestaña Runs de tu workspace en el portal.
  • Desde tu terminal, con nan run.
  • Desde tus propios scripts, con la API.

Para lanzar la misma tarea una y otra vez, desde un webhook, con una programación o con acciones que esperan tu aprobación, guárdala como una automatización.

Antes de empezar

  • Un workspace encendido, con al menos un agente instalado: Pi, Pi + Gentle Shell o Hermes. Se instalan desde el panel de Software del workspace. Consulta Elige el agente.
  • Un plan con inferencia, o tu propia clave de proveedor. Con la inferencia de NaN (lo predeterminado), un run usa la clave de inferencia del propio workspace, y lo que gasta el agente cuenta para el uso de tu plan como cualquier otra petición. Con tu propia clave de proveedor, la factura tu proveedor y no hace falta un plan con inferencia: basta con un workspace propio activo.

Elige el agente

Un run puede usar uno de tres agentes. Cada uno necesita sus programas instalados en el workspace:

AgenteValor de --agent y agentQué necesita el workspace
PipiPi.
Pi + Gentle Shellpi_gentlePi y gentle-shell. El run arranca Pi a través de gentle-shell, así que el agente trabaja con los subagentes, los guardarraíles y la memoria de gentle-shell.
HermeshermesHermes, elegido al crear el workspace o instalado desde el panel de Software.

Los runs y las automatizaciones solo aceptan un agente que el workspace tenga instalado:

  • En el portal, la lista Agent de un run nuevo o de una automatización solo muestra los agentes de ese workspace. Si no tiene ninguno, el portal te lo indica y enlaza a su panel de Software: instala uno ahí primero.
  • Desde la CLI o la API, pedir un agente que el workspace no tiene se rechaza antes de crear el run, con 409 agent_not_installed (el error señala el campo agent). nan run sale con código 4. Instala el agente desde el panel de Software, o elige otro, y vuelve a intentarlo.
  • Una automatización conserva su agente aunque luego lo quites del workspace (el editor lo marca (not installed)), pero sus runs se rechazan hasta que lo vuelvas a instalar o elijas otro agente. Si cambias el workspace de una automatización y el nuevo no tiene su agente, el editor pasa a uno que sí tenga y te lo indica.

Para saber desde un script qué agentes puede usar un workspace, lee su campo run_agents: consulta Referencia de la API → Workspaces.

Lanza un run desde el portal

Abre la pestaña Runs

Entra en cloud.nan.builders/workspaces y abre un workspace. Junto a Overview, Console, SSH keys, Events y Backups tienes la pestaña Runs. Su tarjeta Agent runs lista los runs de ese workspace, del más reciente al más antiguo, cada uno con su estado, el agente, la tarea, cuándo empezó, cuánto duró y los tokens que gastó.

Pestaña Runs de un workspace: la tarjeta Agent runs con el botón New run y una lista de runs, cada uno con su estado, agente, tarea, fecha, duración y tokens
La pestaña Runs, con el historial y New run.

Rellena el formulario

Pulsa New run y rellena el formulario (el portal está en inglés):

CampoQué es
AgentEl agente: Pi, Pi + Gentle Shell o Hermes. La lista solo muestra los agentes instalados en el workspace. Consulta Elige el agente.
TaskLa tarea, con tus palabras, como se la escribirías al agente en un chat. Hasta 32 KiB (el contador bajo la caja te dice los bytes que llevas).
FolderLa carpeta donde trabaja el agente. Por defecto es /home/nan y tiene que estar dentro de ella.
Separate branchRama aparte: Auto (por defecto), On u Off. En un repositorio git, el agente trabaja en su propia rama y tu checkout se queda como está. Consulta Dónde trabaja el agente.
Time limitEl tiempo máximo: 30 min por defecto, igual que en la CLI y la API. Las opciones son 15 min, 30 min, 1 hour y 2 hours (1 hora y 2 horas). El run se para al llegar a él.
InferenceLa inferencia: NaN (included in your plan), la predeterminada (aparece como NaN (not in your plan) si tu plan no incluye inferencia), o My own key, una Provider key tuya y el Model que usar. Consulta Usa tu propia clave de proveedor.

Pulsa Start run, o Ctrl+Enter (⌘+Enter en un Mac) desde la caja de la tarea.

Formulario New run con el selector Agent, la caja Task y su contador de bytes, el campo Folder, el selector Separate branch en Auto, el selector Time limit y el botón Start run
El formulario New run.

Síguelo en directo

Haz clic en un run de la lista para abrir su página. Arriba ves su estado, el workspace, el agente, la carpeta, cuánto lleva, los tokens que ha gastado, su tiempo máximo y la tarea. Debajo, en Output, el log se va llenando en directo mientras el agente trabaja: lo que dice, las herramientas que usa y lo que le responden. Haz clic en una línea Tool call o Tool result para desplegarla. Cuando el run termina, la página muestra cómo ha acabado, el resumen del agente y, si la hay, la rama con sus cambios.

Puedes cerrar la página cuando quieras. El run sigue, y su página estará ahí cuando vuelvas.

Página de un run en marcha: el estado Running, el botón Cancel run, el workspace, agente, carpeta, duración, tokens, tiempo máximo y tarea, y el Output en directo con una llamada a la herramienta bash y su resultado
Un run en marcha, con su salida en directo.

Cancélalo, si hace falta

Cancel run para el run en unos segundos. El portal te pide confirmación antes.

Dónde trabaja el agente

Lo que pasa con tus archivos depende de la carpeta (Folder) que elijas y de la opción Separate branch.

La carpeta…Auto (por defecto)OnOff
está dentro de un repositorio gitRama aparteRama aparteDirectamente en la carpeta
no es un repositorio gitDirectamente en la carpetaEl run falla con un error de configuraciónDirectamente en la carpeta

Con rama aparte, el agente no toca tu checkout. Trabaja en una copia aparte del repositorio (un git worktree), en una rama nueva que se llama nan-run/ seguido de los 8 primeros caracteres del id del run, por ejemplo nan-run/6f1c2a9b. Cuando el agente acaba, todo lo que ha cambiado queda en un commit en esa rama. El run nunca hace push: la rama se queda en el repositorio dentro de tu workspace y tú decides qué hacer con ella. Si el agente no ha cambiado nada, la rama se borra.

Para revisar los cambios e incorporarlos, abre una terminal en tu workspace (por SSH o desde la pestaña Console) y, desde el repositorio:

git log -p HEAD..nan-run/6f1c2a9b
git merge nan-run/6f1c2a9b

Sin rama aparte, el agente trabaja directamente en la carpeta y no hay rama. Úsalo con carpetas que no son repositorios, o cuando quieras los cambios ahí mismo.

La carpeta tiene que estar dentro de /home/nan, tu carpeta personal en el workspace.

Estados de un run

EstadoQué significa
queuedEsperando un hueco libre. Consulta Cuántos runs a la vez.
startingSe está preparando en el workspace.
runningEl agente está trabajando.
succeededEl agente ha terminado su tarea.
failedEl agente se ha parado con un error, o el run no ha podido empezar (por ejemplo, Separate branch en On en una carpeta que no es un repositorio).
cancelledLo has cancelado tú.
timed_outHa llegado a su tiempo máximo y se ha parado.
awaiting_approvalSolo para runs de automatizaciones: el agente ha terminado y ha propuesto acciones que esperan tu aprobación.

El portal muestra los mismos estados en inglés y con mayúscula, por ejemplo Running, Succeeded o Cancelled.

Desde la CLI y la API el tiempo máximo va de 60 segundos a 2 horas. El portal ofrece 15 min, 30 min, 1 hora y 2 horas, con 30 min por defecto.

Cuántos runs a la vez

Cuántos runs trabajan a la vez depende del tamaño del workspace:

TamañoRuns a la vez
Micro (también el workspace gratis de Premium)1
Nano2
Basic3
Medium5
Large8

Además, los runs con la inferencia de NaN comparten tu concurrencia de inferencia, así que puedes tener como mucho 5 de ellos trabajando a la vez entre todos tus workspaces (8 con Premium). Los runs con tu propia clave de proveedor tienen su propio límite: hasta 8 a la vez entre todos tus workspaces.

Los runs que pasan de esos límites no se rechazan: esperan en una cola y arrancan por orden de llegada. En la cola caben hasta 20 runs por workspace y 50 en total, y puedes crear hasta 60 runs por hora.

Cada run trabaja en su propio proceso dentro del workspace, con su parte de CPU y de memoria. Si uno se descontrola, se para solo ese: tus sesiones SSH y tus agentes siempre encendidos siguen funcionando.

Inferencia y secretos

Los runs con la inferencia de NaN usan la clave de inferencia del workspace, la misma que usan sus agentes cuando trabajas con ellos a mano. Sus peticiones cuentan para el uso de tu plan como cualquier otra. Los runs con tu propia clave de proveedor usan tu clave en su lugar, y nunca reciben la del workspace.

Los secretos del archivo de entorno de tu workspace, como esa clave de inferencia o un token de bot de Telegram, aparecen como [masked] en los logs y resultados de los runs, así que un log no los filtra. Consulta Enmascarado en logs y eventos.

Los secretos que guardas en tus ajustes no se les dan a estos runs: solo llegan a los runs de las automatizaciones a las que los asignas. Consulta Secretos.

Usa tu propia clave de proveedor (BYOK)

Un run puede usar tu propia clave con un proveedor de IA en lugar de la inferencia de NaN: trae tu propia clave (BYOK, bring your own key). El agente trabaja exactamente igual, pero sus llamadas al modelo salen de tu workspace directamente hacia tu proveedor, con tu clave, y es tu proveedor quien las factura.

Lo eliges en cada run y en cada automatización: NaN sigue siendo lo predeterminado.

Proveedores

ProveedorproviderId de modelo, por ejemplo
Anthropicanthropicclaude-sonnet-4-5
OpenAIopenaigpt-5
Google Geminigeminigemini-2.5-pro
OpenAI-compatibleopenai_compatibleEl que sirva el endpoint, por ejemplo meta-llama/Llama-3.3-70B-Instruct

OpenAI-compatible es cualquier endpoint que hable la API de OpenAI en una URL base que tú indicas: un proveedor como Together, Groq u OpenRouter, o tu propio servidor, siempre que se pueda alcanzar desde internet por https.

Escribe el id del modelo tal como lo llama tu proveedor. NaN no lo comprueba con tu proveedor: un id equivocado, o una clave equivocada, aparece como un run fallido con el error de tu proveedor en su log (con la clave enmascarada).

Guarda tu clave como provider key

Abre tus ajustes en el portal, Secrets, y pulsa Add secret. Rellena (el portal está en inglés):

  • Name: cómo la nombran los runs y las automatizaciones, por ejemplo ANTHROPIC_KEY. Mayúsculas, dígitos y _, empezando por una letra.
  • Kind: Provider key.
  • Provider: Anthropic, OpenAI, Google Gemini u OpenAI-compatible. No se puede cambiar después: para cambiar de proveedor, añade otra clave.
  • Base URL, solo para OpenAI-compatible: la raíz del endpoint, que suele acabar en /v1, por ejemplo https://api.together.xyz/v1. Mira las reglas de la URL base.
  • Value: la clave, una sola línea sin espacios, de 8 a 4096 caracteres.
  • Description (optional).

Como todo secreto, una provider key es de solo escritura: nadie puede volver a leerla, ni siquiera tú. La lista la muestra como Provider key · Anthropic (o su proveedor) normalmente con sus 4 últimos caracteres y, en una clave OpenAI-compatible, su URL base, que puedes cambiar con Base URL. Replace value cambia la clave para todos los runs que arranquen a partir de ese momento. nan secrets ls la muestra con KIND provider_key, su PROVIDER y su BASE URL.

Si tu cuenta tiene la API de escritura, también puedes guardarla desde la CLI, leyendo la clave de un archivo o de una tubería: nan secrets set ANTHROPIC_KEY --value-file key.txt --kind provider_key --provider anthropic. Consulta Gestiona los secretos desde la CLI.

Reglas de la URL base. NaN comprueba la URL base al guardarla y nunca se conecta a ella: solo lo hace el agente de tu workspace. Tiene que ser una dirección https pública, que no sea uno de los hosts de NaN, sin usuario:contraseña@, parámetros ni fragmento: la lista completa está en Reglas de la URL base. No pongas nunca un token en la URL base: no es un secreto, y el portal, nan secrets ls y la API la muestran en claro.

Elígela para un run

En el portal, en el formulario New run, pon Inference en My own key, elige la Provider key y escribe el Model.

Desde la terminal (CLI 0.1.32 o posterior):

nan run --byok-secret ANTHROPIC_KEY --model claude-sonnet-4-5 "arregla el test inestable del parser de fechas"

--byok-secret recibe el nombre del secreto, nunca la clave, y necesita --model. nan runs show <id> muestra la elección en su línea inference, y nan runs ls en su columna INFERENCE.

Desde la API, con una sesión iniciada (consulta Quién puede usarla), añade un objeto inference y no mandes el model de primer nivel:

{
  "workspace": "develop",
  "agent": "pi",
  "prompt": "arregla el test inestable del parser de fechas",
  "inference": { "source": "byok", "secret": "ANTHROPIC_KEY", "model": "claude-sonnet-4-5" }
}

El run que recibes dice lo mismo en su inference ("source": "byok", el provider, el secret y el model), y su usage.source es byok. Sin inference, o con {"source": "nan"}, el run usa la inferencia de NaN como siempre.

Quién puede usarla

  • Sin un plan con inferencia de NaN, los runs y las automatizaciones con tu propia clave funcionan si tienes un workspace propio activo. Con un plan con inferencia, puedes elegir una u otra en cada run.
  • Un run que lanzas tú con tu clave necesita una sesión iniciada: el portal, o la CLI después de nan auth login. Una API key (sk-...) o un token de plataforma (nan_pat_...) recibe 403 session_required, y nan run rechaza NAN_TOKEN y --token-file para estos runs. El motivo: el prompt de un run puede hacer que el agente imprima la clave que tiene, y esas credenciales no pueden leer tus secretos, así que tampoco deben poder conseguir que un agente revele uno. Sí pueden lanzar una automatización que usa tu clave: sus instrucciones son las que tú guardaste.
  • Si My own key aparece desactivado con “isn’t available for your account yet”, se está abriendo poco a poco y tu cuenta todavía no lo tiene: mientras tanto usa la inferencia de NaN, o pregunta en #support en Discord.

Facturación y uso

Tu proveedor factura todos los tokens de estos runs, en tu cuenta con él. NaN no los mide: nada cuenta para tu plan de NaN ni para su uso. Los tokens que muestra un run son los que ha informado el agente (Pi y Pi + Gentle Shell los informan, Hermes no); la referencia es la factura de tu proveedor.

Límites

  • Hasta 8 runs con tus propias claves trabajando a la vez entre todos tus workspaces. No ocupan plazas de tu límite de inferencia de NaN (5, u 8 con Premium).
  • El tamaño de cada workspace sigue limitando todos sus runs juntos, sean de NaN o no: consulta Cuántos runs a la vez. Igual que la cola (20 por workspace, 50 en total) y los 60 runs por hora.

Seguridad

  • Tu clave se guarda como cualquier secreto: cifrada, de solo escritura y enmascarada en logs, resultados y propuestas.
  • Solo llega al agente del run, dentro de tu propio workspace, como variable de entorno: nunca en la línea de comandos, en un archivo ni en los logs de NaN. El run no recibe la clave de inferencia de NaN de tu workspace.
  • NaN nunca llama a tu URL base ni a tu proveedor. Lo hace el agente de tu workspace, por la red de tu workspace.
  • El run lee los ajustes de tu agente para conservar tus skills y preferencias, pero usa su propia copia de la configuración, con solo el proveedor de tu clave: tus archivos de configuración no cambian.
  • El agente tiene la clave. Un prompt, o unos datos que lea, que lo convenzan de imprimirla o enviarla pueden filtrarla. Usa una clave limitada a lo que necesita el run, con un límite de gasto en tu proveedor, y cámbiala si se filtra.
  • Una automatización que lanza un webhook le da al agente un texto que ha escrito otra persona, mientras tiene tu clave. Tenlo en cuenta antes de conectar un webhook público a una automatización con tu clave.

Si algo sale mal

Lo que vesPor qué, y qué hacer
404 not_found, param: inference.secretNo tienes ningún secreto con ese nombre. Comprueba los nombres con nan secrets ls.
400 invalid_request, param: inference.secretEse secreto es un secreto genérico, no una Provider key. Añade tu clave como provider key.
400 invalid_request, param: inference.modelFalta el modelo, o no es un id de modelo (letras, dígitos y . _ : / -, hasta 128, sin empezar por -).
400 invalid_request, param: modelUn model de primer nivel enviado con "source": "byok". Muévelo a inference.model.
400 invalid_request, param: inferenceTu propia clave todavía no está disponible para tu cuenta, o el objeto inference está mal formado.
403 session_requiredUn run con tu clave lanzado con una API key o un token. Lánzalo con la sesión iniciada, o lanza una automatización.
403 tier_restrictedNi plan con inferencia de NaN ni un workspace propio activo.
El run falla con secret_missingLa provider key se borró después de que el run entrara en la cola.
El run falla con config_errorNo se ha podido preparar el agente para tu clave, por ejemplo Hermes con una clave de Anthropic (abajo).
El run falla con el error de tu proveedor en el logUna clave equivocada, un id de modelo equivocado, sin saldo en tu proveedor, o una URL base que no responde.

Limitación conocida: Hermes con una clave de Anthropic

Hermes todavía no puede usar una clave de Anthropic en los workspaces: sus runs fallan con config_error hasta que la imagen del workspace incluya soporte para Anthropic. Usa Pi o Pi + Gentle Shell con una clave de Anthropic, o apunta Hermes a un endpoint OpenAI-compatible.

Desde la terminal: nan run

La CLI de NaN lanza y sigue runs desde tu propia terminal. Necesitas la versión 0.1.25 o posterior, y la 0.1.29 o posterior para --agent pi_gentle: nan --version imprime nan <versión>.

Instala o actualiza la CLI

curl -fsSL https://nan.builders/install | bash

Inicia sesión

nan auth login --email tu@correo

Te llega por correo un enlace de acceso. Cópialo y pégalo de vuelta en el comando sin abrirlo antes en el navegador: solo funciona una vez. Tienes los detalles en la guía de la CLI. Para scripts, CI o un servidor, usa mejor un token: consulta Autenticación.

Lanza un run

nan run "añade tests al parser de fechas y haz que pasen"

La CLI te muestra el log en la terminal hasta que el run termina.

Otras formas de lanzarlo:

# Un workspace, un agente y una carpeta concretos
nan run --ws develop --agent hermes --cwd /home/nan/projects/api "revisa los TODO pendientes"

# Pi + Gentle Shell (el workspace necesita Pi y gentle-shell)
nan run --ws develop --agent pi_gentle "refactoriza el cargador de configuración sin romper los tests"

# La tarea desde un archivo, o desde stdin
nan run -f tarea.md
git diff | nan run -

# Lánzalo y quédate con el id sin esperar
nan run --detach "actualiza las dependencias"
FlagPor defectoQué hace
--ws NAMEtu único workspaceEl workspace donde se ejecuta. Si tienes más de uno y no lo pones, la CLI te los lista y sale con código 64.
--agent pi|pi_gentle|hermespiEl agente: pi (Pi), pi_gentle (Pi + Gentle Shell) o hermes (Hermes). Tiene que estar instalado en el workspace. Consulta Elige el agente.
--model Mel del agenteEl modelo que usa el agente. Obligatorio con --byok-secret.
--byok-secret NAMEinferencia de NaNEjecuta el run con tu propia clave de proveedor: el nombre de un secreto de tipo provider key. Necesita --model y tu sesión de nan auth login. Consulta Usa tu propia clave de proveedor.
--cwd PATH/home/nanLa carpeta en el workspace.
--worktree / --no-worktreeautoFuerza la rama aparte a on u off. Consulta Dónde trabaja el agente.
--timeout D30mEl tiempo máximo, de 1m a 2h.
--detachLanza el run, imprime su id y vuelve.
--idempotency-key KSi un reintento manda la misma clave y la misma petición, recibes el run ya creado en lugar de uno nuevo.
--jsonImprime los eventos como líneas JSON y después el run terminado.
-f FILELee la tarea de un archivo, o de stdin con -.
--token-file PATHSe autentica con el token de la primera línea de un archivo. Consulta Autenticación.

Los flags equivalen al formulario del portal: Agent es --agent, Folder es --cwd, Separate branch es --worktree / --no-worktree y Time limit es --timeout. La tarea es el texto entre comillas.

Mientras se muestra el log, Ctrl-C una vez te desconecta del log: el run sigue y la CLI te dice cómo retomarlo. Ctrl-C dos veces en menos de 2 segundos lo cancela.

Gestiona tus runs

nan runs ls                # tus runs, del más reciente al más antiguo
nan runs show <id>         # estado, resultado y prompt
nan runs logs <id> -f      # sigue el log hasta que termine
nan runs cancel <id>

nan runs logs <id> --json imprime un evento JSON por línea, cómodo para scripts. Cada evento tiene un type; estos son los principales:

TipoQué es
startedEl run ha empezado: agente, modelo, carpeta y, si la hay, la rama.
messageTexto del agente.
tool_call / tool_resultUna herramienta que ha usado el agente, y lo que le ha respondido.
logUna línea de salida que no es un mensaje.
usageLos tokens gastados hasta ahora.
errorAlgo ha ido mal, con un código.
finishedEl run ha terminado: su estado y el resumen del agente.
approval_requiredUn run de una automatización ha propuesto acciones que esperan tu aprobación.
actionUn paso de la aplicación de las acciones de una automatización.

Códigos de salida

nan run y nan runs logs -f salen con el resultado del run, así que un script puede actuar sin leer el texto:

CódigoSignificado
0terminado con éxito
1fallido
2se agotó el tiempo máximo
3cancelado
4el workspace no está listo: agente no instalado, sin clave de inferencia o configuración incorrecta
10el run espera tu aprobación (solo runs de automatizaciones)
64error de uso, también tener más de un workspace y no pasar --ws
65sin sesión, sesión caducada o sin permiso (también un token o una API key para un run con tu propia clave)
69nan.builders no disponible, o se ha perdido el stream (el run sigue, y se imprime el id)
75el run se ha aceptado y sigue en marcha (--detach, o Ctrl-C una vez)

Con set -e, ten en cuenta el 75 de --detach:

id=$(nan run --detach "actualiza las dependencias") || [ $? -eq 75 ]

Autenticación

nan run y nan runs usan lo primero que encuentren de esta lista:

  1. NAN_TOKEN: una variable de entorno con un token de plataforma (nan_pat_...) o una API key (sk-...). Se lee en cada comando y nunca se escribe en disco.
  2. --token-file PATH: el token en la primera línea de un archivo. El archivo tiene que ser privado (chmod 600): en macOS y Linux, si otros usuarios pueden leerlo o escribirlo, se rechaza.
  3. Un token guardado, con nan auth login --api-token.
  4. Tu sesión, de nan auth login (el enlace de acceso por correo).
  5. Una API key guardada, desde la pestaña Setup (o una clave sk-... guardada con nan auth login --api-token).

nan auth login --api-token lee el token solo de stdin, oculto mientras lo pegas, lo comprueba contra nan.builders y lo guarda con permisos 0600. Lo guarda aparte de la API key, así que la pestaña Setup nunca copia un token de plataforma en la configuración de tus herramientas:

nan auth login --api-token              # pégalo cuando te lo pida
nan auth login --api-token < token.txt  # o pásalo por stdin

No pongas nunca un token en la propia línea de comandos: acabaría en el historial de tu shell y en ps.

Un run con tu propia clave de proveedor (--byok-secret) usa solo tu sesión de nan auth login: la CLI rechaza NAN_TOKEN y --token-file para él, y se salta un token o una API key guardados.

En la CLI, un token de plataforma solo sirve para nan run, nan runs, nan automations y nan approvals (consulta API keys y tokens). nan me, nan metrics usage y el panel siguen necesitando una sesión de nan auth login.

Usa la CLI en CI o en un servidor

Crea un token, guárdalo en los secretos de tu CI y pásalo como NAN_TOKEN. Por ejemplo, en GitHub Actions:

- name: Review the PR with an agent
  env:
    NAN_TOKEN: ${{ secrets.NAN_TOKEN }}
  run: |
    curl -fsSL https://nan.builders/install | bash
    nan run --ws ci --timeout 20m -f .github/review-task.md

Ese paso espera al run y falla si el run falla. Para lanzarlo y seguir sin esperar, usa --detach y ten en cuenta su código de salida 75:

nan run --ws ci --detach "actualiza las dependencias" || [ $? -eq 75 ]

Guarda el token como secreto

Guarda el token solo como secreto (secrets.NAN_TOKEN en GitHub Actions), nunca en el repositorio ni en el archivo del workflow. Puede lanzar runs que gastan tu plan.

En un servidor que configuras una vez, guárdalo mejor con nan auth login --api-token.

Desde la API

Los mismos runs están disponibles por HTTP, en https://api.nan.builders/v1/runs, para tus scripts e integraciones.

API keys y tokens

Hay dos tipos de credenciales que sirven para la API de runs. Las dos están en tus ajustes del portal:

API KeysTokens
Formatosk-...nan_pat_...
Inferencia (modelos)SíNo, nunca
API de la plataforma (runs, automatizaciones, aprobaciones, tus workspaces)SíSí
Quién puede crearlasPlanes con inferenciaCualquier miembro con una suscripción activa

Un token es lo que conviene darle a un script que solo gestiona runs. No sirve para llamar a los modelos directamente, pero sí para lanzar runs que gastan tu plan: guárdalo igual de bien que una API key y revócalo si se filtra. Créalo en Settings → Tokens:

  • Se muestra una sola vez, al crearlo. Cópialo en ese momento.
  • Puedes tener hasta 10 tokens activos.
  • Cada uno caduca a los 30, 90 o 365 días, o nunca.
  • Puedes revocar cualquiera en cualquier momento.
  • Lleva scopes, lo que puede hacer: runs y workspaces:read por defecto. Para listar o lanzar automatizaciones, añade automations:read o automations:run. Consulta Tokens para automatizaciones.

Para crear runs con la inferencia de NaN sigue haciendo falta un plan con inferencia, uses la credencial que uses. Los runs con tu propia clave de proveedor necesitan una sesión iniciada en lugar de una API key o un token. La referencia de la API indica qué credencial acepta cada endpoint.

Un agente no puede lanzar runs por su cuenta

La clave que hay dentro de un workspace, la que usan sus agentes para la inferencia, no puede gestionar runs: la API le responde con un 403. Un agente que trabaja en tu workspace no puede lanzar runs nuevos por su cuenta, salvo que le des una de tus propias API keys o tokens.

Crea un run y síguelo

Un ejemplo de principio a fin: crea un run, guarda su id (con jq) y sigue su log en directo hasta que termine. Si el run no se puede crear, muestra el error en lugar de seguir el log.

export NAN_TOKEN="nan_pat_..."

RESP=$(curl -s https://api.nan.builders/v1/runs \
  -H "Authorization: Bearer $NAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace": "develop",
    "agent": "pi",
    "prompt": "añade tests al parser de fechas y haz que pasen",
    "cwd": "/home/nan/projects/api"
  }')
RUN_ID=$(echo "$RESP" | jq -r '.id // empty')
if [ -z "$RUN_ID" ]; then
  echo "$RESP"
else
  curl -N "https://api.nan.builders/v1/runs/$RUN_ID/events" \
    -H "Authorization: Bearer $NAN_TOKEN" \
    -H "Accept: text/event-stream"
fi

Los campos equivalen al formulario del portal: Agent es agent, Task es prompt, Folder es cwd, y los opcionales Separate branch y Time limit son git_isolation y timeout_seconds.

agent es pi, pi_gentle o hermes, como en Elige el agente. Si el workspace no tiene ese agente instalado, no se crea ningún run y el ejemplo imprime el error:

{
  "error": {
    "message": "Pi + Gentle Shell is not installed in this workspace",
    "type": "invalid_request_error",
    "param": "agent",
    "code": "agent_not_installed"
  }
}

El stream manda un frame run_event por cada evento del log, un frame state cuando el run cambia de estado y un frame end con el run terminado, y después se cierra.

Referencia completa: Referencia de la API → Runs. Ahí están todos los endpoints (listar, consultar, cancelar), los campos de cada petición y respuesta, los tipos de evento, cómo retomar un stream, los reintentos idempotentes y todos los códigos de error. Para sacar el nombre o el id de un workspace desde un script, consulta Referencia de la API → Workspaces.

Preguntas frecuentes

¿Un run sube mi código a algún sitio?

No. Con rama aparte, los cambios se quedan en una rama nan-run/... del repositorio dentro de tu workspace. Hacer push, merge o descartarlos es cosa tuya.

¿Qué pasa si cierro el navegador o la terminal?

Nada: el run sigue en el workspace. Abre su página en la pestaña Runs, o ejecuta nan runs logs <id> -f, para retomarlo.

¿Puedo usar runs si mi plan no incluye inferencia?

Sí, con tu propia clave de proveedor y un workspace propio activo: los tokens los factura tu proveedor. Los runs con la inferencia de NaN necesitan un plan con inferencia.

¿Un run afecta a mis sesiones SSH o a mis agentes siempre encendidos?

No. Cada run tiene su propia parte de la CPU y la memoria del workspace. Si uno se descontrola, solo se para ese run.

¿Dónde pido ayuda?

Escribe en #support en Discord.

nan.builders © 2026
Copied to clipboard