Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
160 lines (137 loc) · 8.21 KB
/
Copy path.env.example
File metadata and controls
160 lines (137 loc) · 8.21 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# aios server configuration. Copy to .env and edit.
# Required on a fresh DB: gates POST /v1/accounts/bootstrap, which mints the
# root account and its first API key. Generate with: openssl rand -hex 32
AIOS_BOOTSTRAP_TOKEN=replace-me
# The MINTED root API key clients send as `Authorization: Bearer <key>`.
# This is NOT a value you choose — it's returned (once) by bootstrapping the
# root account on a fresh DB: `uv run aios accounts bootstrap` (or POST
# /v1/accounts/bootstrap). A made-up placeholder here silently 401s every
# request. Leave empty until you've minted it, then paste the plaintext_key.
AIOS_API_KEY=
# Required: 32 random bytes, base64-encoded, used to encrypt credentials at rest.
# Generate with: openssl rand -base64 32
AIOS_VAULT_KEY=replace-me
# Required: 32 random bytes, base64-encoded, key for the sandbox egress CA.
# Deliberately SEPARATE from AIOS_VAULT_KEY: keeping the CA key distinct means a
# vault-key holder can't also mint sandbox-trusted TLS certs. Use a fresh value.
# Generate with: openssl rand -base64 32
AIOS_EGRESS_CA_KEY=replace-me
# Required: Postgres connection URL.
AIOS_DB_URL=postgresql://aios:aios@localhost:5432/aios
# Sandbox image used for all v1 sessions. Built from
# docker/Dockerfile.sandbox and published to GHCR by the
# ``Build aios-sandbox image`` workflow on every change to that file.
# Local-dev builds (``docker build -t aios-sandbox:latest -f docker/Dockerfile.sandbox docker/``)
# work too — point this at the local tag if you want to test changes
# without going through CI.
AIOS_DOCKER_IMAGE=ghcr.io/eumemic/aios-sandbox:latest
# Where per-session workspace directories live on the host.
# Each session gets a subdir at $AIOS_WORKSPACE_ROOT/<session_id>/, mounted into
# the container at /workspace. Containers are provisioned lazily on the first
# tool call that needs one — chat-only sessions never spawn a container.
AIOS_WORKSPACE_ROOT=/var/lib/aios/workspaces
# Docker network mode for sandbox containers. 'bridge' (default) gives full
# outbound internet access (needed for e.g. curl). Use 'none' to disable
# networking entirely.
AIOS_SANDBOX_NETWORK_MODE=bridge
# Default bash tool call timeout in seconds. The agent can pass a smaller
# timeout per-call but not a larger one.
AIOS_BASH_DEFAULT_TIMEOUT_SECONDS=120
# Maximum stdout+stderr bytes returned from a bash tool call. Output beyond
# this is truncated with a [truncated] marker.
AIOS_BASH_MAX_OUTPUT_BYTES=100000
# Worker concurrency: how many session loops a single worker process runs in parallel.
AIOS_WORKER_CONCURRENCY=4
# Optional per-connector-verb rolling outbound quotas. The default is empty
# (disabled, with no dispatch-path query). This Stage-2 Matrix example keeps
# precursor verbs tight and delivery loose. Keep homeserver/appservice rate
# limiting enabled independently; upstream M_LIMIT_EXCEEDED errors are not retried.
# AIOS_OUTBOUND_TOOL_QUOTAS={"matrix_invite":[3600,20],"matrix_create_room":[3600,20],"matrix_join":[3600,20],"matrix_send":[3600,500]}
# Bind address for the API server.
AIOS_API_HOST=127.0.0.1
AIOS_API_PORT=8080
# Logging level.
AIOS_LOG_LEVEL=INFO
# ── Docker Compose / dev-bootstrap (issue #310) ───────────────────────
# Required by `aios dev bootstrap` / `aios dev teardown` (issue #824).
# The admin DSN those commands connect to in order to CREATE/DROP the
# per-worktree `aios_dev_*` database. There is NO silent default: bootstrap/
# teardown refuse to run unless this is set here or in the process env (env
# wins), so they can never silently target a foreign postgres (e.g. a prod
# server) that happens to own :5432 on a multi-DB host. Set it explicitly to
# the dev postgres you actually run; :5433 matches the compose/README setup
# that leaves :5432 free for an OS-installed postgres.
# AIOS_POSTGRES_ADMIN_URL=postgresql://aios:aios@localhost:5433/postgres
# Host directory bind-mounted into worker, api, and every connector at
# the SAME path on each side. The worker hands these path strings to
# the host docker daemon when spawning sandbox containers, so they MUST
# resolve identically on the host and inside containers — a Docker
# named volume cannot satisfy this.
#
# Default is repo-relative for friction-free dev; operators with a
# stable runtime layout typically point this at /var/lib/aios/workspaces
# (the AIOS_WORKSPACE_ROOT default) and align both vars.
WORKSPACE_HOST_PATH=./.aios/workspaces
# Per-connection bearer tokens issued by ``scripts/dev-bootstrap.sh``.
# Each is the plaintext returned ONCE from POST /v1/connector-tokens;
# loss requires re-issue + .env rewrite (use ``--reset``).
ECHO_HTTP_CONNECTOR_TOKEN=
TELEGRAM_CONNECTOR_TOKEN=
SIGNAL_CONNECTOR_TOKEN=
# Inference credentials belong in encrypted model-provider rows on non-root
# accounts (`aios model-providers create`). The platform root is credentialless.
# Migration only: explicitly set legacy_env before supplying process env keys.
# AIOS_INFERENCE_CREDENTIAL_POLICY=legacy_env
# ANTHROPIC_API_KEY=
# ANTHROPIC_API_BASE=
# OPENROUTER_API_KEY=
# OPENAI_API_KEY=
# Optional: Tavily key for web_fetch / web_search built-in tools.
AIOS_TAVILY_API_KEY=
# ── Interactive MCP OAuth "Connect" provider apps ─────────────────────
#
# Lets end users one-click-connect MCP servers that DON'T support dynamic
# client registration (Google, Microsoft, Slack, …) without pasting any
# credentials — the way Claude Managed Agents does. For each such provider you
# register ONE OAuth app and list it here; AIOS uses it automatically when a
# server's OAuth issuer/host matches `match`.
#
# Servers that DO support dynamic registration (Notion, Linear, …) need no
# config — they already one-click.
#
# One-time setup per provider, e.g. Google:
# 1. Google Cloud Console → APIs & Services → Credentials → Create OAuth
# client ID → Web application.
# 2. Authorized redirect URI: <console_url>/api/auth/mcp-oauth/callback
# (dev: http://localhost:3100/api/auth/mcp-oauth/callback).
# 3. Copy the client ID + secret into the JSON below. `match` is the OAuth
# issuer host (Google = accounts.google.com). `scope` is optional — set it
# if the provider requires scopes its MCP server doesn't advertise.
#
# Google note: to get a REFRESH token (so AIOS can keep the credential alive),
# Google requires authorize_params {"access_type":"offline","prompt":"consent"}.
# Standard providers issue refresh tokens without this.
#
# token_endpoint_hosts: hosts (besides `match`) the operator client_secret may
# be sent to. Required when the provider issues tokens from a different apex than
# it authorizes at — Google authorizes at accounts.google.com but issues tokens
# at oauth2.googleapis.com, so list ["oauth2.googleapis.com"]. The secret is sent
# to the discovered token endpoint ONLY if its host is `match` (or a sub-host) or
# listed here — closing client_secret exfiltration via spoofed discovery metadata.
#
# JSON list of {match, client_id, client_secret?, token_endpoint_auth_method?, token_endpoint_hosts?, scope?, authorize_params?}:
# AIOS_OAUTH_PROVIDER_APPS=[{"match":"accounts.google.com","client_id":"...apps.googleusercontent.com","client_secret":"...","token_endpoint_hosts":["oauth2.googleapis.com"],"scope":"https://www.googleapis.com/auth/calendar","authorize_params":{"access_type":"offline","prompt":"consent"}}]
AIOS_OAUTH_PROVIDER_APPS=
# Interactive OAuth — DEV-ONLY SSRF bypass.
# Comma-separated host[:port] allowlist that lets the "Connect" flow reach an
# MCP fleet served over plain http on internal hosts (e.g. a self-hosted Google
# Workspace MCP at workspace-mcp:8000). Bypasses the https requirement and the
# private-range block for the listed hosts ONLY. Leave EMPTY in production (prod
# MCP servers are https); any value there re-opens SSRF to internal hosts.
# AIOS_OAUTH_ALLOW_INSECURE_HOSTS=workspace-mcp,workspace-mcp:8000
AIOS_OAUTH_ALLOW_INSECURE_HOSTS=
# Current filesystems of non-archived sessions are never reclaimed. Archived
# filesystems become eligible only after this grace. Snapshot TTL/pool/account
# limits are pressure and admission signals, not destructive live-state budgets.
# Disable Coolify force_docker_cleanup and all unfiltered Docker pruning here.
AIOS_SANDBOX_ARCHIVE_GC_GRACE_SECONDS=86400