Configuration
OpenFleet uses a layered configuration model with multiple sources.
Higher-priority sources override lower ones. There are 200+ configuration variables
across 30+ categories â all of them optional unless marked [REQUIRED].
Load Order (Highest Priority First)
- CLI flags â
--arg value
- Environment variables â
export VAR=value
.env file â dotenv format in your project root
openfleet.config.json â structured JSON config
- Built-in defaults â sensible zero-config values
Configuration Files
.env â Environment Settings
The primary configuration file. Generated by openfleet --setup with inline documentation.
All variables are optional unless marked [REQUIRED].
đĄ
Boolean flags accept true/false (preferred). Legacy 1/0 is still supported.
openfleet.config.json â Structured Config
For complex executor routing, failover, and multi-repo setups:
{
"$schema": "./openfleet.schema.json",
"projectName": "my-project",
"executors": [
{
"name": "copilot-claude",
"executor": "COPILOT",
"variant": "CLAUDE_OPUS_4_6",
"weight": 50,
"role": "primary",
"enabled": true
},
{
"name": "codex-default",
"executor": "CODEX",
"variant": "DEFAULT",
"weight": 50,
"role": "backup",
"enabled": true
}
],
"failover": {
"strategy": "next-in-line",
"maxRetries": 3,
"cooldownMinutes": 5,
"disableOnConsecutiveFailures": 3
},
"distribution": "weighted"
}
Task Claims & Coordination
Shared state enables distributed task coordination across multiple agents and workstations with atomic claims, heartbeat liveness, and conflict resolution.
| Variable | Default | Description |
SHARED_STATE_ENABLED | true | Enable distributed task coordination |
SHARED_STATE_HEARTBEAT_INTERVAL_MS | 60000 | Heartbeat renewal interval (1 min) |
SHARED_STATE_STALE_THRESHOLD_MS | 300000 | When to consider claims stale (5 min) |
SHARED_STATE_MAX_RETRIES | 3 | Max retries before permanently ignoring a task |
TASK_CLAIM_OWNER_STALE_TTL_MS | 600000 | Stale local claim detection threshold (10 min) |
TASK_CLAIM_RENEW_INTERVAL_MS | 300000 | Renew active claim while agent is running |
Project Identity
| Variable | Default | Description |
PROJECT_NAME | auto-detected | Project name shown in logs and Telegram |
GITHUB_REPO | auto-detected | GitHub repo in owner/repo format |
REPO_ROOT | auto-detected | Repository root path (written by setup) |
Executor Configuration
| Variable | Default | Description |
EXECUTORS | â | Shorthand: ENGINE:VARIANT:WEIGHT,... |
EXECUTOR_MODE | vk | vk, internal, or hybrid |
EXECUTOR_DISTRIBUTION | weighted | weighted, round-robin, or primary-only |
MAX_PARALLEL | 6 | Max concurrent agent executions |
PRIMARY_AGENT | auto | Override primary: codex-sdk, copilot-sdk, or claude-sdk |
PRIMARY_AGENT_DISABLED | false | Disable the primary agent adapter |
Executor Shorthand Syntax
EXECUTORS=ENGINE:VARIANT:WEIGHT,ENGINE:VARIANT:WEIGHT
# Examples:
EXECUTORS=COPILOT:CLAUDE_OPUS_4_6:50,CODEX:DEFAULT:50
EXECUTORS=CODEX:DEFAULT:100
EXECUTORS=COPILOT:GPT_4_1:30,COPILOT:CLAUDE_OPUS_4_6:40,CODEX:DEFAULT:30
Failover Configuration
Controls what happens when an executor fails repeatedly.
| Variable | Default | Description |
FAILOVER_STRATEGY | next-in-line | next-in-line, weighted-random, or round-robin |
FAILOVER_MAX_RETRIES | 3 | Max retries before switching executor |
FAILOVER_COOLDOWN_MIN | 5 | Minutes to disable an executor after failure |
FAILOVER_DISABLE_AFTER | 3 | Disable executor after N consecutive failures |
Internal Executor
Controls local task execution via agent-pool instead of (or alongside) VK's cloud executor.
| Variable | Default | Description |
INTERNAL_EXECUTOR_PARALLEL | 3 | Max concurrent agent slots |
INTERNAL_EXECUTOR_POLL_MS | 30000 | How often to poll kanban for new tasks |
INTERNAL_EXECUTOR_SDK | auto | SDK: auto, codex, copilot, or claude |
INTERNAL_EXECUTOR_TIMEOUT_MS | 5400000 | Timeout per task execution (90 min) |
INTERNAL_EXECUTOR_MAX_RETRIES | 2 | Max retries per task |
INTERNAL_EXECUTOR_REVIEW_AGENT_ENABLED | true | Enable review handoff agent for completed PRs |
INTERNAL_EXECUTOR_REVIEW_MAX_CONCURRENT | 2 | Max concurrent reviews |
INTERNAL_EXECUTOR_REVIEW_TIMEOUT_MS | 300000 | Review timeout per run (5 min) |
INTERNAL_EXECUTOR_REPLENISH_ENABLED | false | Auto-create new tasks when backlog is low |
INTERNAL_EXECUTOR_REPLENISH_MIN_NEW_TASKS | 1 | Minimum tasks to generate per cycle |
INTERNAL_EXECUTOR_REPLENISH_MAX_NEW_TASKS | 2 | Maximum tasks to generate per cycle |
PROJECT_REQUIREMENTS_PROFILE | â | simple-feature, feature, large-feature, system, multi-system |
SDK Transport
| Variable | Default | Description |
CODEX_TRANSPORT | sdk | sdk, auto, or cli |
COPILOT_TRANSPORT | sdk | sdk, auto, cli, or url |
CLAUDE_TRANSPORT | sdk | sdk, auto, or cli |
Kanban / Task Board
Task-board backend selection and sync policy. Supports internal store, GitHub Issues, GitHub Projects v2, and Jira.
| Variable | Default | Description |
KANBAN_BACKEND | internal | internal, vk, github, or jira |
KANBAN_SYNC_POLICY | internal-primary | internal-primary or bidirectional |
KANBAN_PROJECT_ID | â | Explicit kanban project ID (overrides auto-detection) |
GitHub Issues Backend
| Variable | Default | Description |
GITHUB_PROJECT_MODE | issues | issues or kanban (Projects v2) |
GITHUB_PROJECT_OWNER | â | Org or user for Projects v2 |
GITHUB_PROJECT_NUMBER | â | Project board number |
GITHUB_PROJECT_TITLE | â | Project title for display |
GITHUB_PROJECT_AUTO_SYNC | true | Auto-sync task status to project board |
GITHUB_DEFAULT_ASSIGNEE | â | Default assignee for new tasks |
GITHUB_AUTO_ASSIGN_CREATOR | true | Auto-assign task creator when creating issues |
OPENFLEET_TASK_LABEL | openfleet | Label used to scope tasks (only matching labels picked up) |
OPENFLEET_ENFORCE_TASK_LABEL | true | Only process issues with the scoping label |
GITHUB_ISSUES_LIST_LIMIT | 1000 | Max issues per sync/poll cycle |
GitHub Projects v2 Status Mapping
GITHUB_PROJECT_STATUS_TODO=Todo
GITHUB_PROJECT_STATUS_INPROGRESS=In Progress
GITHUB_PROJECT_STATUS_INREVIEW=In Review
GITHUB_PROJECT_STATUS_DONE=Done
GITHUB_PROJECT_STATUS_CANCELLED=Cancelled
GitHub Projects v2 Webhooks
| Variable | Default | Description |
GITHUB_PROJECT_WEBHOOK_PATH | /api/webhooks/github/project-sync | Webhook endpoint served by ui-server |
GITHUB_PROJECT_WEBHOOK_SECRET | â | Secret for X-Hub-Signature-256 validation |
GITHUB_PROJECT_WEBHOOK_REQUIRE_SIGNATURE | true | Require webhook signature validation |
Jira Backend
Full Jira Cloud integration with status mapping, custom fields, and ADF comments.
| Variable | Default | Description |
JIRA_BASE_URL | â | Jira Cloud site URL (no trailing slash) |
JIRA_EMAIL | â | Jira user email for Basic auth |
JIRA_API_TOKEN | â | Jira API token |
JIRA_PROJECT_KEY | â | Default project key (e.g., ENG) |
JIRA_ISSUE_TYPE | Task | Issue type for task creation |
JIRA_DEFAULT_ASSIGNEE | â | Default assignee account ID |
JIRA_USE_ADF_COMMENTS | true | Use Atlassian Document Format for comments |
JIRA_ENFORCE_TASK_LABEL | true | Only process issues with scoping labels |
JIRA_ISSUES_LIST_LIMIT | 250 | Max issues per sync/poll cycle |
Jira Status Mapping
JIRA_STATUS_TODO=To Do
JIRA_STATUS_INPROGRESS=In Progress
JIRA_STATUS_INREVIEW=In Review
JIRA_STATUS_DONE=Done
JIRA_STATUS_CANCELLED=Cancelled
Telegram Bot
Full bot with 30+ commands, inline keyboards, and rich notification system.
| Variable | Default | Description |
TELEGRAM_BOT_TOKEN | â | Bot token from @BotFather |
TELEGRAM_CHAT_ID | â | Your chat ID (use openfleet-chat-id) |
TELEGRAM_ALLOWED_CHAT_IDS | â | Additional allow-list entries (comma-separated) |
TELEGRAM_INTERVAL_MIN | 10 | Status summary interval in minutes |
TELEGRAM_COMMAND_POLL_TIMEOUT_SEC | 20 | Long-poll timeout for getUpdates |
TELEGRAM_AGENT_TIMEOUT_MS | 5400000 | Agent timeout for Telegram-triggered runs (90 min) |
TELEGRAM_COMMAND_CONCURRENCY | 2 | Max concurrent command handlers |
TELEGRAM_API_BASE_URL | â | Override API base URL for proxy/gateway |
TELEGRAM_HTTP_TIMEOUT_MS | 15000 | HTTP timeout per request |
TELEGRAM_RETRY_ATTEMPTS | 4 | Max retries for transient failures |
TELEGRAM_RETRY_BASE_MS | 600 | Base retry backoff (exponential with jitter) |
TELEGRAM_CURL_FALLBACK | true | Curl fallback when Node fetch fails (Linux/macOS) |
Notification Batching
| Variable | Default | Description |
TELEGRAM_BATCH_NOTIFICATIONS | true | Batch into periodic summaries |
TELEGRAM_BATCH_INTERVAL_SEC | 300 | Batch summary interval (5 min) |
TELEGRAM_BATCH_MAX_SIZE | 50 | Max messages before forcing a flush |
TELEGRAM_IMMEDIATE_PRIORITY | 1 | Priority threshold for immediate delivery (1=critical) |
TELEGRAM_VERBOSITY | summary | minimal, summary, or detailed |
Telegram Mini App
7-tab web dashboard: Dashboard, Tasks, Agents, Infra, Control, Logs, Settings.
| Variable | Default | Description |
TELEGRAM_MINIAPP_ENABLED | false | Enable the Mini App server |
TELEGRAM_UI_PORT | â | HTTP port for Mini App (required when enabled) |
TELEGRAM_UI_HOST | 0.0.0.0 | Bind address |
TELEGRAM_UI_PUBLIC_HOST | auto-detect | Public hostname override (for tunnels) |
TELEGRAM_UI_BASE_URL | â | Full public URL override (HTTPS) |
TELEGRAM_UI_ALLOW_UNSAFE | false | Skip initData auth (local testing only) |
TELEGRAM_UI_AUTH_MAX_AGE_SEC | 86400 | Auth token max age (24h) |
Cloudflare Tunnel
Provides persistent HTTPS for the Mini App. Two modes:
- Quick tunnel (default): Random
*.trycloudflare.com URL, no setup required. URL changes on restart.
- Named tunnel: Custom domain that never changes. Requires Cloudflare account.
| Variable | Default | Description |
TELEGRAM_UI_TUNNEL | auto | auto, cloudflared, or disabled |
CLOUDFLARE_TUNNEL_NAME | â | Named tunnel name (leave blank for quick) |
CLOUDFLARE_TUNNEL_CREDENTIALS | â | Path to tunnel credentials JSON |
Telegram Sentinel
Independent watchdog that maintains Telegram command availability even when openfleet is down. Can auto-restart, detect crash loops, and run repair-agent.
| Variable | Default | Description |
OPENFLEET_SENTINEL_AUTO_START | false | Auto-start sentinel with openfleet |
SENTINEL_AUTO_RESTART_MONITOR | true | Auto-restart monitor when down |
SENTINEL_CRASH_LOOP_THRESHOLD | 3 | Crash-loop threshold |
SENTINEL_CRASH_LOOP_WINDOW_MIN | 10 | Crash-loop rolling window (min) |
SENTINEL_REPAIR_AGENT_ENABLED | true | Run repair-agent on crash-loop |
SENTINEL_REPAIR_COOLDOWN_MIN | 15 | Cooldown between repair runs |
SENTINEL_REPAIR_TIMEOUT_MIN | 20 | Repair agent timeout |
SENTINEL_PRIMARY_AGENT_FALLBACK_ENABLED | true | Fallback to primary agent while monitor is down |
SENTINEL_RESTART_BACKOFF_SEC | 5 | Backoff before restart attempts |
SENTINEL_MANUAL_STOP_HOLD_MIN | 10 | Suppress auto-restart after manual /stop |
Presence & Multi-Instance
Discover multiple openfleet instances across machines.
| Variable | Default | Description |
TELEGRAM_PRESENCE_INTERVAL_SEC | 60 | Heartbeat interval |
TELEGRAM_PRESENCE_TTL_SEC | 180 | Offline threshold |
TELEGRAM_PRESENCE_DISABLED | false | Disable heartbeats entirely |
VE_INSTANCE_ID | auto-generated | Stable instance ID across restarts |
VE_INSTANCE_LABEL | workspace name | Human-friendly label in /presence |
VE_COORDINATOR_PRIORITY | 10/100 | Election priority (lower wins) |
VE_COORDINATOR_ELIGIBLE | true | Opt into coordinator election |
WhatsApp Channel
Optional notification/command channel using @whiskeysockets/baileys.
| Variable | Default | Description |
WHATSAPP_ENABLED | false | Enable WhatsApp channel |
WHATSAPP_CHAT_ID | â | Restrict to a specific chat JID |
WHATSAPP_ASSISTANT_NAME | project name | Bot name prefix for outbound messages |
WHATSAPP_STORE_DIR | .cache/whatsapp-store | Auth/session data directory |
WHATSAPP_PHONE_NUMBER | â | Phone number for pairing code auth |
Container Isolation
Run agent tasks inside Docker, Podman, or Apple Container for security isolation.
| Variable | Default | Description |
CONTAINER_ENABLED | false | Enable container isolation |
CONTAINER_RUNTIME | docker | docker, podman, or container (macOS) |
CONTAINER_IMAGE | node:22-slim | Container image for execution |
CONTAINER_TIMEOUT_MS | 1800000 | Timeout per container (30 min) |
CONTAINER_MAX_OUTPUT_SIZE | 10485760 | Max output size (10 MB) |
MAX_CONCURRENT_CONTAINERS | 3 | Max concurrent containers |
CONTAINER_MEMORY_LIMIT | â | Docker/Podman memory limit (e.g., 4g) |
CONTAINER_CPU_LIMIT | â | Docker/Podman CPU limit (e.g., 2) |
Codex SDK
Sandbox Policy
| Variable | Default | Description |
CODEX_SANDBOX | workspace-write | workspace-write, danger-full-access, or read-only |
CODEX_SANDBOX_PERMISSIONS | disk-full-write-access | Comma-separated sandbox permission entries |
CODEX_SANDBOX_WRITABLE_ROOTS | repo root | Comma-separated writable root paths |
CODEX_SHELL_ENV_POLICY | all | all, none, or custom policy |
CODEX_AGENT_MAX_THREADS | 6 | Max concurrent agent threads per session |
Feature Flags
| Variable | Default | Description |
CODEX_FEATURES_CHILD_AGENTS_MD | true | Sub-agent discovery via CODEX.md |
CODEX_FEATURES_MEMORY_TOOL | true | Persistent memory across sessions |
CODEX_FEATURES_UNDO | true | Undo/rollback support |
CODEX_FEATURES_COLLAB | true | Collaboration mode |
CODEX_FEATURES_BWRAP | true | Bubblewrap sandbox (disable if userns blocked) |
CODEX_FEATURES_SHELL_TOOL | true | Shell tool access |
CODEX_SDK_DISABLED | false | Disable all Codex/AI features |
AI Provider / Model
| Variable | Default | Description |
OPENAI_API_KEY | â | OpenAI API key |
OPENAI_BASE_URL | https://api.openai.com/v1 | API base URL |
CODEX_MODEL | gpt-4o | Default Codex model |
CODEX_SUBAGENT_MODEL | â | Model for sub-agents |
CODEX_MODEL_PROFILE | â | Named profile for model switching |
Copilot SDK
GitHub Copilot CLI integration with full model access, MCP tools, and sub-agents.
| Variable | Default | Description |
COPILOT_SDK_DISABLED | false | Disable Copilot SDK usage |
COPILOT_MODEL | â | Model override (e.g., gpt-5) |
COPILOT_SESSION_MODE | local | local, remote, or auto |
COPILOT_AUTO_APPROVE_PERMISSIONS | true | Auto-approve SDK permission requests |
COPILOT_ALLOW_ALL | true | Allow all tools/paths/URLs |
COPILOT_CLI_PATH | copilot | Path to Copilot CLI binary |
COPILOT_MCP_CONFIG | â | MCP server config path (e.g., .vscode/mcp.json) |
COPILOT_REASONING_EFFORT | high | low, medium, high, or xhigh |
COPILOT_AGENT_MAX_REQUESTS | 500 | Max requests per agent session |
COPILOT_NO_EXPERIMENTAL | false | Disable experimental features (/fleet, autopilot) |
COPILOT_ENABLE_ASK_USER | false | Re-enable ask_user tool (blocks for input) |
COPILOT_DISABLE_PARALLEL_TOOLS | false | Disable parallel tool execution |
Claude SDK
Claude Code integration for autonomous agent operations.
| Variable | Default | Description |
CLAUDE_SDK_DISABLED | false | Disable Claude SDK features |
CLAUDE_MODEL | claude-opus-4-6 | Claude model |
CLAUDE_PERMISSION_MODE | bypassPermissions | Permission handling mode |
CLAUDE_MAX_TURNS | 0 | Max turns (0 = unlimited) |
CLAUDE_ALLOWED_TOOLS | all | Comma-separated allowed tools |
ANTHROPIC_API_KEY | â | Anthropic API key |
Agent Pool
Ephemeral agent pool for concurrent operations.
| Variable | Default | Description |
AGENT_POOL_SDK | auto | codex, copilot, or claude |
AGENT_POOL_MODEL | â | Default model for agent pool threads |
Agent Hooks
Lifecycle hooks scaffolded across Codex, Claude, and Copilot agents. Configured in .codex/hooks.json, .claude/settings.local.json, and .github/hooks/openfleet.hooks.json.
| Variable | Default | Description |
OPENFLEET_HOOK_PROFILE | strict | strict, balanced, lightweight, or none |
OPENFLEET_HOOK_TARGETS | codex,claude,copilot | Which agents receive hook files |
OPENFLEET_HOOKS_ENABLED | true | Enable hook scaffolding during setup |
OPENFLEET_HOOKS_OVERWRITE | false | Overwrite existing hook files |
OPENFLEET_HOOKS_BUILTINS_MODE | force | force, auto, or off |
Per-Event Command Overrides
OPENFLEET_HOOK_PREPUSH=go vet ./...;;go build ./...
OPENFLEET_HOOK_PRECOMMIT=gofmt -l .
OPENFLEET_HOOK_TASK_COMPLETE=echo "task completed"
OPENFLEET_HOOK_SESSION_START=echo "session start"
OPENFLEET_HOOK_SESSION_STOP=echo "session stop"
Daemon Mode
Run openfleet as a background daemon with crash supervision.
| Variable | Default | Description |
OPENFLEET_DAEMON_RESTART_DELAY_MS | 5000 | Delay before child restart |
OPENFLEET_DAEMON_MAX_RESTARTS | 0 | Max restarts (0 = unlimited) |
OPENFLEET_DAEMON_INSTANT_CRASH_WINDOW_MS | 15000 | Instant startup failure window |
OPENFLEET_DAEMON_MAX_INSTANT_RESTARTS | 3 | Stop after N instant failures |
Vibe-Kanban
| Variable | Default | Description |
VK_BASE_URL | http://127.0.0.1:54089 | VK API base URL |
VK_RECOVERY_PORT | 54089 | VK recovery port |
VK_NO_SPAWN | false | Prevent auto-spawning VK |
VK_RECOVERY_COOLDOWN_MIN | 10 | Cooldown between recovery attempts |
VK_ENSURE_INTERVAL | 60000 | VK health check interval (ms) |
VK_PUBLIC_URL | â | Public URL shown in Telegram links |
GitHub
| Variable | Default | Description |
GITHUB_REPO | auto-detected | owner/repo slug |
GITHUB_TOKEN | â | GitHub API token for PR lookups |
GH_TOKEN | â | Alternative token env var |
OPENfleet_TASK_UPSTREAM | â | Default base branch for tasks |
VK_TARGET_BRANCH | origin/main | Target branch for PR checks/merge |
Merge Strategy
Codex-powered PR decision engine analyzing agent output to decide: merge, prompt, close, re-attempt, review, or wait.
| Variable | Default | Description |
CODEX_ANALYZE_MERGE_STRATEGY | true | Enable merge strategy analysis |
MERGE_STRATEGY_TIMEOUT_MS | 600000 | Analysis timeout (10 min) |
MERGE_STRATEGY_MODE | smart | smart or smart+codexsdk |
MERGE_CONFLICT_RESOLUTION_TIMEOUT_MS | 600000 | Conflict resolution timeout |
Autofix Mode
| Variable | Default | Description |
AUTOFIX_MODE | auto | auto (detect), execute (apply fixes), or analyze (suggestions only) |
Task Planner
| Variable | Default | Description |
TASK_PLANNER_MODE | kanban | kanban, codex-sdk, or disabled |
TASK_PLANNER_PER_CAPITA_THRESHOLD | 1 | Trigger planner when backlog-per-slot drops below |
TASK_PLANNER_IDLE_SLOT_THRESHOLD | 1 | Trigger when idle slots meet threshold |
TASK_PLANNER_DEDUP_HOURS | 6 | De-duplication window |
Complexity Routing
Automatically select AI models based on task size labels: [xs], [s], [m], [l], [xl], [xxl].
| Variable | Default | Description |
COMPLEXITY_ROUTING_ENABLED | true | Enable size-based model selection |
COMPLEXITY_ROUTING_CODEX_LOW_MODEL | â | Codex model for [xs]/[s] tasks |
COMPLEXITY_ROUTING_CODEX_MEDIUM_MODEL | â | Codex model for [m] tasks |
COMPLEXITY_ROUTING_CODEX_HIGH_MODEL | â | Codex model for [l]/[xl]/[xxl] tasks |
COMPLEXITY_ROUTING_COPILOT_LOW_MODEL | â | Copilot model for small tasks |
COMPLEXITY_ROUTING_COPILOT_MEDIUM_MODEL | â | Copilot model for medium tasks |
COMPLEXITY_ROUTING_COPILOT_HIGH_MODEL | â | Copilot model for large tasks |
CI Sweep
| Variable | Default | Description |
VE_CI_SWEEP_EVERY | 15 | Trigger CI sweep after N completed tasks (0 disables) |
VE_CI_SWEEP_PR_EVERY | 15 | Backup trigger after N merged PRs |
VE_CI_SWEEP_PR_BACKUP | true | Enable PR-based backup trigger |
COPILOT_CLOUD_DISABLED | true | Disable Copilot cloud triggers (PR comments) |
COPILOT_LOCAL_RESOLUTION | agent | agent or codex when cloud is disabled |
Dependabot Auto-Merge
| Variable | Default | Description |
DEPENDABOT_AUTO_MERGE | true | Auto-merge bot PRs after CI passes |
DEPENDABOT_AUTO_MERGE_INTERVAL_MIN | 10 | Check frequency (minutes) |
DEPENDABOT_MERGE_METHOD | squash | squash, merge, or rebase |
DEPENDABOT_AUTHORS | dependabot[bot],app/dependabot | Comma-separated PR authors to auto-merge |
Stale Task Recovery
| Variable | Default | Description |
STALE_TASK_AGE_HOURS | 3 | Immediate recovery threshold (hours) |
RECOVERY_CACHE_ENABLED | true | Persistent recovery cache (reduce scan spam) |
RECOVERY_CACHE_MAX | 2000 | Max entries per cache section |
RECOVERY_LOG_DEDUP_MINUTES | 30 | Suppress repeated "no attempt" logs (min) |
GitHub Issue Reconciler
Periodically reconciles open GitHub issues against open/merged PRs with hybrid close policy.
| Variable | Default | Description |
GH_RECONCILE_ENABLED | true | Enable reconciliation |
GH_RECONCILE_INTERVAL_MS | 300000 | Reconciliation interval (5 min) |
GH_RECONCILE_MERGED_LOOKBACK_HOURS | 72 | Merged PR lookback window |
GH_RECONCILE_TRACKING_LABELS | tracking | Labels for tracking/meta issues (kept open) |
Completed Task Archive
| Variable | Default | Description |
VE_COMPLETED_TASK_ARCHIVE_ENABLED | true | Enable automatic archival |
VE_COMPLETED_TASK_ARCHIVE_AGE_HOURS | 24 | Only archive tasks older than (hours) |
VE_COMPLETED_TASK_ARCHIVE_INTERVAL_MIN | 30 | Min minutes between archive runs |
VE_COMPLETED_TASK_ARCHIVE_MAX | 200 | Max tasks per run |
Git Identity
| Variable | Default | Description |
VE_GIT_AUTHOR_NAME | â | Override git author name for automated commits |
VE_GIT_AUTHOR_EMAIL | â | Override git author email for automated commits |
Agent Work Logging & Analytics
Structured logging for real-time monitoring and offline analysis, with error loop detection and stuck agent alerts.
| Variable | Default | Description |
AGENT_WORK_LOGGING_ENABLED | true | Enable agent work logging |
AGENT_WORK_ANALYZER_ENABLED | true | Enable live stream analyzer |
AGENT_WORK_LOG_DIR | .cache/agent-work-logs | Log directory |
AGENT_SESSION_LOG_RETENTION | 100 | Keep last N session transcripts |
AGENT_WORK_LOG_MAX_SIZE_MB | 500 | Max log size before rotation |
Detection Thresholds
| Variable | Default | Description |
AGENT_ERROR_LOOP_THRESHOLD | 4 | Alert after N repeated errors in 10-min window |
AGENT_TOOL_LOOP_THRESHOLD | 10 | Alert after N rapid tool calls in 1-min window |
AGENT_STUCK_THRESHOLD_MS | 300000 | Idle agent alert threshold (5 min) |
AGENT_COST_ANOMALY_THRESHOLD | 1.0 | Alert if session costs more than $N |
Prompt Overrides
OpenFleet scaffolds generic prompt templates under .openfleet/agents/*.md. Override paths:
| Variable | Default | Description |
OPENFLEET_PROMPT_PLANNER | .openfleet/agents/task-planner.md | Task planner prompt |
OPENFLEET_PROMPT_MONITOR_MONITOR | .openfleet/agents/monitor-monitor.md | Monitor-monitor prompt |
OPENFLEET_PROMPT_TASK_EXECUTOR | .openfleet/agents/task-executor.md | Task executor prompt |
OPENFLEET_PROMPT_REVIEWER | .openfleet/agents/reviewer.md | PR reviewer prompt |
Advanced Settings
| Variable | Default | Description |
OPENFLEET_DIR | auto-detected | Config directory path |
MAX_RESTARTS | 0 | Max orchestrator restarts (0 = unlimited) |
RESTART_DELAY_MS | 10000 | Delay before restart |
LOG_DIR | ./logs | Log directory |
LOG_MAX_SIZE_MB | 500 | Max log folder size (MB). 0 = unlimited |
LOG_CLEANUP_INTERVAL_MIN | 30 | How often to check folder size |
SELF_RESTART_WATCH_ENABLED | devmode | Monitor source hot-reload watcher |
DEVMODE | false | Enable development mode |
Recommended Profiles
Local Development
DEVMODE=true
DEVMODE_MONITOR_MONITOR_ENABLED=true
CODEX_TRANSPORT=sdk
COPILOT_TRANSPORT=sdk
CLAUDE_TRANSPORT=sdk
EXECUTOR_MODE=internal
KANBAN_BACKEND=internal
Production / End-User
DEVMODE=false
DEVMODE_MONITOR_MONITOR_ENABLED=false
CODEX_TRANSPORT=sdk
COPILOT_TRANSPORT=sdk
CLAUDE_TRANSPORT=sdk
EXECUTOR_MODE=internal
KANBAN_BACKEND=github
KANBAN_SYNC_POLICY=bidirectional
âšī¸
See .env.example in the repository for the complete list of all documented variables with inline comments.