Skip to main content
Los entornos autohospedados están en versión beta pública en planes Team y Enterprise; un Propietario los habilita activando Allow self-hosted environments en la página de administración Cloud environments. Esta página asume un ejecutor funcional; consulte el inicio rápido para la configuración e Implementar en producción para las recetas de flota.
Un entorno autohospedado ejecuta sesiones en la nube de Claude Code en su propia infraestructura, ejecutadas por un proceso ejecutor que usted implementa. Sin configuración, ese ejecutor clona el repositorio de la sesión, genera Claude Code y limpia. Esta página es para el ingeniero de plataforma que opera los ejecutores: cubre los puntos de extensión para cuando esos valores predeterminados no se ajustan, desde el aprovisionamiento de credenciales por sesión hasta reemplazar completamente el checkout. Los contenedores y hooks se ejecutan como archivos ejecutables en el host del ejecutor, que es Linux o macOS, y los ejemplos en esta página asumen un shell POSIX. Algunas variables de entorno de hook en esta página aún usan pool, como CLAUDE_RUNNER_POOL_ID; los nombres de banderas CLI y variables de entorno usan environment, como --environment-secret-file.

Scripts contenedores

Use un script contenedor cuando cada sesión necesite configuración que el ejecutor no puede hacer por sí solo: aprovisionamiento de credenciales de corta duración limitadas al creador de la sesión, exportación de secretos específicos del entorno, preparación de cadenas de herramientas de lenguaje o aplicación de límites de recursos alrededor del proceso secundario. El ejecutor inicia su contenedor en lugar del binario de Claude Code, una vez por sesión. Termine el contenedor con exec en $CLAUDE_RUNNER_CLAUDE_BIN, el binario propio del ejecutor, para que las señales y códigos de salida se propaguen correctamente. Apunte --exec-path, o SELF_HOSTED_RUNNER_EXEC_PATH, al contenedor cuando inicie el ejecutor:
El ejecutor establece lo siguiente en el entorno del contenedor: El contenedor también hereda el resto del entorno administrado del hijo, incluidas cualquier variable de entorno proporcionada por el servidor. exec lo propaga todo automáticamente; si su contenedor genera el hijo de otra manera, reenvíe el entorno completo.

Mantener stdin y descriptor de archivo 3 adjuntos

El stdin del hijo es el canal de control del ejecutor. Las rotaciones de token y las señales de fin de sesión llegan en él. El ejecutor también abre una tubería en el descriptor de archivo 3 y lee las señales de actividad del hijo de ella para impulsar los tiempos de espera de inactividad e inicio. Un simple exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" preserva ambos automáticamente. Si su contenedor coloca el hijo en segundo plano con un simple &, corta el stdin del hijo: la sesión se ve saludable hasta que la vida útil del token OAuth inicial de aproximadamente 30 minutos expira, luego cada llamada de API falla con 401 authentication_error. Si su contenedor debe colocar el hijo en segundo plano, por ejemplo para mantener viva una trampa de desmontaje, guarde stdin en el descriptor de archivo 4 o superior y vuelva a adjuntarlo explícitamente:
No cierre ni reutilice el descriptor de archivo 3 en el contenedor. Redirigir stdout y stderr del hijo está bien.

Aprovisionar credenciales limitadas al creador de la sesión

Use el subcomando decode-token para leer reclamaciones del JWT de sesión. Lee el token de un argumento, de CLAUDE_CODE_SESSION_ACCESS_TOKEN o de stdin, en ese orden; consulte Verificar el token dentro de la sesión para lo que verifica. El ejemplo a continuación decodifica la identidad del creador, la intercambia por credenciales de AWS de corta duración y ejecuta en Claude Code:
Use jq -re en lugar de jq -r cuando la reclamación extraída controla una decisión de autenticación, para que una reclamación ausente salga con código distinto de cero en lugar de pasar la cadena literal null aguas abajo. Las sesiones creadas por una identidad de servicio de la organización, como sesiones de bot y agente, llevan un asunto agent: en lugar de user:, por lo que este ejemplo las rechaza; si su entorno sirve esas sesiones, decida explícitamente si el contenedor vuelve a una credencial predeterminada para ellas en lugar de salir. Cuando su intercambio de credenciales necesita el asunto o correo electrónico de SSO en su lugar, lea .act.attested_by.sub o .act.email y maneje su ausencia: el token los lleva solo cuando la superficie de creación los registró, y una sesión despachada por CLI puede carecer de ambos. Para la referencia de reclamación completa y verificación desde servicios fuera del ejecutor, consulte Verificar identidad de sesión.

