openTiger behavior is controlled by the combination of repository mode / judge mode / execution environment.
Related:
Common Lookup Path (State Vocabulary -> Transition -> Owner -> Implementation, When Entering from Mode Config)
When tracing stalls from mode config, check in order: state vocabulary -> transition -> owner -> implementation.
- state-model (state vocabulary)
- flow (transitions and recovery paths)
- operations (API procedures and operation shortcuts)
- agent/README (owning agent and implementation tracing path)
- Clone/push/PR-based operation (requires GitHub API)
- Judge mainly evaluates PR artifacts
Required config:
REPO_URLBASE_BRANCHGITHUB_AUTH_MODE(ghortoken; default:gh)GITHUB_OWNERGITHUB_REPO
Note:
- With
GITHUB_AUTH_MODE=gh, authenticate via GitHub CLI (gh auth login) - With
GITHUB_AUTH_MODE=token, setGITHUB_TOKEN - Legacy value
gitis accepted and mapped togithub
- Local repository + worktree-based operation (requires git binary)
- No remote PR creation
Required config:
LOCAL_REPO_PATHLOCAL_WORKTREE_ROOTBASE_BRANCH
Note:
- Legacy value
localis accepted and mapped tolocal-git
- Edit project files directly, no git binary required
- Changes are written in-place to
LOCAL_REPO_PATH - Change detection uses filesystem snapshots (mtime + size comparison)
- Single worker constraint enforced by dispatcher (prevents concurrent edits)
- Tasks transition directly to
donewithout judge review
Required config:
LOCAL_REPO_PATH
Constraints:
maxConcurrentWorkersis forced to1(same directory, no isolation)- Judge runs in auto-approve mode (stuck
awaiting_judgetasks are cleared)
github: force PR review pathlocal-git: force local diff pathdirect: auto-approve mode (no review)auto: follow repository mode
Note:
JUDGE_MODEis a runtime option from env, not asystem_configDB key.
Main flags:
JUDGE_MERGE_ON_APPROVEJUDGE_REQUEUE_ON_NON_APPROVE
User-facing key is EXECUTION_ENVIRONMENT (in system_config).
Internal launch mode is derived as:
host->LAUNCH_MODE=processsandbox->LAUNCH_MODE=docker
For runtime details (Docker image/network, sandbox auth, troubleshooting), see execution-mode.
LAUNCH_MODE is internal; you normally don't set it directly.
- Resident agents consume queue jobs
- Prioritizes recovery speed and operational visibility
- Per-task container isolation
- Useful when isolation requirements are strict
LLM executor selection is controlled by LLM_EXECUTOR (default) plus optional role overrides:
WORKER_LLM_EXECUTORTESTER_LLM_EXECUTORDOCSER_LLM_EXECUTORJUDGE_LLM_EXECUTORPLANNER_LLM_EXECUTOR
Each role override supports inherit to follow LLM_EXECUTOR.
Available executor values:
claude_codecodexopencode
Fallback behavior:
- If an override is unset, empty, or
inherit, that role followsLLM_EXECUTOR. - If
LLM_EXECUTORis unset or unrecognized, runtime resolution falls back tocodex.
- Planner is fixed at 1 process by API/system logic
- worker/tester/docser/judge counts are configurable
- Dispatcher slot control counts only busy execution roles (
worker/tester/docser)
Implementation responsibility:
- Slot control/dispatch: agent/dispatcher
- Approve/rework decisions: agent/judge
/system/preflight may intentionally skip planner.
Examples:
- Issue backlog exists -> create/continue issue tasks first
- Open PR or
awaiting_judgebacklog exists -> start Judge first - Planner starts only when backlog is cleared and requirement exists
Main knobs:
FAILED_TASK_RETRY_COOLDOWN_MSBLOCKED_TASK_RETRY_COOLDOWN_MSFAILED_TASK_MAX_RETRY_COUNT(-1= global retry budget unlimited)FAILED_TASK_REPEATED_SIGNATURE_THRESHOLD(default:4)DISPATCH_RETRY_DELAY_MSSYSTEM_PROCESS_AUTO_RESTART*
Classification note:
- Retry and recovery classification prefers
runs.error_meta.failureCode. - Legacy runs without
error_metastill use message fallback to keep compatibility.
Queue/lock recovery knobs:
TASK_QUEUE_LOCK_DURATION_MSTASK_QUEUE_STALLED_INTERVAL_MSTASK_QUEUE_MAX_STALLED_COUNT
OPENCODE_WAIT_ON_QUOTAOPENCODE_QUOTA_RETRY_DELAY_MSOPENCODE_MAX_QUOTA_WAITS
Current task-level behavior converges via blocked(quota_wait) and cycle cooldown requeue.