Env Reference

This is the canonical list of every ROBOCO_* setting. They are all read by a single Pydantic-Settings class (roboco/config.py), loaded from the process environment and .env, prefixed with ROBOCO_, and case-insensitive. Most have a working default; the few that don't, and the ones the orchestrator refuses to start without, are flagged below.

You rarely set most of these

For a working deploy you set the two required secrets, the host paths, and maybe a feature flag or two. The long tables here exist so that when you do need to tune a timeout or a window, you can find it. The defaults shown are RoboCo's config defaults; a few compose-only defaults differ and are called out.

A feature flag set in .env takes effect on the next backend restart. The env-gated subsystems can also be toggled from the panel's Settings → Feature Flags card, which persists to the settings store and overrides the env default; an unset toggle falls back to the env/config default. See the Optional capabilities section for what each subsystem does.

Required secrets

VariableDefaultPurpose
ROBOCO_ENCRYPTION_KEY(empty — required)Fernet key encrypting every per-project git token at rest. The orchestrator refuses to start without it (compose :? guard). Generate with python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())'. Keep it stable — losing it makes stored tokens undecryptable.
ROBOCO_AGENT_AUTH_SECRET(empty — required for compose)HMAC secret signing the per-agent X-Agent-Token. Generate with python -c 'import secrets; print(secrets.token_hex(32))'.
ROBOCO_CLOUD_AUTH_SECRET(empty — required when cloud auth is on)Signs the session cookie's JWT. The orchestrator refuses to start if ROBOCO_CLOUD_AUTH_ENABLED=true and this is unset. Generate with python -c 'import secrets; print(secrets.token_hex(32))'. Irrelevant while cloud auth is off.

Security & auth

VariableDefaultPurpose
ROBOCO_AGENT_AUTH_REQUIREDfalseFail-closed secure mode. When true, every API call must carry a valid token. Requires ROBOCO_PANEL_AGENT_TOKEN to keep the panel working. On a trusted LAN, leave false (header-trust mode).
ROBOCO_PANEL_AGENT_TOKEN(empty)The CEO token nginx injects as X-Agent-Token on /api and /ws in secure mode, so the panel works without the browser holding the signing secret. Generate with make panel-token.

Application & API server