Hooks de ciclo de vida

Los hooks de ciclo de vida reemplazan etapas del pipeline por sesión del ejecutor con sus propios scripts. Apunte el ejecutor a un directorio de hooks con --hooks-dir <path>, o SELF_HOSTED_RUNNER_HOOKS_DIR. El ejecutor busca archivos ejecutables con nombres bien conocidos; cualquier hook que no esté presente cae en el comportamiento integrado, por lo que solo escribe los que necesita. Los hooks se ejecutan con los privilegios propios del ejecutor, y los hijos de sesión comparten ese UID, por lo que monte el directorio de hooks como solo lectura, o incorpórelo en la imagen, para que el código de sesión no pueda modificarlo; consulte la sección de endurecimiento. Estos hooks son distintos de los hooks de Claude Code, que se ejecutan dentro de la sesión; los hooks de ciclo de vida se ejecutan en el ejecutor, alrededor de la sesión.

checkout

Se ejecuta una vez por repositorio, en lugar del clon e incorporación integrados del ejecutor. Use el hook para clonar desde un espejo de lectura, sembrar un árbol de trabajo desde un archivo, o aplicar autenticación git por sesión. El ejecutor establece: El script debe dejar un árbol de trabajo en CLAUDE_RUNNER_CHECKOUT_PATH verificado en la revisión solicitada. HEAD desacoplado está bien; el ejecutor crea la rama de trabajo de la sesión encima. El ejecutor verifica que la ruta contenga un .git después; si su hook materializa una fuente no git como Perforce o un tarball desempaquetado, establezca CLAUDE_RUNNER_SKIP_GIT_VERIFY=1 en el entorno del ejecutor para omitir esa verificación. Los flujos basados en git como la creación de rama de trabajo y el envío de resultados requieren un checkout de git, por lo que exporte resultados de árboles no git con un hook post-session. El ejecutor no pasa una credencial git al hook. En su lugar, acuñe una credencial de clon por sesión de la identidad de la sesión: verifique CLAUDE_CODE_SESSION_ACCESS_TOKEN con una biblioteca JWT estándar contra el punto final JWKS bajo CLAUDE_RUNNER_API_BASE_URL, como se describe en Verificar el token desde su servicio, luego haga que su servicio de credenciales emita una credencial de clon de corta duración para la identidad en la reclamación act del token. CLAUDE_RUNNER_CLAUDE_BIN no se establece en el entorno del hook de checkout, por lo que el subcomando decode-token no está disponible aquí. Volver a la autenticación git que el host ya tiene, como un agente SSH, ayudante de credenciales o .netrc, también es una opción. Cuando el hook sale con código distinto de cero, o sale con 0 sin dejar un checkout utilizable detrás, lo que hace el ejecutor depende del repositorio:
  • Un repositorio al que la sesión envía resultados: el ejecutor falla la sesión, y en una salida distinta de cero muestra la cola del stderr del script al usuario.
  • Un repositorio que la sesión solo lee, como un repositorio agregado a una sesión en ejecución: el ejecutor registra una línea [runner:warn] con el detalle de falla, publica un paso Skipped a la sesión, elimina lo que el hook dejó en la ruta de checkout y continúa con los repositorios restantes. Cuando el ejecutor no puede eliminar la ruta inmediatamente, reintenta la eliminación al final de la sesión. Si omitir deja la sesión sin repositorio en absoluto, el ejecutor falla la sesión de todas formas.
