openvibers/openvibe.actor .env.example
.env.example
| 1 | # OpenVibe.Actor — environment (production: /etc/openvibe/actor.env). Names only; never commit values. |
| 2 | |
| 3 | NODE_ENV=production |
| 4 | PORT=4950 |
| 5 | HOST=127.0.0.1 |
| 6 | BASE_URL=https://openvibe.actor |
| 7 | TRUST_PROXY=2 |
| 8 | # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh actor: the runtime role through PgBouncer, |
| 9 | # the owner on a direct connection (migrations), and Valkey (shared limit counters). |
| 10 | # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. |
| 11 | DATABASE_URL= |
| 12 | DATABASE_DIRECT_URL= |
| 13 | VALKEY_URL= |
| 14 | VALKEY_PREFIX= |
| 15 | # Per-caller limits (server/http/caller-limits.js): reads one caller may make to the API per minute and per hour. |
| 16 | #ACTOR_LIMITS_MINUTE=120 |
| 17 | #ACTOR_LIMITS_HOUR=3000 |
| 18 | |
| 19 | # OpenVibe.Network: SSO (OAuth client `actor`, PKCE S256) and its JWKS; app tokens for audience openvibe.actor. |
| 20 | OV_NETWORK_URL=https://openvibe.network |
| 21 | OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 |
| 22 | OV_OAUTH_CLIENT_ID=actor |
| 23 | OV_OAUTH_CLIENT_SECRET= |
| 24 | # OV_OAUTH_REDIRECT_URI=https://openvibe.actor/auth/callback |
| 25 | # ACTOR_AUDIENCE=openvibe.actor |
| 26 | |
| 27 | # OpenVibe.AI (the model gateway a person's own keys live in; server/runtime/models.js). The catalog flag is off by |
| 28 | # default: with it on, Actor reads GET /v1/models with its service token and offers the aliases and exact ids where a |
| 29 | # person picks the model their tasks run on. |
| 30 | # OV_AI_URL=https://ai.openvibe.services |
| 31 | # ACTOR_AI_CATALOG=1 |
| 32 | |
| 33 | # OpenVibe.Events → Actor (ADR-033 account export and deletion): the secret signs a delivery (comma-separated for |
| 34 | # rotation, 32+ characters each; unset makes POST /internal/events answer 503); the url is where the two subscriptions |
| 35 | # are created at boot (off when unset); ACTOR_EVENTS_SUBSCRIBE=0 turns that off. |
| 36 | ACTOR_EVENTS_SECRET= |
| 37 | ACTOR_EVENTS_URL= |
| 38 | #ACTOR_EVENTS_ENDPOINT=http://127.0.0.1:4950/internal/events |
| 39 | |
| 40 | # OpenVibe.AI: the AI layer of this product (the owner, 11-06: every product on the one router). With |
| 41 | # ACTOR_AI_ROUTER=1 every model call is a run of ai.complete on AI, which picks the offer by price, latency and |
| 42 | # policy and says which model ran; Actor then needs NO provider key below. The person a task belongs to rides as |
| 43 | # on_behalf_of, so their allowance and their Balance pay; the run is theirs. |
| 44 | # Hosted production defaults on; a self-hosted Actor leaves it off and keeps its own model below. |
| 45 | ACTOR_AI_ROUTER= |
| 46 | # Hosted turns use Exchange's compatible API with Actor's existing service token. A slow class or |
| 47 | # targeted run still uses AI's runs API; 0 rolls ordinary turns back to the runs API. |
| 48 | # ACTOR_EXCHANGE_ROUTER=0 |
| 49 | # ACTOR_EXCHANGE_URL=https://api.openvibe.exchange |
| 50 | # The token is Actor's service token for audience openvibe.ai (ai.run.create, namespace ai.complete). |
| 51 | # OV_AI_URL=https://ai.openvibe.services |
| 52 | # ACTOR_AI_TIMEOUT_MS=180000 |
| 53 | # ACTOR_AI_WAIT_MS=120000 |
| 54 | # Each tier's policy on the router (economy | balanced | fast | auto | private), or an exact id |
| 55 | # (<org>/<model>@<revision>) when AI's catalog is on. |
| 56 | # ACTOR_AI_MODEL_FAST=openvibe/economy |
| 57 | # ACTOR_AI_MODEL_SMART=openvibe/balanced |
| 58 | # ACTOR_AI_MODEL_BEST=openvibe/auto |
| 59 | # ACTOR_AI_MODEL_CHECK=openvibe/economy |
| 60 | # ACTOR_AI_MODEL_VISION=openvibe/auto |
| 61 | # The per-call ceiling (USD, exact decimal) AI holds against the person's Balance. Unset: no cap. |
| 62 | # ACTOR_AI_MAX_COST_USD= |
| 63 | |
| 64 | # The model providers behind the agents (server/agents/catalog.js). Unused when ACTOR_AI_ROUTER=1; keep them for a |
| 65 | # self-hosted Actor (docs/self-host.md). An agent without its key is listed as unavailable. |
| 66 | ACTOR_DEEPSEEK_API_KEY= |
| 67 | # ACTOR_DEEPSEEK_MODEL=deepseek-flash |
| 68 | ACTOR_OPENAI_API_KEY= |
| 69 | # ACTOR_OPENAI_MODEL=gpt-5-mini |
| 70 | # ACTOR_OPENAI_CHECK_MODEL=gpt-5-nano |
| 71 | # The checker for answers backed by tool results (it compares them; the nano model did not): |
| 72 | # ACTOR_OPENAI_GROUNDED_CHECK_MODEL=gpt-5-mini |
| 73 | # The open model on this server (private mode): an OpenAI-compatible server such as llama.cpp. |
| 74 | ACTOR_LOCAL_LLM_URL= |
| 75 | ACTOR_LOCAL_LLM_MODEL= |
| 76 | |
| 77 | # The runtime on any OpenAI-compatible model instead of DeepSeek (a self-hosted Actor's usual choice; docs/self-host.md): |
| 78 | # its endpoint, model, key (if any) and price per million tokens (0 for your own hardware). |
| 79 | ACTOR_RUNTIME_URL= |
| 80 | ACTOR_RUNTIME_MODEL= |
| 81 | ACTOR_RUNTIME_API_KEY= |
| 82 | ACTOR_RUNTIME_INPUT_USD_PER_MTOK=0 |
| 83 | ACTOR_RUNTIME_OUTPUT_USD_PER_MTOK=0 |
| 84 | |
| 85 | # A self-hosted Actor (docs/self-host.md): one owner, no OpenVibe.Network. `npm run selfhost:init` writes these. |
| 86 | # ACTOR_SELF_HOSTED=1 |
| 87 | # ACTOR_OWNER_NAME= |
| 88 | # ACTOR_OWNER_SUBJECT= |
| 89 | # ACTOR_OWNER_PASSWORD_HASH= |
| 90 | # ACTOR_OWNER_TOKEN= |
| 91 | # ACTOR_SESSION_SECRET= |
| 92 | # DATA_DIR= |
| 93 | # The OpenVibe services the runtime acts through. |
| 94 | # Direct coding tasks use Actor's shared loop and Codes tool by default; set 0 to use the old Codes adapter. |
| 95 | # ACTOR_UNIFIED_CODE_RUNS=1 |
| 96 | # Mid-run model switching and the Codes session bridge are on by default; set either to 0 to turn it off. |
| 97 | # ACTOR_A4_MODEL_SWITCH=1 |
| 98 | # ACTOR_CODES_SESSION_BRIDGE=1 |
| 99 | # ACTOR_SEARCH_URL=https://search.openvibe.network |
| 100 | # ACTOR_TOOLS_URL=https://openvibe.tools |
| 101 | # OpenVibe.Space: the person's own spaces, which their agent builds (plan 2026-10-22 §Z stage Z1). With this |
| 102 | # address the space_* tools are offered to a person's task; without it they are off. |
| 103 | # ACTOR_SPACE_URL=http://127.0.0.1:4940 |
| 104 | # OpenVibe.Watch: a trigger's subscription lives there, created and changed with the person's own token. Empty |
| 105 | # turns triggers off. |
| 106 | # ACTOR_WATCH_URL=http://127.0.0.1:4730 |
| 107 | # The files and charts a task makes (Actor v2, stage V2-4) live in Actor's own PostgreSQL, private to the person who |
| 108 | # asked, and are served from the task's own page (server/runtime/artifacts.js says why they are not on OpenVibe.Media). |
| 109 | # The largest single file a task may make, and the most one task may hold. |
| 110 | # ACTOR_ARTIFACT_MAX_FILE_BYTES=262144 |
| 111 | # ACTOR_ARTIFACT_MAX_TASK_BYTES=2097152 |
| 112 | |
| 113 | # Durable runs (Actor v2, stage V2-9): a checkpoint after every step, sealed with AES-256-GCM under this key (64 hex |
| 114 | # characters). Unset means checkpoints are off and a restart fails a running task as before. Never commit the value. |
| 115 | # ACTOR_CHECKPOINT_KEY= |
| 116 | # The last N checkpoints kept per task (older ones are pruned), and how many times a task may resume after a restart. |
| 117 | # ACTOR_CHECKPOINT_KEEP=50 |
| 118 | # ACTOR_CHECKPOINT_MAX_RESUMES=2 |
| 119 | |
| 120 | |
| 121 | # Money: the free tier per person, and the operator's ceiling over everyone in one UTC day (USD). |
| 122 | #ACTOR_FREE_TASKS_PER_DAY=20 |
| 123 | #ACTOR_FREE_PER_TASK_USD=0.05 |
| 124 | #ACTOR_FREE_PER_DAY_USD=0.05 |
| 125 | #ACTOR_MAX_COST_USD_PER_DAY=2 |
| 126 | #ACTOR_MAX_RUNNING=4 |
| 127 | #ACTOR_TASK_TIMEOUT_MS=180000 |
| 128 | # Personal agents: maximum definitions per person and due agents claimed per scheduler tick. |
| 129 | #ACTOR_AGENTS_MAX_PER_OWNER=10 |
| 130 | #ACTOR_AGENTS_TICK_MAX=5 |
| 131 | # Task webhooks: how often due deliveries go out, and how long one delivery may take |
| 132 | #ACTOR_WEBHOOK_INTERVAL_MS=5000 |
| 133 | #ACTOR_WEBHOOK_TIMEOUT_MS=10000 |
| 134 | |
| 135 | # optional: defaults to true in production |
| 136 | # COOKIE_SECURE=true |
| 137 |