VariableDefaultPurpose
ROBOCO_APP_VERSION0.29.0Reported app version.
ROBOCO_DEBUGfalseDebug mode.
ROBOCO_ENVIRONMENTdevelopmentOne of development / staging / production. Selects the JSON log renderer (prod) vs console renderer. The compose stack sets production.
ROBOCO_HOST127.0.0.1Bind address. Use 0.0.0.0 in containers.
ROBOCO_PORT8000API port.
ROBOCO_API_URL(unset)Override base URL for containerized agents (e.g. http://roboco-orchestrator:8000); otherwise built from host/port.
ROBOCO_CORS_ORIGINS["http://localhost:3000","http://localhost:5173"]Allowed CORS origins. The single-origin nginx setup means you rarely change this.
ROBOCO_CORS_ALLOW_CREDENTIALStrueWhether CORS allows credentials.
ROBOCO_PUBLIC_BASE_URLhttp://127.0.0.1:8000Reachable base URL embedded in commit-trailer links — set to your LAN IP or domain so the links resolve.

Database

VariableDefaultPurpose
ROBOCO_DATABASE_HOSTlocalhostPostgres host (roboco-postgres in compose).
ROBOCO_DATABASE_PORT5432Postgres port.
ROBOCO_DATABASE_USERrobocoPostgres user.
ROBOCO_DATABASE_PASSWORDrobocoPostgres password — change it for any real deployment.
ROBOCO_DATABASE_NAMErobocoDatabase name.
ROBOCO_DATABASE_ECHOfalseLog every SQL statement.
ROBOCO_DATABASE_POOL_SIZE10Connection pool size.
ROBOCO_DATABASE_MAX_OVERFLOW20Extra connections beyond the pool.
ROBOCO_DATABASE_POOL_TIMEOUT10Seconds to wait for a pooled connection.
ROBOCO_DATABASE_POOL_RECYCLE1800Recycle a connection after this many seconds.

A daily pg_dump of this database runs automatically via an always-on sidecar — no flag, no env var here to set. See Backups.

Redis

VariableDefaultPurpose
ROBOCO_REDIS_HOSTlocalhostRedis host (roboco-redis in compose).
ROBOCO_REDIS_PORT6379Redis port.
ROBOCO_REDIS_DB0Redis logical DB.
ROBOCO_REDIS_PASSWORD(unset)Optional Redis password.

RAG, embeddings & Ollama

VariableDefaultPurpose
ROBOCO_RAG_PERSIST_DIR.robocoLocal RAG persistence dir.
ROBOCO_RAG_CHUNK_STRATEGYfixedOne of fixed / semantic / hierarchical / contextual. fixed recommended; semantic loads an extra model.
ROBOCO_RAG_CHUNK_SIZE512Base chunk size.
ROBOCO_RAG_CHUNK_SIZE_DOCS1536Chunk size for docs.
ROBOCO_RAG_CHUNK_SIZE_JOURNALS1024Chunk size for journals/reflections.
ROBOCO_RAG_CHUNK_OVERLAP128Chunk overlap.
ROBOCO_RAG_AUTO_UPDATE_ENABLEDtrueWhether the RAG index auto-refreshes.
ROBOCO_RAG_AUTO_UPDATE_INTERVAL300Seconds between auto-updates.
ROBOCO_ANTHROPIC_API_KEY(unset)Optional Anthropic key. Agents use the mounted Claude Code auth, not a metered key.
ROBOCO_DEFAULT_EMBEDDING_MODELqwen3-embedding:0.6bEmbedding model (1024-dim).
ROBOCO_EMBEDDING_DIMENSIONS1024Embedding dimensions — must match the model.
ROBOCO_LOCAL_LLM_MODELglm-5:cloudLocal LLM for RAG answer synthesis.
ROBOCO_LOCAL_LLM_BASE_URLhttp://roboco-ollama:11434/v1Ollama OpenAI-compatible endpoint.
ROBOCO_OLLAMA_BASE_URLhttp://roboco-ollama:11434Ollama native endpoint (embeddings, model management).

Workspaces & git timeouts

VariableDefaultPurpose
ROBOCO_WORKSPACES_ROOT/data/workspacesRoot for all agent git clones.
ROBOCO_WORKSPACE_AUTO_CLONEtrueAuto-clone a repo on first workspace access.
ROBOCO_WORKSPACE_CLONE_TIMEOUT300Seconds for a git clone.
ROBOCO_WORKSPACE_REFRESH_FETCH_TIMEOUT_SECONDS60Timeout for the best-effort git fetch on re-entry into a healthy clone.
ROBOCO_WORKSPACE_INSTALL_DEV_DEPStrueAfter cloning, install the project's dev dependencies into the workspace so make quality runs without re-downloading tooling.
ROBOCO_WORKSPACE_DEP_INSTALL_TIMEOUT_SECONDS600Timeout for that post-clone dependency install.
ROBOCO_GIT_COMMAND_TIMEOUT_SECONDS30Timeout for a single local git subprocess (status, log, checkout).
ROBOCO_GIT_COMMIT_TIMEOUT_SECONDS180Timeout for staging + committing a changeset.
ROBOCO_GIT_NETWORK_TIMEOUT_SECONDS120Timeout for git ops that talk to origin (fetch / pull / push).
ROBOCO_PROTECTED_GIT_URLS(empty)Repo URL substrings a project may not point at — blocks agent commits/merges from reaching a protected repo.

Agent images (spawn source)

VariableDefaultPurpose
ROBOCO_AGENT_IMAGE_REGISTRY(empty)Registry namespace for pre-built agent images (e.g. ghcr.io/rennf93). Empty = build locally. The registry compose wires this to ROBOCO_REGISTRY.
ROBOCO_AGENT_IMAGE_TAG(empty)Tag for pre-built agent images (e.g. 0.9.0). Empty = implicit :latest. The registry compose wires this to ROBOCO_VERSION.
Deploy-time variables (compose, not config.py)

A few variables are consumed by the compose files and host-mount wiring rather than by config.py: ROBOCO_REGISTRY, ROBOCO_VERSION, ROBOCO_DATA_DIR, ROBOCO_HOST_PROJECT_DIR, ROBOCO_HOST_CLAUDE_DIR / CLAUDE_AUTH_DIR, ROBOCO_HOST_DATA_DIR, ROBOCO_HOST_GROK_DIR, ROBOCO_HOST_CODEX_DIR, ROBOCO_HOST_GEMINI_DIR, ROBOCO_HOST_KIMI_DIR, and ROBOCO_BACKUP_MIRROR_DIR. They are documented in the production deploy reference and Backups.

Transcript retention

VariableDefaultPurpose
ROBOCO_TRANSCRIPT_RETENTION_DAYS14Days to keep agent Claude Code transcripts. A stored panel setting overrides this default.
ROBOCO_TRANSCRIPT_PRUNE_ENABLEDtrueWhether the background sweep prunes old transcripts.
ROBOCO_TRANSCRIPT_PRUNE_INTERVAL_SECONDS3600Minimum seconds between prune passes.

Notifications

VariableDefaultPurpose
ROBOCO_NOTIFICATION_ACK_TTL_HOURS48Hours until an ack-required notification's deadline is stamped at creation. Past that deadline, still unacknowledged, it re-escalates one level up on the backoff schedule below. 0 disables stamping — the legacy behavior, where a notification never expires. Informational (non-ack-required) notifications never get a deadline regardless of this setting. See Notifications.
ROBOCO_NOTIFICATION_REESCALATION_BASE_SECONDS3600Base interval for the re-escalation backoff: the first re-escalation fires at expiry, each one after that doubles the wait from this base (1h, 2h, 4h, 8h, ...) capped at 24h between attempts — instead of re-firing every ~60s sweep tick forever.
ROBOCO_NOTIFICATION_MAX_REESCALATIONS5Hard cap on re-escalations per notification. Past this many attempts, a still-unacked notification is logged once as permanently-unacked and left alone for good.

Spawn pacing, SLAs & reaper windows

The orchestrator's dispatcher uses these to pace spawns, detect loops, and reclaim stuck work. Defaults are tuned for real LLM latency — raise the reaper windows (not lower) if long agent tasks are being reaped mid-work.

VariableDefaultPurpose
ROBOCO_AGENT_TOOL_CALL_WARN100Soft warning threshold for per-session tool calls.
ROBOCO_AGENT_TOOL_CALL_HALT300Hard cap on per-session tool calls; the orchestrator stops the container. Raised from 150 — that ceiling repeatedly halted legitimate multi-file work seconds after a real commit, burning a spawn and the resumed agent's re-verification turns.
ROBOCO_AGENT_LOOP_THRESHOLD3Identical tool+args repeats in the window that flag a loop.
ROBOCO_AGENT_LOOP_WINDOW10How many recent tool calls to inspect for loop detection.
ROBOCO_AGENT_STOP_ATTEMPT_ALLOWANCE1Stop-without-terminal attempts before auto-substitute.
ROBOCO_AGENT_SLA_DEVELOPER_IN_PROGRESS7200SLA (s) for a developer in in_progress.
ROBOCO_AGENT_SLA_DEVELOPER_VERIFYING1800SLA (s) for a developer in verifying.
ROBOCO_AGENT_SLA_QA_CLAIMED1800SLA (s) for QA on a claimed review.
ROBOCO_AGENT_SLA_DOCUMENTER_CLAIMED3600SLA (s) for a documenter on a claimed task.
ROBOCO_AGENT_SLA_CELL_PM_CLAIMED14400SLA (s) for a cell PM on a claimed task.
ROBOCO_CLAIM_STALE_SECONDS180Claim-heartbeat staleness used by the spawn trigger filter.
ROBOCO_STALE_CLAIM_REAP_SECONDS600Reaper-only stale-claim threshold before releasing a claim back to pending.
ROBOCO_PM_CLOSURE_RECENTLY_PAUSED_SECONDS45Debounce before respawning a PM to close a recently paused parent.
ROBOCO_GROK_IDLE_KILL_SECONDS900Idle-container kill threshold for Grok agents (they emit no SDK heartbeat).
ROBOCO_GROK_MAX_COST_USD0.0Per-agent Grok cost ceiling (USD) before kill; 0 disables.
ROBOCO_INTERACTIVE_IDLE_REAP_SECONDS1800Idle-reap threshold for live intake/secretary chats; 0 disables.
ROBOCO_CLAIMED_NO_AGENT_GRACE_SECONDS120Grace window before respawning/releasing a claimed task with no running agent.
ROBOCO_PM_DECISION_WINDOW_SECONDS300Recency window for a PM journal:decision to satisfy gating verbs.
ROBOCO_SPAWN_COOLDOWN_SECONDS60Per-task spawn-rate cooldown.
ROBOCO_ROLE_SPAWN_RATE_PER_MINUTE6Per-role spawn-rate limit per minute.

Gateway: manifests & tracing-gate minimums

VariableDefaultPurpose
ROBOCO_MANIFEST_HOST_DIR/app/manifestsOrchestrator dir where per-agent tool manifests are written; must be a host-bind-mounted path so the daemon can mount each manifest into its agent.
ROBOCO_QA_NOTES_MIN_CHARS80Minimum characters for QA notes.
ROBOCO_DOCS_NOTES_MIN_CHARS20Minimum characters for docs notes.
ROBOCO_DEV_NOTES_MIN_CHARS40Minimum characters for a developer's dev_notes.
ROBOCO_PR_REVIEWER_NOTES_MIN_CHARS40Minimum characters for a PR reviewer's notes.
ROBOCO_QUICK_CONTEXT_MIN_CHARS30Minimum characters for a PM's quick_context resumption section.
ROBOCO_COMMIT_SUBJECT_MIN_CHARS20Minimum characters for a commit subject.
ROBOCO_COMMIT_BANNED_WORDSwip,tmp,asdf,oops,fix,update,change,stuff,thingsBanned single-word commit subjects.

Grok runtime

Only relevant if you run any agent on Grok. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_HOST_GROK_DIR/home/renzof/.grok (compose)Host ~/.grok SuperGrok auth dir; mounted read-write into the orchestrator (token auto-refresh) and read-only into Grok agents. The same value is both the source and target path.
ROBOCO_GROK_AGENT_IMAGEroboco-agent-grok:latestImage the orchestrator spawns for Grok agents.
ROBOCO_GROK_CLI_MODELgrok-buildGrok CLI model id.
ROBOCO_GROK_REASONING_EFFORT(empty)low/medium/high/xhigh/max for all Grok agents; empty keeps the model default.
ROBOCO_GROK_MAX_TURNS200Hard ceiling on agentic turns per Grok run (loop guard).
ROBOCO_GROK_IDLE_KILL_SECONDS900(see reaper table) Idle-kill window for a wedged Grok container.
ROBOCO_GROK_MAX_COST_USD0.0(see reaper table) Per-agent Grok cost ceiling.

Codex runtime

Only relevant if you run any agent on Codex. V1: delivery roles only, not Intake/Secretary. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_HOST_CODEX_DIR~/.codexHost ~/.codex ChatGPT-subscription auth dir (from codex login), mounted read-only as a directory into each Codex agent.
ROBOCO_CODEX_CLI_MODELgpt-5.3-codexCodex CLI model id — Codex has no reliable default, so this is always set explicitly.
ROBOCO_CODEX_OAUTH_CLIENT_ID(unset — built-in default)Override the OIDC client id used for the token-refresh grant, if the default is wrong for your account. A bad refresh never mutates auth.json — worst case is a parked provider.

Gemini runtime

Only relevant if you run any agent on Gemini. V1: delivery roles only, not Intake/Secretary. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_HOST_GEMINI_DIR~/.geminiHost ~/.gemini OAuth login dir (from the interactive gemini login), mounted read-only; each container copies it into a writable local dir and refreshes its own copy in-process — no orchestrator refresh daemon needed.
ROBOCO_GEMINI_CLI_MODELgemini-2.5-proGemini CLI model id — also accepts gemini-2.5-flash / gemini-2.5-flash-lite.
ROBOCO_GEMINI_MAX_TURNS200Hard ceiling on agentic turns per Gemini run (loop guard, Grok parity).
ROBOCO_GEMINI_RATE_LIMIT_RETRY_AFTER_SECONDS60.0Base park-and-retry delay after a quota/rate-limit exit.
ROBOCO_GEMINI_AUTH_RETRY_AFTER_SECONDS60.0Park-and-retry delay after a missing/invalid OAuth credential (entrypoint preflight failure).

Kimi runtime

Only relevant if you run any agent on Kimi. V1: delivery roles only, not Intake/Secretary. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_HOST_KIMI_DIR~/.kimi-codeHost ~/.kimi-code Kimi-subscription auth dir (from kimi login), mounted read-write and shared into every Kimi agent plus the orchestrator — Moonshot's refresh token rotates with only a short reuse grace, so every container redeems the same chain instead of an independent copy.
ROBOCO_KIMI_CLI_MODELkimi-code/k3Kimi CLI model alias — also accepts kimi-code/kimi-for-coding (K2.7) as a cheaper lever.

OpenRouter runtime

Only relevant if you run any agent on OpenRouter. The fleet default is whatever model you picked from the live catalog. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_OPENROUTER_BASE_URLhttps://openrouter.ai/api/v1API base for the OpenRouter provider.

Nebius runtime

Only relevant if you run any agent on Nebius Token Factory. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_NEBIUS_BASE_URLhttps://api.tokenfactory.nebius.com/v1Token Factory OpenAI-compatible API base.
ROBOCO_NEBIUS_CLI_MODELnvidia/nemotron-3-super-120b-a12bDefault Nebius model id (Nemotron 3 Super) used when the mode or role has no other assignment.
ROBOCO_NEBIUS_RATE_LIMIT_RETRY_AFTER_SECONDS60.0Park-and-retry delay after a 429.
ROBOCO_NEBIUS_AUTH_RETRY_AFTER_SECONDS60.0Park-and-retry delay after an auth preflight failure.

Hummin runtime (GLM)

Only relevant if you run any agent on the hummin GLM CLI. See the models section for the full runtime.

VariableDefaultPurpose
ROBOCO_HUMMIN_CLI_MODELglm-5.3-flash:highDefault GLM model id. Applying hummin mode seeds role tiers from it: board/reviewer/PM roles on :high, delivery roles on :low.
ROBOCO_HUMMIN_RATE_LIMIT_RETRY_AFTER_SECONDS60.0Park-and-retry delay after a GLM rate limit.
ROBOCO_HUMMIN_AUTH_RETRY_AFTER_SECONDS60.0Park-and-retry delay after the hummin auth preflight fails.
ROBOCO_HUMMIN_MAX_CONCURRENT(uncapped)Cap on concurrent hummin sessions, if you want one.

Token Factory Sandboxes

Flags for the run_sandbox_tests gateway verb (QA test runs inside a Nebius Token Factory Sandbox microVM). Everything is inert while the flag is off; see Run on Nebius.

VariableDefaultPurpose
ROBOCO_TOKEN_FACTORY_SANDBOXES_ENABLEDfalseMaster switch (also on the Feature Flags card). Requires a saved Nebius key; spawn permission must be granted console-side.
ROBOCO_TOKEN_FACTORY_SANDBOXES_BASE_URLhttps://api.tokenfactory.nebius.com/sandboxesSandboxes API base (the client appends /v1).
ROBOCO_TOKEN_FACTORY_SANDBOXES_IMAGEtag:python:3.12Default sandbox image; a verb call may override it.
ROBOCO_TOKEN_FACTORY_SANDBOXES_TIMEOUT_SECONDS900Default run deadline; a verb call may pass its own (30 to 3600s), and the instance is cancelled best-effort at the deadline.
ROBOCO_TOKEN_FACTORY_SANDBOXES_MAX_ARCHIVE_BYTES64 MiBUpload ceiling for the archived workspace.

Optional subsystem flags (default-off unless noted)

These gate the env-toggled capabilities. Each is inert when off. See Optional capabilities.

Web research — default on

VariableDefaultPurpose
ROBOCO_RESEARCH_ENABLEDtrueMaster switch for web research. When false, the search MCP is not mounted into any agent.
ROBOCO_RESEARCH_PROVIDERtavilytavily / brave / exa / null.
ROBOCO_RESEARCH_API_KEY(unset)Provider key — server-side only, never reaches an agent. Unset = empty-result null provider.
ROBOCO_RESEARCH_MAX_RESULTS5Cap on results per search (1–20).
ROBOCO_RESEARCH_FETCH_MAX_CHARS20000Cap on extracted characters per fetch.
ROBOCO_RESEARCH_TIMEOUT_SECONDS15.0Per-request outbound timeout.
ROBOCO_RESEARCH_DAILY_QUOTA_PER_AGENT50Search+fetch calls per agent per UTC day.

GitHub repo provisioning — default on (inert without token/org)

Creating brand-new repos from an approved pitch is GitHub-only — see Pitch provisioning. This is distinct from a project's per-project Forge selection (GitHub, Gitea, or GitLab), which routes PR/CI/review operations against a repo that already exists — that part works on all three forges. See Choosing a forge.

VariableDefaultPurpose
ROBOCO_PROVISIONING_ENABLEDtrueMaster switch for pitch auto-provisioning. Inert with no token/org regardless.
ROBOCO_PROVISIONING_TOKEN(empty)GitHub PAT (repo + org admin) used to create repos — server-side only.
ROBOCO_PROVISIONING_ORG(empty)GitHub org where new repos are created.
ROBOCO_GITHUB_API_BASE_URLhttps://api.github.comOverride for GitHub Enterprise — used both for provisioning and, per-project, whenever a project's Forge is set to GitHub / GitHub Enterprise. Gitea and GitLab need no equivalent variable: their API base is derived from the project's own Git URL host. See Choosing a forge.
ROBOCO_PROVISIONING_TIMEOUT_SECONDS30.0Per-request provisioning timeout.
ROBOCO_PROVISIONING_REPO_PRIVATEtrueWhether provisioned repos are private.

Architectural conventions — off (config) / on (compose)

VariableDefaultPurpose
ROBOCO_CONVENTIONS_ENABLEDfalse (config) / true (compose)Master switch for the per-project conventions standard (scaffold, ambient injection, baseline constraints, gate enforcement). The compose orchestrator block defaults this on (left off in docker-compose.registry.yml); fully inert when off.

Toolchain matching — default off

VariableDefaultPurpose
ROBOCO_TOOLCHAIN_MATCH_ENABLEDfalse (config) / true (compose)Provision the agent workspace with the target project's Python and block delivery gates when the suite can't run. The compose orchestrator block defaults this on.

Provider overload break — default on

VariableDefaultPurpose
ROBOCO_OVERLOAD_BREAK_ENABLEDtruePark a provider on a persistent overload (HTTP 529/500/503) the way a 429 is parked, instead of crash-retrying.
ROBOCO_GATEWAY_HEALTH_ENABLEDtrueProbe a stale-heartbeat-but-live agent's gateway and kill + respawn it when the gateway is broken (a corrupted /app venv firing no verb), instead of the reaper protecting it forever. Off => spare live containers on verb-heartbeat liveness alone.
ROBOCO_GATEWAY_HEALTH_GRACE_SECONDS180How long an agent gateway may probe as broken before recovery — tolerates a transient probe miss.
ROBOCO_IMAGE_PRUNE_ENABLEDtrueBackground sweep prunes dangling (<none>) Docker images left by agent-image rebuilds, throttled ~6h. Only dangling images are removed — a tagged image or one backing a running container is never touched. Not a feature flag; disable to manage image cleanup yourself.

PR-gate turn cut — default on

Not a subsystem toggle — a delivery-flow behavior. See the merge model.

VariableDefaultPurpose
ROBOCO_PR_GATE_AUTO_SUBMIT_ENABLEDtrueWhen every child of an assembled parent is terminal, run the PM's submit_up / submit_root to the in-path PR gate system-side (as the owning PM) instead of spawning the PM just to press submit — the submit's substance (freshness rebase, integrity check, PR open) is deterministic gate code. A gate rejection falls back to the classic PM closure spawn, and the PM keeps its judgment turns (merge, revision). Off => every closure spawns the PM to submit.

Strategy engine — default off

VariableDefaultPurpose
ROBOCO_STRATEGY_ENGINE_ENABLEDfalseMaster switch for the autonomous strategy engine (notify-only). When off the loop never runs.
ROBOCO_STRATEGY_ENGINE_INTERVAL_SECONDS1800Seconds between assessment passes.
ROBOCO_STRATEGY_STRANDED_BLOCKED_MINUTES120A task blocked longer than this is surfaced as stranded.

Possibilities matrix — default off

VariableDefaultPurpose
ROBOCO_POSSIBILITIES_MATRIX_ENABLEDfalseMaster switch for the i_am_done fast path. Off: every task follows the standard multi-turn plan/verify/submit flow regardless of how complete it looks. On: a task with commits, an open PR, full acceptance-criteria coverage, and no open findings can submit to QA in one call, with PR CI-green standing in for the local quality gate (falling back to the local gate + toolchain check when no CI signal exists). Conventions and findings enforcement are never skipped.

Task & project cost budgets — default off (config) / on in the NAS compose

Project monthly_budget_usd and task budget_usd are project/task fields set in the panel, independent of this flag; the flag decides whether either is ever consulted. See Task & project cost budgets.

VariableDefaultPurpose
ROBOCO_TASK_BUDGETS_ENABLEDfalse (config) / true (docker-compose.yml) / false (docker-compose.registry.yml)Master switch. Off: neither cap is ever consulted regardless of field values. On: a work-starting claim is refused once a project's monthly spend cap is reached (review/doc/gate/inbound-PR claims are exempt), and a background sweep blocks an over-budget task (falling back to a per-TaskType default when budget_usd is null), notifying the CEO.

External / internal PR review — default off

VariableDefaultPurpose
ROBOCO_EXTERNAL_PR_ENABLEDfalse (config) / true (compose)Master switch for inbound external/fork PR review. The compose orchestrator block defaults this on.
ROBOCO_EXTERNAL_PR_POLL_INTERVAL_SECONDS300Seconds between inbound external-PR discovery passes.
ROBOCO_EXTERNAL_PR_AUTHOR_ALLOWLIST(empty)GitHub usernames auto-trusted. Empty = every external PR needs human confirmation.
ROBOCO_EXTERNAL_PR_REQUIRE_HUMAN_CONFIRMtrueRequire explicit human confirmation before any agent fetches/checks-out/executes external code.
ROBOCO_INTERNAL_PR_ENABLEDfalseAlso review org-repo (non-fork) PRs not tied to an active task.

Self-healing CI loop — default off

VariableDefaultPurpose
ROBOCO_SELF_HEAL_ENABLEDfalseMaster switch for the self-heal loop (detect + notify the CEO). When off the loop never runs.
ROBOCO_SELF_HEAL_PROJECT_SLUG(empty) / roboco-api (compose)The registered project that is RoboCo itself — the only repo the loop watches/originates into.
ROBOCO_SELF_HEAL_CI_WORKFLOWci.ymlGitHub Actions workflow file to scope the CI signal to.
ROBOCO_SELF_HEAL_ORIGINATE_ENABLEDfalseSecond opt-in: on a regression, also open a fix task and dispatch it to the Main PM automatically (no manual start). The loop never merges or deploys — the fix ships through the normal gates (QA, PR review, your merge).
ROBOCO_SELF_HEAL_INTERVAL_SECONDS1800Seconds between telemetry passes.
ROBOCO_SELF_HEAL_MAX_OPEN_TASKS3Rolling cap on concurrently-open self-heal tasks.
ROBOCO_SELF_HEAL_MAX_PER_CYCLE1Max self-heal tasks originated in one cycle.

Multi-repo CI-watch — default off

The global switch arms the engine; each project opts in via ci_watch_enabled (+ optional ci_watch_workflow) on its settings page.

VariableDefaultPurpose
ROBOCO_CI_WATCH_ENABLEDfalseMaster switch for watching opted-in projects' CI. When off the engine never runs and no CI telemetry is fetched.
ROBOCO_CI_WATCH_DEFAULT_WORKFLOWci.ymlWorkflow file to scope the CI signal to when a project sets no ci_watch_workflow of its own.
ROBOCO_CI_WATCH_INTERVAL_SECONDS1800Seconds between CI-watch passes.
ROBOCO_CI_WATCH_MAX_OPEN_TASKS3Rolling cap on concurrently-open CI-watch fix tasks per repo.
ROBOCO_CI_WATCH_MAX_PER_CYCLE1Max CI-watch fix tasks opened in one cycle.

Dependency-update bot — default off

The global switch arms the engine; each project opts in via dep_update_command (+ optional dep_update_paths) on its settings page. Detection is read-only — the command runs in a throwaway clone and only the lockfiles are diffed; the real repo is never mutated.

VariableDefaultPurpose
ROBOCO_DEP_UPDATE_ENABLEDfalseMaster switch for the dependency-update bot. When off nothing runs and no throwaway clone is made.
ROBOCO_DEP_UPDATE_INTERVAL_SECONDS604800Seconds between dependency-update passes (default weekly).
ROBOCO_DEP_UPDATE_MAX_OPEN_TASKS3Rolling cap on concurrently-open update-dependencies tasks per repo.
ROBOCO_DEP_UPDATE_MAX_PER_CYCLE1Max update-dependencies tasks opened in one cycle.

Environment branches & EnvSync — default off

A project's environment ladder (an ordered list of {name, branch} rungs) is project configuration, set on its settings page — always available regardless of this flag. ROBOCO_ENV_SYNC_ENABLED only arms the automatic cascade between rungs. See Environment Branches & EnvSync.

VariableDefaultPurpose
ROBOCO_ENV_SYNC_ENABLEDfalseMaster switch for the ladder auto-cascade. Off: a project's ladder still resolves the PR-target branch and the release branch, but nothing syncs the middle rungs automatically. On: a periodic pass merges each rung down into the next; a clean merge auto-pushes, a conflict opens one sync PR + one coordination task and stops that project's cascade for the cycle. Never pushes to the last (release) rung.
ROBOCO_ENV_SYNC_INTERVAL_SECONDS1800Seconds between cascade passes.
ROBOCO_ENV_SYNC_MAX_OPEN_TASKS3Rolling cap on concurrently-open env-sync conflict tasks across all repos.
ROBOCO_ENV_SYNC_MAX_PER_CYCLE1Max projects cascaded in one cycle.

Docs-Sync — default off

No polling interval — triggered directly off the gated release manager's publish step, not a background loop. Requires the docs site itself to be registered as a RoboCo project with a git token. See Docs-Sync.

VariableDefaultPurpose
ROBOCO_DOCS_SYNC_ENABLEDfalseMaster switch. Off: publishing a release never opens a docs-update task. On: a publish checks the registered docs-site project for drift and, if found, opens one task that rides the normal delivery flow (dev → QA → PR-review gate → your merge); never auto-merges. With no docs-site project registered, it skips silently regardless of this flag.
ROBOCO_DOCS_SYNC_MAX_OPEN_TASKS3Rolling cap on concurrently-open docs-sync tasks.
ROBOCO_DOCS_SYNC_MAX_PER_CYCLE1Max docs-sync tasks opened per release publish.

HTTP security guard (fastapi-guard) — off (config) / active on the NAS compose

Not a panel flag — see HTTP security. The registry compose omits this whole trio and stays off.

VariableDefaultPurpose
ROBOCO_GUARD_ENABLEDfalseMaster switch. Off: create_app never mounts the middleware; the request path is byte-for-byte unchanged.
ROBOCO_GUARD_PASSIVE_MODEtrue (config) / false (NAS compose)true detects and logs only, never blocking. false actually blocks a matching request. The NAS compose flips this to enforce once passive-mode calibration reviewed clean.
ROBOCO_GUARD_FAIL_SECUREtrue (config) / true (NAS compose, as of v0.29.0)What happens when a security check itself errors: true fails closed (blocks). As of v0.29.0 the NAS compose also enforces fail_secure — the earlier false relaxation was a holdover from the passive-mode calibration phase.
ROBOCO_GUARD_EMERGENCYfalseKill-switch: blocks every non-whitelisted IP, flippable without a redeploy during an active attack.
ROBOCO_GUARD_EMERGENCY_WHITELIST(empty)Comma-separated IPs exempted from the emergency lockdown above.
ROBOCO_GUARD_TELEMETRY_ENABLEDfalseReports security events/metrics to a guard-core platform via guard-agent. No data leaves the box while off. As of v0.29.0, telemetry payloads exclude HMAC/session headers via agent_sensitive_headers.
ROBOCO_GUARD_AGENT_API_KEY(empty)guard-agent API key — required when telemetry is enabled.
ROBOCO_GUARD_PROJECT_ID(empty)guard-core project id — required when telemetry is enabled.
ROBOCO_GUARD_TRUSTED_CHAIN_PEERS(empty)Comma-separated exact IP address(es) — never a CIDR range — of a host-proxy hop (e.g. Tailscale Serve's docker-bridge gateway) in front of nginx, trusted to appear as a recorded proxy hop in X-Forwarded-For when resolving the real client behind it. Empty: only a loopback rightmost hop peels.
ROBOCO_GUARD_SCAN_RESPONSE_BODYfalseLets return_pattern rules read response bodies, not just status codes. Default off — Roboco's own rules never need it.
ROBOCO_GUARD_LOG_SUSPICIOUS_LEVELWARNINGLog level for suspicious-request entries.

Gated release manager (default-off)

VariableDefaultPurpose
ROBOCO_RELEASE_MANAGER_ENABLEDfalseMaster switch for the gated release manager. When off the loop never runs and no release is proposed. Even on it only PROPOSES — the CEO approves before any publish.
ROBOCO_RELEASE_MIN_COMMITS8Minimum unreleased commits since the last tag before a release is proposed (a feat/security change also qualifies).
ROBOCO_RELEASE_MANAGER_INTERVAL_SECONDS3600Seconds between release-readiness assessment passes.
ROBOCO_RELEASE_GIT_NAMERoboCo Release ManagerCommitter name on the release commit created by ReleaseExecutor.
ROBOCO_RELEASE_GIT_EMAILrelease-manager@roboco.localCommitter email on the release commit.
ROBOCO_RELEASE_SIGN_COMMITSfalseSet to true to GPG-sign the release commit. The executor only signs when this is explicitly enabled; the default is unsigned.

Organizational memory loop (default-off)

VariableDefaultPurpose
ROBOCO_ORG_MEMORY_ENABLEDfalseMaster switch for the org-memory loop. When off: legacy completion capture, no auto-inject, no playbook curation verbs.
ROBOCO_ORG_MEMORY_TOP_K3Max institutional-memory items injected into a briefing on claim.
ROBOCO_ORG_MEMORY_MIN_SCORE0.6Cosine-similarity floor for injected memory; below it, nothing is injected.

Sandboxed dev DB/Redis/Mongo — default off

Per-project opt-in (sandbox_services column, postgres/redis/mongo); see Sandboxed dev DB/Redis/Mongo.

VariableDefaultPurpose
ROBOCO_SANDBOX_DB_ENABLEDfalseMaster switch. When off, request_sandbox refuses every call and spawning is unaffected (the legacy prod-creds gate-env injection, itself gated by ROBOCO_TOOLCHAIN_MATCH_ENABLED, is what an opted-in project falls back to). Only projects with sandbox_services set participate even when on — and provisioning happens on-demand via the request_sandbox do-verb, not at spawn.

DB network isolation — default off (config) / on in all 3 tracked composes

Not a panel flag — it must travel with the compose networks: topology. See DB network isolation.

VariableDefaultPurpose
ROBOCO_DB_NETWORK_ISOLATEDfalse (config) / true (all 3 tracked composes)True when postgres/redis sit on a data-only roboco_data network agent containers never join. Suppresses the legacy prod-creds gate-env injection (unreachable creds are worse than none).

Cloud auth — default off

Not a panel flag — changes authentication behavior, so it's environment-only. See Cloud auth.

VariableDefaultPurpose
ROBOCO_CLOUD_AUTH_ENABLEDfalseMaster switch. Off: get_agent_context behaves byte-for-byte as today (header-trust). On: a valid session cookie or agent HMAC token is required for the CEO role; a spoofed ceo header is rejected. Requires TLS — the cookie is secure-only.
ROBOCO_CLOUD_AUTH_EMAIL(unset)Email for the single seeded CEO login user. Required when the flag is on.
ROBOCO_CLOUD_AUTH_PASSWORD(unset)Password for the single seeded CEO login user. Hashed at startup; required when the flag is on.
ROBOCO_CLOUD_AUTH_SECRET(unset — required when enabled)Signs the session JWT. Startup fails loud if the flag is on and this is unset.
ROBOCO_CLOUD_AUTH_COOKIE_MAX_AGE2592000 (30 days)Sliding session cookie lifetime in seconds — every authenticated request re-mints the cookie, so only genuine inactivity past this window logs out.

Fable + Ponytail doctrine — default off

VariableDefaultNotes
ROBOCO_FABLE_MODE_ENABLEDfalseComposes the Fable (outcome-first communication) and Ponytail (build-lazy) doctrine layers into every spawned agent's prompt, plus guard hooks on the Claude runtime. Off: the spawn path is byte-for-byte unchanged.
ROBOCO_PONYTAIL_INTENSITYfullDeveloper-ladder aggressiveness: lite / full / ultra. A string value, not a flag; only read when fable-mode is on. Non-developer roles ignore it.

Telegram notifications — default off

The bot token and chat id are entered in the collapsible under the Telegram notifications flag row in Settings → Feature Flags, Fernet-encrypted at rest — never set via environment. The Mini App's own switch is environment-only, like cloud auth itself, and requires ROBOCO_CLOUD_AUTH_ENABLED=true. See Telegram bridge.

VariableDefaultPurpose
ROBOCO_TELEGRAM_ENABLEDfalseMaster switch. Off: no Telegram API call is ever made. On (with credentials stored): sends one best-effort DM — subject plus a panel deep-link, never the body — on a CEO escalation, on task completion, and whenever any of the four held-draft queues — a release proposal, an X post, a video, or a roadmap review cycle — originates a new item.
ROBOCO_TELEGRAM_INBOUND_ENABLEDfalseSub-switch on top of the master switch. Off: the bot only sends the three DMs above, never polls, and the escalation DM and every held-draft-origination DM carry no buttons. On (with ROBOCO_TELEGRAM_ENABLED and credentials both set): polls for /status, /queue, /task, /agents, /blocked, /usage, /secretary, /newtask, and button taps, and the escalation DM and every held-draft-origination DM gain an Approve/Reject/Open row.
ROBOCO_TELEGRAM_TIMEOUT_SECONDS10.0Per-request timeout for the outbound Bot API sendMessage call.
ROBOCO_TELEGRAM_POLL_INTERVAL_SECONDS5.0Floor between getUpdates long-poll re-issues (each call itself blocks server-side up to the poll timeout below, so this isn't the effective latency).
ROBOCO_TELEGRAM_POLL_TIMEOUT_SECONDS25The getUpdates long-poll timeout param, in seconds.
ROBOCO_TELEGRAM_MAX_UPDATES_PER_CYCLE50Max inbound updates (messages + button taps) processed in one poll cycle.
ROBOCO_TELEGRAM_PENDING_REPLY_TTL_SECONDS300.0How long a "reply with your reason" prompt (e.g. after tapping Reject) stays live before it expires and you have to tap the button again.
ROBOCO_TELEGRAM_MINIAPP_ENABLEDfalseMaster switch for the Mini App (POST /api/telegram/webapp-auth), the /tg phone cockpit. Environment-only — not on the panel's Feature Flags card. Requires ROBOCO_CLOUD_AUTH_ENABLED=true; the orchestrator refuses to start if this is on without that.
ROBOCO_TELEGRAM_INITDATA_MAX_AGE_SECONDS600Max age, in seconds, of a Telegram-signed initData payload before Mini App sign-in refuses it as stale.

X (Twitter) engine — default off

Credentials (the 4 OAuth 1.0a secrets) are entered in Settings → X (Twitter) Credentials in the panel, Fernet-encrypted at rest — never set via environment. See X (Twitter) engine.

VariableDefaultPurpose
ROBOCO_X_ENGINE_ENABLEDfalseMaster switch. Off: no draft is ever originated and no X API call is made.
ROBOCO_X_REPLIES_ENABLEDfalseSub-switch for the mention-reply half specifically (needs a paid X API tier to read mentions). Off: only release-announcement posts draft, even with the master switch on.
ROBOCO_X_MENTIONS_INTERVAL_SECONDS1800Seconds between mentions-poll passes.
ROBOCO_X_MENTIONS_MAX_PER_CYCLE5Max held reply drafts the mentions poll may originate in one cycle.
ROBOCO_X_MENTIONS_MIN_ENGAGEMENT0Minimum combined like+reply+retweet count for a mention to count as worth replying to.
ROBOCO_X_MAX_OPEN_POSTS10Rolling cap on concurrently-open held posts/replies (both sources combined).
ROBOCO_X_ACCOUNT_USER_ID(unset)Numeric X user id of the account's own account. Empty resolves it once per mentions cycle via GET /2/users/me.
ROBOCO_X_REQUEST_TIMEOUT_SECONDS15.0Per-request timeout for outbound X API calls.
ROBOCO_X_FEATURE_SPOTLIGHT_ENABLEDfalseA third, independent sub-switch: periodically spawns the Head of Marketing to investigate RoboCo's own shipped, under-publicized capabilities and draft a spotlight post about one. Off: the master switch above only ever drafts release posts and mention replies — this half never spawns an agent. Unlike those two (local-model-only), this is a real cloud-LLM spawn per cycle, so it's a deliberate, costlier opt-in.
ROBOCO_X_FEATURE_SPOTLIGHT_INTERVAL_SECONDS86400Base seconds between feature-spotlight exploration cycles. A quiet-week guard stretches the effective cadence to 3× this when nothing has shipped since the last spotlight, so it doesn't fire daily against a stale codebase.

Board Programs — default off, no master flag

See Board Programs. Unlike every other subsystem on this page, arming is entirely per-program on the Business → Programs panel tab (board_program.<key>.enabled in the settings store) — there is no ROBOCO_BOARD_PROGRAMS_ENABLED. The variable below is the only environment-level knob a new program reads; Roadmap and the X feature spotlight (ROBOCO_X_ENGINE_ENABLED + ROBOCO_X_FEATURE_SPOTLIGHT_ENABLED, in the X (Twitter) engine section above) additionally keep their own pre-registry flags as the default their Programs-tab switch falls back to.

VariableDefaultPurpose
ROBOCO_PEST_REWORK_THRESHOLD0.37-day rework rate (0-1) above which the Pest Control program opens a cycle off-schedule, on top of its weekly cron.

Board roadmap engine — default off

VariableDefaultPurpose
ROBOCO_ROADMAP_ENGINE_ENABLEDfalseMaster switch. Off: no exploration cycle is originated and the Product Owner is never spawned for it. Even on, nothing auto-starts — approved items land in BACKLOG for normal PM activation. Doubles as the default for the roadmap program's switch on Business → Programs.
ROBOCO_ROADMAP_INTERVAL_SECONDS604800Seconds between roadmap-exploration cycles (default weekly).
ROBOCO_ROADMAP_MIN_ITEMS_PER_CYCLE3Minimum roadmap item drafts a themed cycle must propose.
ROBOCO_ROADMAP_MAX_ITEMS_PER_CYCLE7Maximum roadmap item drafts a themed cycle may propose.

Obsidian vault — default off

Not a panel flag — see Obsidian vault.

VariableDefaultPurpose
ROBOCO_OBSIDIAN_VAULT_ENABLEDfalseMaster switch. Off: no note is ever written, python -m roboco.vault refuses to run, and every event seam is a no-op.
ROBOCO_VAULT_PATH/data/vaultRoot directory the vault materializes into. Only consulted when the master flag is on.
ROBOCO_VAULT_INTAKE_ENABLEDfalseSecond switch for the #roboco inbox watcher; both this and the master flag must be on.
ROBOCO_VAULT_INTAKE_INTERVAL_SECONDS300Seconds between inbox scan cycles.
ROBOCO_VAULT_INTAKE_DIRRoboCo/InboxVault-relative folder scanned for #roboco-tagged notes.
ROBOCO_VAULT_INTAKE_MAX_PER_CYCLE3Max held drafts one scan cycle may originate.
ROBOCO_VAULT_INTAKE_MAX_OPEN_DRAFTS10Rolling cap on concurrently-open held vault-note drafts.
ROBOCO_VAULT_ARCHIVE_DAYS30Age (past terminal timestamp) at which a completed/cancelled task's note moves to RoboCo/Archive/<year>/. 0 disables archival.
ROBOCO_VAULT_REPORT_ENABLEDtrueMaterializes a weekly RoboCo/Reports/<ISO-week>.md org-report note (deterministic, no LLM) and notifies you. Needs the master vault flag on.
ROBOCO_VAULT_KB_ENABLEDfalseSecond switch: embeds your own note folders (default RoboCo/Notes) into a fleet-retrievable RAG corpus. Off: no note is ever embedded.
ROBOCO_VAULT_KB_DIRSRoboCo/NotesCSV of vault-relative folders scanned recursively for KB ingest. Rejected at startup if it overlaps the intake inbox or a reserved projection dir.
ROBOCO_VAULT_KB_INTERVAL_SECONDS900Seconds between vault-KB ingest scan cycles.

Video engine (HyperFrames) — default off

TikTok's OAuth2 secrets are entered in Settings → TikTok Credentials in the panel, Fernet-encrypted at rest — never set via environment. See Video engine.

VariableDefaultPurpose
ROBOCO_VIDEO_ENGINE_ENABLEDfalseMaster switch. Off: no video-authoring task is ever opened. Even on, distribution requires an explicit per-clip CEO approval.
ROBOCO_VIDEO_ON_RELEASEfalseSub-switch: open an authoring task when a release publishes. Off even with the master switch on.
ROBOCO_VIDEO_ON_SPOTLIGHTfalseSub-switch: open an authoring task when the CEO approves a feature-spotlight draft that requests one. Off even with the master switch on.
ROBOCO_VIDEO_MAX_OPEN_POSTS5Rolling cap on concurrently-open video tasks (authoring plus held post drafts combined).
ROBOCO_VIDEO_RENDERER_BASE_URLhttp://roboco-video-renderer:3001Base URL of the video-renderer sidecar.
ROBOCO_VIDEO_OUTPUT_DIR/data/video-rendersWhere rendered MP4s are written. Bind-mounted in all three compose files so renders survive container recreation.
ROBOCO_VIDEO_RENDER_INTERVAL_SECONDS120Seconds between render-loop passes.
ROBOCO_VIDEO_RENDER_TIMEOUT_SECONDS600Deadline for one render pass on the sidecar.
ROBOCO_VIDEO_REQUEST_TIMEOUT_SECONDS30Per-request timeout for outbound video-engine HTTP calls.

Object storage (MinIO) — default off

Landed in 0.19.0: config fields, the minio dependency, minio / minio-init compose services, and the write + serve paths. The orchestrator PUTs each render to MinIO after the local write (non-fatal on failure); the media route streams from MinIO when configured, falling back to FileResponse on a missing object or MinIO down. Empty endpoint = disabled and the existing FileResponse media-serve path is unchanged. See Deployment.

VariableDefaultPurpose
ROBOCO_MINIO_ENDPOINT`` (empty)MinIO endpoint, e.g. http://roboco-minio:9000. Empty = disabled (FileResponse fallback).
ROBOCO_MINIO_ACCESS_KEY``Access key. Required when endpoint is set.
ROBOCO_MINIO_SECRET_KEY``Secret key. Required when endpoint is set.
ROBOCO_MINIO_BUCKETroboco-video-rendersBucket for rendered videos. Created idempotently by minio-init.
ROBOCO_MINIO_REGIONus-east-1MinIO region.

Next

llms.txt