Antes de v2.1.228, el ejecutor fallaba la sesión en un fallo de hook para cualquier repositorio, por lo que un repositorio de solo lectura que el hook no podía servir fallaba la sesión nuevamente en cada ejecutor nuevo en el que la sesión se reanudaba. El ejecutor elimina la ruta de checkout después de que la sesión termina.

post-session

Se ejecuta una vez por sesión, después de que el hijo de Claude Code ha salido y antes de que el ejecutor desmonte el espacio de trabajo. Este hook es su única oportunidad para guardar trabajo no confirmado: en --capacity por encima de uno, el ejecutor elimina árboles de trabajo por sesión justo después de que el hook regresa, y en --capacity 1 el clon canónico reutilizado se reinicia cuando la siguiente sesión comienza, por lo que los cambios rastreados no confirmados no sobreviven en ninguna ruta. Los usos típicos son enviar una rama de instantánea de cambios no confirmados, archivar registros o emitir un evento de fin de sesión a sus propios sistemas. El hook se dispara en cada fin de sesión donde se generó un proceso hijo, sea cual sea la causa; los valores CLAUDE_RUNNER_EXIT_REASON a continuación enumeran los casos. No puede dispararse cuando el ejecutor termina abruptamente, como una preferencia de VM o una pérdida de energía; si necesita garantías contra terminación abrupta, tome instantáneas periódicamente desde dentro de la sesión con un hook PostToolUse de Claude Code en su lugar. El ejecutor establece: CLAUDE_RUNNER_EXIT_REASON toma uno de cuatro valores:
  • completed: una salida limpia, incluida una sesión archivada o eliminada mientras el hijo aún estaba conectado.
  • failed: un bloqueo secundario o un fallo de configuración después de la generación.
  • interrupted: una liberación de inactividad, tiempo de espera de inicio, desasignación de servidor, drenaje o muerte de vigilancia.
  • abandoned: reservado para sesiones que otro ejecutor reclamó; el hook actualmente no se dispara en ese caso.
La semántica del contador de ciclo de vida de sesión clasifica una liberación de inactividad, un tiempo de espera de inicio y una desasignación de servidor como completed en su lugar: esos son traspases limpios desde la perspectiva de la sesión aunque este hook los reporta como interrupted. El estado de salida del hook nunca afecta el resultado de la sesión; un fallo se registra e ignora. El ejecutor espera hasta --post-session-hook-timeout-sec, 60 segundos por defecto, en cada fin de sesión incluido el apagado del ejecutor. Este ejemplo guarda trabajo no confirmado en una rama de rescate:
El hook envía con cualquier credencial git disponible en su propio entorno en el host del ejecutor. Bajo la postura de no credenciales en la imagen, incluido cuando el clon integrado pasa por el proxy git de Anthropic, no hay ninguna, por lo que acuñe una credencial de envío de corta duración dentro del hook antes de enviar: intercambie el token de sesión que el hook recibe en CLAUDE_CODE_SESSION_ACCESS_TOKEN con su propio servicio de token, verificándolo como Verificar identidad de sesión describe. Cuando el hook tiene una credencial que la sesión no tenía, también fije dónde envía: reemplace origin con una URL proporcionada por el operador y pase -c credential.helper= más su propio ayudante, para que la configuración a nivel de repositorio que la sesión escribió no pueda redirigir el envío acreditado.

Tiempo del hook cuando el ejecutor libera una sesión

Una sesión liberada puede reanudarse en otro ejecutor. En un ejecutor en v2.1.236 o posterior, lo que la sesión estaba haciendo en la liberación decide si puede reanudarse antes de que este hook termine:
  • Inactivo después de un turno, o tiempo de espera agotado al inicio: el ejecutor detiene el hijo y ejecuta este hook hasta completarse. Solo entonces libera la sesión. Un mensaje de usuario enviado mientras se ejecuta el hook no puede reanudar la sesión en otro ejecutor antes de que el hook termine.
  • Esperando que el usuario responda a un mensaje, como un mensaje de permiso: el ejecutor libera la sesión primero, luego ejecuta este hook. Un mensaje de usuario enviado mientras se ejecuta el hook puede reanudar la sesión en otro ejecutor antes de que el hook termine.
