Before you go live
Server
Section titled “Server”- HTTPS. Built-in TLS (
[server.tls]) or a reverse proxy. Behind a proxy that terminates TLS, setopen_api.behind_proxy = trueand make sure the proxy passes WebSocket upgrades (install). -
server.public_urlset to the address clients use, so agent connection settings are right. -
server.allowed_originslists your web apps’ origins, and nothing else. - PostgreSQL or MySQL for anything beyond one machine; every database configured for full durability (databases).
- The master key in a secret store (
AGENTIM_MASTER_KEYorencryption.key_file), backed up separately from the database (encryption). - Backups of the databases, the master key and the file storage, with a tested restore (backup and upgrade).
- Files: S3 with CORS, a lifecycle rule for incomplete multipart uploads and server-side encryption (file storage).
- Monitoring: scrape
/metricswith a token (--metrics-token), loaddeploy/alerts.yml, probe/readyz(monitoring). - Restart on failure: the server exits (code 70) on a storage failure and expects systemd, Docker or Kubernetes to start it again.
- Retention (
retention.days) matches your privacy policy.
Your backend
Section titled “Your backend”- API keys with only the scopes each service needs;
messages:readandcomplianceonly where required. - Client tokens with short lifetimes (an hour) and a
tokenProviderthat checks your own session first. - Webhook signatures verified on the raw body (webhooks).
- Account deletion in your app calls
DELETE /v1/users/{id}(GDPR). - Someone works the report queue within 24 hours (moderation).
Your apps
Section titled “Your apps”- The device id is generated once and kept.
- Report and block are reachable from messages and profiles. App Store guideline 1.2 and Google Play’s user-generated content policy require both.
- AI messages are labelled. The components do it by default; custom message components must keep the badge (EU AI Act).
-
[clients.min_versions]is ready for the day you need to stop an old app version.
Agents
Section titled “Agents”- Every agent has a real owner who gets its approvals and alerts.
- Guardrail limits fit your traffic (guardrails).
- Someone knows how to stop an agent: the owner in the app, or
POST /v1/agents/{id}:stop(people in control).