Skip to main content
Most of the platform runs with no services at all. A feature that needs Postgres, Redis or another service says so on this page, names the setting that points at it, and says what happens when it is missing. A missing service shows up in one of four ways:
  • Boot refused. The server does not start, and the error says why.
  • Off. The feature reports itself off. Reads answer empty and writes answer 501 with a code that names the feature (see What OFF looks like).
  • In memory. The feature works inside one process only, and boot logs a WARNING where the table says so.
  • Fails at first use. Boot succeeds. The first call that needs the service raises an error that names the setting.

How the settings resolve

  • Postgres. A Postgres feature uses the named database its component binds to. A component binds to default unless TAI_DB_BINDING_<COMPONENT> says otherwise, so most features read TAI_DATABASE_DEFAULT_PG_*. A database counts as configured when its password is set. Set its host too: a password with no TAI_DATABASE_<NAME>_PG_HOST raises when the first connection is built.
  • Redis. Each Redis feature has its own <PREFIX>REDIS_URL. When that is unset it uses the shared TAI_DEFAULT_REDIS_URL. Setting the shared URL turns on every Redis feature at once (see Default connection namespace).
  • Plain Redis or Redis with modules. Almost every feature runs on any standard redis-server with no modules (redis:7, redis:8 or Valkey). The redis checkpoint store and the redis LLM store, both the default, are the exceptions: they need the JSON and search modules. Redis 8 ships both, and the Compose bundle’s Redis is Redis 8. A Redis 7 needs RedisJSON and RediSearch loaded. On a plain Redis the store’s setup fails with unknown command 'FT._LIST'.

The minimal deployment

A single tai serve worker with the file config mode and access control off needs no Postgres and no Redis. Local tools and mounted MCP servers work. Each feature that needs a service behaves as the tables below say.
Two defaults need a service unless you change them:
  • Access control is on by default. With it on, the server needs an identity provider plugin, Postgres and Redis. See the core table.
  • The checkpoint store defaults to redis. An agent or flow run needs a checkpoint store. Set LLM_PROVIDER_CHECKPOINT=memory for local work, or give it a Redis with modules or a Postgres. See the core table.

Core

tai doctor checks the skeleton database (with the migrator identity), its schema, and the connector-store Redis (CONNECTOR_STORE_REDIS_URL or TAI_DEFAULT_REDIS_URL). It counts an unconfigured one as a failure and exits non-zero. It does not check the other Redis features.

Plugins

Premium plugins

Flows engine

Development only

These shapes are fine on a laptop and wrong in production:
  • ACCESS_CONTROL_ENABLE=false: no auth on any request.
  • LLM_PROVIDER_CHECKPOINT=memory or sqlite: runs do not survive a restart and cannot park.
  • sandbox-local: sandboxed code runs on the host with no isolation.
  • One worker with in-memory hooks, conversations and sub-MCP registrations.
  • CHANNEL_WEB_SESSION_COOKIE_SECURE=false: the web chat cookie over plain HTTP.

See also

  • Deploy: workers, config mode, and access control at deploy.
  • Config and secrets: named databases and the shared Redis default.
  • Checkpoints: the checkpoint stores and their retention.