Una liberación en el tiempo --retire-at sigue los mismos dos caminos. Durante un drenaje SIGTERM, el ejecutor mantiene el arrendamiento de sesión hasta que el hook termina; consulte Tiempo de apagado. Antes de v2.1.236, el ejecutor liberaba la sesión primero y luego ejecutaba este hook en ambos caminos.

command

Se ejecuta una vez por sesión después del checkout, en lugar de la generación de hijo integrada. El hook recibe el mismo entorno que un script contenedor y debe exec en "$CLAUDE_RUNNER_CLAUDE_BIN" de la misma manera. Use el hook command para mantener toda la personalización en un directorio de hooks; use --exec-path cuando el contenedor vive en otro lugar. Si --exec-path también se establece, la bandera tiene precedencia y el hook command se ignora. Siempre exec el binario propio del ejecutor en lugar de un claude resuelto por PATH; de lo contrario, anula el fijación de versión.

Ejecutores bajo demanda

En lugar de ejecutar una flota fija, puede arrancar un ejecutor por sesión. El orquestador es un subcomando separado y sin estado que sondea a Anthropic para solicitudes de generación, una por sesión que está en cola sin ejecutor disponible, y ejecuta su hook spawn-runner para cada una. Su hook envía una carga de trabajo a su plataforma: un Job de Kubernetes, una instancia de EC2, un despacho de Nomad. Los ejecutores bajo demanda mejoran la higiene de credenciales. En una flota fija, el secreto del entorno vive en cada host del ejecutor, que es el mismo host que ejecuta sesiones de usuario. Con el orquestador, el secreto del entorno permanece solo en el host del orquestador, que nunca ejecuta código de usuario; cada ejecutor generado recibe una orden de trabajo de un solo uso que registra exactamente un ejecutor y luego expira. Para iniciar el orquestador, pase el secreto del entorno y un directorio de hooks que contenga un script spawn-runner ejecutable:
El orquestador no mantiene estado entre sondeos, por lo que puede ejecutar dos o más réplicas contra el mismo entorno para disponibilidad. Cada solicitud de generación es reclamada del lado del servidor por exactamente una réplica. Todas las réplicas deben usar el mismo valor --expected-spawn-seconds; consulte el contrato del hook.

El hook spawn-runner

El orquestador ejecuta ${hooks-dir}/spawn-runner una vez por solicitud de generación. El hook debe enviar trabajo de forma asincrónica, sin esperar a que el ejecutor arranque, y regresar dentro de --hook-timeout, 60 segundos por defecto. El hook recibe: El ejecutor generado se registra con la orden de trabajo en lugar del secreto del entorno:
  • Inicie con la orden de trabajo: apunte --environment-secret-file a un archivo que contenga el JWT de orden de trabajo, o establezca SELF_HOSTED_RUNNER_ENVIRONMENT_SECRET al valor JWT.
  • Copie el JWT antes de que el hook salga: el orquestador elimina el archivo de orden de trabajo después de que el hook sale, por lo que copie el JWT en la carga de trabajo que envía, como un Secret de Kubernetes en el Job generado, en lugar de pasar la ruta del archivo.
  • Use --capacity 1 en ejecutores generados: una orden de trabajo vinculada a sesión registra exactamente un ejecutor vinculado a esa sesión, por lo que una capacidad más alta agrega espacios que nunca reciben trabajo, y el ejecutor registra una advertencia al inicio.
  • Las órdenes de trabajo de precalentamiento registran sin vincular: el ejecutor en espera no está vinculado a una sesión y reclama trabajo en cola como un ejecutor de flota fija.
