# ================================================================== # # Agenta - License (https://agenta.ai/pricing) # ================================================================== # AGENTA_LICENSE=oss # ================================================================== # # Agenta - Docker images # ================================================================== # # AGENTA_WEB_IMAGE_NAME=agenta-web # AGENTA_WEB_IMAGE_TAG=latest # AGENTA_API_IMAGE_NAME=agenta-api # AGENTA_API_IMAGE_TAG=latest # AGENTA_SERVICES_IMAGE_NAME=agenta-services # AGENTA_SERVICES_IMAGE_TAG=latest # AGENTA_RUNNER_IMAGE_NAME=agenta-runner # AGENTA_RUNNER_IMAGE_TAG=latest # AGENTA_WEB_MOBILE_IMAGE_NAME=agenta-web-mobile # AGENTA_WEB_MOBILE_IMAGE_TAG=latest # ================================================================== # # Agenta - Core endpoints # ================================================================== # AGENTA_WEB_URL=http://localhost AGENTA_SERVICES_URL=http://localhost/services # The runner reads this too, to recognize which trace endpoints are this deployment and so # whether a run's credential may authenticate its callbacks. Compose reads it from the shell # (or --env-file), not from a service's env_file, so it must be exported when you bring the # stack up. Without it the runner warns at startup and stops filtering third-party # collector credentials out of platform calls. AGENTA_API_URL=http://localhost/api # AGENTA_API_INTERNAL_URL=http://api:8000 # Every other address this deployment's app answers on, comma separated. The OAuth # callback page posts the consent result to the window that opened it and must name that # window's exact origin, so a stack reachable at both a tunnel and a local address needs # both listed or the result is delivered to whichever one is missing. Origins only, no # paths. # AGENTA_APP_ORIGINS=http://localhost:8680 # ================================================================== # # Agenta - Secrets (REPLACE in production!) # ================================================================== # AGENTA_AUTH_KEY=replace-me # Proves to the API that a caller IS the platform runtime (the workflow service), so the # credential it receives may read write-only secret values. The API and the services # container must hold the SAME dedicated value, and a browser, runner, worker, cron, or # sandbox must never receive it. There is no AGENTA_AUTH_KEY fallback. The API refuses # to start until this placeholder is replaced with a strong shared value. # Replace it before the first start. Create a value with: openssl rand -hex 32 AGENTA_SERVICES_INTERNAL_KEY=replace-me AGENTA_CRYPT_KEY=replace-me # ================================================================== # # Agenta - Access controls # ================================================================== # # AGENTA_ACCESS_ALLOWED_DOMAINS= # AGENTA_ACCESS_ALLOWED_OWNER_EMAILS= # AGENTA_ACCESS_BLOCKED_DOMAINS= # AGENTA_ACCESS_BLOCKED_EMAILS= # AGENTA_ACCESS_BLOCKLIST_CACHE_TTL=60 # AGENTA_ACCESS_MAX_OWNED_ORGANIZATIONS= # Number of proxies in front of the API that append to X-Forwarded-For. Set it so the # sign-in rate limit reads the real client IP (1 for the bundled Traefik or nginx). # AGENTA_ACCESS_TRUSTED_PROXY_HOPS= # Read CF-Connecting-IP only when Cloudflare proxies the API. # AGENTA_ACCESS_TRUST_CLOUDFLARE_IP=false # AGENTA_ACCESS_DEFAULT_PLAN= # AGENTA_ACCESS_DEFAULT_PLAN_OVERLAY= # AGENTA_ACCESS_EMAIL_DISABLED=false # AGENTA_ACCESS_PLANS= # AGENTA_ACCESS_ROLES= # AGENTA_ACCESS_ROLES_OVERLAY= # ================================================================== # # Agenta - AI services # ================================================================== # # AGENTA_AI_SERVICES_API_KEY= # AGENTA_AI_SERVICES_API_URL= # AGENTA_AI_SERVICES_ENVIRONMENT_SLUG= # AGENTA_AI_SERVICES_REFINE_PROMPT_KEY= # ================================================================== # # Agenta - Agent runner # ================================================================== # # All agent-runner configuration lives here. # Reference: https://docs.agenta.ai/self-host/agent-execution/runner-configuration # --- Service --- # The code default is 127.0.0.1; compose sets 0.0.0.0 so the api can reach the runner. # AGENTA_RUNNER_HOST=0.0.0.0 # AGENTA_RUNNER_PORT=8765 # AGENTA_RUNNER_CONCURRENCY_LIMIT=1000 # AGENTA_RUNNER_LOG_LEVEL=silent # Generated when unset. # AGENTA_RUNNER_REPLICA_ID= # Empty: the api reaches the runner through AGENTA_RUNNER_INTERNAL_URL. # AGENTA_RUNNER_REPLICA_ADDRESS= # --- Routing and auth --- # AGENTA_RUNNER_INTERNAL_URL=http://runner:8765 AGENTA_RUNNER_TOKEN=replace-me # Seconds. Caller-side (services), not read by the runner. The idle timeout on the runner stream: # keep it above the runner's tool-call limit plus 120 s (AGENTA_RUNNER_TOOL_CALL_TIMEOUT_MS). # AGENTA_RUNNER_TIMEOUT_SECONDS=480 # --- Sandbox providers (read by both the api and the runner) --- # Comma-separated ids: local, daytona. The default must be one of the enabled ones. # AGENTA_RUNNER_ENABLED_SANDBOX_PROVIDERS=local # AGENTA_RUNNER_DEFAULT_SANDBOX_PROVIDER=local # --- Daytona --- # Required when daytona is enabled. # SECRET. # AGENTA_RUNNER_DAYTONA_API_KEY= # AGENTA_RUNNER_DAYTONA_API_URL=https://app.daytona.io/api # AGENTA_RUNNER_DAYTONA_TARGET=eu # Unset means the runner's pinned snapshot, agenta-agent-sandbox-v4. # AGENTA_RUNNER_DAYTONA_SNAPSHOT= # Mutually exclusive with AGENTA_RUNNER_DAYTONA_SNAPSHOT. # AGENTA_RUNNER_DAYTONA_IMAGE= # Idle minutes before a sandbox is stopped, then deleted. # AGENTA_RUNNER_DAYTONA_AUTOSTOP_MINUTES=15 # AGENTA_RUNNER_DAYTONA_AUTODELETE_MINUTES=30 # Hiding model and MCP API keys from the sandbox is ON by default: the runner stores each key as # a Daytona Secret restricted to the one host it authenticates against, and the sandbox sees only # a placeholder. This needs a Daytona API key with permission to manage Secrets, which is separate # from the permission to create sandboxes. Uncomment the line below only if you would rather send # keys to the sandbox as plain environment variables, where the agent can read them. # AGENTA_RUNNER_DAYTONA_OPAQUE_SECRETS=off # --- Warm sessions --- # Milliseconds. Must stay below AGENTA_RUNNER_DAYTONA_AUTOSTOP_MINUTES, or Daytona stops a sandbox # the runner still holds. 0 stops the sandbox after each turn. # AGENTA_RUNNER_DAYTONA_SESSION_IDLE_TTL_MS=120000 # AGENTA_RUNNER_DAYTONA_SESSION_MAX_WARM=20 # The four below apply to local runs only. # AGENTA_RUNNER_SESSION_POOL_MAX=8 # AGENTA_RUNNER_SESSION_TTL_MS=60000 # AGENTA_RUNNER_SESSION_APPROVAL_TTL_MS=300000 # On by default. Set to `off` to make every local turn take the cold path. # AGENTA_RUNNER_SESSION_KEEPALIVE= # --- Run limits (per run; a run paused on a human approval is exempt from all four) --- # 11 hours (must stay below the 12h mount-lease TTL minus 60s skew, or warm reuse dies). # AGENTA_RUNNER_RUN_TOTAL_TIMEOUT_MS=39600000 # 30 min without a progress event. Must stay below the total. # AGENTA_RUNNER_RUN_IDLE_TIMEOUT_MS=1800000 # 8 min to the first response. # AGENTA_RUNNER_RUN_TTFB_TIMEOUT_MS=480000 # Runs a turn again when the model sends nothing before that timeout (0 to 3; 0 turns it off). # AGENTA_RUNNER_RUN_TTFB_RETRIES=1 # 30 min per tool call. # AGENTA_RUNNER_TOOL_CALL_TIMEOUT_MS=1800000 # 2 min for the harness to answer when a run opens its session (not the model's time). # AGENTA_RUNNER_ACP_INIT_TIMEOUT_MS=120000 # --- Session history: last-message-only turns --- # The client sends only the newest user message and the runner rebuilds the earlier turns # from the durable session record log, which keeps requests and traces small on a long # conversation. This is always on. # --- Live session relay (enabled by default) --- # The disposable live-frame stream keeps at most this many frames per deployment. # AGENTA_SESSIONS_LIVE_STREAM_MAXLEN=100000 # AGENTA_SESSIONS_LIVE_FRAME_MAX_AGE_SECONDS=900 # Set these switches to false to disable their respective session features. # AGENTA_RUNNER_LIVE_FRAMES=true # AGENTA_SESSIONS_SHARED_READER=true # AGENTA_SESSIONS_SEQUENCE_WRITES=true # AGENTA_SESSIONS_LIVE_AUTH_RECHECK_SECONDS=60 # AGENTA_SESSIONS_LIVE_READER_BUFFER_LIMIT=256 # --- Attachment limits (files attached to an agent chat turn) --- # Per-file caps in bytes, by kind: 10 MB, except audio at 15 MB. Read by the api. # AGENTA_ATTACHMENTS_MAX_IMAGE_BYTES=10485760 # AGENTA_ATTACHMENTS_MAX_AUDIO_BYTES=15728640 # AGENTA_ATTACHMENTS_MAX_DOCUMENT_BYTES=10485760 # AGENTA_ATTACHMENTS_MAX_OTHER_BYTES=10485760 # Per-session totals across stored attachments: 1000 files, 256 MB. # AGENTA_ATTACHMENTS_MAX_PER_SESSION_COUNT=1000 # AGENTA_ATTACHMENTS_MAX_PER_SESSION_BYTES=268435456 # Uploads in flight for one session at once. # AGENTA_ATTACHMENTS_MAX_PENDING_PER_SESSION=20 # Seconds. An unfinished upload is reclaimed after 15 min; an attachment no message # references is deleted after 24 h; the sweep runs hourly. # AGENTA_ATTACHMENTS_PENDING_TTL_SECONDS=900 # AGENTA_ATTACHMENTS_UNREFERENCED_TTL_SECONDS=86400 # AGENTA_ATTACHMENTS_SWEEP_INTERVAL_SECONDS=3600 # Read by the runner. Attachments per user turn, and milliseconds to fetch one attachment. # AGENTA_ATTACHMENTS_MAX_PER_TURN=100 # AGENTA_ATTACHMENTS_FETCH_TIMEOUT_MS=15000 # ================================================================== # # Agenta - API # ================================================================== # # AGENTA_API_CACHING_ENABLED=true # AGENTA_API_TRACING_QUERY_DEFAULT_LIMIT=100 # AGENTA_API_TRACING_QUERY_MAX_LIMIT=1000 # ================================================================== # # Agenta - Logging # ================================================================== # # AGENTA_LOGGING_CONSOLE_ENABLED=true # AGENTA_LOGGING_CONSOLE_LEVEL=TRACE # AGENTA_LOGGING_FILE_ENABLED=true # AGENTA_LOGGING_FILE_LEVEL=WARNING # AGENTA_LOGGING_FILE_PATH=error # AGENTA_LOGGING_OTLP_ENABLED=false # AGENTA_LOGGING_OTLP_LEVEL=INFO # ================================================================== # # Agenta - OTLP # ================================================================== # # AGENTA_OTLP_MAX_BATCH_BYTES=10485760 # ================================================================== # # Agenta - Redaction (online redaction filter, Slice 1 known-value pass) # ================================================================== # # AGENTA_REDACTION_MODE=known # Name matchers (comma-separated), each MERGES onto its built-in default: # AGENTA_REDACTED_PREFIXES= # AGENTA_REDACTED_SUFFIXES= # AGENTA_REDACTED_BLOCKLIST= # Literal values never redacted (merges onto the default booleans/flags): # AGENTA_REDACTED_ALLOWLIST= # ================================================================== # # Agenta - Services (code/hook/middleware) # ================================================================== # # Custom-code evaluator runner: local (default, no sandbox restrictions) | restricted (limits builtins # and imports, not an isolation boundary) | daytona (one isolated sandbox per evaluation). # Use local or restricted only when everyone who can create evaluators is trusted. # AGENTA_SERVICES_CODE_SANDBOX_RUNNER=local # Hard timeout in seconds for one custom-code evaluator run (keep it below the # services worker timeout) # AGENTA_SERVICES_CODE_SANDBOX_TIMEOUT=45 # Seconds a custom-code evaluator run waits for a free slot (16 per services # worker) before it fails; 0 fails at once. Keep the wait plus the timeout # above below 60 s (the API's timeout for one evaluator call) # AGENTA_SERVICES_CODE_SANDBOX_WAIT_TIMEOUT=10 # AGENTA_SERVICES_MIDDLEWARE_AUTH_ENABLED=true # AGENTA_SERVICES_MIDDLEWARE_CACHING_ENABLED=true # Comma-separated web origins allowed to call services in split-origin development setups: # AGENTA_SERVICES_ALLOWED_ORIGINS=http://localhost:3000,http://192.0.2.10:8680 # ================================================================== # # Agenta - Egress (SSRF protection) # ================================================================== # AGENTA_INSECURE_EGRESS_ALLOWED=false # ================================================================== # # Agenta - Gateways # ================================================================== # # Which gateways this deployment serves. Both are read by the api; the web container reads # AGENTA_MCP_GATEWAY_ENABLED from this same file to decide whether to show the MCP settings # tab. Recreate api, services, runner and web after changing either. # The MCP gateway lets an agent reach an MCP server through Agenta, so the server's # credential stays here rather than travelling into the sandbox. On by default. Set false to # turn it off: every MCP gateway route is refused, the MCP settings tab is hidden, and an # agent dials its declared MCP servers directly, as it did before the gateway existed. AGENTA_MCP_GATEWAY_ENABLED=true # The same for model calls, keeping a provider key out of the sandbox. OFF by default, # because turning it on changes how every model call in every project is routed. While it is # off, a model call resolves the project's stored provider key and injects it into the run, # exactly as before. AGENTA_LLM_GATEWAY_ENABLED=false # Serve Gemini Flash models from your own Google Cloud Vertex AI account through the LLM # gateway (the "Built-in: agenta" models). Both must be set. # AGENTA_LLM_GATEWAY_VERTEX_SA_JSON_B64= # AGENTA_LLM_GATEWAY_VERTEX_PROJECT= # Send those calls on Vertex Priority PayGo (billed above Standard, fewer stalls). # AGENTA_LLM_GATEWAY_VERTEX_PRIORITY=false # The gateway relays every MCP call an agent makes, so its own outbound guard decides which # MCP servers an agent can reach. That guard requires https and refuses private and internal # addresses, which is the wrong answer for a self-hosted install, where an MCP server usually # sits on your own network or is served over plain http. True here lets the relay reach those # servers; with it false they fail with "blocked target". Set it to false if this deployment # is open to untrusted users, because a project could then aim an MCP server at an address # inside your network. This is a separate setting from AGENTA_INSECURE_EGRESS_ALLOWED above, # which governs webhooks. Read by the api, so recreate api after changing it. AGENTA_GATEWAYS_INSECURE_EGRESS_ALLOWED=true # A narrower alternative to AGENTA_GATEWAYS_INSECURE_EGRESS_ALLOWED. Hostnames listed here # skip the guard whatever their scheme or address, both when a URL is saved and when the # relay calls it. That only narrows anything while the line above is false: set it to false # and list the one known internal MCP server here, and every other target stays guarded. # Listing hosts without changing that line narrows nothing, because true admits them all. # Comma-separated, no scheme: # AGENTA_MCP_GATEWAY_HOST_ALLOWLIST=mcp.internal,10.0.0.5 # Gateway credentials are bearer credentials, so Agenta sends them over https, or over plain # http to a loopback host, which never leaves the machine. True here lifts that rule for a # self-hosted deployment reached at a plain-http address that is not loopback, such as an IP # or a LAN name, which would otherwise have every gateway-routed model call refused with # `gateway_insecure_endpoint`. Set it to false if this deployment is open to untrusted users # or is reached across a network you do not trust. A provider's own key is never covered by # this opt-in. Read by the services and runner containers, so recreate both after a change. AGENTA_GATEWAYS_INSECURE_HTTP_ALLOWED=true # ================================================================== # # alembic # ================================================================== # # ALEMBIC_AUTO_MIGRATIONS=true # ALEMBIC_CFG_PATH_CORE=/app/oss/databases/postgres/migrations/core/alembic.ini # ALEMBIC_CFG_PATH_TRACING=/app/oss/databases/postgres/migrations/tracing/alembic.ini # ================================================================== # # slack # ================================================================== # # SLACK_CLIENT_ID= # SLACK_CLIENT_SECRET= # SLACK_SIGNING_SECRET= # ================================================================== # # cloudflare # ================================================================== # # CLOUDFLARE_TURNSTILE_ALLOWED_HOSTNAMES= # CLOUDFLARE_TURNSTILE_SECRET_KEY= # CLOUDFLARE_TURNSTILE_SITE_KEY= # ================================================================== # # composio # ================================================================== # # COMPOSIO_API_KEY= # COMPOSIO_API_URL=https://backend.composio.dev/api/v3.1 # ================================================================== # # crisp # ================================================================== # # CRISP_WEBSITE_ID= # ================================================================== # # Sandbox - Daytona (code evaluator) # ================================================================== # # The code evaluator's sandbox, not the agent runner (which has its own AGENTA_RUNNER_DAYTONA_* # set above). It may use the same Daytona account, but not the same snapshot: this image has no # agent harness installed. # DAYTONA_API_KEY= # DAYTONA_API_URL=https://app.daytona.io/api # DAYTONA_TARGET=eu # The code evaluator's snapshot. # DAYTONA_SNAPSHOT_CODE= # Generic fallback snapshot, used when DAYTONA_SNAPSHOT_CODE is unset. # DAYTONA_SNAPSHOT= # Publishes the durable store on a public URL so Daytona agent sandboxes can mount it # (dev compose, `with-tunnel` profile). # NGROK_AUTHTOKEN= # ================================================================== # # docker # ================================================================== # # DOCKER_NETWORK_MODE=bridge # compose defaults to "bridge" via ${DOCKER_NETWORK_MODE:-bridge}; uncomment only to override (e.g. "host") # ================================================================== # # identity - OIDC providers # ================================================================== # # APPLE_OAUTH_CLIENT_ID= # APPLE_OAUTH_CLIENT_SECRET= # APPLE_KEY_ID= # APPLE_PRIVATE_KEY= # APPLE_TEAM_ID= # AZURE_AD_OAUTH_CLIENT_ID= # AZURE_AD_OAUTH_CLIENT_SECRET= # AZURE_AD_DIRECTORY_ID= # BITBUCKET_OAUTH_CLIENT_ID= # BITBUCKET_OAUTH_CLIENT_SECRET= # BOXY_SAML_OAUTH_CLIENT_ID= # BOXY_SAML_OAUTH_CLIENT_SECRET= # BOXY_SAML_URL= # DISCORD_OAUTH_CLIENT_ID= # DISCORD_OAUTH_CLIENT_SECRET= # FACEBOOK_OAUTH_CLIENT_ID= # FACEBOOK_OAUTH_CLIENT_SECRET= # GITHUB_OAUTH_CLIENT_ID= # GITHUB_OAUTH_CLIENT_SECRET= # GITLAB_BASE_URL= # GITLAB_OAUTH_CLIENT_ID= # GITLAB_OAUTH_CLIENT_SECRET= # GOOGLE_OAUTH_CLIENT_ID= # GOOGLE_OAUTH_CLIENT_SECRET= # GOOGLE_WORKSPACES_OAUTH_CLIENT_ID= # GOOGLE_WORKSPACES_OAUTH_CLIENT_SECRET= # GOOGLE_WORKSPACES_HD= # LINKEDIN_OAUTH_CLIENT_ID= # LINKEDIN_OAUTH_CLIENT_SECRET= # OKTA_OAUTH_CLIENT_ID= # OKTA_OAUTH_CLIENT_SECRET= # OKTA_DOMAIN= # TWITTER_OAUTH_CLIENT_ID= # TWITTER_OAUTH_CLIENT_SECRET= # ================================================================== # # llm - provider API keys # ================================================================== # # Used by projects without a key of their own only when this is true (default true). # AGENTA_SERVICES_ENV_PROVIDER_KEYS_ENABLED=true # ALEPHALPHA_API_KEY= # ANTHROPIC_API_KEY= # ANYSCALE_API_KEY= # COHERE_API_KEY= # DEEPINFRA_API_KEY= # GEMINI_API_KEY= # GROQ_API_KEY= # MINIMAX_API_KEY= # MISTRAL_API_KEY= # OPENAI_API_KEY= # OPENROUTER_API_KEY= # PERPLEXITYAI_API_KEY= # TOGETHERAI_API_KEY= # XAI_API_KEY= # ================================================================== # # loops # ================================================================== # # LOOPS_API_KEY= # ================================================================== # # postgres # ================================================================== # # POSTGRES_USER=username # POSTGRES_PASSWORD=password # POSTGRES_PORT=5432 # POSTGRES_URI_CORE=postgresql+asyncpg://username:password@postgres:5432/agenta_oss_core # POSTGRES_URI_SUPERTOKENS=postgresql://username:password@postgres:5432/agenta_oss_supertokens # POSTGRES_URI_TRACING=postgresql+asyncpg://username:password@postgres:5432/agenta_oss_tracing # ================================================================== # # posthog # ================================================================== # POSTHOG_API_KEY=phc_hmVSxIjTW1REBHXgj2aw4HW9X6CXb6FzerBgP9XenC7 # POSTHOG_API_URL= # ================================================================== # # redis # ================================================================== # # REDIS_URI=redis://redis:6379/0 # REDIS_URI_DURABLE=redis://redis-durable:6381/0 # REDIS_URI_VOLATILE=redis://redis-volatile:6379/0 # ================================================================== # # smtp # ================================================================== # # SMTP is preferred for email delivery. For host Mailpit from Docker, use # SMTP_HOST=host.docker.internal. Use SMTP_HOST=mailpit only when Mailpit is on # the same Docker Compose network. # SMTP_HOST= # SMTP_PORT=1025 # SMTP_USERNAME= # SMTP_PASSWORD= # SMTP_FROM_EMAIL= # SMTP_USE_TLS=true # SMTP_USE_SSL=false # SMTP_TIMEOUT=10 # ================================================================== # # sendgrid # ================================================================== # # SendGrid remains supported as a fallback when SMTP is not fully configured. # SENDGRID_API_KEY= # SENDGRID_FROM_EMAIL= # ================================================================== # # supertokens # ================================================================== # # SUPERTOKENS_API_KEY= # SUPERTOKENS_APPLICATION=default # SUPERTOKENS_PASSWORD_MAX_LENGTH= # SUPERTOKENS_PASSWORD_MIN_LENGTH=8 # SUPERTOKENS_PASSWORD_POLICY=strong # SUPERTOKENS_PASSWORD_REGEX= # SUPERTOKENS_TENANT=tenant # SUPERTOKENS_URI_CORE=http://supertokens:3567 # ================================================================== # # Network - Traefik / Nginx (compose-only) # ================================================================== # # TRAEFIK_PROTOCOL=http # TRAEFIK_DOMAIN=localhost # TRAEFIK_PORT=80 # TRAEFIK_UI_PORT=8080 # TRAEFIK_HTTPS_PORT=443 # TRAEFIK_SSL_DIR=/home/user/ssl_certificates # NGINX_PORT=80 # ================================================================== # # Compose project name # ================================================================== # # COMPOSE_PROJECT_NAME=agenta-oss-gh # ================================================================== # # Object store (durable session mounts) # ================================================================== # # These defaults drive the SeaweedFS object store BUNDLED in this compose file (the `seaweedfs` # service), so agent/session mounts work out of the box. They are kept consistent with that # service's own config. To use an external S3-compatible store (AWS S3, Cloudflare R2, MinIO) # instead, point ENDPOINT_URL/ACCESS_KEY/SECRET_KEY/BUCKET at it and clear SIGNING_KEY (its # presence selects the bundled-SeaweedFS signing path). Docs (a how-to covers external stores): # https://docs.agenta.ai/self-host/configuration#store-durable-object-store # ACCESS_KEY/SECRET_KEY/SIGNING_KEY are secrets (REPLACE in production!), same pattern as # AGENTA_AUTH_KEY/AGENTA_CRYPT_KEY above. The `seaweedfs` service and the api/worker/cron all # read these same values, so any shared replacement still works out of the box. Generate the # signing key with: openssl rand -base64 32 AGENTA_STORE_ACCESS_KEY=replace-me AGENTA_STORE_SECRET_KEY=replace-me AGENTA_STORE_ENDPOINT_URL=http://seaweedfs:8333 AGENTA_STORE_BUCKET=agenta-store AGENTA_STORE_SIGNING_KEY=replace-me # AGENTA_STORE_STS_ENDPOINT_URL= # AGENTA_STORE_REGION=us-east-1 # AGENTA_STORE_NAMESPACE= # AGENTA_STORE_JWT_ISSUER=http://api:8000 # The bundled store's web-identity path mints an ephemeral keypair per api process, so a SINGLE # api replica works with this unset. If you scale the api past one replica, set the SAME PEM on # every replica or STS token minting fails intermittently (SeaweedFS caches one JWKS). # AGENTA_STORE_JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----" # # Publish the bundled store on the internet (Daytona sandboxes only). Daytona runs each agent in a # cloud sandbox that reaches the store from outside the deployment, so the internal `seaweedfs:8333` # endpoint is unreachable and agent file writes are silently dropped. Set both vars below to expose # the store on its own subdomain through traefik, add a DNS record for that host, then set # AGENTA_STORE_ENDPOINT_URL=https://store.example.com. Leave this off for local sandboxes. # See https://docs.agenta.ai/self-host/agent-execution/daytona # AGENTA_STORE_TRAEFIK_ENABLE=true # AGENTA_STORE_DOMAIN=store.example.com # AGENTA_WORKER_STREAMS / AGENTA_WORKER_QUEUES: worker topology selectors — # set inline per-service in compose, not here; see docs/designs/workers-sprawl/specs.md