Servidores de herramientas MCP
Declara un servidor como
[tool_servers.<name>] en config.toml. Dale exactamente un transporte. command lanza un proceso y habla stdio. url habla HTTP streamable sobre https, o sobre http en loopback. Una declaración con ambos, o sin ninguno, se niega a cargar.
dir, headers, oauth, timeout_ms y enabled. Cada servidor declarado se conecta al arrancar a menos que definas enabled = false.
Narya mantiene una sesión de larga vida por servidor y se reconecta con backoff. Cuando un servidor se desconecta, Narya retira sus herramientas del registro, así que el modelo nunca ve las herramientas de un servidor que se fue.
Define oauth = true para un servidor remoto que inicia sesión. Narya mantiene la conexión abierta, imprime la URL de autorización y escucha en 127.0.0.1:7666 el callback mientras el inicio de sesión está abierto. Un inicio de sesión que nadie responde cuesta ese único servidor y nada más. Una ejecución de un solo turno no puede completar un inicio de sesión, y lo dice.
Árboles de herramientas de OpenAPI
Declara
[tool_trees.<name>] para convertir un documento OpenAPI en un árbol de herramientas invocable. Las claves son spec, base_url, headers, timeout_ms y enabled. Una ruta spec relativa se resuelve contra tu home de Narya. Define base_url cuando el documento no declara un servidor propio. Narya deriva las herramientas una vez al arrancar. No se ejecuta ningún servidor, y ninguna sesión se reconecta.
Scripts confinados
Narya ejecuta ECMAScript en un motor confinado. El motor no alcanza ningún sistema de archivos, ninguna red, ningún entorno ni ningún cargador de módulos. No tiene evaluación dinámica. La profundidad de llamadas se detiene en 4,096, y el código fuente se detiene en 256 KiB. Tres llamadores lo usan: la herramienta
run_program del modelo, los workflows y el descubrimiento de herramientas.
La API del host
El host sirve una API HTTP sobre un socket Unix, y cada cliente la maneja. La API del host describe el transporte, el stream de eventos y los envelopes.
Agentes, skills, comandos y hooks
Narya lee los formatos propios de Claude Code sin ningún cambio. Los agentes son archivos markdown con frontmatter YAML.
name es el único campo que un archivo debe llevar. Los demás son description, prompt, tools, model, mode y hidden. tools es una lista de permitidos y nunca una concesión: Narya intersecta la lista de un hijo con la de su padre, así que un agente hijo puede perder herramientas, nunca ganarlas.
Narya lee los agentes desde tu home de Narya, luego ~/.claude/agents, luego los .claude/agents y .narya/agents de un repositorio en el que confías. Cuatro agentes vienen con el binario: explore, general, plan y review.
Las skills siguen el estándar Agent Skills: un directorio que contiene un SKILL.md. Narya lee la misma jerarquía, ~/.claude/skills incluido, y la vuelve a leer en cada solicitud. Una skill que agregas a mitad de sesión llega al siguiente turno.
Los comandos vienen de tu home de Narya, de ~/.claude/commands, y de los .claude/commands y .narya/commands de un repositorio en el que confías.
Los hooks vienen de la tabla hooks de ~/.claude/settings.json, y del mismo archivo en un repositorio en el que confías. Narya los lee con las claves de stdin y los códigos de salida que esos scripts ya usan. Cuatro eventos tienen equivalencia: PreToolUse, PostToolUse, UserPromptSubmit y SessionStart. Cinco no tienen equivalente, así que Narya los omite y escribe una línea en el error estándar: Stop, SubagentStop, Notification, PreCompact y SessionEnd.
Los hooks propios de Narya
Declara
[[hooks]] en config.toml con point, command, timeout_ms, fail y match. fail no tiene valor predeterminado, así que decláralo. match filtra un hook before-tool-call a un solo nombre de herramienta.
Cuatro puntos deciden, y un hook ahí puede detener lo que tiene delante:
before-tool-call, before-model-request, after-tool-call, at-permission-ask.
Ocho puntos observan, y un hook ahí se entera de lo que pasó sin cambiarlo:
session-started, lane-started, lane-finished, delegation-created, child-asked, skill-invoked, permission-denied, session-compacted.
El archivo propio de un repositorio no puede declarar at-permission-ask.
Delegación
La delegación es una llamada a herramienta. Define sus límites en
[delegation] en config.toml. La clave max_depth cuenta los niveles por debajo de tu conversación, y 0 desactiva la delegación. Define max_concurrent para acotar cuántas lanes ejecuta una conversación en cualquier instante.