El contrato tiene cuatro reglas agnósticas del aprovisionador:
  1. Sea idempotente en CLAUDE_RUNNER_ORDER_ID. La reentrega de la misma solicitud debe generar como máximo un ejecutor. Derive un nombre de recurso determinista del ID y deje que su plataforma rechace el duplicado.
  2. No reintente la carga de trabajo. Un ID de orden significa como máximo una carga de trabajo creada. Si el ejecutor nunca se registra, Anthropic reintenta con un ID de orden nuevo después de --expected-spawn-seconds.
  3. Use el contrato de código de salida. Salida 0 significa enviado. Salida 1 significa fallo reintentable; la sesión retrocede y se reintenta. Salida 2 o superior significa no reintentable; la sesión se bloquea de generar nuevamente hasta que un Propietario selecciona Retry en ella en la pestaña Activity del entorno. En salida distinta de cero, la cola del stderr del hook aparece allí como la razón de falla, por lo que escriba el error procesable a stderr y nunca secretos. Para una solicitud de precalentamiento no hay sesión para fallar: el orquestador registra una salida distinta de cero localmente solamente, y el servidor reintenta la generación después del arrendamiento.
  4. Establezca --expected-spawn-seconds a al menos su tiempo de arranque p99. Este es el arrendamiento del lado del servidor. Todas las réplicas del orquestador deben usar el mismo valor.
Todo lo que el hook escribe a stdout o stderr aparece en el registro del orquestador con credenciales automáticamente redactadas. Si las sesiones permanecen en cola, verifique el cuerpo /healthz del orquestador para contar colas, luego abra la pestaña Activity de su entorno en la página de administración Cloud environments: expanda una sesión fallida allí para su error de generación, y seleccione Retry para reintentarla.

Servidores MCP

Para que los servidores MCP estén disponibles en cada sesión, agréguelos en el momento de la compilación de la imagen con el mismo comando claude mcp add que se utiliza en una instalación de escritorio. Si su ejecutor es un proceso simple en lugar de un contenedor, ejecute el mismo comando como usuario del ejecutor en el host y luego reinicie el ejecutor: lee la configuración del host una sola vez al inicio. La bandera --scope user es obligatoria; el alcance local predeterminado escribe bajo una clave por directorio que el ejecutor no proporciona en las sesiones. Por ejemplo, en su Dockerfile:
El ejecutor captura la configuración del host una sola vez al inicio. La captura obtiene la clave mcpServers del .claude.json del host, que se encuentra junto a (no dentro de) ~/.claude/, y el ejecutor proporciona solo esa clave en la configuración aislada de cada sesión; el estado de la cuenta y el historial del proyecto se descartan. Para confirmar que los servidores llegaron a las sesiones, inicie una sesión en el entorno y pida a Claude que enumere sus herramientas MCP; el ejecutor también registra una advertencia de inicio para cualquier entrada capturada cuyo type no reconoce y descarta la entrada, por lo que puede ver por qué falta ese servidor en las sesiones. Cuando se establece SELF_HOSTED_RUNNER_HOST_CONFIG_DIR, el ejecutor lee .claude.json de ese directorio en su lugar, por lo que apuntar la variable a un directorio vacío también desactiva la propagación de MCP. Otras dos fuentes también funcionan:
  • El archivo MCP administrado de alcance empresarial en su ruta estándar del sistema: /etc/claude-code/managed-mcp.json en hosts ejecutores de Linux, /Library/Application Support/ClaudeCode/managed-mcp.json en hosts macOS. Úselo para flotas bloqueadas donde solo los servidores enumerados por el administrador pueden cargarse. Consulte control exclusivo con managed-mcp.json para las reglas de precedencia. Cuando este archivo está en el host del ejecutor, Claude Code omite los servidores MCP que el plano de control de Anthropic entrega a una sesión, incluidos los conectores de claude.ai, y los nombra en una advertencia en stderr del hijo de la sesión, que el ejecutor registra en el nivel de registro debug. Antes de v2.1.229, esas sesiones salían al inicio con You cannot dynamically configure MCP servers when an enterprise MCP config is present.
  • <repo>/.mcp.json: alcance del proyecto. Confirme el archivo en el repositorio; sus servidores se aprueban automáticamente en sesiones en la nube.
