---
title: "Indicadores de funcionalidades"
description: "Activa una superficie de Beeuni para un proyecto y consulta qué controla cada indicador."
---

Un indicador de funciones activa una superficie de Beeuni para un proyecto. Cualquier superficie puede publicarse detrás de un indicador: experimental, beta o totalmente estable. «Experimental» es una insignia de estabilidad del indicador, no el nombre del sistema.

Los indicadores son por proyecto. Activar un indicador en un proyecto no cambia nada en otro proyecto ni en otras cuentas.

<CardGroup>
  <Card icon="app-window" title="Apps" href="/docs/es/feature-flags/apps">Implementa sitios estáticos, bundles, Dockerfiles e imágenes OCI en URL estables.</Card>
</CardGroup>

<a id="turn-a-flag-on"></a>

## Activar un indicador

1. Abre **Settings → Feature flags**. La pestaña muestra todos los indicadores que admite la plataforma.
2. Lee la fila: el nombre del indicador, su insignia de estabilidad, una frase descriptiva y su origen — `Default on`, `Default off` o
   `Overridden for this project`.
3. Usa el interruptor. El cambio se aplica de inmediato al proyecto actual.

Necesitas el permiso `project.settings.write` del proyecto. La ruta responde
`403` a cualquier otro solicitante.

<a id="from-the-cli"></a>

### Desde la CLI

Los mismos interruptores están disponibles para scripts y agentes mediante `beeuni projects features`:

```bash
beeuni projects features                # every flag: key, state, origin
beeuni projects features enable reminders
beeuni projects features disable reminders
beeuni projects features reset reminders  # drop the override; follow the platform default
beeuni projects features --json          # the full catalog as JSON
```

Añade `--project <id>` para actuar sobre un proyecto distinto del vinculado o predeterminado. Si la plataforma marca un indicador como no disponible, permanece desactivado independientemente de la configuración del proyecto; la CLI lo muestra como `n/a` / `unavailable`.

:::info[El estado de los indicadores no está en tu repositorio]
El estado de los indicadores por proyecto se guarda en la base de datos, en la fila del proyecto. Nunca se lee de `beeuni.yaml`. Un indicador que activas no se transfiere al clonar o bifurcar un repositorio.
:::

<a id="stability-badges"></a>

## Insignias de estabilidad

La insignia describe el contrato, no el interruptor. Un indicador `stable` sigue requiriendo activación explícita: `apps` es estable y aun así viene desactivado de forma predeterminada.

| Insignia | Significado |
|---|---|
| Experimental | La superficie y su contrato aún pueden cambiar. |
| Beta | La superficie funciona y su estructura se está definiendo. |
| Estable | El contrato se mantiene. El indicador sigue requiriendo activación explícita. |

<a id="how-a-flag-is-enforced"></a>

## Cómo se aplica un indicador

Cada indicador declara un modo de aplicación.

| Modo | Qué hace el servidor cuando el indicador está desactivado |
|---|---|
| `routes` | La superficie HTTP rechaza la solicitud con `403`. |
| `behavioral` | El comportamiento no ocurre: no se materializa ningún conector, no se inyecta ningún entorno y no se registra ningún agente. |
| `ui-only` | El servidor no aplica el indicador deliberadamente. El indicador solo oculta la superficie del cliente. |

Un rechazo `routes` es idéntico en todas partes:

```json
{
  "error": "Apps is not enabled for this project. Contact Beeuni to enable it.",
  "code": "feature_disabled",
  "feature": "apps"
}
```

La cadena `error` indica la lista de indicadores, no una pestaña específica. La lista está en la pestaña **Experimental** de Settings.

Evalúa `code`, nunca el texto del mensaje. El SDK exporta `isFeatureDisabledError(error)` y `featureDisabledKey(error)` precisamente para esto.

<a id="every-flag"></a>

## Todos los indicadores

Orden del registro: el mismo que muestra **Settings → Feature flags**.

Beeuni activa Apps por proyecto. Contacta con Beeuni para solicitar acceso. Settings los muestra como **Managed by Beeuni** al activarlos.

