File size: 3,932 Bytes
2f1e7ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Administrator, access tokens, and browser sessions

`SYSTEM_PAT` is the single deployment administrator. A legacy `BRAINPAT_TOKEN`
may temporarily alias it; different values fail startup with `SYSTEM_PAT_CONFLICT`.
Missing production credentials and the old default credential fail closed.
Rotate any administrator credential previously shared in chat or exposed in logs.

Brains and Workspaces are resources and contain no new credentials. Administrators
issue named scoped credentials through `POST /system/access-tokens`. Copy the
one-time response securely, then use `Authorization: Bearer` (or compatibility
`BrainPAT`) against the discovered workspace API/Agent/MCP endpoint. Listings
contain metadata only. Revocation and expiry also invalidate derived sessions.
Deleting/recreating a brain does not reactivate an old token for that name.

Existing Brain PATs temporarily authenticate only their own resource. Run
`python -m scripts.migrate_legacy_credentials` to report migration status without
printing secrets. For PostgreSQL, `--migrate BRAIN_ID` atomically moves a legacy
secret into the hash-only registry and removes the plaintext Brain representations.
This preserves the existing agent credential; it **does not rotate an exposed
secret**. Issue a new named token, update its agents, then revoke the migrated token
via `DELETE /system/access-tokens/{id}`. Do not automate rotation or deletion of
legitimate production credentials. Mongo legacy PATs require operator-managed
rotation; the atomic PostgreSQL migration tool intentionally refuses that backend.

The console exchanges its submitted access token for an opaque Redis session.
Cookies are HttpOnly, Secure, SameSite=Strict, host-only, and expire after eight
hours by default (`CONSOLE_SESSION_TTL_SECONDS`, bounded to 5 minutes–24 hours).
Use HTTPS for browser access, including local integration. Cookie-authenticated
mutations require the session CSRF value in `X-CSRF-Token`. Direct token requests
do not use CSRF. Session and OAuth records retain principal references, never the
submitted administrator or workspace token. OAuth sessions from older releases
must be reauthorized because their plaintext credential mapping is no longer read.

Canonical routes are `POST /system/brains`, `POST /system/workspaces`,
`GET /brains/{slug}/agent/capabilities`, and the workspace Native/Agent OpenAPI
URLs. `/meta/login-info` is deprecated; use `/auth/me`. Do not guess `/brains`,
`/agent/capabilities`, or workspace `/api/meta/login-info` aliases.

## Runtime release gates

The default trace sink is `TRACE_MODE=log`; `disabled` disables traces and `queue`
is an explicit opt-in for a consumer. Queue saturation is bounded and warnings
are limited to once per minute with an accumulated drop count. The HF monitor
checks configured PostgreSQL, Redis, and Ollama only. Logs and trace payloads use
shared credential/header/URL redaction.

`/health` exposes `persistence.mode`, `root`, and `production_ready`. A durable
root is an operator-provided persistent mount (`/data` by default, or
`BRAINAPI_DURABLE_ROOT`). Merely creating a directory on ephemeral storage does
not make it durable: operators must attach an actual durable volume. With no
root, production startup requires `ALLOW_EPHEMERAL_STORAGE=true` for staging or
recovery; this override never grants production GO. An explicitly configured
`PERSISTENCE_MODE` must agree with detection.

New PostgreSQL clusters use UTF-8 and SCRAM host authentication with local peer
authentication. Existing clusters are retained unchanged; audit/upgrade their
encoding and authentication separately without destructive initialization.
The Celery worker runs as `appuser`. MCP 1.28's upstream `Settings.lifespan`
forward reference is rebuilt after importing `FastMCP`; no warning suppression
is installed. The existing Starlette `httpx` TestClient deprecation is unrelated
and remains visible in test results.