Autentícate en tu organización
En tu propia máquina, el host acepta a tu propio usuario del sistema operativo sin autenticación. Autentícate en tu organización para el trabajo que llega a ella más allá de esta máquina: recursos compartidos, los repositorios de GitHub de tu organización, y registrar, cambiar o llamar extensiones. El primer trabajo autenticado en un home reclama el home para tu organización. La persona autenticada pasa a ser dueña del trabajo hecho ahí antes. Después de eso, el host rechaza una solicitud sin token mientras esta máquina no esté autenticada en esa organización. Completa la tabla
[identity] en config.toml con los valores que te da tu organización: issuer, jwks_url, auth_url, device_url y client_id. Un host sin issuer o jwks_url rechaza cada token. El host aplica un cambio en [identity] en su siguiente inicio después de que una persona permite el nuevo config.toml en una conversación atendida. Consulta Cuándo entra en vigor un cambio de configuración.
narya loginimprime una URL y un código corto. Abre la URL en cualquier máquina con navegador e ingresa el código.narya whoamiinforma con qué identidad está autenticada esta máquina, sin llamada de red.narya logoutelimina la autenticación.
El host
1
Inicia el host
Ejecuta
narya host start. El host toma el bloqueo del almacén y escucha en el socket dentro de tu directorio home de Narya.2
Revísalo
Ejecuta
narya host status. Informa si hay un host en ejecución y el estado de cada uno de sus servidores de herramientas, incluidos los de un repositorio de confianza. Sale con 1 mientras alguno de ellos está caído.3
Detenlo
Ejecuta
narya host stop. El host espera hasta 10 segundos las solicitudes y los turnos en curso y luego libera el bloqueo del almacén. Un turno que sigue en ejecución después de 10 segundos se detiene, y el siguiente inicio lo recupera.Mantén el host vivo entre inicios de sesión
narya daemon install escribe un servicio de inicio de sesión y lo carga: un LaunchAgent en macOS y una unidad de systemd de usuario en Linux. Ambos ejecutan narya host start y lo reinician después de una falla. Narya escribe la unidad con permisos 0600. Define NARYA_HOME dentro de la unidad en lugar de heredar el valor.
narya daemon status responde tres preguntas por separado: registrado, cargado y sirviendo. narya daemon uninstall elimina la unidad y nada más. Tus sesiones, tu almacén y tu configuración se mantienen.
El host y cada sesión dentro de él sobreviven a una terminal cerrada. Un narya -p posterior se conecta al host en ejecución en lugar de abrir el almacén por sí mismo.
narya daemon install es el único comando que escribe una unidad de servicio.Sesiones
Cada sesión se liga a una ruta de repositorio. Retoma una con
narya -s <session-id>, o con narya -p --session <session-id>.
narya session listlista las sesiones del almacén.narya export <session-id>escribe una transcripción en la salida estándar. Elige--format markdowno--format jsonl. Agrega--reasoningy--tool-outputpara más detalle.narya import <file> --repository <absolute path>lee una transcripción de otra herramienta. Define--format claudecodeo--format opencode.narya session promote <session-id>entrega la sesión al host en ejecución, así que una pregunta de permiso posterior en ella se rechaza y se registra.narya session share <session-id>copia la sesión al home de tu organización. Agregasyncpara seguir enviando las entradas posteriores.
Compartir una sesión
Un recurso compartido copia una sesión al home de tu organización, donde tu equipo la lee. El host enmascara las entradas antes de que salgan de tu máquina. Defines las reglas de enmascaramiento en la tabla
[sharing.redaction] de config.toml.
1
Revisa la vista previa
Llama a
GET /v1/sessions/{sessionId}/share/preview. La respuesta lleva cada entrada tal como el host la enviaría, y nombra cada regla que retuvo algo. Una vista previa no envía nada.2
Publica la sesión
Llama a
POST /v1/sessions/{sessionId}/share con mode. once copia las entradas que existen ahora. sync también envía las entradas que lleguen después. La respuesta lleva el nuevo shareId.expiresAtdefine cuándo termina el recurso compartido. Sin él, se aplica la ventana del host. Define esa ventana condefault_expiryen la tabla[sharing].recipientsnombra a los colegas para quienes es el recurso compartido. Sin él, el recurso compartido es para toda la organización. Solo el dueño de la sesión puede nombrar destinatarios.
503 con NRY-0029 significa que el host registró el recurso compartido y encoló sus entradas, pero el home de la organización no respondió. El host envía las entradas más tarde. Cada publicación crea un recurso compartido nuevo, así que una segunda publicación de la misma sesión crea un segundo recurso compartido.
GET /v1/sessions/{sessionId}/sharelista los recursos compartidos activos de la sesión que puedes cambiar.PUT /v1/shares/{shareId}/recipientscambia para quién es un recurso compartido.DELETE /v1/sessions/{sessionId}/sharerevoca todos los recursos compartidos de la sesión y borra la copia en el home de la organización. Un503conNRY-0029significa que la copia sigue allí. Envía la solicitud otra vez cuando el home responda.GET /v1/sharesen el home de la organización lista los recursos compartidos que puedes leer allí.
Ejecutar una sesión en un entorno
Un entorno es un contenedor que el host aprovisiona para tus sesiones. Una sesión que no nombra ningún entorno se ejecuta en la máquina del host. El host aprovisiona entornos solo cuando la variable de entorno
NARYA_SANDBOX_IMAGE nombra la imagen que se ejecuta. El host los ejecuta en Docker Engine 23 o posterior, y la imagen ya debe estar en el daemon de Docker.
Agrega --container a narya o a narya -p para abrir una nueva conversación en un contenedor propio, conversation-<sessionId>. Por la API, define container como true en POST /v1/sessions. Este contenedor, y cada contenedor de un home alojado, se detiene después de 15 minutos sin uso, conserva sus archivos y vuelve a arrancar con el siguiente mensaje. Archivar la conversación elimina el contenedor.
POST /v1/environmentscrea un entorno. Soloides obligatorio.setupScriptse ejecuta una vez dentro del nuevo entorno.repositorynombra un repositorio que tu organización seleccionó en la GitHub App de Narya, comoowner/name, y el host lo clona en el entorno.GET /v1/environmentslista tus entornos, yGET /v1/environments/{environmentId}lee uno.DELETE /v1/environments/{environmentId}destruye un entorno.
environment de POST /v1/sessions.
Una creación es idempotente en id. Cuando envías un id que ya creaste, el host responde 200 con ese entorno. No aprovisiona nada y no ejecuta ningún script de configuración.
Cuando el script de configuración termina, el host detiene cada proceso que el script dejó en ejecución. Un proceso que salió del grupo de procesos del script, por ejemplo con setsid, y sigue en ejecución hace fallar la configuración.
Cuando el script de configuración falla o supera el límite de tiempo del host, el entorno queda unusable. Su campo setup lleva el resultado y la salida del script. Una sesión no puede ejecutarse en un entorno unusable. Destrúyelo y luego créalo otra vez con un script corregido.
Un home que Lerian aloja
Lerian también ejecuta Narya como un home alojado, uno por cada organización. El home alojado sirve la misma API del host. Cada sesión allí se ejecuta en un contenedor.
- Una sesión que no nombra ningún
environment,clonenicontainerrecibe su contenedor,conversation-<sessionId>, en su primer turno. Conclone, o concontainerdefinido comotrue, la sesión recibe su contenedor al crearse. - Define
cloneenPOST /v1/sessionspara clonar un repositorio en el contenedor cuando se crea la sesión. Nombra un repositorio que tu organización seleccionó en la GitHub App de Narya, comoowner/name. La sesión trabaja en su propia rama,narya/conversation-<sessionId>. - Después del clon, el
.narya/setup.shdel repositorio se ejecuta una vez en el contenedor.setupScriptlo reemplaza. Un clon o una configuración que falla no abre ninguna sesión. - La ruta
repositoryde una sesión es relativa al workspace del home. - Archivar la conversación elimina su contenedor, su clon y su rama. Una rama que la sesión envió sigue en GitHub.
.narya/setup.sh del repositorio, y toma una nueva en la siguiente configuración exitosa. Si la configuración edita un archivo que git rastrea, el home no guarda ninguna instantánea.
Un home alojado rechaza estas solicitudes con 422:
- Una instalación de paquete. Registra una extensión en una dirección HTTPS en su lugar.
- Un inicio de sesión
subscription. - Una respuesta de confianza. Una sesión allí toma la confianza de su contenedor.
- Un
worktreeen una sesión nueva.
Checkpoints y rewinds
Dentro de un repositorio git, Narya registra puntos de restauración de tu árbol de trabajo en un repositorio git paralelo junto a tu checkout. Tu propio historial de git nunca cambia. Ningún temporizador elimina un checkpoint. Fuera de un repositorio git, Narya no registra ninguno, y rechaza un rewind de los archivos. Un rewind mueve una sesión hacia atrás en la conversación, en los archivos o en ambos. Indica el alcance, porque no tiene valor predeterminado. Antes de que un rewind mueva archivos, Narya registra el árbol tal como está, así que el estado que dejas se vuelve un punto de restauración propio.
Salud y reparación
narya doctor recorre la instalación e informa lo que encuentra:
- el directorio home y la configuración
- el host y el almacén
- las sesiones, los trabajos de paquetes y los servidores de herramientas
- las credenciales
- el binario y la terminal
narya repair <session-id> es la salida de una cuarentena. Al iniciar, Narya recupera cada sesión que un apagado no limpio dejó en ejecución, y pone en cuarentena la que no puede reproducir. Este comando reintenta esa recuperación. Agrega --retire para archivar la sesión en su lugar, con su transcripción conservada.
Retención
Narya elimina los eventos de un turno después de que el turno termina, y la transcripción conserva el turno. Narya conserva todo lo demás hasta que indiques otra cosa. Define una antigüedad máxima por clase bajo
[retention] en config.toml.
narya retention statusinforma qué eliminaría un barrido.narya retention runhace el barrido.narya purge <session-id> --yeselimina una sesión y su transcripción. Lo rechaza mientras la sesión tenga un recurso compartido activo, así que revoca el recurso compartido antes.
narya repair, narya retention y narya purge abren el almacén por sí mismos, así que se niegan mientras un host se ejecuta. Detenlo primero con narya host stop.