| Clave | Nombre | Estabilidad | Predeterminado |
|---|---|---|---|
| `marketplace` | Marketplace | Beta | Activado |
| `connectors_api_discover` | Connectors API Discover | Experimental | Desactivado |
| `agentmail_email` | AgentMail Email | Experimental | Desactivado |
| `llm_gateway` | LLM Gateway | Experimental | Activado  |
| `meta_agent` | Meta Agent | Experimental | Desactivado |
| `apps` | Apps | Estable | Desactivado |
| `monitors` | Monitors | Experimental | Desactivado |
| `reminders` | Reminders | Beta | Desactivado |
| `warm_sessions` | Warm Sessions | Beta | Activado |
| `secrets_egress` | Network-Enforced Secrets | Experimental | Activado |
| `pi_harness` | Pi Harness  | Experimental | Desactivado |

<a id="what-each-flag-gates"></a>

### Qué controla cada indicador

- **`marketplace`** — Explora e instala habilidades de registros de la comunidad y de proveedores.
- **`connectors_api_discover`** — Explora superficies directas de API, MCP, GraphQL, CLI y Postman junto a las aplicaciones OAuth administradas. Consulta [Connectors](/docs/es/connect/connectors).
- **`agentmail_email`** — Asigna conexiones de bandeja de entrada de AgentMail para que el correo entrante inicie sesiones y las mantenga activas.
- **`llm_gateway`** — Enruta el proyecto a través de la pasarela LLM administrada de Beeuni. Consulta [Models](/docs/es/project/models).
- **`meta_agent`** — Añade un agente coordinador propiedad de la plataforma que crea y administra sesiones especializadas.
- **`apps`** — Implementa sitios estáticos, bundles, Dockerfiles e imágenes OCI en URL de servidor sin servidor estables. Consulta [Apps](/docs/es/feature-flags/apps).
- **`monitors`** — Ejecuta monitores 24/7 desde tu repositorio, que envían eventos de activación a las sesiones. Consulta [Triggers](/docs/es/connect/triggers).
- **`reminders`** — Programaciones que vuelven a solicitar una respuesta a una sesión, una vez o de forma repetida. Si está desactivado, las rutas de recordatorios responden `feature_disabled` y los recordatorios existentes no se activan. Consulta [Reminders](/docs/es/connect/reminders).
- **`warm_sessions`** — Mantiene un sandbox activo mientras el proyecto está abierto, para que las sesiones nuevas se inicien sin un arranque en frío.
- **`secrets_egress`** — Ofrece aplicación de políticas de red para un secreto: el sandbox conserva un identificador y Beeuni sustituye el valor real solo en las solicitudes a hosts aprobados. Consulta [Secrets](/docs/es/project/secrets).
- **`pi_harness`** — Ejecuta las sesiones de este proyecto en el harness de agente pi dentro del sandbox de sesión habitual (`BEEUNI_HARNESS=pi`). Activado: cada sesión nueva o reiniciada inicia pi, independientemente del manifiesto. Desactivado: lo decide el manifiesto; `runtime: pi` sigue iniciando pi y cualquier otro valor inicia el entorno de ejecución predeterminado. pi solo llama a modelos mediante la pasarela LLM: con `llm_gateway` desactivado, todas las sesiones inician el entorno de ejecución predeterminado, independientemente de este indicador o del manifiesto. El diseño del repositorio, los agentes y las habilidades son iguales en ambos casos; una sesión en curso conserva su harness hasta que se reinicia o se reanuda. Los subagentes funcionan en pi: el agente delega con la herramienta `task` a `general`, `explore` (solo lectura) o cualquier agente del proyecto que tenga `mode: subagent` en su `.md`, y la transcripción muestra en contexto los pasos de cada subagente. Las sesiones de pi también cargan paquetes pi.dev: consulta [`harnesses:`](/docs/es/project/manifest#harnesses). pi no ofrece todas las funciones de sesión que tiene el entorno de ejecución predeterminado: consulta la matriz en [Harnesses](/docs/es/work/harnesses#what-each-harness-supports).

<a id="graduated-flags"></a>

### Indicadores que pasaron a ser funciones estándar

Una función que pasó a ser estándar está activada para todos los proyectos y no tiene interruptor.

- **Agentes como principales** es el comportamiento estándar y no tiene interruptor. Una sesión de agente actúa como el propio agente, con sus permisos de Beeuni dentro de su rol máximo, sin importar quién la ejecute. Consulta [Permisos de agentes](/docs/es/project/permissions).
- **Review Center** salió del sistema de indicadores. La página Review, la fila Review de la barra lateral y la fila del menú de comandos aparecen en todos los proyectos; siguen aplicándose los permisos `project.review.read` y `project.review.act`. `review_center` ya no es una clave de indicador: `PATCH /v1/projects/:id/features` responde `400` `Unknown feature flag`, y `beeuni projects features enable review_center` prints that error and exits `1`. Una configuración guardada antes de que pasara a ser estándar no tiene efecto.
- **Computers** salió del sistema de indicadores. Todos los miembros pueden conectar su propio equipo desde la barra lateral del proyecto; la configuración de la plataforma `TUNNEL_ENABLED` es la única condición. `agent_tunnel` ya no es una clave de indicador: `PATCH /v1/projects/:id/features` responde `400` `Unknown feature flag`. Consulta [Computers](/docs/es/connect/computers).
- **Microsoft Teams** salió del sistema de indicadores. Todos los proyectos pueden conectar Teams desde **Connectors → Channels**; un administrador del tenant debe dar su consentimiento una vez, o el proyecto puede aportar su propio bot. `teams` ya no es una clave de indicador: `PATCH /v1/projects/:id/features` responde `400` `Unknown feature flag`. Una configuración guardada antes de que pasara a ser estándar no tiene efecto. Consulta [Microsoft Teams](/docs/es/connect/teams).

<a id="side-effects-of-a-toggle"></a>

## Efectos secundarios de un cambio

Algunos indicadores hacen que el estado de la plataforma converja tras confirmarse la escritura.

| Indicador | Efecto después del cambio |
|---|---|
| `agentmail_email` | Beeuni vuelve a ejecutar la materialización de conectores de canales, para que el conector aparezca o desaparezca según el indicador. |
| `llm_gateway` | Beeuni propaga el nuevo modo de proveedor a los sandboxes activos. |

Los efectos forman parte de la convergencia, no del éxito del cambio. La respuesta de la API no espera a que ocurran. Cada efecto se reintenta una vez y los reconciliadores que lo realizan son idempotentes y vuelven a ejecutarse en sus barridos periódicos.

<a id="read-and-set-a-flag-from-code"></a>

## Leer y establecer un indicador desde el código

Lee el estado efectivo por proyecto mediante los detalles del proyecto o el hook de React:

```tsx
import { useFeatureFlag } from '@beeuni/sdk/react';

function AppsNavItem({ projectId }: { projectId: string }) {
  const apps = useFeatureFlag(projectId, 'apps');
  if (!apps.enabled) return null;
  return <Link href={`/projects/${projectId}/apps`}>Apps</Link>;
}
```

`enabled` es `true` solo cuando el servidor respondió exactamente `true`. La falta de un ID de proyecto, una consulta en curso y un error se resuelven como `false`. Aplica la condición de forma segura, denegando por defecto.

Establece la configuración del proyecto con el cliente:

```ts
const p = beeuni.project(projectId);

await p.updateFeatureFlag('apps', true);   // turn it on for this project
await p.updateFeatureFlag('apps', null);   // clear the override, inherit the default
```

`updateFeatureFlag` llama a `PATCH /v1/projects/:id/features`. `feature` es uno de `FEATURE_FLAG_KEYS`, exportado desde `@beeuni/sdk` y tipado como `FeatureFlagKey`. Consulta la referencia del SDK.

Gestiona una función desactivada mediante código, no por el mensaje:

```ts
import { featureDisabledKey, isFeatureDisabledError } from '@beeuni/sdk';

try {
  await beeuni.project(projectId).apps.list();
} catch (error) {
  if (isFeatureDisabledError(error)) {
    console.log(`${featureDisabledKey(error)} is off for this project`);
  }
}
```
