SpyBara
Go Premium

Documentation 2026-09-18 23:58 UTC to 2026-09-19 23:57 UTC

13 files changed +410 −188. View all changes and history on the product overview
2026
Fri 25 23:58 Thu 24 22:57 Wed 23 23:57 Tue 22 23:59 Mon 21 22:59 Sun 20 23:59 Sat 19 23:57 Fri 18 23:58 Tue 15 23:58 Mon 14 22:58 Sun 13 21:00 Sat 12 03:02 Thu 10 23:00 Wed 9 22:58 Tue 8 20:00 Tue 1 21:02
Details

94| `id_token_signed_response_alg` | No | Algoritmo de firma de id\_token esperado. Predeterminado `RS256`. Establezca para IdP que firman con ES256, PS256 o EdDSA. |94| `id_token_signed_response_alg` | No | Algoritmo de firma de id\_token esperado. Predeterminado `RS256`. Establezca para IdP que firman con ES256, PS256 o EdDSA. |

95| `additional_authorized_parties` | No | Valores `azp` adicionales para aceptar más allá de `client_id`, para flujos de intermediario de Keycloak e intercambio de tokens |95| `additional_authorized_parties` | No | Valores `azp` adicionales para aceptar más allá de `client_id`, para flujos de intermediario de Keycloak e intercambio de tokens |

96| `discovery_url` | No | Busque el documento de descubrimiento desde esta URL en lugar de derivarlo de `issuer`, para IdP detrás de un proxy que reescribe el host del emisor. La ruta debe contener `/.well-known/`. |96| `discovery_url` | No | Busque el documento de descubrimiento desde esta URL en lugar de derivarlo de `issuer`, para IdP detrás de un proxy que reescribe el host del emisor. La ruta debe contener `/.well-known/`. |