Cuando la entrega de conectores está habilitada para su organización, el plano de control de Anthropic entrega los conectores que ha configurado en claude.ai a sesiones creadas interactivamente a través de la configuración de MCP proporcionada por el servidor, enrutada a través de api.anthropic.com. Las sesiones creadas mediante programación, como ejecuciones de CLI, no reciben entrega de conectores; proporcióneles servidores MCP a través de la captura del host, el archivo MCP administrado, o <repo>/.mcp.json en su lugar. El token OAuth del hijo no lleva un alcance para obtener conectores directamente, por lo que el hijo no intenta esa obtención en sí mismo; la entrega es impulsada por el servidor. settings.json y managed-settings.json no llevan definiciones de servidor MCP; no hay un campo mcpServers de nivel superior en el esquema de configuración. Las sesiones heredan el entorno del ejecutor, por lo que establezca ENABLE_TOOL_SEARCH allí para controlar la búsqueda de herramientas MCP para cada sesión que genera un ejecutor; la página de MCP cubre los valores.

Solicitar a sesiones que envíen su trabajo

Las sesiones alojadas por Anthropic ejecutan un hook Stop, el hook de Claude Code que se ejecuta cuando Claude termina de responder, que solicita a Claude que confirme y envíe su trabajo. El ejecutor no instala uno. Sin él, una sesión que termina con cambios no confirmados deja ese trabajo solo en el disco del ejecutor, y el botón Create PR en claude.ai/code permanece inactivo hasta que la rama existe en el remoto. La implementación de referencia a continuación tiene dos partes. Fusione el bloque de configuración en ~/.claude/settings.json en el host del ejecutor, que el ejecutor siembra en cada sesión, y guarde el script como ~/.claude/hooks/stop-hook-nudge.sh en el host del ejecutor y hágalo ejecutable:
El hook solicita a Claude que confirme y envíe antes de que la sesión termine, y permanece silencioso cuando el directorio no es un repositorio git o no tiene remoto.

Permisos y aprobación de herramientas

Una sesión autohospedada no tiene terminal adjunta, por lo que un mensaje de permiso sin respuesta detiene el turno hasta que el usuario responde en la UI. El plano de control de Anthropic envía la lista de herramientas de cada sesión y las reglas de permiso con la carga útil de trabajo; la configuración predeterminada aprueba previamente llamadas de herramientas rutinarias, incluido Bash, y las sesiones en la nube aprueban previamente ediciones de archivos independientemente del modo. Una llamada que nada aprueba previamente solicita a través de la UI de sesión.
Solo fije el modo automático en un entorno cuyo contenedor de sesión se ejecute con egreso de red de negación predeterminada y el resto de la sección de endurecimiento en su lugar. Las llamadas de herramientas rutinarias, incluidas solicitudes de red Bash, se ejecutan sin un humano en el bucle tanto en el conjunto de herramientas aprobadas previamente predeterminado como en modo automático, por lo que el límite de red es lo que limita dónde esas llamadas pueden llegar.
Para mantener solicitudes al mínimo independientemente de lo que el plano de control envíe, fije el modo automático desde su script contenedor o hook command. El modo automático permite que las sesiones se ejecuten sin solicitudes de permiso rutinarias: un modelo clasificador separado revisa acciones antes de que se ejecuten y bloquea las que rechaza, y las reglas de solicitud explícita aún fuerzan una solicitud; la página de modos de permiso cubre lo que el clasificador verifica. El ejecutor agrega banderas calculadas por servidor antes de invocar el contenedor, y para banderas de valor único como --permission-mode el analizador honra la última ocurrencia, por lo que una bandera que agrega después de "$@" anula el valor enviado por servidor:
Para aprobar previamente herramientas específicas en su lugar, agregue --allowed-tools con sus reglas, por ejemplo --allowed-tools "Bash(bazel *) Bash(yarn *) mcp__internal__*". Las banderas de lista como --allowed-tools y --disallowed-tools se acumulan en ocurrencias en lugar de anular, por lo que sus reglas se aplican además de cualquier regla que el plano de control envíe. Para estrechar, agregue --disallowed-tools, que niega herramientas incluso si otra regla las permite.

