> ## Documentation Index
> Fetch the complete documentation index at: https://docs.2501.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Feature Toggles

> Toggle experimental and optional behaviors on or off

Feature toggles flip optional or experimental behaviors for the whole installation. They live in the `FeatureToggle` table of the 2501 database, one row per key, and you change them there. Each time it starts, the engine writes a row for every key below that has none, keeps the state of the rows that exist, and deletes the rows of keys it no longer knows. After the first start, the table holds exactly the keys below.

Operational rules and host facts are always checked before proposed task actions run when either is available. This verification has no feature toggle.

## Open a database session

With the PostgreSQL 2501 deploys on Kubernetes:

```bash theme={null}
kubectl -n "$NS" exec -i deploy/postgres -- psql -U 2501 -d 2501
```

On Docker Swarm, with `$STACK` the name you deployed the stack with (`ai-2501` in [Deploy](https://docs.2501.ai/0.19/deployment/docker-swarm.md#deploy)):

```bash theme={null}
docker exec -i "$(docker ps -q -f "label=com.docker.swarm.service.name=${STACK}_postgres")" psql -U 2501 -d 2501
```

With your own PostgreSQL, connect with the `DIRECT_URL` from `env.engine`:

```bash theme={null}
psql "$DIRECT_URL"
```

## List and change toggles

```sql theme={null}
-- Every toggle and its state
SELECT key, enabled, description FROM "FeatureToggle" ORDER BY key;

-- Turn one on (set false to turn it off)
UPDATE "FeatureToggle" SET enabled = true, updated_at = now() WHERE key = '<key>';
```

Command Center reads toggles on each request, so a change shows after a page reload. The engine reads them when it starts: restart it to apply a change, with `kubectl -n "$NS" rollout restart deploy/engine` or `docker service update --force "${STACK}_engine"`.

Turning on `enableSingleSignOn` or `enableLogLlmInputAndOutput` this way asks for no authenticator code, since database access already grants everything.

## Reference

Every toggle is off on a new installation, except two the first run sets from `values.yaml`: `enableSatelliteClusters` from `features.satellites`, and `enableElasticSearch` when `elasticsearch.mode` is not `none`.

### Integration

| Toggle Key | Description | Default |
| - | - | - |
| `enableElasticSearch` | Enable Elasticsearch integration | ❌ Disabled |
| `enableDockerSwarm` | Enable Docker Swarm integration | ❌ Disabled |
| `enableSatelliteClusters` | Register customer Kubernetes clusters and place a host's executors in one | ❌ Disabled |
| `enableCentral` | Enable Central configurations, agent targets and execution | ❌ Disabled |
| `enableDiscovery` | Enable network discovery (subnet scan, authenticated recon, host promotion) | ❌ Disabled |
| `enablePrivilegedAccess` | Read credentials from a PAM system: the Privileged access page and the PAM account credential type | ❌ Disabled |
| `gateways.allow_ecritel_type` | Enable the Ecritel gateway: its type in the create form, and the polling that opens tickets | ❌ Disabled |

### Security & Logging

| Toggle Key | Description | Default |
| - | - | - |
| `enableSingleSignOn` | Enable single sign-on: the Security settings section, the SSO button on the login page, and pointing a tenant at an identity provider | ❌ Disabled |
| `enableLogLlmInputAndOutput` | Log LLM input and output | ❌ Disabled |
| `enableLlmCorrelationHeaders` | Send the ticket, job, task and agent IDs of each LLM request in [`X-2501-*` headers](https://docs.2501.ai/0.19/configure/providers#correlation-headers); read at engine start | ❌ Disabled |

### Jobs

| Toggle Key | Description | Default |
| - | - | - |
| `enableFollowUpJobs` | Detect and create follow-up jobs after terminal jobs | ❌ Disabled |
| `enableJobRestart` | Restart a running job when the user adds a comment | ❌ Disabled |

### Experimental

| Toggle Key | Description | Default |
| - | - | - |
| `enableSlowInference` | Reduce parallel tasks/jobs for slow inference | ❌ Disabled |
| `enableCompletionGate` | Send a task back once when it reports done right after an unchecked host change | ❌ Disabled |
| `enableObservability` | Accept monitoring alerts as signals and let Sentinel open [Investigations](https://docs.2501.ai/0.19/core-concepts/observability.md); read at engine start | ❌ Disabled |

## When to flip what

* **`enableElasticSearch`** if you have an Elasticsearch instance and want the engine + Command Center to ship logs to it.
* **`enableLlmCorrelationHeaders`** when your LLM proxy groups requests by ticket, job or task, for example to build Langfuse sessions.
* **`enableSlowInference`** if your tenant runs on a self-hosted model with low throughput - reduces task concurrency to avoid queue starvation.
* **`enableSatelliteClusters`** to reach hosts from inside a customer Kubernetes cluster instead of dialing them from the engine. It adds the Clusters page and a host's executor placement fields. Turning it back off hides that surface without changing where anything executes: a host already placed on a cluster keeps running through it, and placement stays writable through the API, so the toggle governs the surface rather than the capability.
  * While it is off, two states have no way back through the Command Center: a host cannot be returned to a direct dial, and a credential held by a cluster cannot be deleted. Turn the toggle on to unwind either.
* Anything labeled **experimental**: open a support ticket before enabling in production.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.