97| `use_proxy` | No | Envíe las propias solicitudes de IdP de la puerta de enlace a través del proxy directo en `HTTPS_PROXY` o `HTTP_PROXY`, honrando `NO_PROXY`. Sin establecer o `false`, esas solicitudes van directas. Requiere v2.1.227 o posterior; consulte [Solicitudes de IdP a través de un proxy directo](#idp-requests-through-a-forward-proxy) a continuación. |97| `use_proxy` | No | Envíe las propias solicitudes de IdP de la puerta de enlace a través del proxy directo en `HTTPS_PROXY` o `HTTP_PROXY`, honrando `NO_PROXY`. `false` mantiene esas solicitudes directas. Requiere v2.1.227 o posterior; consulte [Solicitudes de IdP a través de un proxy directo](#idp-requests-through-a-forward-proxy) a continuación. |

98| `form_action_origins` | No | Orígenes adicionales para la directiva `Content-Security-Policy: form-action` de la página `/device`. La puerta de enlace ya permite `'self'` y el origen `authorization_endpoint` descubierto, pero Chrome aplica `form-action` contra toda la cadena de redirección. Si su IdP redirige a través de un segundo host, como Azure AD federado a ADFS, Okta de concentrador y radio, o un interceptor SSO corporativo, enumere cada origen por el que la solicitud de autorización puede redirigir. |98| `form_action_origins` | No | Orígenes adicionales para la directiva `Content-Security-Policy: form-action` de la página `/device`. La puerta de enlace ya permite `'self'` y el origen `authorization_endpoint` descubierto, pero Chrome aplica `form-action` contra toda la cadena de redirección. Si su IdP redirige a través de un segundo host, como Azure AD federado a ADFS, Okta de concentrador y radio, o un interceptor SSO corporativo, enumere cada origen por el que la solicitud de autorización puede redirigir. |

99| `ca_cert_pem` | No | El certificado CA codificado en PEM en sí, no una ruta a un archivo. Reemplaza el almacén de confianza del sistema solo para solicitudes de IdP. Para cargar un archivo montado, escriba `${file:/etc/gateway/idp-ca.pem}`. Úselo para Keycloak o Dex detrás de PKI corporativa. |99| `ca_cert_pem` | No | El certificado CA codificado en PEM en sí, no una ruta a un archivo. Reemplaza el almacén de confianza del sistema solo para solicitudes de IdP. Para cargar un archivo montado, escriba `${file:/etc/gateway/idp-ca.pem}`. Úselo para Keycloak o Dex detrás de PKI corporativa. |

100 100 


106 106 

107Con `use_proxy: true`, la vaina resuelve el nombre de host de cada punto final de IdP por sí misma y pide al proxy que `CONNECT` a la dirección IP resuelta, por lo que el proxy debe aceptar `CONNECT` a la dirección IP de cada host que el documento de descubrimiento nombra, no solo el emisor. Use una URL de proxy `http://`. `ca_cert_pem` y la [protección SSRF](/docs/es/claude-apps-gateway-deploy#threat-model-summary) se aplican en la ruta proxificada también.107Con `use_proxy: true`, la vaina resuelve el nombre de host de cada punto final de IdP por sí misma y pide al proxy que `CONNECT` a la dirección IP resuelta, por lo que el proxy debe aceptar `CONNECT` a la dirección IP de cada host que el documento de descubrimiento nombra, no solo el emisor. Use una URL de proxy `http://`. `ca_cert_pem` y la [protección SSRF](/docs/es/claude-apps-gateway-deploy#threat-model-summary) se aplican en la ruta proxificada también.

108 108 

109[Egreso solo de proxy](#proxy-only-egress) cambia ambos: mientras está activo, las solicitudes de IdP siguen el proxy a menos que establezca `use_proxy: false`, y la puerta de enlace entrega al proxy cada nombre de host de IdP sin resolverlo primero.

110 

111<h4 id="proxy-only-egress">

112 Egreso solo de proxy

113</h4>

114 

115Establezca `CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1` en el entorno de la puerta de enlace, junto a `HTTPS_PROXY`, cuando la vaina alcanza otros hosts solo a través de ese proxy directo y no puede resolver nombres DNS públicos por sí misma, o cuando el proxy rechaza `CONNECT` a una dirección IP. Requiere v2.1.277 o posterior. Es una variable de entorno en lugar de una clave `gateway.yaml` para que nada en el archivo de configuración pueda relajar la verificación de dirección de la puerta de enlace.

116 

117```bash theme={null}

118export HTTPS_PROXY=http://proxy.corp.example.com:3128

119export NO_PROXY=

120export no_proxy=

121export CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1

122```

123 

124La puerta de enlace registra una línea `network:` al arrancar mientras el egreso solo de proxy está activo.

125 

126Cada fila a continuación es una clase de solicitud saliente en una puerta de enlace con `HTTPS_PROXY` establecido, de forma predeterminada y mientras el egreso solo de proxy está activo.

127 

128| Solicitud saliente | Predeterminado | Egreso solo de proxy activo |

129| -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |

130| Upstreams `provider: anthropic`, intercambio de tokens de Workload Identity Federation, exportaciones `telemetry.forward_to` | Resuelto y verificado localmente, luego `CONNECT` a la dirección IP verificada a través del proxy. Un recopilador de telemetría listado en `NO_PROXY` se alcanza directamente en su lugar | Nombre de host entregado al proxy |

131| Descubrimiento de IdP, JWKS, token y userinfo | Directo a menos que [`oidc.use_proxy: true`](#idp-requests-through-a-forward-proxy), luego `CONNECT` a la dirección IP verificada | Nombre de host entregado al proxy, a menos que `oidc.use_proxy: false` mantenga un IdP interno directo |

132| Upstreams de Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud y Microsoft Foundry; búsquedas de grupos de Google | Nombre de host entregado al proxy | Sin cambios |

133 

134El egreso solo de proxy se mantiene desactivado a menos que el entorno de la puerta de enlace cumpla con las tres condiciones siguientes:

135 

136* `HTTPS_PROXY` o `HTTP_PROXY` está establecido.

137* `NO_PROXY` y `no_proxy` están vacíos. Si su plataforma inyecta cualquiera en vainas, establezca ambos en un valor vacío en el contenedor de la puerta de enlace. Listar un recopilador de telemetría en `NO_PROXY` mantiene el egreso solo de proxy desactivado.

138* `CLAUDE_GATEWAY_ALLOW_LOOPBACK` no está activado. Un recopilador o IdP en el propio loopback de la vaina no se puede combinar con egreso solo de proxy, porque una dirección loopback entregada al proxy sería la del propio host del proxy, así que dé a esos servicios una dirección que el proxy pueda alcanzar en su lugar. Por la misma razón, la puerta de enlace rechaza nombres de estilo `localhost` directamente mientras el egreso solo de proxy está activo.

139 

140Cuando una de esas condiciones no se cumple, la puerta de enlace registra una advertencia al arrancar nombrando la variable que lo detuvo y mantiene el comportamiento predeterminado.

141 

142Una vez que el egreso solo de proxy está activo, permita cada destino en el proxy, incluyendo un recopilador interno y cualquier host configurado por dirección IP. Aún puede mantener un IdP interno directo con [`oidc.use_proxy: false`](#idp-requests-through-a-forward-proxy).

143 

144<Warning>

145 Active esto solo cuando la lista de permitidos del proxy sea al menos tan estricta como la verificación propia de la puerta de enlace. El proxy debe rechazar puntos finales de metadatos en la nube como `169.254.169.254` y `metadata.google.internal`, direcciones de enlace local, y el propio loopback del host del proxy, y debe rechazarlos por la dirección a la que se resuelve un nombre, no solo por nombre, porque la puerta de enlace ya no detecta un nombre de host que se resuelve a uno de ellos. Un proxy que se conecta a cualquier lugar que se le pida elimina la [protección SSRF](/docs/es/claude-apps-gateway-deploy#threat-model-summary) de la puerta de enlace para estas solicitudes.

146</Warning>

147 

109<h3 id="session">148<h3 id="session">

110 `session`149 `session`

111</h3>150</h3>


124El bloque `store` apunta la puerta de enlace a su base de datos PostgreSQL, que contiene concesiones de dispositivos y contadores de límite de velocidad.163El bloque `store` apunta la puerta de enlace a su base de datos PostgreSQL, que contiene concesiones de dispositivos y contadores de límite de velocidad.

125 164 

126| Campo | Requerido | Descripción |165| Campo | Requerido | Descripción |

127| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |166| ------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

128| `postgres_url` | Sí | URL `postgres://` o `postgresql://`. Requerido: el encuentro de concesión de dispositivo, donde la devolución del navegador escribe y el CLI de sondeo lee, necesita estado entre réplicas. La puerta de enlace ejecuta sus propias migraciones de esquema al arrancar y al actualizar, por lo que el rol necesita derechos para crear y alterar tablas en el esquema de destino. Consulte [Actualizaciones](/docs/es/claude-apps-gateway-deploy#upgrades) y [Postgres](/docs/es/claude-apps-gateway-deploy#postgres). |167| `postgres_url` | Sí | URL `postgres://` o `postgresql://`. Requerido: el encuentro de concesión de dispositivo, donde la devolución del navegador escribe y el CLI de sondeo lee, necesita estado entre réplicas. La puerta de enlace ejecuta sus propias migraciones de esquema al arrancar y al actualizar, por lo que el rol necesita derechos para crear y alterar tablas en el esquema de destino. Consulte [Actualizaciones](/docs/es/claude-apps-gateway-deploy#upgrades) y [Postgres](/docs/es/claude-apps-gateway-deploy#postgres). |

129| `username` | No | Anula el usuario en `postgres_url` |168| `username` | No | Anula el usuario en `postgres_url` |

130| `password` | No | Credencial de base de datos. Establézcalo aquí en lugar de en `postgres_url` para que la credencial se mantenga fuera de la URL. Acepta cualquier carácter y tiene prioridad sobre las credenciales de URL. |169| `password` | No | Credencial de base de datos. Establézcalo aquí en lugar de en `postgres_url` para que la credencial se mantenga fuera de la URL. Acepta cualquier carácter y tiene prioridad sobre las credenciales de URL. |

131| `max_connections` | No | Tamaño del grupo de conexiones de Postgres por réplica. Predeterminado `5`, que es conservador y amigable con bases de datos compartidas. Con [límites de gasto](#admin) habilitados, la ruta activa realiza algunas operaciones por solicitud de inferencia, así que aumente para una base de datos dedicada bajo carga, y mantenga réplicas × esto por debajo de `max_connections` de la base de datos. |170| `max_connections` | No | Tamaño del grupo de conexiones de Postgres por réplica. Predeterminado `5`, que es conservador y amigable con bases de datos compartidas. Con [límites de gasto](#admin) habilitados, la ruta activa realiza algunas operaciones por solicitud de inferencia, así que aumente para una base de datos dedicada bajo carga, y mantenga réplicas × esto por debajo de `max_connections` de la base de datos. |

171| `connect_timeout_seconds` | No | Segundos que la puerta de enlace espera cuando abre una conexión de Postgres. Un número entero de `1` a `60`, predeterminado `5`. Aumente si los intentos de conexión agotan el tiempo de espera cuando comienza una nueva instancia de puerta de enlace. Requiere Claude Code v2.1.274 o posterior en el servidor de la puerta de enlace. Las versiones anteriores se niegan a iniciar cuando se establece la clave. |

132 172 

133Para desarrollo local, apunte `postgres_url` a un contenedor Postgres desechable, por ejemplo `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.173Para desarrollo local, apunte `postgres_url` a un contenedor Postgres desechable, por ejemplo `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.

134 174 


365| ACI / App Service | Habilite la identidad administrada asignada por el sistema o por el usuario en el recurso. `use_azure_ad: true` la recoge. |405| ACI / App Service | Habilite la identidad administrada asignada por el sistema o por el usuario en el recurso. `use_azure_ad: true` la recoge. |

366| En cualquier otro lugar | `auth: { api_key: "${FOUNDRY_API_KEY}" }`. Entrecomille `${…}` dentro de `{ }`. |406| En cualquier otro lugar | `auth: { api_key: "${FOUNDRY_API_KEY}" }`. Entrecomille `${…}` dentro de `{ }`. |

367 407 

408<h4 id="static-headers-on-upstream-requests">

409 Encabezados estáticos en solicitudes de upstream

410</h4>

411 

412Para agregar encabezados fijos a las solicitudes que la puerta de enlace envía a un upstream, establezca `headers:` en ese upstream. Úselo cuando un proxy que ejecuta frente al proveedor enruta o atribuye tráfico por un encabezado.

413 

414`headers:` requiere Claude Code v2.1.277 o posterior en el servidor de la puerta de enlace. Una puerta de enlace anterior se niega a iniciar cuando encuentra la clave. Actualice cada réplica antes de agregar la clave, y elimine la clave antes de revertir a una versión anterior.

415 

416Los encabezados van al servidor que `base_url` nombra, o al punto final propio del proveedor cuando `base_url` no se establece. El proveedor también los recibe a menos que su proxy los elimine.

417 

418Este ejemplo alcanza un upstream `provider: vertex` a través de un proxy en `upstream-proxy.internal.example.com`. Establece el encabezado `x-source` que el proxy lee, y envía un token de la variable de entorno `PROXY_TOKEN` como `x-proxy-token`:

419 

420```yaml theme={null}

421upstreams:

422 - provider: vertex

423 region: us-east5

424 project_id: example-prod

425 base_url: https://upstream-proxy.internal.example.com

426 auth: {}

427 headers:

428 x-source: claude-apps-gateway

429 x-proxy-token: ${PROXY_TOKEN}

430```

431 

432Los valores son texto ASCII imprimible sin espacio en ninguno de los extremos. Entrecomille un número, `true`, o `false` para que YAML lo lea como texto.

433 

434Para mantener un secreto fuera del archivo de configuración, use [expansión de secretos](#secret-expansion) para cargar el valor de una variable de entorno con `${VAR}` o de un archivo con `${file:/path}`. Un `${VAR}` que se resuelve a un valor vacío detiene la puerta de enlace de iniciar.

435 

436`headers:` funciona en cada proveedor, y cada upstream envía solo el suyo.

437 

438No cada solicitud que la puerta de enlace envía a un upstream los lleva:

439 

440| Solicitud que la puerta de enlace envía a este upstream | Lleva `headers:` |

441| ---------------------------------------------------------------------------------- | ------------------------------------ |

442| `/v1/messages`, streaming o no, y `/v1/messages/count_tokens` | Sí |

443| Una solicitud que conmutó por error desde otro upstream | Sí, solo `headers:` de este upstream |

444| Llamada `CountTokens` de Amazon Bedrock para una solicitud que el cliente abandonó | No |

445| El intercambio de tokens de Workload Identity Federation | No |

446 

447En un upstream de Amazon Bedrock o Claude Platform en AWS que firma solicitudes con AWS SigV4, estos encabezados son parte de la firma, por lo que su proxy debe pasarlos sin cambios.

448 

449Si utiliza un nombre que la puerta de enlace reserva, se niega a iniciar, y el error de inicio nombra el encabezado. Los nombres reservados incluyen:

450 

451* `authorization` y `x-api-key`

452* `host`, `content-type` y `user-agent`

453* Cualquier nombre que comience con `anthropic-`, `x-goog-`, `x-amz-` o `x-amzn-`

454 

368<h4 id="multiple-upstreams">455<h4 id="multiple-upstreams">

369 Múltiples upstreams456 Múltiples upstreams

370</h4>457</h4>


375 462 

376`429` es capacidad por upstream, por lo que el agotamiento de rendimiento aprovisionado (PT) conmuta por error a bajo demanda. Si establece [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run) en un upstream, un `429` a una solicitud que llevaba el correo electrónico del desarrollador es una denegación por usuario en su lugar y no conmuta por error.463`429` es capacidad por upstream, por lo que el agotamiento de rendimiento aprovisionado (PT) conmuta por error a bajo demanda. Si establece [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run) en un upstream, un `429` a una solicitud que llevaba el correo electrónico del desarrollador es una denegación por usuario en su lugar y no conmuta por error.

377 464 

465Cada solicitud comienza en el primer upstream. Una solicitud alcanza un upstream posterior solo cuando cada upstream anterior a él ha fallado o no sirve el modelo solicitado.

466 

467La puerta de enlace no mantiene registro de upstreams fallidos, por lo que mientras un upstream está inactivo, cada solicitud que lo alcanza aún lo intenta y espera a que falle antes de pasar al siguiente.

468 

469Para un upstream de API de Anthropic, [`timeouts.upstream_ttfb_ms`](#http-tuning) limita la espera en un upstream inactivo. Esa configuración no se aplica a los otros proveedores, donde la puerta de enlace espera hasta una hora a que un upstream comience a responder.

470 

378`404` es disponibilidad de modelo por upstream, por lo que un upstream que no ha habilitado un modelo no bloquea un upstream posterior que lo sirve. Un upstream que no puede resolver el modelo solicitado se omite sin un viaje de red.471`404` es disponibilidad de modelo por upstream, por lo que un upstream que no ha habilitado un modelo no bloquea un upstream posterior que lo sirve. Un upstream que no puede resolver el modelo solicitado se omite sin un viaje de red.

379 472 

380Este ejemplo enruta una asignación de rendimiento aprovisionado de Bedrock primero, desborda a bajo demanda y una segunda cuenta, y vuelve a la API de Anthropic al final:473Este ejemplo enruta una asignación de rendimiento aprovisionado de Bedrock primero, desborda a bajo demanda y una segunda cuenta, y vuelve a la API de Anthropic al final:


435 `admin`528 `admin`

436</h3>529</h3>

437 530 

438Opcional. Habilita `/v1/organizations/spend_limits`, que refleja la API de administración pública de Anthropic, y cumplimiento de gasto por desarrollador en `/v1/messages`. Consulte [Límites de gasto](/docs/es/claude-apps-gateway-spend-limits) para saber cómo se establecen y aplican los límites; esta sección cubre las claves `gateway.yaml` que activan la función y la ajustan.531Opcional. Habilita `/v1/organizations/spend_limits`, que refleja la API pública de administración de Anthropic, y la aplicación de gastos por desarrollador en `/v1/messages`. Consulte [Límites de gastos](/docs/es/claude-apps-gateway-spend-limits) para saber cómo se establecen y aplican los límites; esta sección cubre las claves de `gateway.yaml` que activan la función y la ajustan.

439 532 

440```yaml theme={null}533```yaml theme={null}

441admin:534admin:

442 # Claves API estáticas nombradas para los puntos finales de administración, enviadas como x-api-key.535 # Claves API estáticas nombradas para los puntos finales de administración, enviadas como x-api-key.

443 # El id aparece en el registro de auditoría como admin-key:<id> para que cada clave sea536 # El id aparece en el registro de auditoría como admin-key:<id> para que cada clave sea

444 # atribuible. Matriz para rotación: agregue la nueva clave, despliegue clientes,537 # atribuible. Array para rotación: agregue la nueva clave, actualice los clientes,

445 # elimine la antigua.538 # elimine la antigua.

446 write_keys:539 write_keys:

447 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }540 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }

448 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }541 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }

449 read_keys:542 read_keys:

450 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }543 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }

451 # Grupos de IdP otorgados acceso de administrador completo a través del JWT de puerta de enlace normal (sin clave API).544 # Grupos de IdP con acceso administrativo completo a través del JWT de gateway normal (sin clave API).

452 admin_groups: [platform-finops]545 admin_groups: [platform-finops]

453 blocked_message: request an increase at https://go.example.com/claude-limits546 blocked_message: request an increase at https://go.example.com/claude-limits

454```547```

455 548 

456| Campo | Requerido | Descripción |549| Campo | Requerido | Descripción |

457| ------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |550| ------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

458| `write_keys` | No | Matriz de `{id, key}`. Un `x-api-key` que coincida con uno de estos puede listar, establecer y eliminar límites de gasto. Los valores de clave deben tener al menos 32 caracteres; los `id`s deben ser únicos en `read_keys` y `write_keys`. |551| `write_keys` | No | Array de `{id, key}`. Una `x-api-key` que coincida con una de estas puede listar, establecer y eliminar límites de gastos. Los valores de clave deben tener al menos 32 caracteres; los `id` deben ser únicos en `read_keys` y `write_keys`. |

459| `read_keys` | No | Matriz de `{id, key}`. Solo lectura: cada punto final `GET`, incluida la enumeración de límites, la obtención de uno por ID y la lectura de [`/effective`](/docs/es/claude-apps-gateway-spend-limits#%2Feffective) y [`/audit`](/docs/es/claude-apps-gateway-spend-limits#%2Faudit). |552| `read_keys` | No | Array de `{id, key}`. Solo lectura: cada punto final `GET`, incluida la enumeración de límites, la obtención de uno por ID y la lectura de [`/effective`](/docs/es/claude-apps-gateway-spend-limits#%2Feffective) y [`/audit`](/docs/es/claude-apps-gateway-spend-limits#%2Faudit). |

460| `admin_groups` | No | Nombres de grupos de IdP. Un JWT de puerta de enlace cuya reclamación `groups` incluye uno de estos tiene acceso de administrador completo, lectura y escritura, y audita como `oidc:<sub>`. Úselo para administradores humanos; use claves API para máquinas. Una entrada vacía en esta lista detiene la puerta de enlace al arrancar. Consulte [Valores de coincidencia que detienen la puerta de enlace al arrancar](#matcher-values-that-stop-the-gateway-at-boot). |553| `admin_groups` | No | Nombres de grupos de IdP. Un JWT de gateway cuya reclamación `groups` incluya uno de estos tiene acceso administrativo completo, lectura y escritura, y auditorías como `oidc:<sub>`. Utilice esto para administradores humanos; utilice claves API para máquinas. Una entrada vacía en esta lista detiene el gateway al iniciar. Consulte [Valores de coincidencia que detienen el gateway al iniciar](#matcher-values-that-stop-the-gateway-at-boot). |

461| `blocked_message` | No | Añadido textualmente al `429 billing_error` que ve un desarrollador bloqueado. Escriba la instrucción completa, como una URL o un canal de Slack. Sin establecer, la puerta de enlace envía solo el mensaje predeterminado. Consulte [Cómo funciona el cumplimiento](/docs/es/claude-apps-gateway-spend-limits#how-enforcement-works). |554| `blocked_message` | No | Se añade textualmente al `429 billing_error` que ve un desarrollador bloqueado. Escriba la instrucción completa, como una URL o un canal de Slack. Cuando no está establecido, el gateway envía solo el mensaje predeterminado. Consulte [Cómo funciona la aplicación](/docs/es/claude-apps-gateway-spend-limits#how-enforcement-works). |

462| `audit_retention_days` | No | Predeterminado `365`. Las filas `admin_audit` más antiguas se barren. |555| `audit_retention_days` | No | Predeterminado `365`. Las filas `admin_audit` más antiguas se eliminan. |

463| `spend_retention_months` | No | Predeterminado `13`. Las filas del contador `spend` más antiguas que esto se barren. El predeterminado mantiene un año completo más el mes parcial actual para informes año a año. |556| `spend_retention_months` | No | Predeterminado `13`. Las filas del contador `spend` más antiguas que esto se eliminan. El valor predeterminado mantiene un año completo más el mes parcial actual para informes año a año. |

464| `identity_retention_days` | No | Predeterminado `90`. TTL de última visualización para filas `principal_emails`, que contienen el correo electrónico, nombre para mostrar y grupos de cada desarrollador (PII). Deliberadamente más corto que la retención de gasto para que una identidad desaprovisionada envejezca mientras sus contadores de gasto anónimos permanecen. |557| `identity_retention_days` | No | Predeterminado `90`. TTL de última visualización para filas `principal_emails`, que contienen el correo electrónico, nombre para mostrar y grupos de cada desarrollador (PII). Deliberadamente más corto que la retención de gastos para que una identidad desaprovisionada caduque mientras sus contadores de gastos anónimos permanecen. |

465| `group_limit_mode` | No | `min` (predeterminado) o `max`. Cuando un desarrollador está en varios grupos con límites, `min` aplica el más restrictivo y `max` el menos. Utilizado tanto por cumplimiento como por `/effective`. |558| `group_limit_mode` | No | `min` (predeterminado) o `max`. Cuando un desarrollador está en varios grupos con límites, `min` aplica el más restrictivo y `max` el menos restrictivo. Utilizado tanto por la aplicación como por `/effective`. |

466 559 

467<h3 id="enforcement">560<h3 id="enforcement">

468 `enforcement`561 `enforcement`

469</h3>562</h3>

470 563 

471El bloque `enforcement` controla cómo se comportan las verificaciones de límite de gasto cuando el almacén no está disponible.564El bloque `enforcement` controla cómo se comportan las comprobaciones de límites de gastos cuando el almacén no está disponible.

472 565 

473| Campo | Requerido | Descripción |566| Campo | Requerido | Descripción |

474| ---------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |567| ---------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

475| `fail_closed_on_error` | No | Predeterminado `false`. El cumplimiento de gasto falla abierto en una interrupción de Postgres, por lo que la inferencia permanece activa. Establezca `true` para fallar cerrado: los desarrolladores sobre el límite se bloquean, pero también todos si el almacén es inaccesible. Requiere un bloque [`admin:`](#admin): el cumplimiento de gasto solo se ejecuta cuando `admin` está configurado, y la puerta de enlace se niega a iniciar si establece esto en `true` sin uno. |568| `fail_closed_on_error` | No | Predeterminado `false`. La aplicación de límites de gastos falla abierta en una interrupción de Postgres, por lo que la inferencia se mantiene activa. Establezca `true` para fallar cerrado: los desarrolladores que superan el límite se bloquean, pero también todos los demás si el almacén es inaccesible. Requiere un bloque [`admin:`](#admin): la aplicación de límites de gastos solo se ejecuta cuando `admin` está configurado, y el gateway se niega a iniciar si establece esto en `true` sin uno. |

476 569 

477<h3 id="pricing">570<h3 id="pricing">

478 `pricing`571 `pricing`

479</h3>572</h3>

480 573 

481El bloque `pricing` le dice al medidor de gasto qué cobrar en lugar del precio de lista en USD, por lo que los límites y [`/effective`](/docs/es/claude-apps-gateway-spend-limits#%2Feffective) reflejan sus tasas contratadas. Los montos permanecen en USD y siguen siendo una estimación, no una factura. Dos requisitos previos:574El bloque `pricing` le dice al medidor de gastos qué cobrar en lugar del precio de lista en USD, para que los límites y [`/effective`](/docs/es/claude-apps-gateway-spend-limits#%2Feffective) reflejen sus tasas contratadas. Los montos permanecen en USD y siguen siendo una estimación, no una factura. Dos requisitos previos:

482 575 

483* Claude Code v2.1.227 o posterior en el servidor de puerta de enlace. Las versiones anteriores rechazan la clave desconocida al arrancar.576* Claude Code v2.1.227 o posterior en el servidor de gateway. Las versiones anteriores rechazan la clave desconocida al iniciar.

484* Un bloque [`admin:`](#admin) o, en v2.1.268 o posterior, un bloque [`managed:`](#managed) con al menos una política. La puerta de enlace se niega a iniciar con `pricing` establecido y ninguno de estos bloques, porque nada lo leería.577* Un bloque [`admin:`](#admin) o, en v2.1.268 o posterior, un bloque [`managed:`](#managed) con al menos una política. El gateway se niega a iniciar con `pricing` establecido y ninguno de los dos bloques, porque nada lo leería.

485 578 

486```yaml theme={null}579```yaml theme={null}

487pricing:580pricing:


502 595 

503Cómo el medidor coincide con una fila de anulación:596Cómo el medidor coincide con una fila de anulación:

504 597 

505* Una fila reemplaza el precio de lista para solicitudes que `upstream`, un [`upstreams[].name`](#upstreams), sirve para `model`. Eso incluye la tasa de [modo rápido](/docs/es/fast-mode#understand-the-cost-tradeoff) más alta, por lo que las solicitudes de modo rápido y estándar se miden con las mismas cuatro tasas.598* Una fila reemplaza el precio de lista para solicitudes que `upstream`, un [`upstreams[].name`](#upstreams), sirve para `model`. Esto incluye la tasa más alta de [modo rápido](/docs/es/fast-mode#understand-the-cost-tradeoff), por lo que las solicitudes de modo rápido y estándar se miden con las mismas cuatro tasas.

506* Un ID integrado como `claude-sonnet-4-6`, coincidido como [`models[].id`](#models), cubre cada forma fechada, forma regional de Amazon Bedrock, o forma de Plataforma de Agentes de Google Cloud que el medidor precifica como ese modelo. Cualquier otra cadena, como un alias o un ARN de perfil de inferencia, coincide con el ID que envió el cliente o la cadena enviada upstream, sin distinción de mayúsculas y minúsculas.599* Un ID integrado como `claude-sonnet-4-6`, coincidido como [`models[].id`](#models), cubre cada forma fechada, forma regional de Amazon Bedrock, o forma de Google Cloud's Agent Platform que el medidor precifica como ese modelo. Cualquier otra cadena, como un alias o un ARN de perfil de inferencia, coincide con el ID que el cliente envió o la cadena enviada al upstream, sin distinción de mayúsculas y minúsculas.

507* Donde las filas se superponen, el medidor elige la fila más específica en lugar de la primera fila: una fila cuyo `model` es la cadena de modelo exacta enviada upstream, luego una fila que coincide con el ID exacto que envió el cliente, luego una fila que nombra el modelo integrado.600* Donde las filas se superponen, el medidor elige la fila más específica en lugar de la primera fila: una fila cuyo `model` es la cadena de modelo exacta enviada al upstream, luego una fila que coincide con el ID exacto que el cliente envió, luego una fila que nombra el modelo integrado.

508* Un nombre de upstream desconocido falla al arrancar, al igual que dos filas para un upstream que nombran el mismo modelo, incluidas dos ortografías de un modelo integrado. La puerta de enlace advierte al arrancar sobre una fila que ningún modelo solicitable puede usar.601* Un nombre de upstream desconocido falla al iniciar, al igual que dos filas para un upstream que nombran el mismo modelo, incluidas dos ortografías de un modelo integrado. El gateway advierte al iniciar sobre una fila que ningún modelo solicitable puede usar.

509* Las solicitudes de búsqueda web permanecen en el precio de lista de \$0.01; el multiplicador aún se aplica a ellas.602* Las solicitudes de búsqueda web permanecen al precio de lista de \$0.01; el multiplicador aún se aplica a ellas.

510 603 

511Para tasas por región, proporcione a cada región su propio upstream nombrado y una fila por upstream.604Para tasas por región, asigne a cada región su propio upstream nombrado y una fila por upstream.

512 605 

513<h4 id="mark-prices-up">606<h4 id="mark-prices-up">

514 Marcar precios hacia arriba607 Marcar precios hacia arriba

515</h4>608</h4>

516 609 

517Con v2.1.271 o posterior en el servidor de puerta de enlace, puede establecer `multiplier` por encima de 1, hasta 10, para medir más de lo que cobra el proveedor, por ejemplo una tasa de reembolso interno. Este ejemplo mide cada solicitud al 120% del precio:610Con v2.1.271 o posterior en el servidor de gateway, puede establecer `multiplier` por encima de 1, hasta 10, para medir más de lo que cobra el proveedor, por ejemplo una tasa de reembolso interno. Este ejemplo mide cada solicitud al 120% del precio:

518 611 

519```yaml theme={null}612```yaml theme={null}

520pricing:613pricing:

521 multiplier: 1.2614 multiplier: 1.2

522```615```

523 616 

524Con un bloque [`admin:`](#admin), el marcado también se aplica a los límites de gasto. El medidor cuenta el 120% del precio, por lo que los desarrolladores alcanzan sus límites más rápido. La puerta de enlace registra una advertencia al arrancar que lo dice.617Con un bloque [`admin:`](#admin), el marcado también se aplica a los límites de gastos. El medidor cuenta el 120% del precio, por lo que los desarrolladores alcanzan sus límites más rápido. El gateway registra una advertencia al iniciar que dice así.

525 618 

526El multiplicador no cambia lo que cobra el proveedor upstream por las solicitudes.619El multiplicador no cambia lo que cobra el proveedor upstream por las solicitudes.

527 620 

528Si la puerta de enlace también [envía las tasas a clientes firmados](#send-the-rates-to-signed-in-clients), los desarrolladores necesitan Claude Code v2.1.271 o posterior para ver el marcado. Los clientes anteriores ignoran un `multiplier` superior a 1 y muestran costos sin él.621Si el gateway también [envía las tasas a clientes conectados](#send-the-rates-to-signed-in-clients), los desarrolladores necesitan Claude Code v2.1.271 o posterior para ver el marcado. Los clientes anteriores ignoran un `multiplier` superior a 1 y muestran costos sin él.

529 622 

530Un servidor de puerta de enlace anterior a v2.1.271 se niega a iniciar si establece un `multiplier` superior a 1.623Un servidor de gateway anterior a v2.1.271 se niega a iniciar si establece un `multiplier` superior a 1.

531 624 

532<h4 id="send-the-rates-to-signed-in-clients">625<h4 id="send-the-rates-to-signed-in-clients">

533 Enviar las tasas a clientes firmados626 Enviar las tasas a clientes conectados

534</h4>627</h4>

535 628 

536Con v2.1.268 o posterior en el servidor de puerta de enlace, la puerta de enlace también coloca las tasas de `pricing` en las políticas [`managed`](#managed) que sirve, como la configuración administrada [`modelPricing`](/docs/es/settings-reference#modelpricing). Los desarrolladores coincidentes por una política ven entonces las tasas de `pricing` para el primer upstream que sirve cada ID de modelo en `/usage`, la línea de estado y OpenTelemetry. Un desarrollador que no coincida con ninguna política no recibe configuración administrada, por lo que sus cifras permanecen en precio de lista. Los clientes aplican la configuración en Claude Code v2.1.242 o posterior.629Con v2.1.268 o posterior en el servidor de gateway, el gateway también coloca las tasas de `pricing` en las políticas [`managed`](#managed) que sirve, como la configuración administrada [`modelPricing`](/docs/es/settings-reference#modelpricing). Los desarrolladores coincididos por una política ven las tasas de `pricing` para el primer upstream que sirve cada ID de modelo en `/usage`, la línea de estado y OpenTelemetry. Un desarrollador que no coincide con ninguna política no recibe configuraciones administradas, por lo que sus cifras permanecen al precio de lista. Los clientes aplican la configuración en Claude Code v2.1.242 o posterior.

537 630 

538* Lo que agrega la puerta de enlace: a menos que el bloque `cli` de una política ya establezca `modelPricing`, la puerta de enlace agrega el `multiplier` y, para cada ID de modelo que un cliente puede solicitar, la fila de anulación del primer upstream que sirve ese ID. Una tasa que solo un upstream de conmutación por error cobra permanece en la puerta de enlace.631* Lo que agrega el gateway: a menos que el bloque `cli` de una política ya establezca `modelPricing`, el gateway agrega el `multiplier` y, para cada ID de modelo que un cliente pueda solicitar, la fila de anulación del primer upstream que sirve ese ID. Una tasa que solo un upstream de conmutación por error cobra permanece en el gateway.

539* Optar una política: establezca `modelPricing` en `{}` en el bloque `cli` de esa política, y sus desarrolladores permanecen en precio de lista.632* Optar una política: establezca `modelPricing` en `{}` en el bloque `cli` de esa política, y sus desarrolladores permanecen al precio de lista.

540* Mantener las tasas propias de una política: una política cuyo bloque `cli` establece `modelPricing` con su propio `multiplier` u `overrides` mantiene ese `modelPricing` completo, y la puerta de enlace no agrega tasas propias a él.633* Mantener las tasas propias de una política: una política cuyo bloque `cli` establece `modelPricing` con su propio `multiplier` u `overrides` mantiene ese `modelPricing` completo, y el gateway no agrega tasas propias a él.

541 634 

542<h3 id="models">635<h3 id="models">

543 `models`636 `models`

544</h3>637</h3>

545 638 

546El bloque `models` es una lista de modelos curada por administrador opcional, servida en `/v1/models` y utilizada para traducir IDs de modelo por upstream. Es necesario para regiones de Bedrock no estadounidenses, ARN de rendimiento aprovisionado de Bedrock y nombres de implementación de Foundry.639El bloque `models` es una lista de modelos opcional curada por administrador, servida en `/v1/models` y utilizada para traducir IDs de modelo por upstream. Es obligatorio para regiones de Amazon Bedrock que no sean EE.UU., ARN de rendimiento aprovisionado de Amazon Bedrock y nombres de implementación de Microsoft Foundry.

547 640 

548```yaml theme={null}641```yaml theme={null}

549auto_include_builtin_models: true # false: exponga solo la lista a continuación642auto_include_builtin_models: true # false: expose only the list below

550models:643models:

551 - id: claude-opus-4-8644 - id: claude-opus-4-8

552 label: Claude Opus 4.8645 label: Claude Opus 4.8

553 # description: texto opcional mostrado en clientes que lo muestren646 # description: optional text shown in clients that surface it

554 upstream_model:647 upstream_model:

555 anthropic: claude-opus-4-8648 anthropic: claude-opus-4-8

556 bedrock: us.anthropic.claude-opus-4-8 # o un ARN de perfil de inferencia649 bedrock: us.anthropic.claude-opus-4-8 # or an inference-profile ARN

557 foundry: your-opus-deployment-name650 foundry: your-opus-deployment-name

558```651```

559 652 

560Cada clave bajo `upstream_model` debe coincidir con el `name` de un upstream configurado, que por defecto es el nombre del proveedor. Una clave que no coincida con ningún upstream falla al arrancar, así que omita las líneas para proveedores que no usa.653Cada clave bajo `upstream_model` debe coincidir con el `name` de un upstream configurado, que por defecto es el nombre del proveedor. Una clave que no coincida con ningún upstream falla al iniciar, por lo que omita las líneas para proveedores que no utiliza.

561 654 

562<h3 id="managed">655<h3 id="managed">

563 `managed`656 `managed`

564</h3>657</h3>

565 658 

566El bloque `managed` define políticas de acceso basadas en roles clave en grupos de IdP o dominio de correo electrónico. Las políticas se evalúan en orden; se selecciona la primera coincidencia, luego se fusiona en la base de captura `match: {}` descrita a continuación. Se sirven por usuario en `GET /managed/settings` con almacenamiento en caché de ETag/304.659El bloque `managed` define políticas de acceso basadas en roles con clave en grupos de IdP o dominio de correo electrónico. Las políticas se evalúan en orden; se selecciona la primera coincidencia, luego se fusiona en la base de captura general `match: {}`. Se sirven por usuario en `GET /managed/settings` con almacenamiento en caché de ETag/304.

567 660 

568```yaml theme={null}661```yaml theme={null}

569managed:662managed:


573 cli:666 cli:

574 availableModels: [claude-sonnet-4-6]667 availableModels: [claude-sonnet-4-6]

575 permissions: { deny: ["WebFetch", "WebSearch"] }668 permissions: { deny: ["WebFetch", "WebSearch"] }

576 # Captura predeterminada al final: coincide con todos los que se autenticaron.669 # Captura general predeterminada al final: coincide con todos los que se autenticaron.

577 - match: {}670 - match: {}

578 cli:671 cli:

579 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]672 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]

580```673```

581 674 

582Una captura `match: {}`, convencionalmente listada al final, se trata como una capa base. Cada otra política hereda cualquier clave que no establezca de la captura, por lo que las entradas por rol solo necesitan listar lo que difiere del predeterminado de la organización. Las reglas de fusión dependen del tipo de clave:675Una captura general `match: {}`, convencionalmente enumerada al final, se trata como una capa base. Cada otra política hereda cualquier clave que no establezca de la captura general, por lo que las entradas por rol solo necesitan enumerar lo que difiere del valor predeterminado de la organización. Las reglas de fusión dependen del tipo de clave:

583 676 

584* **Listas de permitidos**: `availableModels` y `permissions.allow`. La lista de una política específica reemplaza completamente la de la base.677* **Listas de permitidos**: `availableModels` y `permissions.allow`. La lista de una política específica reemplaza completamente la de la base.

585* **Listas de denegación y matrices de hooks**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` y cada matriz de tipo de evento `hooks`. Estos toman la unión de base y política, por lo que un gancho de denegación o auditoría en toda la organización no puede ser accidentalmente eliminado por una anulación por rol.678* **Listas de denegados y arrays de hooks**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` y cada array de tipo de evento `hooks`. Estos toman la unión de base y política, por lo que un hook de denegación o auditoría en toda la organización no puede ser eliminado accidentalmente por una anulación por rol.

586* **Claves de tipo registro**: `env`, `modelOverrides` y `skillOverrides`. Estos se fusionan superficialmente, por lo que un bloque `env` por rol anula las claves que establece y hereda el resto de la base.679* **Claves de tipo registro**: `env`, `modelOverrides` y `skillOverrides`. Estas se fusionan superficialmente, por lo que un bloque `env` por rol anula las claves que establece y hereda el resto de la base.

587 680 

588`availableModels` también se aplica del lado del servidor en `/v1/messages`, por lo que un modelo denegado devuelve `400` independientemente de lo que envíe el cliente.681`availableModels` también se aplica en el lado del servidor en `/v1/messages`, por lo que un modelo denegado devuelve `400` independientemente de lo que envíe el cliente.

589 682 

590La puerta de enlace valida el valor `model` en sí antes de retransmitir una solicitud, por lo que un valor mal formado nunca llega a un upstream. Rechaza la solicitud con un `400` en dos casos:683El gateway valida el valor `model` en sí antes de retransmitir una solicitud, por lo que un valor mal formado nunca llega a un upstream. Rechaza la solicitud con un `400` en dos casos:

591 684 

592* Cuando el valor falta o está vacío, la puerta de enlace rechaza la solicitud con el mensaje `model is required`. Esa verificación requiere una puerta de enlace que ejecute Claude Code v2.1.228 o posterior.685* Cuando el valor falta o está vacío, el gateway rechaza la solicitud con el mensaje `model is required`. Esa comprobación requiere un gateway que ejecute Claude Code v2.1.228 o posterior.

593* Cuando el valor está presente pero no es una cadena, la puerta de enlace rechaza la solicitud con el mensaje `model must be a string`. Requiere una puerta de enlace que ejecute Claude Code v2.1.221 o posterior.686* Cuando el valor está presente pero no es una cadena, el gateway rechaza la solicitud con el mensaje `model must be a string`. Requiere un gateway que ejecute Claude Code v2.1.221 o posterior.

594 687 

595| Coincidencia | Comportamiento |688| Coincidencia | Comportamiento |

596| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |689| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

597| `match: {}` | Coincide con cada usuario autenticado. Comience con uno de estos y agregue políticas limitadas a grupo más tarde. |690| `match: {}` | Coincide con cada usuario autenticado. Comience con uno de estos y agregue políticas con alcance de grupo por encima más tarde. |

598| `match: { groups: [a, b] }` | Coincide si la reclamación `groups` del JWT contiene cualquiera de los grupos listados. Sensible a mayúsculas y minúsculas: los grupos deben coincidir con el uso exacto de mayúsculas y minúsculas de IdP. |691| `match: { groups: [a, b] }` | Coincide si la reclamación `groups` del JWT contiene alguno de los grupos enumerados. Sensible a mayúsculas y minúsculas: los grupos deben coincidir con el uso exacto de mayúsculas y minúsculas del IdP. |

599| `match: { email_domain: example.com }` | Coincide con la parte después de la última `@` en la reclamación `email` del JWT, sin distinción de mayúsculas y minúsculas. Acepta un dominio por política. |692| `match: { email_domain: example.com }` | Coincide con la parte después de la última `@` en la reclamación `email` del JWT, sin distinción de mayúsculas y minúsculas. Acepta un dominio por política. |

600| `match: { groups: [a], email_domain: example.com }` | Ambas condiciones deben coincidir |693| `match: { groups: [a], email_domain: example.com }` | Ambas condiciones deben coincidir |

601 694 

602Un usuario autenticado que no coincida con ninguna política obtiene los valores predeterminados de la puerta de enlace, lo que significa cada modelo en el catálogo y sin configuración administrada. Agregue una captura `match: {}` al final si desea una política predeterminada garantizada.695Un usuario autenticado que no coincida con ninguna política obtiene los valores predeterminados del gateway, lo que significa cada modelo en el catálogo y sin configuraciones administradas. Agregue una captura general `match: {}` al final si desea una política predeterminada garantizada.

603 696 

604<Note>697<Note>

605 La puerta de enlace no mantiene su propio directorio de usuarios. Autoriza cada solicitud desde el token de IdP del usuario, leyendo la membresía del grupo de la reclamación `groups` del token y evaluando políticas contra ella. No hay un registro para enumerar y no hay cuentas para crear previamente, y por lo tanto no hay punto final SCIM, porque no hay nada para que SCIM sincronice.698 El gateway no mantiene su propio directorio de usuarios. Autoriza cada solicitud desde el token de IdP del usuario, leyendo la pertenencia al grupo de la reclamación `groups` del token y evaluando políticas contra ella. No hay un registro para enumerar y no hay cuentas para crear previamente, y por lo tanto no hay punto final SCIM, porque no hay nada para que SCIM sincronice.

606 699 

607 Ejecute la gestión del ciclo de vida del usuario y grupo en la fuente de verdad, que es el aprovisionamiento SCIM nativo de su IdP o una plataforma de gobernanza de identidad dedicada. La membresía y desaprovisionamiento gobernados allí fluyen a la puerta de enlace automáticamente a través del token. Si desea el aprovisionamiento SCIM de las propias cuentas de Claude, esa es una capacidad de [Claude para empresas](/docs/es/admin-setup).700 Ejecute la gestión del ciclo de vida del usuario y el grupo en la fuente de verdad, que es el aprovisionamiento SCIM nativo de su IdP o una plataforma dedicada de gobernanza de identidades. La pertenencia y desaprovisionamiento gobernados allí fluyen hacia el gateway automáticamente a través del token. Si desea el aprovisionamiento SCIM de las propias cuentas de Claude, esa es una capacidad de [Claude for Enterprise](/docs/es/admin-setup).

608 701 

609 Se aplican dos relojes de propagación:702 Se aplican dos relojes de propagación:

610 703 

611 * **Contenido de política**: editar una política e implementar nuevamente llega a clientes conectados en su próxima encuesta de configuración administrada, dentro de una hora, aparte de los [cambios que se aplican solo en el próximo lanzamiento](/docs/es/server-managed-settings#fetch-and-caching-behavior)704 * **Contenidos de política**: editar una política y reimplementar llega a clientes conectados en su próxima encuesta de configuraciones administradas, dentro de una hora, aparte de los [cambios que se aplican solo en el próximo lanzamiento](/docs/es/server-managed-settings#fetch-and-caching-behavior)

612 * **Membresía de grupo**: cambiar la membresía de grupo de un usuario cambia qué política los coincide. Esto entra en vigor en la siguiente acuñación de sesión, lo que significa la siguiente actualización silenciosa, limitada por `session.ttl_hours`.705 * **Pertenencia al grupo**: cambiar la pertenencia al grupo de un usuario cambia qué política los coincide. Esto entra en vigor en el próximo acuñamiento de sesión, lo que significa el próximo refresco silencioso, limitado por `session.ttl_hours`.

613</Note>706</Note>

614 707 

615<h4 id="matcher-values-that-stop-the-gateway-at-boot">708<h4 id="matcher-values-that-stop-the-gateway-at-boot">

616 Valores de coincidencia que detienen la puerta de enlace al arrancar709 Valores de coincidencia que detienen el gateway al iniciar

617</h4>710</h4>

618 711 

619Al arrancar, la puerta de enlace verifica el bloque `match` de cada política y la lista [`admin_groups`](#admin). Cualquiera de estos valores detiene la puerta de enlace con un error que nombra el campo:712Al iniciar, el gateway comprueba el bloque `match` de cada política y la lista [`admin_groups`](#admin). Cualquiera de estos valores detiene el gateway con un error que nombra el campo:

620 713 

621* Una lista `groups` vacía714* Una lista `groups` vacía

622* Una entrada vacía en `groups` o en `admin_groups`715* Una entrada vacía en `groups` o en `admin_groups`

623* Un `email_domain` vacío716* Un `email_domain` vacío

624* Un `email_domain` que contiene `@`, espacios en blanco o una coma. La puerta de enlace recorta el valor y elimina un `@` inicial antes de esta verificación. Escriba un dominio desnudo, como `example.com`.717* Un `email_domain` que contiene `@`, espacios en blanco o una coma. El gateway recorta el valor y elimina una `@` inicial antes de esta comprobación. Escriba un dominio desnudo, como `example.com`.

625 718 

626Antes de v2.1.232, la puerta de enlace se iniciaba con estos valores. Cada valor tenía este efecto:719Antes de v2.1.232, el gateway se iniciaba con estos valores. Cada valor tenía este efecto:

627 720 

628* Un `email_domain` vacío: la puerta de enlace omitía la verificación de dominio, por lo que una política con un `email_domain` vacío y sin lista `groups` coincidía con cada usuario autenticado721* Un `email_domain` vacío: el gateway omitía la comprobación de dominio, por lo que una política con un `email_domain` vacío y sin lista `groups` coincidía con cada usuario autenticado

629* Una lista `groups` vacía: la política no coincidía con nadie722* Una lista `groups` vacía: la política no coincidía con nadie

630* Un `email_domain` que contiene `@`, espacios en blanco o una coma: la política no coincidía con nadie723* Un `email_domain` que contiene `@`, espacios en blanco o una coma: la política no coincidía con nadie

631* Una entrada vacía en `groups` o en `admin_groups`: la entrada coincidía con un usuario solo cuando la reclamación `groups` de IdP de ese usuario también contenía una entrada vacía. En `admin_groups`, esa coincidencia otorgaba acceso de administrador. Si su lista `admin_groups` nunca contenía una entrada vacía, nadie obtenía acceso de administrador de esta manera.724* Una entrada vacía en `groups` o en `admin_groups`: la entrada coincidía con un usuario solo cuando la reclamación `groups` del IdP de ese usuario también contenía una entrada vacía. En `admin_groups`, esa coincidencia otorgaba acceso administrativo. Si su lista `admin_groups` nunca contenía una entrada vacía, nadie obtenía acceso administrativo de esta manera.

632 725 

633<h4 id="what-goes-in-cli">726<h4 id="what-goes-in-cli">

634 Qué va en `cli`727 Qué va en `cli`


636 729 

637Cada valor `cli` es un documento completo de `managed-settings.json` de Claude Code, el mismo esquema que implementaría a través de MDM o `/etc/claude-code/managed-settings.json`, expresado aquí como YAML. El CLI aplica el documento entregado en el nivel administrado, por encima de la configuración de usuario y proyecto, en lugar de la configuración administrada por servidor. Por lo tanto, ignora la configuración [restringida a fuentes de política a nivel de SO](/docs/es/server-managed-settings#current-limitations), como `policyHelper` y `wslInheritsWindowsSettings`.730Cada valor `cli` es un documento completo de `managed-settings.json` de Claude Code, el mismo esquema que implementaría a través de MDM o `/etc/claude-code/managed-settings.json`, expresado aquí como YAML. El CLI aplica el documento entregado en el nivel administrado, por encima de la configuración de usuario y proyecto, en lugar de la configuración administrada por servidor. Por lo tanto, ignora la configuración [restringida a fuentes de política a nivel de SO](/docs/es/server-managed-settings#current-limitations), como `policyHelper` y `wslInheritsWindowsSettings`.

638 731 

639La puerta de enlace valida cada documento contra el esquema de configuración del CLI al arrancar, por lo que una clave de nivel superior no reconocida falla al arrancar con un error que nombra cada clave ofensiva. Las partes deliberadamente abiertas del esquema aún aceptan valores arbitrarios, porque clientes más nuevos pueden reconocer entradas que el esquema de la puerta de enlace no. Estas claves abiertas son `env`, `pluginConfigs` y claves anidadas bajo `permissions`.732El gateway valida cada documento contra el esquema de configuración del CLI al iniciar, por lo que una clave de nivel superior no reconocida falla al iniciar con un error que nombra cada clave ofensiva. Las partes deliberadamente abiertas del esquema aún aceptan valores arbitrarios, porque clientes más nuevos pueden reconocer entradas que el esquema del gateway no. Estas claves abiertas incluyen `env`, `pluginConfigs` y claves anidadas bajo `permissions`.

640 733 

641Debido a que la validación utiliza el esquema incluido con la versión instalada de la puerta de enlace, poner una clave de configuración de nivel superior introducida por una versión más nueva de Claude Code en la configuración administrada requiere actualizar primero la puerta de enlace. Pruebe una nueva política en un cliente antes de implementarla ampliamente.734Debido a que la validación utiliza el esquema incluido con la versión instalada del gateway, poner una clave de configuración de nivel superior introducida por una versión más nueva de Claude Code en la configuración administrada requiere actualizar primero el gateway. Pruebe una nueva política en un cliente antes de implementarla.

642 735 

643La referencia de clave completa está en [Configuración de Claude Code](/docs/es/settings-reference#all-settings). Las claves que los operadores alcanzan primero:736La referencia de clave completa está en [Configuración de Claude Code](/docs/es/settings-reference#all-settings). Las claves que los operadores buscan primero:

644 737 

645```yaml theme={null}738```yaml theme={null}

646managed:739managed:

647 policies:740 policies:

648 - match: {}741 - match: {}

649 cli:742 cli:

650 # Acceso a modelos (también aplicado del lado del servidor en /v1/messages)743 # Acceso a modelos (también aplicado en el lado del servidor en /v1/messages)

651 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]744 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]

652 745 

653 # Política de permisos746 # Política de permisos


656 - "WebFetch"749 - "WebFetch"

657 - "Read(./.env)"750 - "Read(./.env)"

658 - "Read(./secrets/**)"751 - "Read(./secrets/**)"

659 disableBypassPermissionsMode: disable # bloquea --dangerously-skip-permissions752 disableBypassPermissionsMode: disable # blocks --dangerously-skip-permissions

660 allowManagedPermissionRulesOnly: true # ignora reglas de permisos de usuario/proyecto753 allowManagedPermissionRulesOnly: true # ignore user/project permission rules

661 754 

662 # Entorno empujado al proceso CLI. DISABLE_UPDATES bloquea755 # Entorno insertado en el proceso CLI. DISABLE_UPDATES bloquea

663 # actualizaciones de fondo y manuales; DISABLE_AUTOUPDATER detiene solo756 # actualizaciones de fondo y manuales; DISABLE_AUTOUPDATER detiene solo

664 # actualizaciones de fondo.757 # actualizaciones de fondo.

665 env:758 env:

666 DISABLE_UPDATES: "1" # versiones de pin a través de su propia distribución759 DISABLE_UPDATES: "1" # pin versions via your own distribution

667 760 

668 # Hooks en toda la organización. Los comandos de gancho se ejecutan en máquinas de desarrollador, no en la761 # Hooks en toda la organización. Los comandos de hooks se ejecutan en máquinas de desarrolladores, no en el

669 # puerta de enlace, por lo que la ruta debe existir en cada SO de cliente en la política.762 # gateway, por lo que la ruta debe existir en cada SO cliente en la política.

670 hooks:763 hooks:

671 PostToolUse:764 PostToolUse:

672 - matcher: "Edit|Write"765 - matcher: "Edit|Write"


675```768```

676 769 

677| Clave | Aplicada por | Efecto |770| Clave | Aplicada por | Efecto |

678| ------------------------------------------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |771| ------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

679| `availableModels` | Puerta de enlace + CLI | Lista de permitidos de modelos. También se verifica en `/v1/messages`, por lo que un cliente parcheado no puede omitirlo. |772| `availableModels` | Gateway + CLI | Lista de permitidos de modelos. También se comprueba en `/v1/messages`, por lo que un cliente parcheado no puede omitirlo. |

680| `permissions.allow` / `.deny` | CLI | Reglas de herramientas y comandos. Consulte [Permisos](/docs/es/permissions). |773| `permissions.allow` / `.deny` | CLI | Reglas de herramientas y comandos. Consulte [Permisos](/docs/es/permissions). |

681| `permissions.disableBypassPermissionsMode` | CLI | Establezca en `disable` para bloquear [`bypassPermissions`](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), el modo que aprueba automáticamente cada llamada de herramienta, y la bandera `--dangerously-skip-permissions` |774| `permissions.disableBypassPermissionsMode` | CLI | Establezca en `disable` para bloquear [`bypassPermissions`](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), el modo que omite indicadores de permisos, y la bandera `--dangerously-skip-permissions` |

682| `allowManagedPermissionRulesOnly` | CLI | Cuando es `true`, las reglas de permisos de usuario y proyecto se ignoran; solo se aplican las reglas de este documento. La entrada [`allowManagedPermissionRulesOnly`](/docs/es/settings-reference#allowmanagedpermissionrulesonly) enumera cada fuente que Claude Code luego ignora. |775| `allowManagedPermissionRulesOnly` | CLI | Cuando es `true`, la configuración administrada se convierte en la única fuente de configuración de reglas de permisos. La entrada [`allowManagedPermissionRulesOnly`](/docs/es/settings-reference#allowmanagedpermissionrulesonly) enumera cada fuente que Claude Code luego ignora. |

683| `env` | CLI | Variables de entorno fusionadas en el proceso CLI. Úselo para telemetría, actualización automática y anulaciones de nombres de modelos. |776| `env` | CLI | Variables de entorno fusionadas en el proceso CLI. Utilice para telemetría, actualización automática y anulaciones de nombres de modelos. |

684| `hooks` | CLI | [Hooks](/docs/es/hooks) en toda la organización |777| `hooks` | CLI | Hooks en toda la organización [hooks](/docs/es/hooks) |

685| `managedMcpServers` | CLI | Servidores MCP remotos [proporcionados a cada desarrollador coincidente](/docs/es/managed-mcp#provide-servers-through-managed-settings) junto con los servidores que agregan ellos mismos, solo `http` y `sse`. Consulte [Servidores MCP en una política](#mcp-servers-in-a-policy). Requiere Claude Code v2.1.259 o posterior en el servidor de puerta de enlace y en clientes. Los clientes anteriores ignoran la clave. |778| `managedMcpServers` | CLI | Servidores MCP remotos [proporcionados a cada desarrollador coincidente](/docs/es/managed-mcp#provide-servers-through-managed-settings) junto con los servidores que agregan ellos mismos, solo `http` y `sse`. Consulte [Servidores MCP en una política](#mcp-servers-in-a-policy). Requiere Claude Code v2.1.259 o posterior en el servidor de gateway y en clientes. Los clientes anteriores ignoran la clave. |

686 779 

687Debido a que estas configuraciones llegan a través de la red, el CLI muestra a cada desarrollador un diálogo de aprobación de seguridad antes de aplicar la configuración listada a continuación:780Debido a que estas configuraciones llegan a través de la red, el CLI muestra a cada desarrollador un diálogo de aprobación de seguridad antes de aplicar la configuración enumerada a continuación:

688 781 

689* `hooks`782* `hooks`

690* Variables `env` que requieren la aprobación del desarrollador, como variables de proxy y URL base783* Variables `env` que requieren la aprobación del desarrollador, como variables de proxy y URL base

691* configuración de ejecución de shell como `apiKeyHelper` y `statusLine`784* configuraciones de ejecución de shell como `apiKeyHelper` y `statusLine`

692* la configuración de binarios de sandbox `sandbox.bwrapPath`, `sandbox.socatPath` y `sandbox.ripgrep`785* la configuración de binario de sandbox `sandbox.bwrapPath`, `sandbox.socatPath` y `sandbox.ripgrep`

693* Configuración de Sandbox que intercepta tráfico, inyecta credenciales o debilita el aislamiento, como `sandbox.network.tlsTerminate` y la configuración del puerto proxy. [Diálogos de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) los enumera todos.786* Configuraciones de Sandbox que interceptan tráfico, inyectan credenciales o debilitan el aislamiento, como `sandbox.network.tlsTerminate` y la configuración del puerto proxy. [Diálogos de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) los enumera todos.

694 787 

695[Memoria de aprobación](/docs/es/server-managed-settings#approval-memory) cubre cuánto tiempo dura una aprobación y cuándo aparece el diálogo nuevamente.788[Memoria de aprobación](/docs/es/server-managed-settings#approval-memory) cubre cuánto tiempo dura una aprobación y cuándo aparece el diálogo nuevamente.

696 789 

697Claude Code aplica algunas variables `env` entregadas sin mostrar al desarrollador el diálogo de aprobación de seguridad, como configuración de selección de modelos y límites numéricos. Otras variables entregadas pueden requerir la aprobación del desarrollador antes de que surtan efecto; un valor de proxy, URL base u `OTEL_EXPORTER_OTLP_ENDPOINT` no vacío siempre lo hace. Cuando una variable entregada necesita aprobación, el diálogo la nombra.790Claude Code aplica algunas variables `env` entregadas sin mostrar al desarrollador el diálogo de aprobación, como configuraciones de selección de modelos y límites numéricos. Otras variables entregadas pueden requerir la aprobación del desarrollador antes de que surtan efecto; un valor de proxy, URL base u `OTEL_EXPORTER_OTLP_ENDPOINT` no vacío siempre lo hace. Cuando una variable entregada necesita aprobación, el diálogo la nombra.

698 791 

699[Variables de entorno y el diálogo de aprobación](/docs/es/server-managed-settings#environment-variables-and-the-approval-dialog) tiene los detalles, incluidos cuatro alteradores de privacidad cuyo valor entregado decide si necesitan aprobación. Antes de v2.1.218, Claude Code aplicaba menos variables sin preguntar al desarrollador, por lo que más variables entregadas desencadenaban el diálogo.792[Variables de entorno y el diálogo de aprobación](/docs/es/server-managed-settings#environment-variables-and-the-approval-dialog) tiene los detalles, incluidos cuatro conmutadores de privacidad cuyo valor entregado decide si necesitan aprobación. Antes de v2.1.218, Claude Code aplicaba menos variables sin preguntar al desarrollador, por lo que más variables entregadas activaban el diálogo.

700 793 

701La configuración de [telemetría](#telemetry) de la puerta de enlace empuja `OTEL_EXPORTER_OTLP_ENDPOINT`, por lo que establecer `telemetry.forward_to` desencadena el diálogo en cada cliente interactivo. El diálogo protege la máquina del desarrollador de una puerta de enlace comprometida u hostil, no la organización del desarrollador.794La configuración de [telemetría](#telemetry) del gateway inserta `OTEL_EXPORTER_OTLP_ENDPOINT`, por lo que establecer `telemetry.forward_to` activa el diálogo en cada cliente interactivo. El diálogo protege la máquina del desarrollador de un gateway comprometido u hostil, no la organización del desarrollador.

702 795 

703Una ejecución no interactiva con la bandera `-p` no puede mostrar el diálogo. Aplica la configuración empujada solo para esa ejecución y no la registra como aprobada, por lo que la siguiente sesión interactiva del desarrollador aún muestra el diálogo. Antes de v2.1.207, una ejecución no interactiva guardaba la configuración como aprobada y ninguna sesión interactiva posterior mostraba el diálogo para ellas.796Una ejecución no interactiva con la bandera `-p` no puede mostrar el diálogo. Aplica la configuración insertada para esa ejecución solo y no la registra como aprobada, por lo que la próxima sesión interactiva del desarrollador aún muestra el diálogo. Antes de v2.1.207, una ejecución no interactiva guardaba la configuración como aprobada y ninguna sesión interactiva posterior mostraba el diálogo para ellas.

704 797 

705Si un desarrollador rechaza, Claude Code sale de esa sesión en lugar de aplicar la política. Cuando empuja un nuevo gancho, o cualquier variable env que desencadene el diálogo, a una política amplia, Claude Code por lo tanto muestra el diálogo a cada desarrollador coincidente. Muestra el diálogo en una sesión en ejecución en la próxima encuesta por hora, y de lo contrario en el próximo inicio del desarrollador.798Si un desarrollador rechaza, Claude Code sale de esa sesión en lugar de aplicar la política. Cuando inserta un nuevo hook, o cualquier variable env que active el diálogo, en una política amplia, Claude Code por lo tanto muestra el diálogo a cada desarrollador coincidente. Muestra el diálogo en una sesión en ejecución en la próxima encuesta cada hora, y de lo contrario en el próximo inicio del desarrollador.

706 799 

707La clave `cli` se nombró `settings` en versiones anteriores. Ese deletreo aún se acepta como alias, pero las nuevas implementaciones deben usar `cli`.800La clave `cli` se llamaba `settings` en versiones anteriores. Esa ortografía aún se acepta como un alias, pero las nuevas implementaciones deben usar `cli`.

708 801 

709<h4 id="mcp-servers-in-a-policy">802<h4 id="mcp-servers-in-a-policy">

710 Servidores MCP en una política803 Servidores MCP en una política

711</h4>804</h4>

712 805 

713Para proporcionar servidores MCP a los clientes de Claude Code que coincida una política, establezca [`managedMcpServers`](/docs/es/managed-mcp#provide-servers-through-managed-settings) en el bloque `cli` de esa política. Necesita Claude Code v2.1.259 o posterior en el servidor de puerta de enlace y en clientes.806Para proporcionar servidores MCP a los clientes de Claude Code que coincida una política, establezca [`managedMcpServers`](/docs/es/managed-mcp#provide-servers-through-managed-settings) en el bloque `cli` de esa política. Necesita Claude Code v2.1.259 o posterior en el servidor de gateway y en clientes.

714 807 

715La puerta de enlace verifica cada entrada al arrancar con [las mismas reglas que Claude Code aplica en el cliente](/docs/es/managed-mcp#what-an-entry-can-contain), y si una entrada falla una verificación, la puerta de enlace se niega a iniciar y nombra la entrada.808El gateway comprueba cada entrada al iniciar con [las mismas reglas que Claude Code aplica en el cliente](/docs/es/managed-mcp#what-an-entry-can-contain), y si una entrada falla una comprobación, el gateway se niega a iniciar y nombra la entrada.

716 809 

717Si escribe una referencia `${VAR}` en `gateway.yaml`, la puerta de enlace la resuelve desde su entorno al arrancar a través de [expansión de secretos](#secret-expansion) antes de ejecutar las verificaciones de entrada, por lo que cada cliente coincidente recibe el valor literal y puede leerlo. La [orientación de encabezado para servidores proporcionados](/docs/es/managed-mcp#provide-servers-through-managed-settings) se aplica al valor expandido.810Si escribe una referencia `${VAR}` en `gateway.yaml`, el gateway la resuelve desde su entorno al iniciar a través de [expansión de secretos](#secret-expansion) antes de ejecutar las comprobaciones de entrada, por lo que cada cliente coincidente recibe el valor literal y puede leerlo. La [orientación de encabezado para servidores proporcionados](/docs/es/managed-mcp#provide-servers-through-managed-settings) se aplica al valor expandido.

718 811 

719La puerta de enlace rechaza la ortografía `.mcp.json` `mcpServers` en un bloque `cli`, y su error de arranque nombra `managedMcpServers` como la clave a usar. Antes de v2.1.259, la puerta de enlace rechazaba cualquier definición de servidor MCP en un bloque `cli`.812El gateway rechaza la ortografía `.mcp.json` `mcpServers` en un bloque `cli`, y su error de inicio nombra `managedMcpServers` como la clave a usar. Antes de v2.1.259, el gateway rechazaba cualquier definición de servidor MCP en un bloque `cli`.

720 813 

721<h4 id="claude-desktop-overlay">814<h4 id="claude-desktop-overlay">

722 Superposición de Claude Desktop815 Superposición de Claude Desktop

723</h4>816</h4>

724 817 

725Si su organización también implementa [Claude Desktop](/docs/es/desktop), la misma puerta de enlace sirve a ambos clientes. Apunte `bootstrapUrl`, en la [configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop, a `<listen.public_url>/user/bootstrap`. Claude Desktop deriva el emisor de OAuth de esa URL, ejecuta el mismo inicio de sesión de código de dispositivo contra esta puerta de enlace, y obtiene su configuración de la respuesta.818Si su organización también implementa [Claude Desktop](/docs/es/desktop), el mismo gateway sirve a ambos clientes. Apunte `bootstrapUrl`, en la [configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop, a `<listen.public_url>/user/bootstrap`. Claude Desktop deriva el emisor de OAuth de esa URL, ejecuta el mismo inicio de sesión de código de dispositivo contra este gateway y obtiene su configuración de la respuesta.

726 819 

727<Note>820<Note>

728 Requiere Claude Code v2.1.203 o posterior en el servidor de puerta de enlace, y una opción explícita: `/user/bootstrap` devuelve 404 a menos que la política que coincida con el usuario lleve una clave `desktop`. Un `desktop: {}` vacío opta por una política, y una clave `desktop` en la capa base `match: {}` opta por cada política que la hereda. El registro de auditoría registra cada solicitud como `desktop_bootstrap.serve` o `desktop_bootstrap.denied`.821 Requiere Claude Code v2.1.203 o posterior en el servidor de gateway, y una opción explícita: `/user/bootstrap` devuelve 404 a menos que la política que coincida con el usuario lleve una clave `desktop`. Un `desktop: {}` vacío opta una política, y una clave `desktop` en la capa base `match: {}` opta en cada política que la hereda. El registro de auditoría registra cada solicitud como `desktop_bootstrap.serve` o `desktop_bootstrap.denied`.

729</Note>822</Note>

730 823 

731La puerta de enlace deriva gran parte de la respuesta del bloque `cli` de la política coincidente y de la configuración de puerta de enlace de nivel superior:824El gateway deriva gran parte de la respuesta del bloque `cli` de la política coincidente y de la configuración del gateway de nivel superior:

732 825 

733* La lista de modelos, de `availableModels`826* La lista de modelos, de `availableModels`

734* Herramientas deshabilitadas, de entradas `permissions.deny` de nombre de herramienta desnudo. Si establece `disabledBuiltinTools` en el bloque `desktop` de la política, la puerta de enlace sirve la unión de su valor y la lista derivada, por lo que puede deshabilitar más herramientas de esta manera pero no puede volver a habilitar una que deshabilitó a través de `permissions.deny`827* Herramientas deshabilitadas, de entradas `permissions.deny` de nombre de herramienta desnudo. Si establece `disabledBuiltinTools` en el bloque `desktop` de la política, el gateway sirve la unión de su valor y la lista derivada, por lo que puede deshabilitar más herramientas de esta manera pero no puede volver a habilitar una que deshabilitó a través de `permissions.deny`

735* La lista de permitidos de salida, de `sandbox.network.allowedDomains`. Si establece `coworkEgressAllowedHosts` en el bloque `desktop` de la política, la puerta de enlace usa ese valor en lugar de la lista derivada828* La lista de permitidos de salida, de `sandbox.network.allowedDomains`. Si establece `coworkEgressAllowedHosts` en el bloque `desktop` de la política, el gateway usa ese valor en lugar de la lista derivada

736* Un punto final OTLP que apunta a la puerta de enlace en sí, y los atributos de identidad del usuario firmado. La puerta de enlace retransmite las exportaciones que recibe en ese punto final a sus destinos `forward_to`. Incluye el punto final y los atributos cuando establece tanto [`telemetry.forward_to`](#telemetry) como `listen.public_url`.829* Un punto final OTLP que apunta al gateway mismo, y los atributos de identidad del usuario conectado. El gateway retransmite las exportaciones que recibe en ese punto final a sus destinos `forward_to`. Incluye el punto final y los atributos cuando establece tanto [`telemetry.forward_to`](#telemetry) como `listen.public_url`.

737 830 

738 Claude Desktop exporta cada señal con una codificación: `http/protobuf`, o `http/json` cuando establece `OTEL_EXPORTER_OTLP_PROTOCOL` o uno de sus variantes por señal en `http/json` en el bloque `env` de la política. Antes de Claude Code v2.1.261 en el servidor de puerta de enlace, la respuesta establecía `http/json` independientemente, por lo que un recopilador que acepta solo protobuf rechazaba las exportaciones de Claude Desktop831 Claude Desktop exporta cada señal con una codificación: `http/protobuf`, o `http/json` cuando establece `OTEL_EXPORTER_OTLP_PROTOCOL` o uno de sus variantes por señal en `http/json` en el `env` de la política. Antes de Claude Code v2.1.261 en el servidor de gateway, la respuesta establecía `http/json` independientemente, por lo que un recopilador que acepta solo protobuf rechazaba las exportaciones de Claude Desktop

739 832 

740Para establecer `disabledBuiltinTools`, `coworkEgressAllowedHosts` o la configuración `managedMcpServers` propia de Claude Desktop en el bloque `desktop` de una política, necesita Claude Code v2.1.232 o posterior en el servidor de puerta de enlace. `managedMcpServers` de Claude Desktop toma un valor de matriz en lugar de un objeto.833Para establecer `disabledBuiltinTools`, `coworkEgressAllowedHosts` o la configuración `managedMcpServers` propia de Claude Desktop en el bloque `desktop` de una política, necesita Claude Code v2.1.232 o posterior en el servidor de gateway. El `managedMcpServers` de Claude Desktop toma un valor de array en lugar de un objeto.

741 834 

742La puerta de enlace omite claves sin equivalente de Claude Desktop, como `hooks` y reglas de permisos limitadas como `Bash(npm *)`, de la respuesta de bootstrap.835El gateway omite claves sin equivalente de Claude Desktop, como `hooks` y reglas de permisos con alcance como `Bash(npm *)`, de la respuesta de bootstrap.

743 836 

744Agregue el bloque `desktop` opcional junto a `cli` para establecer la configuración de Claude Desktop directamente. Escriba la configuración de la [referencia de configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop como nombres de clave planos. Deje fuera las claves que Claude Desktop lee solo de MDM o archivos locales, como `bootstrapUrl`; la puerta de enlace las rechaza al arrancar. Antes de v2.1.232, la puerta de enlace aceptaba una lista fija de 11 claves de puerta de características, como `chatTabEnabled` y `disableAutoUpdates`, y rechazaba todas las demás claves al arrancar. Antes de v2.1.227, la puerta de enlace también rechazaba `chatTabEnabled` y `chatAdvancedFileAnalysisEnabled` al arrancar.837Agregue el bloque `desktop` opcional junto a `cli` para establecer la configuración de Claude Desktop directamente. Escriba la configuración de la [referencia de configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop como nombres de clave planos. Deje fuera las claves que Claude Desktop lee solo de MDM o archivos locales, como `bootstrapUrl`; el gateway las rechaza al iniciar. Antes de v2.1.232, el gateway aceptaba una lista fija de 11 claves de puerta de características, como `chatTabEnabled` y `disableAutoUpdates`, y rechazaba todas las demás claves al iniciar. Antes de v2.1.227, el gateway también rechazaba `chatTabEnabled` y `chatAdvancedFileAnalysisEnabled` al iniciar.

745 838 

746```yaml theme={null}839```yaml theme={null}

747managed:840managed:


755 banner: { text: "Contractor build: internal use only" }848 banner: { text: "Contractor build: internal use only" }

756```849```

757 850 

758Cada clave es opcional; Claude Desktop aplica su propio predeterminado para cualquier clave que omita. La puerta de enlace valida cada bloque `desktop` al arrancar contra el esquema de configuración que Claude Desktop en sí usa, por lo que un error aparece al inicio de la puerta de enlace como un error que nombra la clave en lugar de llegar a cada escritorio conectado. La puerta de enlace falla al arrancar cuando un bloque contiene:851Cada clave es opcional; Claude Desktop aplica su propio valor predeterminado para cualquier clave que omita. El gateway valida cada bloque `desktop` al iniciar contra el esquema de configuración que el propio Claude Desktop usa, por lo que un error aparece al inicio del gateway como un error que nombra la clave en lugar de llegar a cada desktop conectado. El gateway falla al iniciar cuando un bloque contiene:

759 852 

760* Una clave desconocida853* Una clave desconocida

761* Una clave reconocida cuyo valor Claude Desktop rechazaría o silenciosamente descartaría, como un valor vacío o una subclave mal escrita dentro de una entrada anidada. Antes de v2.1.260, la puerta de enlace silenciosamente descartaba un campo mal escrito dentro de un objeto anidado de una entrada `managedMcpServers` u `orgPluginSettings` en lugar de fallar al arrancar.854* Una clave reconocida cuyo valor Claude Desktop rechazaría o dejaría caer silenciosamente, como un valor vacío o una subclave mal escrita dentro de una entrada anidada. Antes de v2.1.260, el gateway dejaba caer silenciosamente un campo mal escrito dentro de un objeto anidado de una entrada `managedMcpServers` u `orgPluginSettings` en lugar de fallar al iniciar.

762* Una clave que la puerta de enlace calcula en sí: la conexión de inferencia, la lista de modelos y el relé OTLP. Configure esos a través de [`upstreams`](#upstreams), [`models`](#models) y la sección [`telemetry`](#telemetry) de `forward_to`.855* Una clave que el gateway calcula a sí mismo: la conexión de inferencia, la lista de modelos y el relé OTLP. Configure esos a través de [`upstreams`](#upstreams), [`models`](#models) y la sección [`telemetry`](#telemetry) de `forward_to`.

763* Un alias heredado de una clave actual. En el error de arranque, la puerta de enlace nombra la clave canónica a escribir.856* Un alias heredado de una clave actual. En el error de inicio, el gateway nombra la clave canónica a escribir.

764 857 

765Si usa un valor o forma de entrada deprecada, como una entrada `managedMcpServers` sin `transport`, la puerta de enlace se inicia y registra una advertencia que nombra el reemplazo.858Si utiliza un valor o forma de entrada obsoleta, como una entrada `managedMcpServers` sin `transport`, el gateway se inicia y registra una advertencia que nombra el reemplazo.

766 859 

767La puerta de enlace valida un bloque `desktop` contra el esquema incluido con su versión instalada, como lo hace con el bloque `cli`. Para entregar una configuración introducida por una versión más nueva de Claude Desktop, actualice primero la puerta de enlace. Por ejemplo, `userPluginMarketplacesEnabled` y `userPluginUploadsEnabled` necesitan Claude Code v2.1.260 o posterior en el servidor de puerta de enlace y Claude Desktop 1.37937.0 o posterior en las máquinas de los miembros.860El gateway valida un bloque `desktop` contra el esquema incluido con su versión instalada, como lo hace con el bloque `cli`. Para entregar una configuración introducida por una versión más nueva de Claude Desktop, actualice primero el gateway. Por ejemplo, `userPluginMarketplacesEnabled` y `userPluginUploadsEnabled` necesitan Claude Code v2.1.260 o posterior en el servidor de gateway y Claude Desktop 1.37937.0 o posterior en las máquinas de los miembros.

768 861 

769Si establece `orgPluginSettings` en el bloque `desktop` de una política, la puerta de enlace lo sirve en la forma de matriz que Claude Desktop 1.15200.0 y posterior lee. Los escritorios más antiguos ignoran la matriz y no aplican ninguna política de herramientas de complementos, por lo que actualice a los miembros a 1.15200.0 o posterior antes de confiar en ello.862Si establece `orgPluginSettings` en el bloque `desktop` de una política, el gateway lo sirve en la forma de array que Claude Desktop 1.15200.0 y posterior lee. Los desktops más antiguos ignoran el array y no aplican ninguna política de herramientas de plugins, por lo que actualice a los miembros a 1.15200.0 o posterior antes de confiar en ello.

770 863 

771La puerta de enlace rellena las claves que el bloque `desktop` de una política no establece desde el bloque `desktop` de la captura `match: {}`, de la misma manera que rellena el bloque `cli` de una política desde la base. Si establece `disabledBuiltinTools` o `builtinToolPolicy` en la base y una política de rol, la puerta de enlace mantiene la restricción de la base:864El gateway rellena las claves que el bloque `desktop` de una política no establece desde el bloque `desktop` de la captura general `match: {}`, de la misma manera que rellena el bloque `cli` de una política desde la base. Si establece `disabledBuiltinTools` o `builtinToolPolicy` en la base y una política de rol, el gateway mantiene la restricción de la base:

772 865 

773* `disabledBuiltinTools`: la puerta de enlace usa la unión de la lista de la base y la lista de la política866* `disabledBuiltinTools`: el gateway usa la unión de la lista de la base y la lista de la política

774* `builtinToolPolicy`: si establece una herramienta en un valor distinto de `allow` en la base, la puerta de enlace mantiene ese valor incluso si establece `allow` para la misma herramienta en una política de rol867* `builtinToolPolicy`: si establece una herramienta en un valor distinto de `allow` en la base, el gateway mantiene ese valor incluso si establece `allow` para la misma herramienta en una política de rol

775 868 

776Para todas las demás claves, si la establece en la política de rol, la puerta de enlace usa el valor de la política de rol. La puerta de enlace reemplaza una matriz o un objeto anidado como `banner` completo, por lo que si establece `banner.text` en una política de rol, la puerta de enlace descarta el `banner.backgroundColor` de la base.869Para todas las demás claves, si las establece en la política de rol, el gateway usa el valor de la política de rol. El gateway reemplaza un array o un objeto anidado como `banner` completo, por lo que si establece `banner.text` en una política de rol, el gateway descarta el `banner.backgroundColor` de la base.

777 870 

778Si no implementa Claude Desktop, deje `desktop` completamente fuera de sus políticas; la puerta de enlace luego devuelve 404 desde `/user/bootstrap` para cada usuario.871Si no implementa Claude Desktop, deje `desktop` completamente fuera de sus políticas; el gateway luego devuelve 404 desde `/user/bootstrap` para cada usuario.

779 872 

780<h4 id="precedence-with-other-managed-sources">873<h4 id="precedence-with-other-managed-sources">

781 Precedencia con otras fuentes administradas874 Precedencia con otras fuentes administradas

782</h4>875</h4>

783 876 

784Si un dispositivo también tiene una política entregada por MDM o un `managed-settings.json` local, la configuración entregada por puerta de enlace tiene rango primero. [Precedencia dentro del nivel administrado](/docs/es/managed-settings#precedence-within-the-managed-tier) en la página de configuración administrada dice cuándo se aplican las fuentes locales, y tiene las [claves que Claude Code lee de cada fuente de administrador](/docs/es/managed-settings#keys-read-from-every-admin-source) independientemente de cuál fuente seleccione, como las claves de bloqueo de sandbox, `forceRemoteSettingsRefresh` y la fusión `env` por variable. Un [`policyHelper`](/docs/es/settings-reference#policyhelper) configurado en un perfil MDM o el archivo de configuración administrada se ejecuta solo cuando la puerta de enlace no entrega configuración; la entrada dice qué reemplaza su salida.877Si un dispositivo también tiene una política entregada por MDM o un `managed-settings.json` local, la configuración entregada por gateway ocupa el primer lugar. [Precedencia dentro del nivel administrado](/docs/es/managed-settings#precedence-within-the-managed-tier) en la página de configuraciones administradas dice cuándo se aplican las fuentes locales, y tiene las [claves que Claude Code lee de cada fuente de administrador](/docs/es/managed-settings#keys-read-from-every-admin-source) independientemente de qué fuente seleccionó, como las claves de bloqueo de sandbox, `forceRemoteSettingsRefresh` y el `env` por variable. Un [`policyHelper`](/docs/es/settings-reference#policyhelper) configurado en un perfil MDM o el archivo de configuraciones administradas se ejecuta solo cuando el gateway no entrega configuraciones; la entrada dice qué reemplaza su salida.

785 878 

786Los hosts de incrustación como [Claude Desktop](/docs/es/desktop) pueden suministrar política a través de la opción `managedSettings` del SDK. [Configuración de padres de hosts de incrustación](/docs/es/managed-settings#parent-settings-from-embedding-hosts) dice cuándo Claude Code la aplica, y [Restringir configuración de padres](/docs/es/claude-apps-gateway#restrict-parent-settings) enumera qué configuración de dirección de permitir aún se aplica sin los bloqueos `allowManaged*Only`.879Los hosts de incrustación como [Claude Desktop](/docs/es/desktop) pueden suministrar política a través de la opción SDK `managedSettings`. [Configuraciones principales de hosts de incrustación](/docs/es/managed-settings#parent-settings-from-embedding-hosts) dice cuándo Claude Code la aplica, y [Restringir configuraciones principales](/docs/es/claude-apps-gateway#restrict-parent-settings) enumera qué configuraciones de dirección de permitidos aún se aplican sin los bloqueos `allowManaged*Only`.

787 880 

788Las políticas de puerta de enlace se aplican a cada invocación de Claude Code en la máquina, incluidas ejecuciones no interactivas `claude -p` y sesiones generadas por el SDK del agente. Si la puerta de enlace es inaccesible al iniciar, las sesiones firmadas salen con un error en lugar de ejecutarse sin su política.881Las políticas de gateway se aplican a cada invocación de Claude Code en la máquina, incluidas ejecuciones no interactivas `claude -p` y sesiones generadas por el SDK de Agent. Si el gateway es inaccesible al iniciar, las sesiones conectadas salen con un error en lugar de ejecutarse sin su política.

789 882 

790<h3 id="telemetry">883<h3 id="telemetry">

791 `telemetry`884 `telemetry`

792</h3>885</h3>

793 886 

794El CLI envía métricas, registros y, cuando está habilitado, trazas a la puerta de enlace, que las retransmite textualmente a cada destino configurado. Las exportaciones utilizan Protocolo OpenTelemetry (OTLP) sobre HTTP. Para omitir el relé y hacer que las sesiones exporten directamente a su recopilador, [nombre el recopilador en una política](#export-directly-to-your-collector). Consulte [Monitoreo de uso](/docs/es/monitoring-usage) para las métricas y eventos que emite el CLI.887El CLI envía métricas, registros y, cuando está habilitado, trazas al gateway, que las retransmite textualmente a cada destino configurado. Las exportaciones utilizan OpenTelemetry Protocol (OTLP) sobre HTTP. Para omitir el relé y hacer que las sesiones exporten directamente a su recopilador, [nombre el recopilador en una política](#export-directly-to-your-collector). Consulte [Monitoreo de uso](/docs/es/monitoring-usage) para las métricas y eventos que emite el CLI.

795 888 

796El CLI marca cada exportación con la identidad del usuario autenticado, leída del JWT emitido por la puerta de enlace: los atributos `user.id`, `user.email` y `user.groups`. La atribución de costo y uso por desarrollador funciona sin configuración del lado del desarrollador.889El CLI marca cada exportación con la identidad del usuario autenticado, leída del JWT emitido por el gateway: los atributos `user.id`, `user.email` y `user.groups`. La atribución de costo y uso por desarrollador funciona sin configuración en el lado del desarrollador.

797 890 

798[Claude Desktop](#claude-desktop-overlay) y las sesiones de Cowork firmadas a través de la puerta de enlace marcan su telemetría con `user.email` y `user.groups` junto a `enduser.id`, por lo que puede cubrir el uso de terminal, Desktop y Cowork con una consulta en `user.email` o `user.groups`. `user.groups` es la lista de grupos de IdP separada por comas.891[Claude Desktop](#claude-desktop-overlay) y las sesiones de Cowork conectadas a través del gateway marcan su telemetría con `user.email` y `user.groups` junto a `enduser.id`, por lo que puede cubrir el uso de terminal, Desktop y Cowork con una consulta en `user.email` o `user.groups`. `user.groups` es la lista de grupos de IdP separada por comas.

892 

893La telemetría de Desktop y Cowork también lleva `enduser.sub`, la reclamación `sub` que su proveedor de identidades emite para el usuario, que permanece igual cuando cambia el correo electrónico de un usuario. Las sesiones de terminal marcan el mismo valor bajo `user.id`, por lo que una consulta que coincida con `enduser.sub` contra `user.id` de terminal cubre el uso de terminal, Desktop y Cowork de un usuario junto. En las exportaciones de Desktop y Cowork, `user.id` es un identificador anónimo, no el sujeto.

799 894 

800Como todos los datos de OpenTelemetry de Claude Code, estos atributos van solo a destinos que su organización configura, nunca a Anthropic.895Como todos los datos de OpenTelemetry de Claude Code, estos atributos van solo a destinos que su organización configura, nunca a Anthropic.

801 896 

802Si la lista de grupos de un usuario es más larga que 255 caracteres una vez codificada en porcentaje, o un nombre de grupo contiene una coma o signo igual, la puerta de enlace deja `user.groups` fuera de la telemetría de Desktop y Cowork de ese usuario en lugar de truncarla. Las sesiones de terminal de ese usuario aún llevan la lista completa.897Si la lista de grupos de un usuario es más larga que 255 caracteres una vez codificada en porcentaje, o un nombre de grupo contiene una coma o un signo igual, el gateway deja `user.groups` fuera de la telemetría de Desktop y Cowork de ese usuario en lugar de truncarla. Las sesiones de terminal de ese usuario aún llevan la lista completa.

898 

899El gateway deja `enduser.sub` cuando el sujeto es más largo que 255 caracteres una vez codificado en porcentaje, o contiene un espacio, un carácter fuera de ASCII imprimible, o uno de `,` `;` `=` `\` `"` `%`. La telemetría de Desktop y Cowork de ese usuario mantiene sus otros atributos.

900 

901Necesita Claude Code v2.1.265 o posterior en el servidor de gateway para `user.email` y `user.groups` en la telemetría de Desktop y Cowork, y Claude Desktop 1.24012 o posterior en la máquina de cada desarrollador para `user.groups`.

803 902 

804Necesita Claude Code v2.1.265 o posterior en el servidor de puerta de enlace para `user.email` y `user.groups` en telemetría de Desktop y Cowork, y Claude Desktop 1.24012 o posterior en la máquina de cada desarrollador para `user.groups`.903Necesita Claude Code v2.1.274 o posterior en el servidor de gateway para `enduser.sub`.

805 904 

806```yaml theme={null}905```yaml theme={null}

807telemetry:906telemetry:


809 - url: https://otel-collector.internal.example.com908 - url: https://otel-collector.internal.example.com

810 headers:909 headers:

811 Authorization: ${OTLP_TOKEN}910 Authorization: ${OTLP_TOKEN}

812 # Opt-in por señal. Predeterminado: solo métricas.911 # Opción por señal. Predeterminado: solo métricas.

813 metrics: true912 metrics: true

814 logs: false913 logs: false

815 traces: false914 traces: false


819```918```

820 919 

821<Warning>920<Warning>

822 Cada destino se adhiere a `metrics`, `logs` y `traces` independientemente, y el predeterminado es solo métricas. Las señales difieren en sensibilidad:921 Cada destino opta en `metrics`, `logs` y `traces` independientemente, y el valor predeterminado es solo métricas. Las señales difieren en sensibilidad:

823 922 

824 * **Métricas**: contadores agregados como conteos de tokens, conteos de solicitudes y latencia923 * **Métricas**: contadores agregados como conteos de tokens, conteos de solicitudes y latencia

825 * **Registros y trazas**: pueden llevar comandos bash completos, entradas de herramientas y rutas de archivos, cubriendo cualquier cosa que Claude Code haga en la máquina de un desarrollador924 * **Registros y trazas**: pueden llevar comandos Bash completos, entradas de herramientas y rutas de archivos, cubriendo cualquier cosa que Claude Code haga en la máquina de un desarrollador

826 925 

827 Habilite registros y trazas solo en destinos con los controles de acceso y la política de retención que los datos justifiquen.926 Habilite registros y trazas solo en destinos con los controles de acceso y la política de retención que esos datos justifican.

828</Warning>927</Warning>

829 928 

830Cada URL `forward_to` debe usar `https://`, con una excepción para un recopilador en la interfaz de bucle de retorno de la puerta de enlace:929Cada URL `forward_to` debe usar `https://`, con una excepción para un recopilador en la interfaz de loopback del gateway:

930 

931* `http://localhost:<port>` pasa la validación de configuración, pero la [guardia SSRF](/docs/es/claude-apps-gateway-deploy#threat-model-summary) bloquea cada exportación con `ECONNREFUSED_SSRF` a menos que establezca `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` en el entorno del gateway

932* `http://127.0.0.1:<port>` o `http://[::1]:<port>` falla al iniciar a menos que esa variable esté establecida

933 

934Para un recopilador en el clúster, expóngalo sobre HTTPS en su propia dirección interna, o ejecútelo como un sidecar con la variable establecida.

935 

936Cuando `HTTPS_PROXY` está establecido, el gateway envía exportaciones a través de ese proxy.

831 937 

832* `http://localhost:<port>` pasa la validación de configuración, pero la [protección SSRF](/docs/es/claude-apps-gateway-deploy#threat-model-summary) bloquea cada exportación con `ECONNREFUSED_SSRF` a menos que establezca `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` en el entorno de la puerta de enlace938Para llegar a un recopilador interno directamente, agréguelo a `NO_PROXY` por nombre de host o por un dominio con un punto inicial como `.internal.example.com`, que requiere Claude Code v2.1.277 o posterior en el servidor de gateway. Asegúrese de que el gateway pueda llegar al recopilador sin el proxy. Una entrada sin un punto inicial coincide solo con ese nombre exacto, no con nombres bajo él. Los rangos CIDR no coinciden.

833* `http://127.0.0.1:<port>` o `http://[::1]:<port>` falla al arrancar a menos que esa variable esté establecida

834 939 

835Para un recopilador en clúster, expóngalo sobre HTTPS en su propia dirección interna, o ejecútelo como un sidecar con la variable establecida.940Con [salida solo proxy](#proxy-only-egress) activada, permita el recopilador en el proxy en su lugar, ya que cualquier entrada `NO_PROXY` mantiene la salida solo proxy desactivada.

836 941 

837La telemetría está desactivada en el CLI de forma predeterminada. Cuando establece tanto `telemetry.forward_to` como `listen.public_url`, la puerta de enlace la activa para clientes conectados empujando seis variables de entorno a través de `/managed/settings`:942La telemetría está desactivada en el CLI de forma predeterminada. Cuando establece tanto `telemetry.forward_to` como `listen.public_url`, el gateway la activa para clientes conectados insertando seis variables de entorno a través de `/managed/settings`:

838 943 

839* `CLAUDE_CODE_ENABLE_TELEMETRY=1`944* `CLAUDE_CODE_ENABLE_TELEMETRY=1`

840* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` y `OTEL_TRACES_EXPORTER`, cada uno establecido en `otlp` si al menos un destino `forward_to` habilita esa señal y en `none` de lo contrario945* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` y `OTEL_TRACES_EXPORTER`, cada uno establecido en `otlp` si al menos un destino `forward_to` habilita esa señal y en `none` de lo contrario

841* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`946* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`

842* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`947* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`

843 948 

844Antes de Claude Code v2.1.265 en el servidor de puerta de enlace, la puerta de enlace empujaba los tres selectores de exportador como `otlp`, incluido para señales que ningún destino optó.949Antes de Claude Code v2.1.265 en el servidor de gateway, el gateway insertaba los tres selectores de exportador como `otlp`, incluido para señales que ningún destino optó.

845 950 

846El punto final empujado se construye a partir de la URL pública, por lo que las métricas y registros no necesitan configuración OTEL de desarrolladores o políticas.951El punto final insertado se construye a partir de la URL pública, por lo que las métricas y registros no necesitan configuración OTEL de desarrolladores o políticas.

847 952 

848Los desarrolladores firmados a través de `/login` no pueden redirigir exportaciones con su propia configuración OTEL:953Los desarrolladores conectados a través de `/login` no pueden redirigir exportaciones con su propia configuración OTEL:

849 954 

850* **Variables establecidas localmente**: Claude Code aplica las variables empujadas en el nivel administrado, por lo que cada una anula el valor que un desarrollador establece para ella localmente.955* **Variables establecidas localmente**: Claude Code aplica las variables insertadas en el nivel administrado, por lo que cada una anula el valor que un desarrollador establece localmente.

851* **Puntos finales configurados localmente**: con la exportación OTLP/HTTP habilitada, el CLI ignora cualquier punto final configurado localmente, independientemente de si la puerta de enlace empujó las variables de telemetría. Sus exportaciones van a la puerta de enlace a menos que una política [nombre su recopilador como el punto final](#export-directly-to-your-collector).956* **Puntos finales configurados localmente**: con la exportación OTLP/HTTP habilitada, el CLI ignora cualquier punto final configurado localmente, independientemente de si el gateway insertó las variables de telemetría. Sus exportaciones van al gateway a menos que una política [nombre su recopilador como punto final](#export-directly-to-your-collector).

852 957 

853Sin un destino `forward_to` para una señal, la puerta de enlace acepta y descarta. Si los desarrolladores ya exportan telemetría de Claude Code a uno de sus recopiladores, agréguelo como destino `forward_to`, con registros o trazas habilitadas si exportan esos, para que continúe recibiendo sus datos después de que firmen. Para omitir el relé en su lugar, [nombre el recopilador en una política](#export-directly-to-your-collector).958Sin un destino `forward_to` para una señal, el gateway la acepta y la descarta. Si los desarrolladores ya exportan telemetría de Claude Code a uno de sus recopiladores, agréguelo como destino `forward_to`, con registros o trazas habilitadas si exportan esos, para que continúe recibiendo sus datos después de que se conecten. Para omitir el relé en su lugar, [nombre el recopilador en una política](#export-directly-to-your-collector).

854 959 

855[Las trazas](/docs/es/monitoring-usage#traces-beta) además requieren `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` en cada cliente. Establézcalo en el bloque `env` de una política administrada, ya que la puerta de enlace no lo empuja. Los desarrolladores lo aprueban en el mismo [diálogo de aprobación de seguridad](#managed) que el punto final empujado ya desencadena.960[Trazas](/docs/es/monitoring-usage#traces-beta) también requieren `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` en cada cliente. Establézcalo en el bloque `env` de una política administrada, ya que el gateway no lo inserta. Los desarrolladores lo aprueban en el mismo [diálogo de aprobación de seguridad](#managed) que el punto final insertado ya activa.

856 961 

857Establézcalo en `1` solo en las políticas cuyos grupos desea rastrear. Una política que no lo establece hereda el valor de su política de captura `match: {}` si esa política establece uno, según las [reglas de fusión](#managed). Para evitar que los clientes de un grupo envíen trazas incluso cuando un desarrollador establece la variable localmente, establézcala en `0` en la política de ese grupo.962Establézcalo en `1` solo en las políticas cuyos grupos desea rastrear. Una política que no lo establece hereda el valor de su política de captura general `match: {}` si esa política establece uno, según las [reglas de fusión](#managed). Para evitar que los clientes de un grupo envíen trazas incluso cuando un desarrollador establece la variable localmente, establézcala en `0` en la política de ese grupo.

858 963 

859Tanto las codificaciones OTLP de protobuf como JSON se retransmiten, y cualquier backend compatible con OpenTelemetry funciona como destino.964Tanto las codificaciones OTLP de protobuf como JSON se retransmiten, y cualquier backend compatible con OpenTelemetry funciona como destino.

860 965 


862 Exportar directamente a su recopilador967 Exportar directamente a su recopilador

863</h4>968</h4>

864 969 

865Para hacer que las sesiones firmadas a través de `/login` envíen telemetría directamente a su recopilador en lugar de a través del relé, establezca `OTEL_EXPORTER_OTLP_ENDPOINT` en la URL base `https://` del recopilador en el bloque `env` de una [política administrada](#managed). Claude Code agrega `/v1/metrics`, `/v1/logs` o `/v1/traces` a la URL que establece, como `https://otel-collector.example.com:4318`, y exporta cada señal allí sobre OTLP/HTTP. Requiere Claude Code v2.1.265 o posterior en la máquina de cada desarrollador. Los clientes anteriores exportan a través del relé.970Para hacer que las sesiones conectadas a través de `/login` envíen telemetría directamente a su recopilador en lugar de a través del relé, establezca `OTEL_EXPORTER_OTLP_ENDPOINT` en la URL base `https://` del recopilador en el bloque `env` de una [política administrada](#managed). Claude Code añade `/v1/metrics`, `/v1/logs` o `/v1/traces` a la URL que establece, como `https://otel-collector.example.com:4318`, y exporta cada señal allí sobre OTLP/HTTP. Requiere Claude Code v2.1.265 o posterior en la máquina de cada desarrollador. Los clientes anteriores exportan a través del relé.

866 971 

867Para autenticarse en el recopilador, establezca `OTEL_EXPORTER_OTLP_HEADERS` en el mismo bloque `env`. Las sesiones nunca envían el token de sesión de puerta de enlace del desarrollador a un recopilador nombrado de esta manera.972Para autenticarse en el recopilador, establezca `OTEL_EXPORTER_OTLP_HEADERS` en el mismo bloque `env`. Las sesiones nunca envían el token de sesión de gateway del desarrollador a un recopilador nombrado de esta manera.

868 973 

869Cuando agrega o cambia este punto final en una política, Claude Code pide a cada desarrollador que lo apruebe en el [diálogo de aprobación de seguridad](#managed) antes de aplicarlo en una sesión interactiva.974Cuando agrega o cambia este punto final en una política, Claude Code pide a cada desarrollador que lo apruebe en el [diálogo de aprobación de seguridad](#managed) antes de aplicarlo en una sesión interactiva.

870 975 

871Claude Code verifica el punto final antes de exportar una señal directamente, y mantiene esa señal en el relé cuando una verificación falla. Las verificaciones incluyen:976Claude Code comprueba el punto final antes de exportar una señal directamente, y mantiene esa señal en el relé cuando una comprobación falla. Las comprobaciones incluyen:

872 977 

873* El punto final proviene de la puerta de enlace en sí. Si establece la misma variable en un perfil MDM o un `managed-settings.json` local, las exportaciones permanecen en el relé.978* El punto final proviene del gateway mismo. Si establece la misma variable en un perfil MDM o un `managed-settings.json` local, las exportaciones permanecen en el relé.

874* La URL usa `https://`, o `http://` a una dirección de bucle de retorno979* La URL usa `https://`, o `http://` a una dirección de loopback

875* La URL se resuelve a una ruta que termina en `/v1/<signal>`, sin consulta o fragmento. Claude Code construye esa ruta en sí desde la variable genérica. Usa una variable por señal como `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` como se escribe, así que incluya la ruta completa allí.980* La URL se resuelve en una ruta que termina en `/v1/<signal>`, sin consulta o fragmento. Claude Code construye esa ruta a sí mismo desde la variable genérica. Utiliza una variable por señal como `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` tal como está escrita, por lo que incluya la ruta completa allí.

876* La URL no es el host de la puerta de enlace en sí. Un punto final dirigido a la puerta de enlace mantiene la ruta de relé y su token de sesión.981* La URL no es el host del gateway. Un punto final dirigido al gateway mantiene la ruta de relé y su token de sesión.

877* Ni usted ni el desarrollador han configurado [`otelHeadersHelper`](/docs/es/settings-reference#otelheadershelper) en ninguna fuente de configuración. Con un ayudante configurado, cada señal permanece en el relé.982* Ni usted ni el desarrollador han configurado [`otelHeadersHelper`](/docs/es/settings-reference#otelheadershelper) en ninguna fuente de configuración. Con un ayudante configurado, cada señal permanece en el relé.

878 983 

879El punto final que nombra cambia solo dónde van las exportaciones. Aún elige qué señales exportan en absoluto con los selectores `OTEL_*_EXPORTER`.984El punto final que nombra cambia solo dónde van las exportaciones. Aún elige qué señales exportan en absoluto con los selectores `OTEL_*_EXPORTER`.

880 985 

881El punto final solo no activa la exportación, así que también establezca las variables que lo hacen, a menos que la puerta de enlace ya las empuje:986El punto final solo no activa la exportación, por lo que también establezca las variables que lo hacen, a menos que el gateway ya las inserte:

882 987 

883* Si la puerta de enlace ya [empuja las variables de telemetría](#telemetry), cubren habilitación, selectores y protocolo, y su punto final explícito anula el valor `<public_url>` empujado. Establezca un selector `OTEL_*_EXPORTER` en `otlp` usted mismo solo para una señal que ningún destino `forward_to` habilita.988* Si el gateway ya [inserta las variables de telemetría](#telemetry), cubren habilitación, selectores y protocolo, y su punto final explícito anula el valor `<public_url>` insertado. Establezca un selector `OTEL_*_EXPORTER` en `otlp` usted mismo solo para una señal que ningún destino `forward_to` habilita.

884* Si no, también establezca `CLAUDE_CODE_ENABLE_TELEMETRY=1`, los selectores `OTEL_*_EXPORTER` y `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.989* Si no, también establezca `CLAUDE_CODE_ENABLE_TELEMETRY=1`, los selectores `OTEL_*_EXPORTER` y `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.

885 990 

886Cuando el desarrollador cierra sesión, o firma en una puerta de enlace diferente, las exportaciones al recopilador se detienen y Claude Code descarta cada lote restante en lugar de enviarlo.991Cuando el desarrollador se desconecta, o se conecta a un gateway diferente, las exportaciones al recopilador se detienen y Claude Code descarta cada lote restante en lugar de enviarlo.

887 992 

888<h4 id="when-a-destination-fails">993<h4 id="when-a-destination-fails">

889 Cuando un destino falla994 Cuando un destino falla

890</h4>995</h4>

891 996 

892La puerta de enlace no almacena en búfer, reintenta o almacena telemetría, por lo que descarta una exportación que no llega a un destino en lugar de entregarla tarde. Cada destino tiene éxito o falla por su cuenta, y el cliente exportador recibe una respuesta de éxito de cualquier manera, por lo que una entrega fallida aparece solo en el registro de la puerta de enlace.997El gateway no almacena en búfer, reintenta ni almacena telemetría, por lo que descarta una exportación que no llega a un destino en lugar de entregarla tarde. Cada destino tiene éxito o falla por su cuenta, y el cliente exportador recibe una respuesta de éxito de cualquier manera, por lo que una entrega fallida aparece solo en el registro del gateway.

893 998 

894Después de cinco entregas consecutivas fallidas a un destino, la puerta de enlace pausa el reenvío a él en tramos de 30 segundos, registrando cada pausa, hasta que una entrega tiene éxito. Cualquier respuesta de error, tiempo de espera o error de conexión cuenta como una entrega fallida, excepto `400`, `413`, `415`, `422` y `431`, que significan que el recopilador rechazó la carga de esa exportación como mal formada o demasiado grande.999Después de cinco entregas consecutivas fallidas a un destino, el gateway pausa el reenvío a él en tramos de 30 segundos, registrando cada pausa, hasta que una entrega tiene éxito. Cualquier respuesta de error, tiempo de espera o error de conexión cuenta como una entrega fallida, excepto `400`, `413`, `415`, `422` y `431`, que significan que el recopilador rechazó la carga útil de esa exportación como mal formada o demasiado grande.

895 1000 

896Una carga rechazada ni avanza ni reinicia el contador de fallos: la puerta de enlace continúa reenviando al destino y registra una advertencia que lo nombra y el estado, en el primer rechazo del destino y cada centésimo después.1001Una carga útil rechazada ni avanza ni reinicia el contador de fallos: el gateway continúa reenviando al destino y registra una advertencia que lo nombra y el estado, en el primer rechazo del destino y cada centésimo después.

897 1002 

898<h3 id="http-tuning">1003<h3 id="http-tuning">

899 Ajuste de HTTP1004 Ajuste HTTP

900</h3>1005</h3>

901 1006 

902Cuatro bloques opcionales de nivel superior, `access_control`, `limits`, `timeouts` y `rate_limits`, ajustan la superficie HTTP. Los valores predeterminados se adaptan a la mayoría de implementaciones.1007Cuatro bloques opcionales de nivel superior, `access_control`, `limits`, `timeouts` y `rate_limits`, ajustan la superficie HTTP. Los valores predeterminados se adaptan a la mayoría de implementaciones.

903 1008 

904| Bloque | Clave | Predeterminado | Descripción |1009| Bloque | Clave | Predeterminado | Descripción |

905| ---------------- | ---------------------------------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1010| ---------------- | ---------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

906| `access_control` | `allow_cidrs` / `deny_cidrs` | vacío | Permitir/denegar IP de entrada por dirección de cliente, después de la resolución de `trusted_proxies`. `deny_cidrs` se verifica primero; un cliente que coincida se rechaza incluso si `allow_cidrs` también coincide. Si `allow_cidrs` no está vacío, la puerta de enlace es predeterminada denegada. `/healthz` y `/readyz` están exentos de `allow_cidrs`. Cuando un proxy de confianza envía una entrada `X-Forwarded-For` que no es una dirección IP, el cliente real es desconocido y la puerta de enlace registra una advertencia una vez nombrando qué verificar. Donde se aplica cualquiera de las listas a la solicitud, la rechaza con `403` y razón de auditoría `xff_unparseable`. Donde ninguno lo hace, sirve la solicitud y usa la dirección propia del proxy como la IP del cliente para límites de velocidad por IP y auditoría. |1011| `access_control` | `allow_cidrs` / `deny_cidrs` | vacío | Permitir/denegar IP de entrada por dirección de cliente, después de la resolución de `trusted_proxies`. `deny_cidrs` se comprueba primero; un cliente que coincida se rechaza incluso si `allow_cidrs` también coincide. Si `allow_cidrs` no está vacío, el gateway es denegación predeterminada. `/healthz` y `/readyz` están exentos de `allow_cidrs`. Cuando un proxy de confianza envía una entrada `X-Forwarded-For` que no es una dirección IP, el cliente real es desconocido y el gateway registra una advertencia una vez nombrando qué verificar. Donde se aplica cualquiera de las listas a la solicitud, la rechaza con `403` y razón de auditoría `xff_unparseable`. Donde ninguno lo hace, sirve la solicitud y usa la dirección del proxy como dirección IP del cliente para límites de velocidad por IP y auditoría. |

907| `limits` | `max_request_bytes` | 32 MiB | Cuerpo de solicitud de entrada máximo; las solicitudes de tamaño excesivo obtienen `413` antes de que el cuerpo se almacene en búfer. Aumente para solicitudes de archivo o imagen grandes. |1012| `limits` | `max_request_bytes` | 32 MiB | Cuerpo de solicitud de entrada máximo; las solicitudes de tamaño excesivo obtienen `413` antes de que el cuerpo se almacene en búfer. Aumente para solicitudes de archivo o imagen grandes. |

908| `limits` | `max_request_header_bytes` | sin establecer | Cuando se establece, los encabezados de tamaño excesivo devuelven `431` |1013| `limits` | `max_request_header_bytes` | sin establecer | Cuando se establece, los encabezados de tamaño excesivo devuelven `431` |

909| `limits` | `max_url_length` | sin establecer | Cuando se establece, una URL demasiado larga devuelve `414` |1014| `limits` | `max_url_length` | sin establecer | Cuando se establece, una URL demasiado larga devuelve `414` |

910| `timeouts` | `upstream_ttfb_ms` | 120000 | Espera máxima para los encabezados de respuesta del upstream (tiempo hasta el primer byte). El cuerpo de respuesta luego se transmite sin límite de reloj de pared. Se aplica a la ruta de upstream de Anthropic directo; cada otro proveedor está limitado por el tiempo de espera propio del SDK del proveedor. |1015| `timeouts` | `upstream_ttfb_ms` | 120000 | Espera máxima para los encabezados de respuesta del upstream (tiempo hasta el primer byte). El cuerpo de respuesta luego se transmite sin límite de reloj de pared. Se aplica a la ruta de upstream de Anthropic directo; en todos los demás proveedores, el gateway espera hasta una hora a que comience la respuesta. |

911| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Límite de velocidad por IP en el punto final de autorización de dispositivo no autenticado. Aumente para una organización grande detrás de una IP de salida compartida o NAT. Estos límites se aplican solo al flujo de inicio de sesión de concesión de dispositivo, no a la inferencia `/v1/messages`. Consulte [Resistencia de fuerza bruta de código de usuario](/docs/es/claude-apps-gateway-deploy#user-code-brute-force-resistance). |1016| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Límite de velocidad por IP en el punto final de autorización de dispositivo no autenticado. Aumente para una organización grande detrás de una dirección IP de salida compartida o NAT. [Implementaciones grandes](/docs/es/claude-apps-gateway-deploy#large-rollouts) muestra cómo dimensionarlo. Estos límites se aplican solo al flujo de inicio de sesión de concesión de dispositivo, no a la inferencia `/v1/messages`. Consulte [Resistencia de fuerza bruta de código de usuario](/docs/es/claude-apps-gateway-deploy#user-code-brute-force-resistance). |

912| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Límite de velocidad por IP en envíos de `user_code` en `/device` |1017| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Límite de velocidad por IP en envíos de `user_code` en `/device`. Es lo que detiene a alguien de adivinar el código de otro desarrollador. [Implementaciones grandes](/docs/es/claude-apps-gateway-deploy#large-rollouts) muestra cuánto aumentarlo. |

913 1018 

914Si deja ambas listas `access_control` vacías, que es el predeterminado, la puerta de enlace sirve cualquier dirección de cliente, por lo que solo su red restringe quién puede alcanzarla. Eso importa porque una puerta de enlace puede empujar [configuración administrada](#managed) que ejecuta comandos en máquinas de desarrollador.1019Si deja ambas listas `access_control` vacías, que es el valor predeterminado, el gateway sirve cualquier dirección de cliente, por lo que solo su red restringe quién puede alcanzarlo. Eso importa porque un gateway puede insertar [configuraciones administradas](#managed) que ejecutan comandos en máquinas de desarrolladores.

915 1020 

916Mientras `allow_cidrs` esté vacío, la puerta de enlace advierte en dos lugares, sin cambiar cómo responde a ninguna solicitud:1021Mientras `allow_cidrs` esté vacío, el gateway advierte en dos lugares, sin cambiar cómo responde a ninguna solicitud:

917 1022 

918* **Al arrancar**: una advertencia en el registro operacional recomienda permitir solo los rangos privados `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` y `fc00::/7`, más cualquier otro rango interno desde el que se conectan sus desarrolladores. Si vincula la puerta de enlace a una dirección de bucle de retorno y no establece ni `trusted_proxies` ni `public_url`, como en desarrollo local, la advertencia no aparece.1023* **Al iniciar**: una advertencia en el registro operacional recomienda permitir solo los rangos privados `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` y `fc00::/7`, más cualquier otro rango interno desde el que se conectan sus desarrolladores. Si vincula el gateway a una dirección de loopback y no establece ni `trusted_proxies` ni `public_url`, como en desarrollo local, la advertencia no aparece.

919* **En tiempo de ejecución**: la primera vez que llega una solicitud desde una dirección fuera de esos rangos privados, la puerta de enlace registra una advertencia y emite un evento de auditoría [`access.public_client`](/docs/es/claude-apps-gateway-deploy#logs) que lleva la IP del cliente. Ambos se disparan una vez por proceso. Las direcciones de enlace local, `169.254.0.0/16` y `fe80::/10`, no cuentan como públicas. La puerta de enlace responde `/healthz` y `/readyz` antes de que se ejecute esta verificación, por lo que los sondeos de salud desde rangos públicos no la desencadenan.1024* **En tiempo de ejecución**: la primera vez que llega una solicitud desde una dirección fuera de esos rangos privados, el gateway registra una advertencia y emite un evento de auditoría [`access.public_client`](/docs/es/claude-apps-gateway-deploy#logs) que lleva la dirección IP del cliente. Ambos se disparan una vez por proceso. Las direcciones de enlace local, `169.254.0.0/16` y `fe80::/10`, no cuentan como públicas. El gateway responde `/healthz` y `/readyz` antes de que se ejecute esta comprobación, por lo que los sondeos de salud desde rangos públicos no la activan.

920 1025 

921Ambas señales usan la dirección del cliente tal como la resuelve la puerta de enlace. Si un equilibrador de carga, reenvío de puerto o túnel retransmite tráfico y no está listado en `listen.trusted_proxies`, la puerta de enlace ve la dirección del relé, que generalmente es privada, por lo que ni la advertencia en tiempo de ejecución ni una lista de permitidos privada lo detecta.1026Ambas señales utilizan la dirección del cliente tal como la resuelve el gateway. Si un equilibrador de carga, reenvío de puerto o túnel retransmite tráfico y no está enumerado en `listen.trusted_proxies`, el gateway ve la dirección del relé, que generalmente es privada, por lo que ni la advertencia en tiempo de ejecución ni una lista de permitidos privada lo detecta.

922 1027 

923Detrás de tal front end, establezca [`listen.trusted_proxies`](#listen) primero para que la puerta de enlace vea direcciones de cliente reales, y mantenga la puerta de enlace y todo lo que está frente a ella inaccesible desde Internet público independientemente.1028Detrás de tal front end, establezca primero [`listen.trusted_proxies`](#listen) para que el gateway vea direcciones de cliente reales, y mantenga el gateway y todo lo que está frente a él inaccesible desde la internet pública independientemente.

924 1029 

925<h2 id="complete-example">1030<h2 id="complete-example">

926 Ejemplo completo1031 Ejemplo completo


973store:1078store:

974 postgres_url: ${GATEWAY_POSTGRES_URL}1079 postgres_url: ${GATEWAY_POSTGRES_URL}

975 # max_connections: 51080 # max_connections: 5

1081 # connect_timeout_seconds: 5

976 1082 

977# Habilita /v1/organizations/spend_limits (refleja la API de administración de Anthropic)1083# Habilita /v1/organizations/spend_limits (refleja la API de administración de Anthropic)

978# y cumplimiento de gasto por desarrollador en /v1/messages. Omita para desactivar.1084# y cumplimiento de gasto por desarrollador en /v1/messages. Omita para desactivar.

Details

126 126 

127Consulte [dónde cada mecanismo almacena la política](/docs/es/managed-settings#where-each-mechanism-stores-the-policy) para las rutas de archivo, y [Configuraciones administradas del lado del cliente](/docs/es/claude-apps-gateway-config#client-side-managed-settings) para el equivalente de `bootstrapUrl` de Claude Desktop.127Consulte [dónde cada mecanismo almacena la política](/docs/es/managed-settings#where-each-mechanism-stores-the-policy) para las rutas de archivo, y [Configuraciones administradas del lado del cliente](/docs/es/claude-apps-gateway-config#client-side-managed-settings) para el equivalente de `bootstrapUrl` de Claude Desktop.

128 128 

129<h3 id="large-rollouts">

130 Implementaciones a gran escala

131</h3>

132 

133El inicio de sesión tiene límite de velocidad por dirección IP del cliente, y los valores predeterminados se adaptan a un equipo pequeño. Cada dirección obtiene 30 inicios de sesión y 10 envíos de código cada 10 minutos. Una implementación para miles de desarrolladores puede alcanzar esos límites en la primera mañana, por una de dos razones:

134 

135* **La puerta de enlace no puede ver más allá de su equilibrador de carga.** Sin [`listen.trusted_proxies`](/docs/es/claude-apps-gateway-config#listen), cada desarrollador parece provenir de la dirección del equilibrador de carga y comparte un límite. Establézcalo antes que nada. La puerta de enlace registra una advertencia la primera vez que ignora un encabezado `X-Forwarded-For`.

136* **Muchos desarrolladores comparten pocas direcciones de salida NAT o VPN.** Comparten los límites de esas direcciones incluso cuando `trusted_proxies` es correcto. Aumente [`rate_limits`](/docs/es/claude-apps-gateway-config#http-tuning) para ajustarse.

137 

138Para dimensionar `max`, divida los desarrolladores por las direcciones de salida que comparten. Estime cuántos de ellos inician sesión dentro de un período `window_seconds`, que es 10 minutos de forma predeterminada. Luego duplíquelo para cubrir reintentos y desarrolladores que inician sesión tanto en Claude Code como en Claude Desktop.

139 

140Por ejemplo, 10.000 desarrolladores detrás de 4 direcciones de salida inician sesión uniformemente durante una hora. Eso es 2.500 desarrolladores por dirección y aproximadamente 420 de ellos en cada 10 minutos, que duplica y redondea hasta 1.000. El ejemplo a continuación establece ambos límites en 1.000:

141 

142```yaml theme={null}

143rate_limits:

144 device_authorization: { max: 1000, window_seconds: 600 }

145 device_verify: { max: 1000, window_seconds: 600 }

146```

147 

148`device_verify` es lo que impide que alguien adivine el código de inicio de sesión de otro desarrollador, así que auméntelo solo en la medida que su estimación necesite. Incluso en estos límites, un código tiene 8 caracteres de un alfabeto de 20 caracteres y expira después de 10 minutos, así que adivinar sigue siendo impracticable; consulte [Resistencia a fuerza bruta de código de usuario](#user-code-brute-force-resistance).

149 

150Cuando su IdP emite tokens de actualización, Claude Code renueva sesiones silenciosamente, así que puede volver a poner el límite después de la implementación. Sin tokens de actualización, los desarrolladores inician sesión nuevamente cada [`session.ttl_hours`](/docs/es/claude-apps-gateway-config#session). Dimensione ambos límites para esa velocidad constante también y déjelos elevados.

151 

152Cuando se alcanza un límite, Claude Code v2.1.274 o posterior muestra `The gateway is limiting sign-in attempts right now`. Una puerta de enlace en v2.1.274 o posterior muestra `Too many attempts came from your network address` en la página de verificación, con la configuración a verificar. También escribe una línea de registro `sign-in refused` que nombra la configuración a cambiar.

153 

129<h2 id="operations">154<h2 id="operations">

130 Operaciones155 Operaciones

131</h2>156</h2>


160 185 

161El documento de descubrimiento de OAuth en `/.well-known/oauth-authorization-server` también devuelve `200` solo después de que se cargue la configuración, descubrimiento OIDC, construcción de cliente ascendente y migración de Postgres tengan éxito, así que funciona como una verificación de arranque de extremo a extremo.186El documento de descubrimiento de OAuth en `/.well-known/oauth-authorization-server` también devuelve `200` solo después de que se cargue la configuración, descubrimiento OIDC, construcción de cliente ascendente y migración de Postgres tengan éxito, así que funciona como una verificación de arranque de extremo a extremo.

162 187 

188<h3 id="concurrent-upstream-requests">

189 Solicitudes ascendentes concurrentes

190</h3>

191 

192De forma predeterminada, cada réplica de puerta de enlace envía como máximo 256 solicitudes ascendentes al mismo tiempo. Una respuesta de transmisión cuenta contra el límite hasta que la transmisión termina.

193 

194Una solicitud que llega mientras una réplica está en el límite espera dentro de la puerta de enlace por un espacio libre. El desarrollador ve una respuesta que es lenta para comenzar o parece colgarse. En una puerta de enlace ascendente `provider: anthropic`, una solicitud que espera más tiempo que [`timeouts.upstream_ttfb_ms`](/docs/es/claude-apps-gateway-config#http-tuning) se rinde en esa puerta de enlace ascendente, y falla con un 502 cuando ninguna puerta de enlace ascendente posterior la sirve.

195 

196La línea de registro de inicio que contiene `upstream requests:` muestra el límite en vigor. Mientras una réplica tiene más solicitudes abiertas que el límite, también registra una advertencia que contiene `client requests are open`, como máximo una vez por minuto.

197 

198Para servir más solicitudes a la vez, tiene dos opciones:

199 

200* Agregue réplicas.

201* Aumente el límite en cada réplica. Establezca la variable de entorno `BUN_CONFIG_MAX_HTTP_REQUESTS` en el contenedor de puerta de enlace en un número entero de 1 a 65535, luego reinicie el contenedor.

202 

203Una réplica llena su límite a una velocidad de solicitud de aproximadamente el límite dividido por el número promedio de segundos que una solicitud permanece abierta. Por ejemplo, si las solicitudes permanecen abiertas durante 10 segundos en promedio, una réplica en el límite predeterminado de 256 lo llena a aproximadamente 26 solicitudes por segundo.

204 

205Si realiza autoescalado en CPU, una réplica en el límite pone en cola solicitudes sin desencadenar un escalado horizontal, así que establezca el objetivo por debajo del nivel de CPU que sus réplicas muestran cuando registran la advertencia `client requests are open`.

206 

207<Warning>

208 Cada solicitud abierta mantiene memoria en el proceso de puerta de enlace mientras transmite y mientras espera un espacio. Si mantiene el límite en 256, la memoria en una réplica sobrecargada aún crece, porque las solicitudes en espera mantienen sus cuerpos de solicitud. Dimensione la memoria del contenedor para el número de solicitudes abiertas en el pico, y observe la memoria cuando cambie el límite. Una réplica que se queda sin memoria es eliminada y suelta cada transmisión que mantiene.

209</Warning>

210 

163<h3 id="outage-behavior">211<h3 id="outage-behavior">

164 Comportamiento de interrupciones212 Comportamiento de interrupciones

165</h3>213</h3>


207 Actualizaciones255 Actualizaciones

208</h3>256</h3>

209 257 

210Las réplicas son sin estado, así que un reinicio rodante es seguro en cualquier momento. La puerta de enlace ejecuta migraciones de esquema al arrancar, lo que significa que implementar el nuevo binario auto-migra la base de datos. Las réplicas concurrentes se serializan en un bloqueo de asesor de Postgres, así que solo una aplica cada migración.258Las réplicas son sin estado, así que un reinicio rodante no pierde ningún estado de puerta de enlace. La puerta de enlace ejecuta migraciones de esquema al arrancar, lo que significa que implementar el nuevo binario auto-migra la base de datos. Las réplicas concurrentes se serializan en un bloqueo de asesor de Postgres, así que solo una aplica cada migración.

259 

260Cuando su orquestador detiene una réplica con `SIGTERM`, como en un reinicio rodante o una reducción de escala, la puerta de enlace deja de aceptar nuevas conexiones y permite que las solicitudes y transmisiones ya en vuelo terminen antes de salir. Espera hasta 25 segundos, llamado la ventana de drenaje, luego cierra lo que aún esté abierto. Un `SIGINT`, como Ctrl+C en una terminal, inicia el mismo drenaje, y una segunda señal durante el drenaje cierra las solicitudes abiertas y sale de inmediato. El drenaje requiere puerta de enlace v2.1.274 o posterior.

261 

262Las generaciones largas pueden transmitir durante minutos. En Kubernetes y Amazon ECS, aumente ambos de estos juntos para dar a esas transmisiones más tiempo:

263 

264* **La ventana de drenaje**: establezca la variable de entorno `CLAUDE_GATEWAY_DRAIN_TIMEOUT_MS` en el contenedor de puerta de enlace en un número entero positivo de milisegundos, como `120000`. La puerta de enlace ignora un valor en cualquier otra forma, como `120s`, y mantiene el predeterminado de 25 segundos

265* **El período de gracia de su orquestador**: `terminationGracePeriodSeconds` en Kubernetes, o `stopTimeout` en Amazon ECS

266 

267El período de gracia predeterminado es de 30 segundos en ambas plataformas. Manténgalo al menos 5 segundos más largo que la ventana de drenaje, o el orquestador matará la puerta de enlace antes de que el drenaje termine. En Kubernetes, agregue también la duración de cualquier gancho `preStop`, porque el período de gracia comienza a contar antes de que el gancho se ejecute en lugar de cuando la puerta de enlace recibe `SIGTERM`.

268 

269Su plataforma también puede limitar cuánto tiempo puede ejecutarse el drenaje:

270 

271* **Amazon ECS en Fargate**: `stopTimeout` permite como máximo 120 segundos

272* **Cloud Run**: detiene una instancia 10 segundos después de `SIGTERM`, así que las transmisiones abiertas obtienen como máximo 10 segundos allí, sea cual sea la ventana de drenaje

273 

274Cuando la ventana de drenaje termina con solicitudes aún abiertas, la puerta de enlace registra una advertencia que contiene `drain window over after`, cuenta las solicitudes que cortó, y nombra ambas configuraciones para aumentar.

211 275 

212Las migraciones son solo anexo, así que revertir a un binario anterior que conoce menos migraciones es seguro; ignora las filas adicionales. La reversión también re-valida el YAML contra el esquema del binario más antiguo, así que una configuración que adoptó una clave introducida por la versión más nueva falla al arrancar en la más antigua. Elimine la nueva clave antes de revertir.276Las migraciones son solo anexo, así que revertir a un binario anterior que conoce menos migraciones es seguro; ignora las filas adicionales. La reversión también re-valida el YAML contra el esquema del binario más antiguo, así que una configuración que adoptó una clave introducida por la versión más nueva falla al arrancar en la más antigua. Elimine la nueva clave antes de revertir.

213 277 


239 303 

240* Los desarrolladores sostienen JWTs de corta duración en lugar de claves ascendentes sin procesar. La pierna CLI-a-puerta de enlace usa la concesión de dispositivo RFC 8628, y el intercambio de código de autorización de la puerta de enlace con el IdP ejecuta PKCE en la configuración predeterminada, así que un código de autorización de IdP interceptado es inútil.304* Los desarrolladores sostienen JWTs de corta duración en lugar de claves ascendentes sin procesar. La pierna CLI-a-puerta de enlace usa la concesión de dispositivo RFC 8628, y el intercambio de código de autorización de la puerta de enlace con el IdP ejecuta PKCE en la configuración predeterminada, así que un código de autorización de IdP interceptado es inútil.

241* La página de verificación de dispositivo impone POST del mismo origen y un límite de velocidad por IP por RFC 8628 §5.1. Consulte [Resistencia de fuerza bruta de código de usuario](#user-code-brute-force-resistance).305* La página de verificación de dispositivo impone POST del mismo origen y un límite de velocidad por IP por RFC 8628 §5.1. Consulte [Resistencia de fuerza bruta de código de usuario](#user-code-brute-force-resistance).

242* Las solicitudes salientes pasan por una protección de falsificación de solicitud del lado del servidor (SSRF) que resuelve DNS, bloquea direcciones de enlace local y metadatos en la nube más loopback de forma predeterminada, y fija la conexión a la IP resuelta, así que URLs influenciadas por el operador como el IdP y destinos OTLP no pueden ser redirigidas a puntos finales de metadatos en la nube. Los rangos privados RFC 1918 se permiten deliberadamente, porque los IdPs y recopiladores OTLP comúnmente viven en IPs privadas. Establezca `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` en el entorno de la puerta de enlace solo cuando algo que la puerta de enlace debe alcanzar legítimamente vive en loopback, como un IdP de desarrollo local o un recopilador OTLP sidecar en `localhost`. La variable relaja el bloque de loopback para cada URL configurada por el operador y también omite la advertencia de tiempo de arranque que verifica si el pod puede alcanzar el punto final de metadatos en la nube, así que prefiera dar al recopilador su propia dirección interna.306* Las solicitudes de la puerta de enlace a su IdP, sus recopiladores OTLP, y ascendentes `provider: anthropic` pasan por una protección de falsificación de solicitud del lado del servidor (SSRF) que resuelve DNS, bloquea direcciones de enlace local y metadatos en la nube más loopback de forma predeterminada, y fija la conexión a la IP resuelta, así que URLs influenciadas por el operador no pueden ser redirigidas a puntos finales de metadatos en la nube. Los rangos privados RFC 1918 se permiten deliberadamente, porque los IdPs y recopiladores OTLP comúnmente viven en IPs privadas. Para los otros proveedores, la puerta de enlace rechaza un `base_url` que nombre una de esas direcciones o un nombre de host de metadatos cuando carga la configuración, y el SDK del proveedor luego se conecta sin la verificación de DNS.

307 

308 Si activa [egreso solo proxy](/docs/es/claude-apps-gateway-config#proxy-only-egress), esa verificación de dirección se mueve a su proxy directo: la puerta de enlace le entrega nombres de host y la lista de permitidos del proxy debe rechazar esos destinos.

309 

310 Establezca `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` en el entorno de la puerta de enlace solo cuando algo que la puerta de enlace debe alcanzar legítimamente vive en loopback, como un IdP de desarrollo local o un recopilador OTLP sidecar en `localhost`. La variable relaja el bloque de loopback para cada URL configurada por el operador y también omite la advertencia de tiempo de arranque que verifica si el pod puede alcanzar el punto final de metadatos en la nube, así que prefiera dar al recopilador su propia dirección interna.

243 311 

244Si agrega sus propios controles de salida, la puerta de enlace debe alcanzar el servidor de metadatos siempre que use credenciales de metadatos de instancia como identidad de carga de trabajo.312Si agrega sus propios controles de salida, la puerta de enlace debe alcanzar el servidor de metadatos siempre que use credenciales de metadatos de instancia como identidad de carga de trabajo.

245 313 


254 322 

255El `user_code` que un desarrollador escribe en la página de verificación `/device` son 8 caracteres extraídos de un alfabeto de 20 caracteres, que produce 20⁸ o aproximadamente 2.56×10¹⁰ combinaciones, y expira después de 10 minutos.323El `user_code` que un desarrollador escribe en la página de verificación `/device` son 8 caracteres extraídos de un alfabeto de 20 caracteres, que produce 20⁸ o aproximadamente 2.56×10¹⁰ combinaciones, y expira después de 10 minutos.

256 324 

257La puerta de enlace aplica límites de velocidad por IP en los puntos finales de concesión de dispositivo, configurables a través de [`rate_limits`](/docs/es/claude-apps-gateway-config#http-tuning). Aumente los límites si muchos desarrolladores inician sesión desde una única dirección NAT corporativa compartida. Los límites se aplican solo al flujo de inicio de sesión, no a la inferencia.325La puerta de enlace aplica límites de velocidad por IP en los puntos finales de concesión de dispositivo, configurables a través de [`rate_limits`](/docs/es/claude-apps-gateway-config#http-tuning). Aumente los límites si muchos desarrolladores inician sesión desde una única dirección NAT corporativa compartida. [Los despliegues grandes](#large-rollouts) muestran cómo dimensionarlos. Los límites se aplican solo al flujo de inicio de sesión, no a la inferencia.

258 326 

259<h3 id="compliance-posture">327<h3 id="compliance-posture">

260 Postura de cumplimiento328 Postura de cumplimiento


284El stderr de la puerta de enlace incluye el flujo de eventos de auditoría, el registro de auditoría registra identidades de desarrolladores, y el archivo de depuración registra la salida de hooks y servidores MCP de la máquina del desarrollador. Revise y redacte estos antes de publicar en un problema público.352El stderr de la puerta de enlace incluye el flujo de eventos de auditoría, el registro de auditoría registra identidades de desarrolladores, y el archivo de depuración registra la salida de hooks y servidores MCP de la máquina del desarrollador. Revise y redacte estos antes de publicar en un problema público.

285 353 

286| Síntoma | Causa | Solución |354| Síntoma | Causa | Solución |

287| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |355| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

288| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en configuraciones administradas en esa máquina | Implemente el [archivo de configuraciones administradas](/docs/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL de la puerta de enlace desde allí |356| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en configuraciones administradas en esa máquina | Implemente el [archivo de configuraciones administradas](/docs/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL de la puerta de enlace desde allí |

289| Las solicitudes de un desarrollador fallan con `Not signed in to the Cloud gateway — run /login.` | La configuración administrada de la máquina establece `forceLoginMethod: "gateway"` o `forceLoginGatewayUrl`, y la sesión no tiene inicio de sesión de puerta de enlace. Un inicio de sesión de claude.ai sobrante no satisface el requisito. | Haga que el desarrollador ejecute `/login` y complete el inicio de sesión de la puerta de enlace. Consulte también [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). |357| Las solicitudes de un desarrollador fallan con `Not signed in to the Cloud gateway — run /login.` | La configuración administrada de la máquina establece `forceLoginMethod: "gateway"` o `forceLoginGatewayUrl`, y la sesión no tiene inicio de sesión de puerta de enlace. Un inicio de sesión de claude.ai sobrante no satisface el requisito. | Haga que el desarrollador ejecute `/login` y complete el inicio de sesión de la puerta de enlace. Consulte también [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). |

290| Claude Desktop reporta que su configuración de arranque no se pudo obtener | `/user/bootstrap` devolvió 404: la política que coincide con el usuario no lleva una clave `desktop`, o ninguna política coincidió. El registro de auditoría de la puerta de enlace registra cada rechazo como `desktop_bootstrap.denied` con la razón. | Agregue un bloque `desktop` a la política que coincide con el usuario, o a la capa base `match: {}`; un `desktop: {}` vacío es suficiente. Consulte [superposición de Claude Desktop](/docs/es/claude-apps-gateway-config#claude-desktop-overlay). |358| Claude Desktop reporta que su configuración de arranque no se pudo obtener | `/user/bootstrap` devolvió 404: la política que coincide con el usuario no lleva una clave `desktop`, o ninguna política coincidió. El registro de auditoría de la puerta de enlace registra cada rechazo como `desktop_bootstrap.denied` con la razón. | Agregue un bloque `desktop` a la política que coincide con el usuario, o a la capa base `match: {}`; un `desktop: {}` vacío es suficiente. Consulte [superposición de Claude Desktop](/docs/es/claude-apps-gateway-config#claude-desktop-overlay). |

291| El inicio muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte de puerta de enlace | Haga que el desarrollador actualice Claude Code a una versión que incluya soporte de puerta de enlace en la nube |359| El inicio muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte de puerta de enlace | Haga que el desarrollador actualice Claude Code a una versión que incluya soporte de puerta de enlace en la nube |

292| El inicio sale con `Administrator policy requires a Cloud gateway sign-in on this machine` | El entorno del desarrollador establece `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN`, sus configuraciones configuran un [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), o una clave API de un inicio de sesión anterior de Claude Console aún está guardada | Haga que el desarrollador borre cada uno que se aplique: desestablezca la variable, elimine la entrada `apiKeyHelper`, o ejecute `claude auth logout` para eliminar la clave guardada. Luego haga que inicie `claude` e inicie sesión con `/login`. Consulte también [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). |360| El inicio sale con `Administrator policy requires a Cloud gateway sign-in on this machine` | El entorno del desarrollador establece `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN`, sus configuraciones configuran un [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), o una clave API de un inicio de sesión anterior de Claude Console aún está guardada | Haga que el desarrollador borre cada uno que se aplique: desestablezca la variable, elimine la entrada `apiKeyHelper`, o ejecute `claude auth logout` para eliminar la clave guardada. Luego haga que inicie `claude` e inicie sesión con `/login`. Consulte también [La política del administrador requiere un inicio de sesión de puerta de enlace en la nube](/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in). |

293| El inicio o `/login` reporta `Claude Code may not be enabled for your organization` después de un 403 en la carga de configuraciones administradas | La puerta de enlace, o algo frente a ella, respondió la solicitud `/managed/settings` con 403. La ruta de configuraciones de la puerta de enlace nunca responde 403. El estado proviene de las verificaciones de IP de [`access_control`](/docs/es/claude-apps-gateway-config#http-tuning) o de un proxy o WAF frente a la puerta de enlace. El registro de auditoría registra una negación de verificación de IP como `access.denied` con la razón. El desarrollador permanece conectado. | Verifique el registro de auditoría para `access.denied` en el momento del fallo y corrija las listas de `access_control` o el front end, luego haga que el desarrollador inicie `claude` de nuevo |361| El inicio o `/login` reporta `Claude Code may not be enabled for your organization` después de un 403 en la carga de configuraciones administradas | La puerta de enlace, o algo frente a ella, respondió la solicitud `/managed/settings` con 403. La ruta de configuraciones de la puerta de enlace nunca responde 403. El estado proviene de las verificaciones de IP de [`access_control`](/docs/es/claude-apps-gateway-config#http-tuning) o de un proxy o WAF frente a la puerta de enlace. El registro de auditoría registra una negación de verificación de IP como `access.denied` con la razón. El desarrollador permanece conectado. | Verifique el registro de auditoría para `access.denied` en el momento del fallo y corrija las listas de `access_control` o el front end, luego haga que el desarrollador inicie `claude` de nuevo |

362| CLI `/login`: `The gateway is limiting sign-in attempts right now`, o `Request failed with status code 429` en versiones anteriores. La página `/device` puede mostrar `Too many attempts` a desarrolladores que no han intentado antes | Se alcanzó el límite de velocidad de inicio de sesión por IP. Ya sea que `listen.trusted_proxies` no cubra el equilibrador de carga, por lo que cada desarrollador comparte su dirección, o muchos desarrolladores comparten una dirección de salida NAT o VPN. Los eventos de auditoría con `result: rate_limited` muestran los mismos uno o pocos valores de `client_ip`. | Establezca `listen.trusted_proxies` a los rangos de origen del equilibrador de carga primero, luego aumente `rate_limits` si los desarrolladores aún comparten direcciones. Consulte [Despliegues a gran escala](#large-rollouts). |

294| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | El nombre de host de la puerta de enlace se resuelve a al menos una dirección IP pública. Claude Code verifica cada dirección resuelta y requiere que cada una sea privada. Una causa común es un nombre de pila dual donde una familia se resuelve a una dirección pública, incluidos los equilibradores de carga de pila dual internos de AWS, que devuelven direcciones AAAA de rango público. | Haga que el nombre de la puerta de enlace se resuelva solo a direcciones privadas en máquinas de desarrolladores. Para un nombre de pila dual, suelte el registro de rango público o sirva un nombre DNS solo interno separado. Consulte el [requisito previo de red privada](/docs/es/claude-apps-gateway#prerequisites). Si la dirección es espacio de dirección pública que su organización posee y usa internamente, [declare ese bloque](/docs/es/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) en su lugar. |363| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | El nombre de host de la puerta de enlace se resuelve a al menos una dirección IP pública. Claude Code verifica cada dirección resuelta y requiere que cada una sea privada. Una causa común es un nombre de pila dual donde una familia se resuelve a una dirección pública, incluidos los equilibradores de carga de pila dual internos de AWS, que devuelven direcciones AAAA de rango público. | Haga que el nombre de la puerta de enlace se resuelva solo a direcciones privadas en máquinas de desarrolladores. Para un nombre de pila dual, suelte el registro de rango público o sirva un nombre DNS solo interno separado. Consulte el [requisito previo de red privada](/docs/es/claude-apps-gateway#prerequisites). Si la dirección es espacio de dirección pública que su organización posee y usa internamente, [declare ese bloque](/docs/es/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) en su lugar. |

295| CLI `/login`: `Gateway login would go through proxy <proxy>, which is not on a private network` | Un `HTTPS_PROXY` o `HTTP_PROXY` se aplica al host de la puerta de enlace y el nombre de host del proxy se resuelve a una dirección pública. Un proxy cuyo host se resuelve solo a direcciones privadas está permitido y no desencadena este error | Agregue el host de la puerta de enlace a `NO_PROXY` en la máquina del desarrollador para que la conexión sea directa, o use un proxy cuyo nombre de host se resuelva a direcciones privadas. El mensaje nombra la entrada exacta de `NO_PROXY` a agregar |364| CLI `/login`: `Gateway login would go through proxy <proxy>, which is not on a private network` | Un `HTTPS_PROXY` o `HTTP_PROXY` se aplica al host de la puerta de enlace y el nombre de host del proxy se resuelve a una dirección pública. Un proxy cuyo host se resuelve solo a direcciones privadas está permitido y no desencadena este error | Agregue el host de la puerta de enlace a `NO_PROXY` en la máquina del desarrollador para que la conexión sea directa, o use un proxy cuyo nombre de host se resuelva a direcciones privadas. El mensaje nombra la entrada exacta de `NO_PROXY` a agregar |

296| CLI `/login`: `Claude Code only signs in to <host> from inside its declared network <block> (managed settings), and this machine is connecting from <ip>, outside it` | La puerta de enlace está en un bloque declarado en [`gatewayInternalNetworks`](/docs/es/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), y la máquina del desarrollador la alcanzó desde una dirección fuera de ese bloque: un grupo de direcciones VPN, un segmento NAT de contenedor o WSL2, o una red que no es la suya | Haga que el desarrollador ejecute `/login` desde el SO del host en su red. Si la dirección mostrada también es espacio de dirección pública de su organización, reemplace la entrada de la puerta de enlace con un bloque que cubra ambas, hasta `/8`; se rechaza una segunda entrada superpuesta |365| CLI `/login`: `Claude Code only signs in to <host> from inside its declared network <block> (managed settings), and this machine is connecting from <ip>, outside it` | La puerta de enlace está en un bloque declarado en [`gatewayInternalNetworks`](/docs/es/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own), y la máquina del desarrollador la alcanzó desde una dirección fuera de ese bloque: un grupo de direcciones VPN, un segmento NAT de contenedor o WSL2, o una red que no es la suya | Haga que el desarrollador ejecute `/login` desde el SO del host en su red. Si la dirección mostrada también es espacio de dirección pública de su organización, reemplace la entrada de la puerta de enlace con un bloque que cubra ambas, hasta `/8`; se rechaza una segunda entrada superpuesta |


301| CLI `/login`: `Could not resolve gateway host <host>` | La máquina no puede resolver el nombre DNS interno de la puerta de enlace, típicamente porque no está en la red corporativa | Haga que el desarrollador se conecte a su red o VPN, luego reintente `/login` |370| CLI `/login`: `Could not resolve gateway host <host>` | La máquina no puede resolver el nombre DNS interno de la puerta de enlace, típicamente porque no está en la red corporativa | Haga que el desarrollador se conecte a su red o VPN, luego reintente `/login` |

302| El arranque sale con un error de validación de configuración nombrando `store.postgres_url` | No hay Postgres configurado; la puerta de enlace requiere Postgres | Establezca `store.postgres_url`. Para desarrollo local, use un contenedor desechable: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |371| El arranque sale con un error de validación de configuración nombrando `store.postgres_url` | No hay Postgres configurado; la puerta de enlace requiere Postgres | Establezca `store.postgres_url`. Para desarrollo local, use un contenedor desechable: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

303| El arranque sale: `requires the native binary` | Ejecutando bajo Node en lugar del binario nativo | Instale Claude Code con uno de los [métodos de instalación independiente](/docs/es/setup) |372| El arranque sale: `requires the native binary` | Ejecutando bajo Node en lugar del binario nativo | Instale Claude Code con uno de los [métodos de instalación independiente](/docs/es/setup) |

304| El arranque sale con un error de descubrimiento OIDC después de `config.load` | `oidc.issuer` no alcanzable, o cadena TLS no confiable | Verifique que el emisor sea alcanzable desde el pod y sirva `/.well-known/openid-configuration`. Establezca `ca_cert_pem` para PKI privada. Si el pod alcanza el IdP solo a través de un proxy directo, establezca [`oidc.use_proxy: true`](/docs/es/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); en versiones anteriores a v2.1.227, proporcione al pod una ruta directa a cada uno de los puntos finales del IdP en su lugar. |373| El arranque sale con un error de descubrimiento OIDC después de `config.load` | `oidc.issuer` no alcanzable, o cadena TLS no confiable | Verifique que el emisor sea alcanzable desde el pod y sirva `/.well-known/openid-configuration`. Establezca `ca_cert_pem` para PKI privada. Si el pod alcanza el IdP solo a través de un proxy directo, establezca [`oidc.use_proxy: true`](/docs/es/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); en versiones anteriores a v2.1.227, proporcione al pod una ruta directa a cada uno de los puntos finales del IdP en su lugar. Si el pod tampoco puede resolver el nombre de host del IdP, o el proxy rechaza `CONNECT` a una dirección IP, consulte [Salida solo por proxy](/docs/es/claude-apps-gateway-config#proxy-only-egress), que requiere v2.1.277 o posterior. |

305| El arranque sale con un error de permiso de Postgres | El rol de base de datos carece de derechos DDL en su esquema | Otorgue al rol `CREATE` en el esquema de la puerta de enlace para que pueda crear y alterar sus tablas en el arranque |374| El arranque sale con un error de permiso de Postgres | El rol de base de datos carece de derechos DDL en su esquema | Otorgue al rol `CREATE` en el esquema de la puerta de enlace para que pueda crear y alterar sus tablas en el arranque |

375| Registro: `could not connect to Postgres at boot, attempt 1 of 3` | La base de datos no era alcanzable cuando la puerta de enlace se inició, por ejemplo en una instancia fría cuya red aún se está iniciando | Si la puerta de enlace luego termina de arrancar, no se requiere acción. Cuando la base de datos no es alcanzable, la puerta de enlace intenta la conexión tres veces, dos segundos aparte, antes de salir. Si sale con `could not connect to Postgres`, verifique `store.postgres_url` y la ruta de red a la base de datos. Si los intentos se agota el tiempo de espera en lugar de ser rechazados, aumente [`store.connect_timeout_seconds`](/docs/es/claude-apps-gateway-config#store) para dar a cada uno más tiempo. |

306| `/oauth/callback` muestra "Sign-in could not be completed" | Dominio de correo electrónico rechazado, validación de id\_token falló, o `email_verified` es explícitamente `false`, que la puerta de enlace siempre rechaza sin anulación | Verifique `allowed_email_domains` y que el IdP devuelva una reclamación `email` verificada. Para `email_verified: false`, corrija la verificación del lado del IdP. Si su IdP emite correo electrónico bajo un nombre de reclamación diferente, establezca `oidc.email_claim`. |376| `/oauth/callback` muestra "Sign-in could not be completed" | Dominio de correo electrónico rechazado, validación de id\_token falló, o `email_verified` es explícitamente `false`, que la puerta de enlace siempre rechaza sin anulación | Verifique `allowed_email_domains` y que el IdP devuelva una reclamación `email` verificada. Para `email_verified: false`, corrija la verificación del lado del IdP. Si su IdP emite correo electrónico bajo un nombre de reclamación diferente, establezca `oidc.email_claim`. |

307| Registro: `token exchange failed request_id=<id>: id_token missing email claim` | El IdP no está incluyendo `email` en el id\_token de forma predeterminada. Este rechazo se dispara solo cuando `allowed_email_domains` está establecido; sin él, un correo electrónico faltante acuña una sesión sin correo electrónico | Configure el IdP para emitir `email` en el id\_token. Okta: agregue `email` a las reclamaciones de token de ID de un servidor de autorización personalizado. Entra: agregue `email` como una reclamación opcional en el registro de aplicación. PingFederate: habilite una Política de OpenID Connect que emita `email`. Si el IdP sirve `email` desde el punto final de userinfo pero no lo incluirá en el id\_token, como el servidor de autorización de la organización de Okta, establezca `oidc.userinfo_fallback: true`. |377| Registro: `token exchange failed request_id=<id>: id_token missing email claim` | El IdP no está incluyendo `email` en el id\_token de forma predeterminada. Este rechazo se dispara solo cuando `allowed_email_domains` está establecido; sin él, un correo electrónico faltante acuña una sesión sin correo electrónico | Configure el IdP para emitir `email` en el id\_token. Okta: agregue `email` a las reclamaciones de token de ID de un servidor de autorización personalizado. Entra: agregue `email` como una reclamación opcional en el registro de aplicación. PingFederate: habilite una Política de OpenID Connect que emita `email`. Si el IdP sirve `email` desde el punto final de userinfo pero no lo incluirá en el id\_token, como el servidor de autorización de la organización de Okta, establezca `oidc.userinfo_fallback: true`. |

308| Registro: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, y los desarrolladores ven `Cloud gateway session expired` cada `session.ttl_hours` | El IdP aceptó el token de actualización pero no devolvió ningún id\_token con él, por lo que la puerta de enlace preguntó al punto final de userinfo del IdP por las reclamaciones del usuario. El IdP rechazó el token de acceso actualizado allí. La puerta de enlace responde `temporarily_unavailable`, por lo que Claude Code mantiene el token de actualización pero no puede renovar la sesión. Las versiones de puerta de enlace anteriores a v2.1.260 registran la misma línea sin el detalle `(at …)`. | Establezca [`oidc.scope_on_refresh: true`](/docs/es/claude-apps-gateway-config#oidc), disponible en la puerta de enlace v2.1.260 o posterior, para que la solicitud de actualización pida `openid` de nuevo. Algunos IdPs, como Okta, devuelven un id\_token en la actualización solo cuando se solicita. En PingFederate, habilite **Return ID Token On Refresh Grant** bajo **Applications > OAuth > OpenID Connect Policy Management** en su lugar. La clave no cambia el comportamiento de PingFederate. Para otros IdPs que aún lo omiten, verifique si el punto final de userinfo acepta tokens de acceso emitidos por una actualización. Como medida temporal, aumente [`session.ttl_hours`](/docs/es/claude-apps-gateway-config#session). Consulte [Configuración del proveedor de identidad](#identity-provider-setup) para el equilibrio de desaprovisionamiento. |378| Registro: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, y los desarrolladores ven `Cloud gateway session expired` cada `session.ttl_hours` | El IdP aceptó el token de actualización pero no devolvió ningún id\_token con él, por lo que la puerta de enlace preguntó al punto final de userinfo del IdP por las reclamaciones del usuario. El IdP rechazó el token de acceso actualizado allí. La puerta de enlace responde `temporarily_unavailable`, por lo que Claude Code mantiene el token de actualización pero no puede renovar la sesión. Las versiones de puerta de enlace anteriores a v2.1.260 registran la misma línea sin el detalle `(at …)`. | Establezca [`oidc.scope_on_refresh: true`](/docs/es/claude-apps-gateway-config#oidc), disponible en la puerta de enlace v2.1.260 o posterior, para que la solicitud de actualización pida `openid` de nuevo. Algunos IdPs, como Okta, devuelven un id\_token en la actualización solo cuando se solicita. En PingFederate, habilite **Return ID Token On Refresh Grant** bajo **Applications > OAuth > OpenID Connect Policy Management** en su lugar. La clave no cambia el comportamiento de PingFederate. Para otros IdPs que aún lo omiten, verifique si el punto final de userinfo acepta tokens de acceso emitidos por una actualización. Como medida temporal, aumente [`session.ttl_hours`](/docs/es/claude-apps-gateway-config#session). Consulte [Configuración del proveedor de identidad](#identity-provider-setup) para el equilibrio de desaprovisionamiento. |

309| Cada solicitud de Amazon Bedrock devuelve 502; el registro muestra `Could not load credentials from any providers` | En EC2, el límite de salto predeterminado de IMDSv2 de 1 bloquea la solicitud de metadatos de instancia desde dentro del contenedor. El arranque y `/readyz` pasan de todas formas porque el SDK de AWS resuelve credenciales de instancia en la primera solicitud, no en la construcción del cliente | Aumente el límite de salto con `aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2`, o establézcalo en la plantilla de lanzamiento. El cambio se aplica a cada contenedor en la instancia. Prefiera roles de tarea de ECS donde estén disponibles, que leen credenciales desde el punto final de credenciales del contenedor de ECS y evitan el cambio por completo, o aplique el cambio en una instancia de puerta de enlace dedicada para limitar la exposición. |379| Cada solicitud de Amazon Bedrock devuelve 502; el registro muestra `Could not load credentials from any providers` | En EC2, el límite de salto predeterminado de IMDSv2 de 1 bloquea la solicitud de metadatos de instancia desde dentro del contenedor. El arranque y `/readyz` pasan de todas formas porque el SDK de AWS resuelve credenciales de instancia en la primera solicitud, no en la construcción del cliente | Aumente el límite de salto con `aws ec2 modify-instance-metadata-options --instance-id <id> --http-put-response-hop-limit 2`, o establézcalo en la plantilla de lanzamiento. El cambio se aplica a cada contenedor en la instancia. Prefiera roles de tarea de ECS donde estén disponibles, que leen credenciales desde el punto final de credenciales del contenedor de ECS y evitan el cambio por completo, o aplique el cambio en una instancia de puerta de enlace dedicada para limitar la exposición. |

380| En carga máxima, las respuestas son lentas para comenzar o parecen colgarse, o fallan con un 502 `all upstreams failed` mientras el ascendente es saludable | Una réplica tiene más solicitudes abiertas que las que envía ascendente a la vez, por lo que las solicitudes adicionales esperan dentro de la puerta de enlace. En un ascendente `provider: anthropic`, una solicitud que espera más tiempo que `timeouts.upstream_ttfb_ms` se rinde en ese ascendente, que produce el 502 cuando ningún ascendente posterior lo sirve. El registro muestra una advertencia que contiene `client requests are open`. | Agregue réplicas, o aumente el límite en cada réplica. Consulte [Solicitudes ascendentes concurrentes](#concurrent-upstream-requests). |

310| Error de IdP: unknown or unsupported scope | El IdP rechaza alcances que no reconoce | Establezca `oidc.scopes` exactamente a la lista que su IdP acepta; debe incluir `openid`. El predeterminado es `openid profile email offline_access`. |381| Error de IdP: unknown or unsupported scope | El IdP rechaza alcances que no reconoce | Establezca `oidc.scopes` exactamente a la lista que su IdP acepta; debe incluir `openid`. El predeterminado es `openid profile email offline_access`. |

311| Las sesiones no se renuevan silenciosamente después de establecer `oidc.scopes` | `offline_access` fue eliminado de la anulación | Agregue `offline_access` de vuelta si su IdP lo admite. Sin un token de actualización, los desarrolladores vuelven a ejecutar el inicio de sesión del navegador cada `session.ttl_hours`. |382| Las sesiones no se renuevan silenciosamente después de establecer `oidc.scopes` | `offline_access` fue eliminado de la anulación | Agregue `offline_access` de vuelta si su IdP lo admite. Sin un token de actualización, los desarrolladores vuelven a ejecutar el inicio de sesión del navegador cada `session.ttl_hours`. |

312| El navegador muestra "This request came from another site and was blocked" | POST de formulario entre sitios, bloqueado como protección CSRF. Esperado para páginas incrustadas o proxied | Abra el enlace de verificación directamente |383| El navegador muestra "This request came from another site and was blocked" | POST de formulario entre sitios, bloqueado como protección CSRF. Esperado para páginas incrustadas o proxied | Abra el enlace de verificación directamente |

Details

504| Las solicitudes de Bedrock devuelven `403 AccessDeniedException` | La cuenta no ha enviado el formulario de caso de uso único de Anthropic, la suscripción automática de AWS Marketplace que comienza en la primera invocación de la cuenta aún no ha terminado, o la política del rol de tarea carece de los ARN de perfil de inferencia o modelo base | Envíe el formulario de caso de uso desde el catálogo de modelos de la consola de Bedrock; si acaba de enviarse o esta es la primera invocación de la cuenta, reintente después de unos minutos. Otorgue `bedrock:InvokeModel` y `bedrock:InvokeModelWithResponseStream` en ambas familias de ARN. |504| Las solicitudes de Bedrock devuelven `403 AccessDeniedException` | La cuenta no ha enviado el formulario de caso de uso único de Anthropic, la suscripción automática de AWS Marketplace que comienza en la primera invocación de la cuenta aún no ha terminado, o la política del rol de tarea carece de los ARN de perfil de inferencia o modelo base | Envíe el formulario de caso de uso desde el catálogo de modelos de la consola de Bedrock; si acaba de enviarse o esta es la primera invocación de la cuenta, reintente después de unos minutos. Otorgue `bedrock:InvokeModel` y `bedrock:InvokeModelWithResponseStream` en ambas familias de ARN. |

505| Bedrock devuelve una `ValidationException` diciendo que el rendimiento bajo demanda no es compatible | Una entrada `models:` personalizada se asigna a un ID de modelo base simple que la región sirve solo a través de perfiles de inferencia | Asigne el modelo a su ID de perfil de inferencia entre regiones (`us.anthropic.*`) en su lugar; el catálogo integrado ya lo hace |505| Bedrock devuelve una `ValidationException` diciendo que el rendimiento bajo demanda no es compatible | Una entrada `models:` personalizada se asigna a un ID de modelo base simple que la región sirve solo a través de perfiles de inferencia | Asigne el modelo a su ID de perfil de inferencia entre regiones (`us.anthropic.*`) en su lugar; el catálogo integrado ya lo hace |

506| La tarea de ECS se detiene con `ResourceInitializationError` antes de que el gateway registre algo | El rol de ejecución no puede leer los secretos de Secrets Manager, o las subredes privadas no tienen ruta a Secrets Manager o ECR | Otorgue `secretsmanager:GetSecretValue` en los ARN de los tres secretos `gateway-` al rol de ejecución, y proporcione salida a través de la puerta de enlace NAT, o, sin una, endpoints de interfaz para Secrets Manager, ECR y CloudWatch Logs, que el controlador `awslogs` necesita en la misma etapa, más un endpoint de puerta de enlace de S3 |506| La tarea de ECS se detiene con `ResourceInitializationError` antes de que el gateway registre algo | El rol de ejecución no puede leer los secretos de Secrets Manager, o las subredes privadas no tienen ruta a Secrets Manager o ECR | Otorgue `secretsmanager:GetSecretValue` en los ARN de los tres secretos `gateway-` al rol de ejecución, y proporcione salida a través de la puerta de enlace NAT, o, sin una, endpoints de interfaz para Secrets Manager, ECR y CloudWatch Logs, que el controlador `awslogs` necesita en la misma etapa, más un endpoint de puerta de enlace de S3 |

507| El arranque del gateway sale con un error de tiempo de espera de conexión de Postgres | El grupo de seguridad de la base de datos no admite el grupo de seguridad del gateway en 5432, o el servicio se ejecuta fuera de la VPC de la base de datos; el almacén deja de esperar después de 5 segundos | Permita 5432 desde el grupo de seguridad del gateway en el de la base de datos, y ejecute el servicio en la misma VPC que el grupo de subredes de la base de datos |507| El arranque del gateway sale con un error de tiempo de espera de conexión de Postgres | El grupo de seguridad de la base de datos no admite el grupo de seguridad del gateway en 5432, o el servicio se ejecuta fuera de la VPC de la base de datos | Permita 5432 desde el grupo de seguridad del gateway en el de la base de datos, y ejecute el servicio en la misma VPC que el grupo de subredes de la base de datos |

508| El arranque del gateway sale con un error de verificación de certificado TLS de Postgres | La cadena de conexión establece `sslmode=verify-full` pero la imagen no confía en el paquete de CA de RDS: el paquete no se copió en la imagen, o `NODE_EXTRA_CA_CERTS` no apunta a él | Agregue las dos líneas de Dockerfile del paso de compilación que copian el paquete y establecen `NODE_EXTRA_CA_CERTS`, luego recompile, inserte bajo una etiqueta nueva e reimplemente |508| El arranque del gateway sale con un error de verificación de certificado TLS de Postgres | La cadena de conexión establece `sslmode=verify-full` pero la imagen no confía en el paquete de CA de RDS: el paquete no se copió en la imagen, o `NODE_EXTRA_CA_CERTS` no apunta a él | Agregue las dos líneas de Dockerfile del paso de compilación que copian el paquete y establecen `NODE_EXTRA_CA_CERTS`, luego recompile, inserte bajo una etiqueta nueva e reimplemente |

509| Las respuestas de streaming se interrumpen a mitad de stream después de un período tranquilo | Un gateway más antiguo que v2.1.229 en un upstream de Bedrock o Claude Platform on AWS no envía nada mientras el upstream está tranquilo, por ejemplo durante pensamiento extendido sin salida transmitida. El ALB cierra una conexión después de 60 segundos sin datos de forma predeterminada, por lo que corta el stream en esa brecha. Los gateways v2.1.229 y posteriores mantienen un stream tranquilo bajo ese tiempo de espera: en esos upstreams el gateway emite un evento SSE `ping` una vez que pasan aproximadamente 15 segundos sin datos de stream, y en un upstream de API de Anthropic retransmite los pings propios de la API | Actualice el gateway a v2.1.229 o posterior, o establezca el atributo `idle_timeout.timeout_seconds` en `3600`, a través de `modify-load-balancer-attributes` o la anotación `load-balancer-attributes` de Ingress en EKS |509| Las respuestas de streaming se interrumpen a mitad de stream después de un período tranquilo | Un gateway más antiguo que v2.1.229 en un upstream de Bedrock o Claude Platform on AWS no envía nada mientras el upstream está tranquilo, por ejemplo durante pensamiento extendido sin salida transmitida. El ALB cierra una conexión después de 60 segundos sin datos de forma predeterminada, por lo que corta el stream en esa brecha. Los gateways v2.1.229 y posteriores mantienen un stream tranquilo bajo ese tiempo de espera: en esos upstreams el gateway emite un evento SSE `ping` una vez que pasan aproximadamente 15 segundos sin datos de stream, y en un upstream de API de Anthropic retransmite los pings propios de la API | Actualice el gateway a v2.1.229 o posterior, o establezca el atributo `idle_timeout.timeout_seconds` en `3600`, a través de `modify-load-balancer-attributes` o la anotación `load-balancer-attributes` de Ingress en EKS |

510 510 

Details

282 282 

283Cada sesión muestra un indicador de diferencia con líneas agregadas y eliminadas, como `+42 -18`. Selecciónelo para abrir la vista de diferencia, dejar comentarios en línea en líneas específicas y enviarlos a Claude con su próximo mensaje.283Cada sesión muestra un indicador de diferencia con líneas agregadas y eliminadas, como `+42 -18`. Selecciónelo para abrir la vista de diferencia, dejar comentarios en línea en líneas específicas y enviarlos a Claude con su próximo mensaje.

284 284 

285La vista de diferencia compara los cambios de la sesión contra su rama base de forma predeterminada. Para comparar contra cualquier otra rama en el repositorio, seleccione **Compare against** y elija una.

286 

285Claude Code calcula estas diferencias, incluidas las diferencias por archivo mostradas mientras Claude edita, a partir del contenido de blob de git sin procesar, por lo que los controladores de diferencia y los filtros `textconv` configurados en el repositorio no se aplican. Para un archivo en un repositorio que no es uno de los propios checkouts de la sesión, como uno clonado dentro del espacio de trabajo durante la sesión, la diferencia por archivo muestra la edición de Claude en sí misma en lugar de una comparación de git.287Claude Code calcula estas diferencias, incluidas las diferencias por archivo mostradas mientras Claude edita, a partir del contenido de blob de git sin procesar, por lo que los controladores de diferencia y los filtros `textconv` configurados en el repositorio no se aplican. Para un archivo en un repositorio que no es uno de los propios checkouts de la sesión, como uno clonado dentro del espacio de trabajo durante la sesión, la diferencia por archivo muestra la edición de Claude en sí misma en lugar de una comparación de git.

286 288 

287Consulte [Revisar e iterar](/docs/es/web-quickstart#review-and-iterate) para el tutorial completo que incluye la creación de PR. Para que Claude monitoree automáticamente el PR para detectar fallos de CI y comentarios de revisión, consulte [Corregir automáticamente solicitudes de extracción](#auto-fix-pull-requests).289Consulte [Revisar e iterar](/docs/es/web-quickstart#review-and-iterate) para el tutorial completo que incluye la creación de PR. Para que Claude monitoree automáticamente el PR para detectar fallos de CI y comentarios de revisión, consulte [Corregir automáticamente solicitudes de extracción](#auto-fix-pull-requests).

Details

164 Archivar un entorno164 Archivar un entorno

165</h3>165</h3>

166 166 

167Para archivar un entorno, ábralo para editar y seleccione **Archivar**. No puede eliminar un entorno, solo archivarlo.167Para archivar uno de sus propios entornos, ábralo para editar y seleccione **Archivar**. Un Propietario archiva un [entorno compartido](#organization-shared-environments) desde la página **Entornos en la nube** en la configuración de administrador. No puede eliminar un entorno, solo archivarlo.

168 168 

169El archivado afecta a las nuevas sesiones, no a las que se están ejecutando:169El archivado afecta a las nuevas sesiones, no a las que se están ejecutando:

170 170 


177 Entornos compartidos de la organización177 Entornos compartidos de la organización

178</h3>178</h3>

179 179 

180En planes Team y Enterprise, un Propietario puede crear entornos en la nube que se comparten con cada miembro de la organización. El mismo rol administra todo lo demás en la página **Entornos en la nube** del administrador, incluyendo [entornos autohospedados](/docs/es/self-hosted-environments); el rol Administrador no puede abrir la página. La lista completa de roles que pueden abrirla es la de [administración de configuración administrada por servidor](/docs/es/server-managed-settings#access-control). Los entornos compartidos aparecen en el selector de entornos de cada miembro junto con los suyos personales, por lo que un equipo puede estandarizar una configuración en lugar de que cada miembro la recree.180En planes Team y Enterprise, un Propietario puede crear entornos en la nube que se comparten con cada miembro de la organización. El mismo rol administra todo lo demás en la página **Entornos en la nube** del administrador, incluyendo [entornos autohospedados](/docs/es/self-hosted-environments); el rol Administrador no puede abrir la página. La lista completa de roles que pueden abrirla es la de [administración de configuración administrada por servidor](/docs/es/server-managed-settings#access-control).

181 181 

182Cree, edite y archive entornos compartidos desde la página **Entornos en la nube** en [configuración de administrador](https://claude.ai/admin-settings). Un entorno compartido también se abre desde el [selector de entornos](#configure-your-environment) en [claude.ai/code](https://claude.ai/code): un Propietario puede editarlo allí. Otros miembros lo ven de solo lectura. Cada entorno compartido tiene un nombre, un [nivel de acceso a la red](#access-levels), [variables de entorno](#set-environment-variables) en formato `.env` y un [script de configuración](#setup-scripts). Los Propietarios eligen el [entorno predeterminado](#the-default-environment) de la organización por separado, en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).182Los entornos compartidos aparecen en el [selector de entornos](#configure-your-environment) de cada miembro bajo un encabezado **Organización**, después de los entornos propios del miembro bajo **Personal**, por lo que un equipo puede estandarizar una configuración en lugar de que cada miembro la recree. Seleccionar el icono de configuración de un entorno compartido allí abre un resumen de solo lectura de su configuración para cada miembro, incluyendo Propietarios.

183 

184Un Propietario pone un entorno a disposición de la organización de una de dos formas:

185 

186* **Crear un entorno compartido**: use la página **Entornos en la nube** en [configuración de administrador](https://claude.ai/admin-settings), que es también donde los Propietarios editan y archivan entornos compartidos. Cada uno tiene un nombre, un [nivel de acceso a la red](#access-levels), [variables de entorno](#set-environment-variables) en formato `.env` y un [script de configuración](#setup-scripts).

187* **Compartir un entorno personal**: abra uno de sus propios entornos para editar en el selector de entornos, luego compártalo desde la fila **Quién puede usarlo**. El entorno mantiene su ID, por lo que las sesiones y routines que ya lo usan no se ven afectadas, y cada miembro puede entonces verlo e iniciar sesiones en él.

188 

189Los Propietarios eligen el [entorno predeterminado](#the-default-environment) de la organización por separado, en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).

183 190 

184Cada sesión de miembro en un entorno compartido lee sus variables, por lo que no incluya secretos en ellas. Las [credenciales de API](#add-api-credentials), que dan a las sesiones una clave que no pueden leer, aún no están disponibles en planes Team o Enterprise.191Cada sesión de miembro en un entorno compartido lee sus variables, por lo que no incluya secretos en ellas. Las [credenciales de API](#add-api-credentials), que dan a las sesiones una clave que no pueden leer, aún no están disponibles en planes Team o Enterprise.

185 192 


198 205 

199Cada entorno establece un nivel de acceso a la red, que controla las conexiones salientes que pueden hacer sus sesiones. El nivel predeterminado, **Trusted**, permite registros de paquetes y otros [dominios en la lista permitida](#default-allowed-domains); **Custom** toma su propia lista de dominios.206Cada entorno establece un nivel de acceso a la red, que controla las conexiones salientes que pueden hacer sus sesiones. El nivel predeterminado, **Trusted**, permite registros de paquetes y otros [dominios en la lista permitida](#default-allowed-domains); **Custom** toma su propia lista de dominios.

200 207 

201Para cambiar el acceso a la red de un entorno, [ábralo para editar](#configure-your-environment) y use el selector **Network access** en el diálogo. El icono de nube que abre el selector aparece en las superficies de la aplicación enumeradas bajo [El entorno Default](#the-default-environment) y en el [editor de routines](/docs/es/routines#environments-and-network-access); los entornos personales no tienen una página separada en la configuración de su cuenta claude.ai.208Para cambiar el acceso a la red de un entorno, [ábralo para editar](#configure-your-environment) y use el selector **Network access** en el diálogo. Un [entorno compartido](#organization-shared-environments) se abre como solo lectura allí, por lo que un Propietario cambia su acceso a la red desde la página **Cloud environments** en [configuración de administrador](https://claude.ai/admin-settings) en su lugar. El icono de nube que abre el selector aparece en las superficies de la aplicación enumeradas bajo [El entorno Default](#the-default-environment) y en el [editor de routines](/docs/es/routines#environments-and-network-access); los entornos personales no tienen una página separada en la configuración de su cuenta claude.ai.

202 209 

203<Note>210<Note>

204 Los conectores MCP que habilita en una sesión o routine funcionan sin agregar sus hosts a **Allowed domains**, porque el tráfico del conector viaja a través de los servidores de Anthropic en lugar de la red de la sesión. Esto se basa en el mismo canal vinculado a Anthropic anotado bajo [Seguridad y aislamiento](/docs/es/claude-code-on-the-web#security-and-isolation). Desactive cualquier conector que no necesite para limitar qué herramientas puede alcanzar Claude.211 Los conectores MCP que habilita en una sesión o routine funcionan sin agregar sus hosts a **Allowed domains**, porque el tráfico del conector viaja a través de los servidores de Anthropic en lugar de la red de la sesión. Esto se basa en el mismo canal vinculado a Anthropic anotado bajo [Seguridad y aislamiento](/docs/es/claude-code-on-the-web#security-and-isolation). Desactive cualquier conector que no necesite para limitar qué herramientas puede alcanzar Claude.

env-vars.md +1 −1

Details

223| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | Cuando `CLAUDE_AUTO_BACKGROUND_TASKS` está habilitado, segundos entre recordatorios a Claude para verificar [subagentes de fondo](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que aún se están ejecutando. Solo acepta un entero simple de `1` a `86400`; cualquier otro valor o deletreo se lee como no establecido. Cuando no se establece, no hay recordatorios de verificación. Requiere Claude Code v2.1.248 o posterior |223| `CLAUDE_CODE_AUTO_BACKGROUND_WORKER_CHECKIN_SECONDS` | Cuando `CLAUDE_AUTO_BACKGROUND_TASKS` está habilitado, segundos entre recordatorios a Claude para verificar [subagentes de fondo](/docs/es/sub-agents#run-subagents-in-foreground-or-background) que aún se están ejecutando. Solo acepta un entero simple de `1` a `86400`; cualquier otro valor o deletreo se lee como no establecido. Cuando no se establece, no hay recordatorios de verificación. Requiere Claude Code v2.1.248 o posterior |

224| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Establezca la [ventana de auto-compactación](/docs/es/model-config#set-the-auto-compact-window) en tokens, de `100000` a `1000000`. Solo acepta un entero simple como `500000`: un valor como `500k` se lee como `500` y se fija al mínimo de 100K. La ventana efectiva también se limita a la ventana de contexto del modelo. Tiene precedencia sobre el comando `/autocompact`, la bandera `--autocompact` y la configuración `autoCompactWindow`. La `used_percentage` de la línea de estado siempre mide contra la ventana de contexto completa del modelo, por lo que una vez que se establece esta variable, ese porcentaje ya no indica cuándo se ejecutará la compactación |224| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Establezca la [ventana de auto-compactación](/docs/es/model-config#set-the-auto-compact-window) en tokens, de `100000` a `1000000`. Solo acepta un entero simple como `500000`: un valor como `500k` se lee como `500` y se fija al mínimo de 100K. La ventana efectiva también se limita a la ventana de contexto del modelo. Tiene precedencia sobre el comando `/autocompact`, la bandera `--autocompact` y la configuración `autoCompactWindow`. La `used_percentage` de la línea de estado siempre mide contra la ventana de contexto completa del modelo, por lo que una vez que se establece esta variable, ese porcentaje ya no indica cuándo se ejecutará la compactación |

225| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Anule la [conexión IDE](/docs/es/vs-code) automática. De forma predeterminada, Claude Code se conecta automáticamente cuando se inicia dentro de un terminal integrado de IDE compatible. Establezca en `false` para evitar esto. Establezca en `true` para forzar un intento de conexión cuando la auto-detección falla, como cuando tmux oscurece la terminal padre. Tiene precedencia sobre la configuración global [`autoConnectIde`](/docs/es/settings-reference#autoconnectide) |225| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Anule la [conexión IDE](/docs/es/vs-code) automática. De forma predeterminada, Claude Code se conecta automáticamente cuando se inicia dentro de un terminal integrado de IDE compatible. Establezca en `false` para evitar esto. Establezca en `true` para forzar un intento de conexión cuando la auto-detección falla, como cuando tmux oscurece la terminal padre. Tiene precedencia sobre la configuración global [`autoConnectIde`](/docs/es/settings-reference#autoconnectide) |

226| `CLAUDE_CODE_AUTO_MODE_SERVER` | En Amazon Bedrock, Google Cloud's Agent Platform, y Microsoft Foundry, establezca en `1` para que el clasificador del lado del servidor de la plataforma revise acciones de [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode); donde la plataforma no ejecuta el clasificador, Claude Code vuelve a sus propias solicitudes de clasificador. Cuando no se establece o es `0`, el clasificador se ejecuta a través de solicitudes que Claude Code mismo envía. No tiene efecto en otros proveedores, incluida la API de Anthropic. Requiere Claude Code v2.1.271 o posterior |226| `CLAUDE_CODE_AUTO_MODE_SERVER` | Controla si Claude Code le pide al servidor que [revise acciones de modo automático](/docs/es/permission-modes#server-side-classifier-review). Cuando no se establece, Claude Code le pide al servidor en Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, y Claude Platform on AWS, y cuando apunta `ANTHROPIC_BASE_URL` a una puerta de enlace LLM o proxy. Establezca en `0` para usar las solicitudes de clasificador propias de Claude Code en su lugar. No se lee en una conexión directa a la API de Anthropic. Requiere Claude Code v2.1.271 o posterior; pedirle al servidor de forma predeterminada requiere v2.1.278 o posterior |

227| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Tiempo en milisegundos que Claude Code espera a que la cadena de proveedores de credenciales predeterminada de AWS produzca credenciales antes de que la solicitud falle con [`AWS default-chain credential resolve timed out`](/docs/es/errors#aws-default-chain-credential-resolve-timed-out) (predeterminado: `60000`). Aumente cuando un paso en su cadena legítimamente necesita más tiempo, como un inicio de sesión SSO basado en navegador con MFA a través de un contenedor como `aws-vault`. Se aplica dondequiera que Claude Code firme con la cadena predeterminada: [Amazon Bedrock](/docs/es/amazon-bedrock#credential-caching-and-resolution-timeout), [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y el [punto de conexión Mantle](/docs/es/amazon-bedrock#use-the-mantle-endpoint). Requiere Claude Code v2.1.207 o posterior |227| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Tiempo en milisegundos que Claude Code espera a que la cadena de proveedores de credenciales predeterminada de AWS produzca credenciales antes de que la solicitud falle con [`AWS default-chain credential resolve timed out`](/docs/es/errors#aws-default-chain-credential-resolve-timed-out) (predeterminado: `60000`). Aumente cuando un paso en su cadena legítimamente necesita más tiempo, como un inicio de sesión SSO basado en navegador con MFA a través de un contenedor como `aws-vault`. Se aplica dondequiera que Claude Code firme con la cadena predeterminada: [Amazon Bedrock](/docs/es/amazon-bedrock#credential-caching-and-resolution-timeout), [Claude Platform on AWS](/docs/es/claude-platform-on-aws), y el [punto de conexión Mantle](/docs/es/amazon-bedrock#use-the-mantle-endpoint). Requiere Claude Code v2.1.207 o posterior |

228| `CLAUDE_CODE_BASH_EDIT_DIFF` | Establezca en `0` para desactivar la [diferencia de los archivos que cambió un comando Bash](/docs/es/hooks#bash), o `1` para registrarlo en cada modo de permiso. Tiene precedencia sobre la configuración [`bashEditDiffEnabled`](/docs/es/settings-reference#basheditdiffenabled). Requiere Claude Code v2.1.269 o posterior |228| `CLAUDE_CODE_BASH_EDIT_DIFF` | Establezca en `0` para desactivar la [diferencia de los archivos que cambió un comando Bash](/docs/es/hooks#bash), o `1` para registrarlo en cada modo de permiso. Tiene precedencia sobre la configuración [`bashEditDiffEnabled`](/docs/es/settings-reference#basheditdiffenabled). Requiere Claude Code v2.1.269 o posterior |

229| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | Establezca en `0` para hacer que una sesión no interactiva informe un estado inactivo a su host en cada final de turno, incluso mientras el trabajo de fondo aún se está ejecutando. De forma predeterminada, la sesión continúa informando un estado de ejecución después del final del turno mientras el trabajo de fondo como un agente de fondo o una ejecución de [flujo de trabajo](/docs/es/workflows) aún está activo. Esto mantiene un host que observa el estado, como una lista de sesión remota, de anunciar que Claude está esperando su entrada a mitad del trabajo. Los comandos de shell de fondo, como un servidor de desarrollo, no mantienen el estado de ejecución. El predeterminado de estado de ejecución y el opt-out de `0` requieren Claude Code v2.1.269 o posterior; en versiones anteriores, establezca `1` para mantener el estado de ejecución |229| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | Establezca en `0` para hacer que una sesión no interactiva informe un estado inactivo a su host en cada final de turno, incluso mientras el trabajo de fondo aún se está ejecutando. De forma predeterminada, la sesión continúa informando un estado de ejecución después del final del turno mientras el trabajo de fondo como un agente de fondo o una ejecución de [flujo de trabajo](/docs/es/workflows) aún está activo. Esto mantiene un host que observa el estado, como una lista de sesión remota, de anunciar que Claude está esperando su entrada a mitad del trabajo. Los comandos de shell de fondo, como un servidor de desarrollo, no mantienen el estado de ejecución. El predeterminado de estado de ejecución y el opt-out de `0` requieren Claude Code v2.1.269 o posterior; en versiones anteriores, establezca `1` para mantener el estado de ejecución |

errors.md +2 −0

Details

1740 1740 

1741**Qué hacer:**1741**Qué hacer:**

1742 1742 

1743Estos pasos cambian uno de sus propios entornos. Un [entorno compartido por la organización](/docs/es/cloud-environments#organization-shared-environments) se abre como solo lectura en el selector, así que pida a un Propietario que cambie su acceso de red desde la página **Cloud environments** en [configuración de administración](https://claude.ai/admin-settings).

1744 

1743* Abra la rutina para editar, o inicie una sesión en la nube. Seleccione el icono de nube que muestra el nombre de su entorno, como **Default**, para abrir el selector. Pase el cursor sobre su entorno y haga clic en el icono de configuración.1745* Abra la rutina para editar, o inicie una sesión en la nube. Seleccione el icono de nube que muestra el nombre de su entorno, como **Default**, para abrir el selector. Pase el cursor sobre su entorno y haga clic en el icono de configuración.

1744* En el diálogo **Update cloud environment**, cambie **Network access** de **Trusted** a **Custom**, luego agregue el dominio bloqueado a **Allowed domains**. Ingrese un dominio por línea. Marque **Also include default list of common package managers** para mantener la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con sus dominios personalizados. Seleccione **Full** en su lugar si desea acceso sin restricciones.1746* En el diálogo **Update cloud environment**, cambie **Network access** de **Trusted** a **Custom**, luego agregue el dominio bloqueado a **Allowed domains**. Ingrese un dominio por línea. Marque **Also include default list of common package managers** para mantener la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) junto con sus dominios personalizados. Seleccione **Full** en su lugar si desea acceso sin restricciones.

1745* Haga clic en **Save changes**. La siguiente ejecución usa la lista de permitidos actualizada.1747* Haga clic en **Save changes**. La siguiente ejecución usa la lista de permitidos actualizada.

Details

328 328 

329En v2.1.158 a v2.1.206, el modo automático estaba desactivado en estos proveedores hasta que establecía `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, y Claude Code ignoraba `defaultMode: "auto"` en estos proveedores a menos que la variable también estuviera establecida. La variable aún se acepta por compatibilidad y no tiene efecto desde v2.1.207 en adelante.329En v2.1.158 a v2.1.206, el modo automático estaba desactivado en estos proveedores hasta que establecía `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, y Claude Code ignoraba `defaultMode: "auto"` en estos proveedores a menos que la variable también estuviera establecida. La variable aún se acepta por compatibilidad y no tiene efecto desde v2.1.207 en adelante.

330 330 

331<h4 id="server-side-classifier-review">331<h3 id="server-side-classifier-review">

332 Revisión del clasificador del lado del servidor332 Revisión del clasificador del lado del servidor

333</h4>333</h3>

334 

335En planes Enterprise y cuentas que usan la API de Claude, en [Claude Platform en AWS](/docs/es/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, y siempre que apunte `ANTHROPIC_BASE_URL` a una [puerta de enlace LLM o proxy](/docs/es/llm-gateway), Claude Code en modo automático solicita al servidor que revise [las acciones que van al clasificador](#how-the-classifier-evaluates-actions) como parte de las solicitudes del modelo de la sesión. Donde el servidor las revisa, sus veredictos deciden esas acciones. Donde no lo hace, típicamente porque una puerta de enlace LLM o proxy interfiere con el tráfico, o porque la plataforma, región o credencial aún no tiene verificaciones del lado del servidor, Claude Code retrocede a sus propias solicitudes del clasificador, y una vez que ese retroceso se mantiene para el resto de la sesión muestra un [aviso sobre cargos de solicitud del clasificador](/docs/es/auto-mode-classifier-billing) en cuentas donde esas solicitudes se facturan. Para omitir preguntar al servidor y siempre usar las propias solicitudes del clasificador de Claude Code, establezca [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/es/env-vars). La variable no se lee en una conexión directa a la API de Anthropic. Si establece `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` y deja `CLAUDE_CODE_AUTO_MODE_SERVER` sin establecer, Claude Code también deja de preguntar al servidor.

334 336 

335En Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, Claude Code revisa las acciones del modo automático con sus propias solicitudes del clasificador de forma predeterminada. Para que el clasificador del lado del servidor de la plataforma revise [las acciones que van al clasificador](#how-the-classifier-evaluates-actions) como parte de las solicitudes del modelo de la sesión en su lugar, establezca [`CLAUDE_CODE_AUTO_MODE_SERVER=1`](/docs/es/env-vars). Donde la plataforma ejecuta el clasificador, sus veredictos deciden esas acciones; donde no lo hace, Claude Code retrocede a sus propias solicitudes del clasificador. En v2.1.271 y v2.1.272, preguntar a la plataforma era el valor predeterminado en estos proveedores.337Preguntar al servidor de forma predeterminada requiere Claude Code v2.1.278 o posterior.

336 338 

337<h3 id="what-the-classifier-blocks-by-default">339<h3 id="what-the-classifier-blocks-by-default">

338 Qué bloquea el clasificador de forma predeterminada340 Qué bloquea el clasificador de forma predeterminada


350* Modificación de infraestructura compartida352* Modificación de infraestructura compartida

351* Destrucción irreversible de archivos que existían antes de la sesión353* Destrucción irreversible de archivos que existían antes de la sesión

352* Inserción forzada354* Inserción forzada

353* Confirmar o insertar un cambio que enviaría secretos o datos sensibles fuera del repositorio cuando se ejecuta, o ampliar lo que expone una implementación. Esto cubre un flujo de trabajo de CI o configuración de implementación que entrega un secreto a un destino que no lo recibe ya, un script o paso de configuración que lee un almacén de secretos y envía los datos, y un cambio de configuración que amplía lo que publica una implementación, como un registro, visibilidad, artefacto o configuración de sourcemap. La verificación se aplica en cualquier rama, se aplica incluso cuando el repositorio es público y se activa cuando el cambio llega, independientemente de si esa llegada desencadena la canalización; limpiarla requiere nombrar el efecto de ejecución, no solo la confirmación o inserción. Antes de v2.1.211, esta verificación se limitaba a la rama predeterminada: una inserción allí se bloqueaba cuando llevaba contenido sensible, cambios ocultos o mal descritos en relación con lo que pidió, contenido portado desde fuera del repositorio o enrutado alrededor de una revisión que pidió355* Confirmar o insertar un cambio que enviaría secretos o datos sensibles fuera del repositorio cuando se ejecuta, o ampliar lo que expone una implementación. Esto cubre un flujo de trabajo de CI o configuración de implementación que entrega un secreto a un destino que no lo recibe ya, un script o paso de configuración que lee un almacén de secretos y envía los datos, y un cambio de configuración que amplía lo que publica una implementación, como un registro, visibilidad, artefacto o configuración de sourcemap. La verificación se aplica en cualquier rama, se aplica incluso cuando el repositorio es público y se activa cuando el cambio se confirma o inserta, independientemente de si esa confirmación o inserción desencadena la canalización; limpiarla requiere nombrar el efecto de ejecución, no solo la confirmación o inserción. Antes de v2.1.211, esta verificación se limitaba a la rama predeterminada: una inserción allí se bloqueaba cuando llevaba contenido sensible, cambios ocultos o mal descritos en relación con lo que pidió, contenido portado desde fuera del repositorio o enrutado alrededor de una revisión que pidió

354* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` o `git stash clear`, que el clasificador presume descartaría cambios sin confirmar356* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` o `git stash clear`, que el clasificador presume descartaría cambios sin confirmar

355* `git commit --amend` cuando la confirmación en HEAD no fue creada en esta sesión357* `git commit --amend` cuando la confirmación en HEAD no fue creada en esta sesión

356* Desde v2.1.198, `git commit --amend` cuando la confirmación en HEAD ya ha sido insertada. Una reescritura solo de mensaje no se bloquea: `--amend -m` sin nada recién preparado, en una confirmación que Claude creó durante esta sesión358* Desde v2.1.198, `git commit --amend` cuando la confirmación en HEAD ya ha sido insertada. Una reescritura solo de mensaje no se bloquea: `--amend -m` sin nada recién preparado, en una confirmación que Claude creó durante esta sesión


427* Envío de datos a los dominios, cubos y servicios de confianza que lista en [`environment`](/docs/es/auto-mode-config#define-trusted-infrastructure). Esto cubre solo el flujo de datos, no operaciones destructivas o de credencial en la misma infraestructura429* Envío de datos a los dominios, cubos y servicios de confianza que lista en [`environment`](/docs/es/auto-mode-config#define-trusted-infrastructure). Esto cubre solo el flujo de datos, no operaciones destructivas o de credencial en la misma infraestructura

428* [Claude en Chrome](/docs/es/chrome) navegación a un dominio interno de confianza, localhost o una URL que nombró430* [Claude en Chrome](/docs/es/chrome) navegación a un dominio interno de confianza, localhost o una URL que nombró

429 431 

430Las solicitudes de acceso a la red de sandbox se enrutan a través del clasificador en lugar de permitirse de forma predeterminada. Claude nombra los hosts que un comando necesita en el comando mismo, el clasificador los revisa con el comando, y una lista aprobada abre esos hosts solo para ese comando. [Dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) cubre qué puede y qué no puede abrir una lista y qué sucede cuando un comando llega a un host no listado.432Los comandos en sandbox no obtienen acceso a la red de forma predeterminada. Claude nombra los hosts que un comando necesita en el comando mismo, el clasificador los revisa con el comando, y una lista aprobada abre esos hosts solo para ese comando. [Dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) cubre qué puede y qué no puede abrir una lista y qué sucede cuando un comando llega a un host no listado.

431 433 

432Ejecute `claude auto-mode defaults` para imprimir las listas de reglas completas como JSON. Si las acciones rutinarias se bloquean, un administrador puede agregar repositorios, cubos y servicios de confianza a través de la configuración `autoMode.environment`: consulte [Configurar modo automático](/docs/es/auto-mode-config).434Ejecute `claude auto-mode defaults` para imprimir las listas de reglas completas como JSON. Si las acciones rutinarias se bloquean, un administrador puede agregar repositorios, cubos y servicios de confianza a través de la configuración `autoMode.environment`: consulte [Configurar modo automático](/docs/es/auto-mode-config).

433 435 


515 517 

516 La primera solicitud de modo automático de la sesión valida el valor predeterminado de Sonnet 5: si la solicitud tiene éxito, Sonnet 5 permanece como el modelo clasificador de la sesión, y si falla porque el modelo no está disponible, la sesión usa el respaldo en su lugar. Después de que esa validación se resuelve, el modelo del clasificador no cambia para la sesión.518 La primera solicitud de modo automático de la sesión valida el valor predeterminado de Sonnet 5: si la solicitud tiene éxito, Sonnet 5 permanece como el modelo clasificador de la sesión, y si falla porque el modelo no está disponible, la sesión usa el respaldo en su lugar. Después de que esa validación se resuelve, el modelo del clasificador no cambia para la sesión.

517 519 

518 En planes Enterprise y en cuentas que usan la API de Claude, [Claude Platform en AWS](/docs/es/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry, las llamadas del clasificador cuentan hacia su uso de tokens. Cada verificación envía una porción de la transcripción más la acción pendiente, agregando un viaje de ida y vuelta antes de la ejecución. Las lecturas y ediciones de directorio de trabajo fuera de rutas protegidas omiten el clasificador, por lo que la sobrecarga proviene principalmente de comandos de shell y operaciones de red. En Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, puede mover la revisión a las solicitudes del modelo de la sesión en su lugar; consulte [Revisión del clasificador del lado del servidor](#server-side-classifier-review).520 En planes Enterprise y en cuentas que usan la API de Claude, [Claude Platform en AWS](/docs/es/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry, las llamadas del clasificador cuentan hacia su uso de tokens. Cada verificación envía una porción de la transcripción más la acción pendiente, agregando un viaje de ida y vuelta antes de la ejecución. Las lecturas y ediciones de directorio de trabajo fuera de rutas protegidas omiten el clasificador, por lo que la sobrecarga proviene principalmente de comandos de shell y operaciones de red. Donde el servidor revisa las acciones como parte de las solicitudes del modelo de la sesión, no hay solicitudes del clasificador separadas para contar; consulte [Revisión del clasificador del lado del servidor](#server-side-classifier-review).

519 521 

520 El acceso a la red de sandbox no agrega solicitudes del clasificador por conexión. El clasificador juzga [los hosts que un comando nombra](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) junto con el comando en una revisión, y Claude Code verifica cada conexión contra la lista aprobada sin llamar al clasificador nuevamente.522 El acceso a la red de sandbox no agrega solicitudes del clasificador por conexión. El clasificador juzga [los hosts que un comando nombra](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) junto con el comando en una revisión, y Claude Code verifica cada conexión contra la lista aprobada sin llamar al clasificador nuevamente.

521 </Accordion>523 </Accordion>

routines.md +18 −3

Details

52 52 

53El formulario de creación configura el prompt de la rutina, repositorios, entorno, conectores y disparadores.53El formulario de creación configura el prompt de la rutina, repositorios, entorno, conectores y disparadores.

54 54 

55Las rutinas se ejecutan de forma autónoma como sesiones completas de Claude Code en la nube: no hay selector de modo de permiso y no hay mensajes de aprobación durante una ejecución. La sesión puede ejecutar comandos de shell, usar [skills](/docs/es/skills) comprometidas con el repositorio clonado y llamar a cualquier conector que incluya. Lo que una rutina puede alcanzar está determinado por los repositorios que seleccione, el [acceso a la red del entorno](/docs/es/cloud-environments) y variables, y los conectores que incluya. Delimite cada uno de esos a lo que la rutina realmente necesita.55Las rutinas se ejecutan de forma autónoma como sesiones completas de Claude Code en la nube: no hay selector de modo de permiso, y la sesión ejecuta comandos de shell, usa [skills](/docs/es/skills) comprometidas con el repositorio clonado y llama a cualquier conector que incluya, todo sin detenerse para obtener aprobación aparte de algunas acciones de [artefactos](/docs/es/artifacts).

56 

57Lo que una rutina puede alcanzar está determinado por los repositorios que seleccione, el [acceso a la red del entorno](/docs/es/cloud-environments) y variables, y los conectores que incluya. Delimite cada uno de esos a lo que la rutina realmente necesita.

58 

59Cuando el cronograma de la rutina o **Run now** inicia una ejecución, Claude republica un artefacto existente sin preguntar solo cuando se cumplen todas estas condiciones:

60 

61* Puede editar el artefacto y pertenece a su propia organización

62* El artefacto no se comparte públicamente, y no se comparte con personas específicas u su organización con la última versión elegida como la versión que ven los espectadores

63* La publicación lleva solo la página, sin archivos de apoyo ni nada más agregado, y no fuerza una versión más nueva

64* La página no contiene una concesión que vaya más allá de la página, como [llamadas de conectores](/docs/es/artifacts#pull-live-data-with-mcp-connectors)

65 

66En todos los demás casos, incluida la publicación de un nuevo artefacto, Claude pregunta primero. Cuando el trabajo de una rutina es mantener una página actual, déle un artefacto que ya haya publicado.

56 67 

57Las rutinas pertenecen a su cuenta individual de claude.ai. No se comparten con compañeros de equipo y cuentan contra la asignación diaria de ejecuciones de su cuenta. Cualquier cosa que una rutina haga a través de su identidad de GitHub conectada o conectores aparece como usted: los commits y las solicitudes de extracción llevan su usuario de GitHub, y los mensajes de Slack, tickets de Linear u otras acciones de conectores utilizan sus cuentas vinculadas para esos servicios.68Las rutinas pertenecen a su cuenta individual de claude.ai. No se comparten con compañeros de equipo y cuentan contra la asignación diaria de ejecuciones de su cuenta. Cualquier cosa que una rutina haga a través de su identidad de GitHub conectada o conectores aparece como usted: los commits y las solicitudes de extracción llevan su usuario de GitHub, y los mensajes de Slack, tickets de Linear u otras acciones de conectores utilizan sus cuentas vinculadas para esos servicios.

58 69 


349 360 

350Las rutinas necesitan acceso a GitHub para clonar repositorios. Cuando crea una rutina desde la CLI con `/schedule`, Claude verifica si su cuenta tiene acceso a GitHub para el repositorio desde el que la ejecutó y, si no es así, agrega una nota de configuración indicando cómo otorgarlo. Consulte [Opciones de autenticación de GitHub](/docs/es/claude-code-on-the-web#github-authentication-options) para las dos formas de otorgar acceso.361Las rutinas necesitan acceso a GitHub para clonar repositorios. Cuando crea una rutina desde la CLI con `/schedule`, Claude verifica si su cuenta tiene acceso a GitHub para el repositorio desde el que la ejecutó y, si no es así, agrega una nota de configuración indicando cómo otorgarlo. Consulte [Opciones de autenticación de GitHub](/docs/es/claude-code-on-the-web#github-authentication-options) para las dos formas de otorgar acceso.

351 362 

363Si su conexión a GitHub falta o ha expirado cuando una ejecución está programada, la rutina omite ejecuciones hasta que se reconecte, hasta 72 horas. Reconecte GitHub dentro de esa ventana y la rutina se reanuda automáticamente. Después de 72 horas sin una conexión, la rutina se desactiva y usted la vuelve a activar después de reconectar GitHub.

364 

352Cada repositorio que agregue se clona en cada ejecución. Claude comienza desde la rama predeterminada del repositorio a menos que su prompt especifique lo contrario.365Cada repositorio que agregue se clona en cada ejecución. Claude comienza desde la rama predeterminada del repositorio a menos que su prompt especifique lo contrario.

353 366 

354Claude inserta su trabajo en ramas con prefijo `claude/`, que siempre se aceptan. Cuando su prompt dirige a Claude a insertar en otra rama, Claude Code verifica la inserción primero y la rechaza si alguno de los siguientes es verdadero:367Claude inserta su trabajo en ramas con prefijo `claude/`, que siempre se aceptan. Cuando su prompt dirige a Claude a insertar en otra rama, Claude Code verifica la inserción primero y la rechaza si alguno de los siguientes es verdadero:


377 390 

378El entorno **Default** utiliza acceso a la red **Trusted**, que permite solo la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) a través de la red de la sesión. Las solicitudes en esa ruta a hosts fuera de la lista de permitidos fallan con `403` y `x-deny-reason: host_not_allowed`. El tráfico del conector MCP se enruta a través de los servidores de Anthropic en lugar de esa ruta, por lo que los conectores que agregue a la rutina funcionan sin agregar sus hosts a **Allowed domains**. Elimine cualquier conector que no necesite en [Conectores](#connectors).391El entorno **Default** utiliza acceso a la red **Trusted**, que permite solo la [lista de permitidos predeterminada](/docs/es/cloud-environments#default-allowed-domains) a través de la red de la sesión. Las solicitudes en esa ruta a hosts fuera de la lista de permitidos fallan con `403` y `x-deny-reason: host_not_allowed`. El tráfico del conector MCP se enruta a través de los servidores de Anthropic en lugar de esa ruta, por lo que los conectores que agregue a la rutina funcionan sin agregar sus hosts a **Allowed domains**. Elimine cualquier conector que no necesite en [Conectores](#connectors).

379 392 

380Para permitir dominios adicionales:393Para permitir dominios adicionales en uno de sus propios entornos, siga estos pasos. Un [entorno compartido por la organización](/docs/es/cloud-environments#organization-shared-environments) se abre como solo lectura aquí, por lo que un Propietario cambia su acceso a la red desde la página **Cloud environments** en [configuración de administración](https://claude.ai/admin-settings) en su lugar.

381 394 

382<Steps>395<Steps>

383 <Step title="Abra la rutina para editar">396 <Step title="Abra la rutina para editar">


413 426 

414Las ejecuciones únicas no cuentan contra el límite diario de rutina. Reducen su uso de suscripción regular como cualquier otra sesión.427Las ejecuciones únicas no cuentan contra el límite diario de rutina. Reducen su uso de suscripción regular como cualquier otra sesión.

415 428 

429Mientras su suscripción está pausada, sus rutinas se ponen en espera y no se ejecutan. Una vez que su suscripción esté activa nuevamente, actívelas de nuevo.

430 

416<h2 id="troubleshooting">431<h2 id="troubleshooting">

417 Solución de problemas432 Solución de problemas

418</h2>433</h2>


427 442 

428* Está autenticado con una clave de API de Console, un [perfil de Anthropic o credencial de federación](/docs/es/authentication#anthropic-profiles-and-federation-credentials), o un proveedor de nube como Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry. `/schedule` requiere un inicio de sesión de suscripción de claude.ai. Con una clave de API de Console o un perfil, y con la obtención de indicadores de características habilitada, enviar `/schedule` muestra en su lugar `/schedule is available with Claude for Enterprise — ask your admin about migrating from API-key access`. Con un inicio de sesión de proveedor de nube, aún ve `Unknown command: /schedule`. Si `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN` está configurado en su shell, o `apiKeyHelper` está configurado en `settings.json`, elimínelo primero, ya que estos tienen prioridad sobre un inicio de sesión de claude.ai. Un perfil o credencial de federación también tiene prioridad, así que desactívelo también443* Está autenticado con una clave de API de Console, un [perfil de Anthropic o credencial de federación](/docs/es/authentication#anthropic-profiles-and-federation-credentials), o un proveedor de nube como Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry. `/schedule` requiere un inicio de sesión de suscripción de claude.ai. Con una clave de API de Console o un perfil, y con la obtención de indicadores de características habilitada, enviar `/schedule` muestra en su lugar `/schedule is available with Claude for Enterprise — ask your admin about migrating from API-key access`. Con un inicio de sesión de proveedor de nube, aún ve `Unknown command: /schedule`. Si `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN` está configurado en su shell, o `apiKeyHelper` está configurado en `settings.json`, elimínelo primero, ya que estos tienen prioridad sobre un inicio de sesión de claude.ai. Un perfil o credencial de federación también tiene prioridad, así que desactívelo también

429* Está completamente desconectado, sin clave de API ni otra credencial. Con la obtención de indicadores de características habilitada, enviar `/schedule` muestra `/schedule requires a claude.ai subscription. Run /login to sign in with your claude.ai account.` Antes de v2.1.268, una sesión desconectada mostraba el mismo mensaje de Claude for Enterprise que una clave de API de Console444* Está completamente desconectado, sin clave de API ni otra credencial. Con la obtención de indicadores de características habilitada, enviar `/schedule` muestra `/schedule requires a claude.ai subscription. Run /login to sign in with your claude.ai account.` Antes de v2.1.268, una sesión desconectada mostraba el mismo mensaje de Claude for Enterprise que una clave de API de Console

430* Se encuentra dentro de una sesión de Claude Code en la web. Administre rutinas desde la [interfaz web](https://claude.ai/code/routines) en su lugar445* Se encuentra dentro de una sesión de nube, donde enviar `/schedule` responde que el comando no está disponible en ese entorno. Administre rutinas desde la [interfaz web](https://claude.ai/code/routines) en su lugar

431* La política de su organización desactiva [Claude Code en la web](/docs/es/claude-code-on-the-web), en la que se ejecutan las rutinas. En este caso, enviar `/schedule` responde [`Cloud sessions are disabled by your organization's policy`](/docs/es/errors#cloud-sessions-are-disabled-by-your-organizations-policy) en su lugar. Antes de v2.1.268, devolvía `Unknown command: /schedule`446* La política de su organización desactiva [Claude Code en la web](/docs/es/claude-code-on-the-web), en la que se ejecutan las rutinas. En este caso, enviar `/schedule` responde [`Cloud sessions are disabled by your organization's policy`](/docs/es/errors#cloud-sessions-are-disabled-by-your-organizations-policy) en su lugar. Antes de v2.1.268, devolvía `Unknown command: /schedule`

432* Un propietario [desactivó las rutinas](#routines-are-disabled-by-your-organizations-policy) para su organización de Team o Enterprise. Antes de v2.1.227, el comando aún aparecía en este caso, y claude.ai rechazaba la rutina cuando Claude intentaba crearla o ejecutarla447* Un propietario [desactivó las rutinas](#routines-are-disabled-by-your-organizations-policy) para su organización de Team o Enterprise. Antes de v2.1.227, el comando aún aparecía en este caso, y claude.ai rechazaba la rutina cuando Claude intentaba crearla o ejecutarla

433 448 

Details

168* El runner establece `GCM_INTERACTIVE=never`, por lo que Git Credential Manager no abre un diálogo de inicio de sesión.168* El runner establece `GCM_INTERACTIVE=never`, por lo que Git Credential Manager no abre un diálogo de inicio de sesión.

169* El runner borra `core.askPass`, así que si usa un ayudante askpass, establézcalo a través de la variable de entorno `GIT_ASKPASS` en su lugar.169* El runner borra `core.askPass`, así que si usa un ayudante askpass, establézcalo a través de la variable de entorno `GIT_ASKPASS` en su lugar.

170 170 

171Si su host de git rechaza la credencial, o no configuró una, el runner reintenta algunas veces y luego falla la preparación del repositorio. El runner no pasa estas configuraciones al entorno de la sesión.171Si su host de git rechaza la credencial, o no configuró una, el runner reintenta algunas veces y luego falla la preparación del repositorio cuando el repositorio es el que la sesión empuja resultados a. Para un repositorio que la sesión solo lee, [Troubleshooting](#troubleshooting) cubre cuándo el runner lo omite en su lugar. El runner no pasa estas configuraciones al entorno de la sesión.

172 172 

173Si los directorios de checkout son propiedad de un uid diferente al del proceso del runner, git se niega a operar en ellos; agregue `safe.directory`:173Si los directorios de checkout son propiedad de un uid diferente al del proceso del runner, git se niega a operar en ellos; agregue `safe.directory`:

174 174 


531* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner redacta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.531* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner redacta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.

532* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola, la mayoría de las veces porque algo entre el runner y `api.anthropic.com`, como un proxy interceptor o un portal cautivo, respondió con su propia página. El runner rechaza la respuesta, la cuenta bajo el tipo `transport` de la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta en el cronograma de sondeo fallido descrito en [Session lifecycle](/docs/es/self-hosted-environments#session-lifecycle). El runner continúa sirviendo sus sesiones activas. Configure el proxy para pasar las respuestas de `api.anthropic.com` sin alterar. Antes de v2.1.246, el runner leía tal respuesta como una cola de trabajo vacía, lo que podría terminar sus sesiones activas o hacer que se cierre.532* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola, la mayoría de las veces porque algo entre el runner y `api.anthropic.com`, como un proxy interceptor o un portal cautivo, respondió con su propia página. El runner rechaza la respuesta, la cuenta bajo el tipo `transport` de la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta en el cronograma de sondeo fallido descrito en [Session lifecycle](/docs/es/self-hosted-environments#session-lifecycle). El runner continúa sirviendo sus sesiones activas. Configure el proxy para pasar las respuestas de `api.anthropic.com` sin alterar. Antes de v2.1.246, el runner leía tal respuesta como una cola de trabajo vacía, lo que podría terminar sus sesiones activas o hacer que se cierre.

533* **La rama de una sesión ya no existe en el remoto**: para una fuente de git que la sesión solo lee, el runner omite esa fuente y continúa con las restantes. Para la fuente a la que la sesión envía resultados, una rama eliminada, típicamente porque fue fusionada y auto-eliminada, falla la sesión con un error que nombra el repositorio y la rama y le pide que restaure la rama y reintente. El runner falla la sesión con el mismo error cuando omitir dejaría sin repositorio en absoluto. Antes de v2.1.228, tal sesión comenzaba en un directorio vacío.533* **La rama de una sesión ya no existe en el remoto**: para una fuente de git que la sesión solo lee, el runner omite esa fuente y continúa con las restantes. Para la fuente a la que la sesión envía resultados, una rama eliminada, típicamente porque fue fusionada y auto-eliminada, falla la sesión con un error que nombra el repositorio y la rama y le pide que restaure la rama y reintente. El runner falla la sesión con el mismo error cuando omitir dejaría sin repositorio en absoluto. Antes de v2.1.228, tal sesión comenzaba en un directorio vacío.

534* **Una sesión comienza sin uno de sus repositorios**: en un runner sin un [hook `checkout`](/docs/es/self-hosted-environments-configuration#checkout), el host de git puede rechazar la verificación de acceso del runner para un repositorio que la sesión solo lee. El runner entonces omite ese repositorio, registra una línea `[runner:warn] could not access context source` que nombra el rechazo, e inicia la sesión en los restantes.

535 

536 El runner omite solo un rechazo claro: el host responde que el repositorio no fue encontrado, git no encuentra credenciales para el host, o la autenticación falla. Una falla de red, un tiempo de espera agotado, o un HTTP `403` aún falla el inicio de sesión, al igual que un rechazo para un repositorio al que la sesión envía resultados. El runner aún falla una sesión que omitir dejaría sin repositorio en absoluto. Con [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), el runner omite solo un repositorio que el proxy de git mismo deniega.

537 

538 La verificación de acceso se ejecuta nuevamente cada vez que la sesión comienza en un runner, así que una vez que la identidad de git del runner tiene acceso de lectura, el siguiente inicio clona el repositorio. Antes de v2.1.274, cada uno de estos rechazos fallaba el inicio de sesión.

534* **Las sesiones tardan minutos en iniciarse**: el clon inicial generalmente domina. Observe la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` para confirmar, y corte el clon con un [pre-warmed checkout](#reuse-a-pre-warmed-checkout) o un `CLAUDE_RUNNER_FETCH_DEPTH` más pequeño.539* **Las sesiones tardan minutos en iniciarse**: el clon inicial generalmente domina. Observe la [métrica](/docs/es/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` para confirmar, y corte el clon con un [pre-warmed checkout](#reuse-a-pre-warmed-checkout) o un `CLAUDE_RUNNER_FETCH_DEPTH` más pequeño.

540* **Los turnos fallan con un 401**: cada sesión autentica llamadas de modelo con el [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/es/self-hosted-environments-configuration#wrapper-scripts) de corta duración que el runner obtiene de Anthropic y rota sobre stdin de la sesión. Cuando un turno termina con un 401 o 403 de la API del modelo, el runner obtiene un token fresco y lo pasa a la sesión. El turno fallido no se reintenta.

541 

542 Cuando una obtención falla, el runner registra una línea `inference_token refresh failed` que dice cuándo reintentará, y continúa reintentando mientras la sesión se ejecute.

543 

544 Si cada llamada comienza a fallar aproximadamente 30 minutos en una sesión, un script contenedor probablemente ha cortado stdin de la sesión, por lo que las rotaciones de token no pueden alcanzarlo; consulte [Keep stdin and file descriptor 3 attached](/docs/es/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached).

545 

546 Antes de v2.1.274, el runner dejaba de reintentar una obtención fallida después de algunos intentos y esperaba la siguiente programada. Un turno fallido no desencadenaba una obtención, por lo que cada turno fallaba con un 401 hasta la siguiente obtención programada.

535* **El pod se mata a mitad del drenaje**: aumente `terminationGracePeriodSeconds` al menos al valor que el runner registra al inicio. Consulte [Shutdown timing](#shutdown-timing).547* **El pod se mata a mitad del drenaje**: aumente `terminationGracePeriodSeconds` al menos al valor que el runner registra al inicio. Consulte [Shutdown timing](#shutdown-timing).

536 548 

537Una vez que se inicializa el registro, el runner escribe su registro de ciclo de vida, incluidas las líneas `[runner:fatal]`, en stdout, y la salida de depuración en stderr, todo como líneas de texto sin formato en lugar de JSON. Las fallas de inicio descritas en las entradas de solución de problemas anteriores se imprimen en stderr antes de ese punto. Capture ambas secuencias con `--log-file`, que también permite que `self-hosted-runner doctor` las siga, o con la recopilación de registros de su plataforma.549Una vez que se inicializa el registro, el runner escribe su registro de ciclo de vida, incluidas las líneas `[runner:fatal]`, en stdout, y la salida de depuración en stderr, todo como líneas de texto sin formato en lugar de JSON. Las fallas de inicio descritas en las entradas de solución de problemas anteriores se imprimen en stderr antes de ese punto. Capture ambas secuencias con `--log-file`, que también permite que `self-hosted-runner doctor` las siga, o con la recopilación de registros de su plataforma.

Details

103| `SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS` | `30000` | Cuánto tiempo el runner considera una sesión ocupada después de que una tarea de fondo termina mientras el turno de seguimiento que lee el resultado no ha comenzado. Las filas [`--drain-wait-sec` y `--release-idle-session-min`](#runner-cli-flags) describen dónde se aplica la retención en drenaje y liberación por inactividad, y [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe dónde se aplica en retiro `--retire-at`. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.228 o posterior. |103| `SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS` | `30000` | Cuánto tiempo el runner considera una sesión ocupada después de que una tarea de fondo termina mientras el turno de seguimiento que lee el resultado no ha comenzado. Las filas [`--drain-wait-sec` y `--release-idle-session-min`](#runner-cli-flags) describen dónde se aplica la retención en drenaje y liberación por inactividad, y [Runner lifecycle](/docs/es/self-hosted-environments#runner-lifecycle) describe dónde se aplica en retiro `--retire-at`. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.228 o posterior. |

104| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Directorio capturado en la instantánea de inicio del runner y sembrado en el `CLAUDE_CONFIG_DIR` de cada sesión; los cambios en disco se aplican después de un reinicio del runner. Establecer la variable también mueve dónde el runner lee `.claude.json` para [siembra de MCP](/docs/es/self-hosted-environments-configuration#mcp-servers), por lo que establecerlo, incluso a su propio predeterminado, reubica esa búsqueda; apunte a un directorio vacío para desactivar completamente la siembra. |104| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Directorio capturado en la instantánea de inicio del runner y sembrado en el `CLAUDE_CONFIG_DIR` de cada sesión; los cambios en disco se aplican después de un reinicio del runner. Establecer la variable también mueve dónde el runner lee `.claude.json` para [siembra de MCP](/docs/es/self-hosted-environments-configuration#mcp-servers), por lo que establecerlo, incluso a su propio predeterminado, reubica esa búsqueda; apunte a un directorio vacío para desactivar completamente la siembra. |

105| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Cuánto tiempo el runner espera después de que una sesión alcanza su límite `--kill-session-after-min`, para que un turno en ejecución termine o se complete la liberación, antes de terminar la sesión |105| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Cuánto tiempo el runner espera después de que una sesión alcanza su límite `--kill-session-after-min`, para que un turno en ejecución termine o se complete la liberación, antes de terminar la sesión |

106| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Límite en cuánto tiempo el runner cuenta una sesión como ocupada para el drenaje `--drain-wait-sec` después de que un turno termina, mientras el proceso de la sesión reporta el final del turno a Anthropic. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.275 o posterior. |

106| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Limitado a `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |107| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Limitado a `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |

107| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establezca un entero positivo, o `full` o `0` para una búsqueda completa. Los repositorios ya presentes en el workspace mantienen su profundidad existente. |108| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establezca un entero positivo, o `full` o `0` para una búsqueda completa. Los repositorios ya presentes en el workspace mantienen su profundidad existente. |

108| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |109| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |

slack.md +3 −1

Details

233 233 

234Esta entrada se aplica a espacios de trabajo que utilizan [Claude Tag](https://claude.com/docs/claude-tag/overview), donde Claude trabaja en canales como la identidad compartida de tu organización, no como la cuenta de ningún miembro. Si creaste el entorno en la nube del canal en [claude.ai/code](https://claude.ai/code), pertenece a tu cuenta personal, y Claude no puede iniciar sesiones de canal en un entorno personal. Claude Code falla la sesión inmediatamente, y reintentar no ayuda.234Esta entrada se aplica a espacios de trabajo que utilizan [Claude Tag](https://claude.com/docs/claude-tag/overview), donde Claude trabaja en canales como la identidad compartida de tu organización, no como la cuenta de ningún miembro. Si creaste el entorno en la nube del canal en [claude.ai/code](https://claude.ai/code), pertenece a tu cuenta personal, y Claude no puede iniciar sesiones de canal en un entorno personal. Claude Code falla la sesión inmediatamente, y reintentar no ayuda.

235 235 

236Si eres Propietario, recrea el entorno como un [entorno compartido de la organización](/docs/es/cloud-environments#organization-shared-environments) desde la página **Entornos en la nube** en [configuración de administrador](https://claude.ai/admin-settings). Puedes aplicarlo de dos formas:236Si eres Propietario y el entorno es tuyo, [compártelo con la organización](/docs/es/cloud-environments#organization-shared-environments) desde el selector de entorno. De lo contrario, un Propietario lo recrea como un entorno compartido de la organización desde la página **Entornos en la nube** en [configuración de administrador](https://claude.ai/admin-settings).

237 

238Puedes aplicarlo de dos formas:

237 239 

238* Establécelo como predeterminado de la organización en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).240* Establécelo como predeterminado de la organización en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).

239* [Establécelo en el canal](https://claude.com/docs/claude-tag/admins/troubleshooting#channel-sessions-use-the-wrong-environment-or-can%E2%80%99t-find-one) en la configuración de administrador de Claude Tag.241* [Establécelo en el canal](https://claude.com/docs/claude-tag/admins/troubleshooting#channel-sessions-use-the-wrong-environment-or-can%E2%80%99t-find-one) en la configuración de administrador de Claude Tag.

Details

196<Steps>196<Steps>

197 <Step title="Abre la vista de diff">197 <Step title="Abre la vista de diff">

198 Un indicador de diff muestra líneas agregadas y eliminadas en toda la sesión, por ejemplo `+42 -18`. Selecciónalo para abrir la vista de diff, con una lista de archivos a la izquierda y cambios a la derecha.198 Un indicador de diff muestra líneas agregadas y eliminadas en toda la sesión, por ejemplo `+42 -18`. Selecciónalo para abrir la vista de diff, con una lista de archivos a la izquierda y cambios a la derecha.

199 

200 El diff compara los cambios de la sesión contra su rama base de forma predeterminada. Para comparar contra una rama diferente, selecciona **Comparar contra** y elige una.

199 </Step>201 </Step>

200 202 

201 <Step title="Deja comentarios en línea">203 <Step title="Deja comentarios en línea">