Cómo se ensambla la configuración de cada sesión

El ejecutor da a cada sesión su propio directorio de configuración, sembrado desde una instantánea en memoria de ~/.claude/ del host que el ejecutor captura una vez al inicio: settings.json, CLAUDE.md, hooks, agentes, comandos y habilidades en su imagen de ejecutor se aplican a cada sesión como la línea de base a nivel de usuario. Porque la instantánea se toma al inicio, los cambios de configuración en un host en ejecución tienen efecto solo después de un reinicio del ejecutor. Establezca SELF_HOSTED_RUNNER_HOST_CONFIG_DIR para sembrar desde una ruta diferente, o apúntelo a un directorio vacío para deshabilitar la siembra. El .claude/settings.json confirmado en el repositorio se superpone como configuración del proyecto. Las sesiones también leen managed-settings.json desde la ruta estándar del sistema en su imagen de ejecutor. Si sus claves se aplican junto con configuración administrada por servidor sigue cómo Claude Code combina fuentes administradas: por defecto, cuando su organización entrega cualquier clave administrada por servidor, las sesiones ignoran el archivo de imagen del ejecutor aparte de las claves que Claude Code lee de cada fuente de administrador, como el bloque env, los bloqueos de sandbox, las rutas binarias de sandbox y forceRemoteSettingsRefresh. Consulte precedencia de configuración. Cuando el plano de control de Anthropic proporciona una sesión con hooks de Claude Code, el ejecutor los instala junto a, no sobre, su propia configuración. Requiere Claude Code v2.1.229 o posterior.
  • Dónde aterrizan: el ejecutor escribe cada script de hook suministrado en un subdirectorio reservado hooks/.ccr-launcher/ del directorio de configuración de la sesión y registra los scripts en un archivo de configuración separado que pasa a la sesión con --settings, dejando el settings.json sembrado y sus propios scripts en hooks/<name> sin tocar. El ejecutor recrea el subdirectorio reservado para cada sesión y no siembra contenido del host en ~/.claude/hooks/.ccr-launcher/ en sesiones.
  • Quién los autor: el plano de control puebla los scripts desde constantes fijas en su propia implementación, nunca desde entrada por sesión o de terceros.
  • Qué aún los rige: los hooks entregados a través de --settings entran en la configuración de hook ordinaria fusionada, no en el nivel administrado, por lo que su configuración administrada aún se aplica. disableAllHooks los deshabilita, y no están entre las categorías que allowManagedHooksOnly mantiene cargadas.

Reglas de permiso confirmadas en el repositorio

No coloque una entrada "Edit", "Write" o "NotebookEdit" desnuda en un permissions.allow confirmado en el repositorio. Una regla de herramienta de archivo desnuda coincide con la herramienta independientemente de la ruta, otorgando escrituras en cualquier lugar del host en lugar de solo el espacio de trabajo, por lo que la guardia de confinamiento de alcance de escritura del ejecutor marca la sesión; con --confine-repo-settings enforce se niega a generar la sesión en lugar de registrar y continuar. Consulte la sección de endurecimiento. Un repositorio no necesita ninguna regla de herramienta de archivo en absoluto: las sesiones en la nube aprueban previamente ediciones de archivos independientemente del modo. Si confirma una regla, limítela al espacio de trabajo, como "Edit(/**)"; una barra diagonal inicial única es relativa a la raíz del proyecto, que es el espacio de trabajo de la sesión. Las reglas de herramienta de archivo desnudas están bien en el settings.json a nivel de host del operador, ya que ese archivo no está confirmado en el repositorio. Un defaultMode de auto solo se honra desde el archivo de configuración a nivel de imagen o a nivel de usuario, por lo que un repositorio verificado no puede otorgarse a sí mismo modo automático. Para qué modos aceptan las sesiones en la nube y la sintaxis de regla completa, consulte modos de permiso.

Qué sigue