openTiger is an orchestration system that continues autonomous execution using multiple agents and state tables.
Related:
- 0. Runtime Control Loop (Overview)
- 1. Components
- 2. Data Stores
- 3. High-Level Execution Flow
- 4. State Design Characteristics
- 5. Modes and Execution Environment
flowchart LR
R[Requirement / Issues / PRs] --> P[Planner]
P --> T[(tasks)]
T --> D[Dispatcher]
D --> W[Worker / Tester / Docser]
W --> RUN[(runs/artifacts)]
RUN --> J[Judge]
J --> T
T --> C[Cycle Manager]
C --> T
C --> P
This loop prioritizes "never stopping"; on failure, recovery strategy is switched via state transition.
TigerResearch is implemented as a planner-first plugin specialization on top of the same loop:
- entry via
POST /plugins/tiger-research/jobs - planner decomposition via
--research-job - runtime execution via
tasks.kind=research - convergence via Cycle Manager + Judge
After understanding the architecture, when investigating incidents, tracing in the order state vocabulary -> transition -> owner -> implementation is shortest.
- Confirm state vocabulary in state-model
- Check transitions and recovery paths in flow
- Run API procedures and operational shortcuts in operations
- Identify owning agent and implementation tracing path in agent/README
- Dashboard backend
- Config management (
/config) - System control (
/system/*) - Read APIs (
/tasks,/runs,/agents,/plans,/judgements,/logs)
- Generate task plans from requirement / issue
- Dependency normalization
- Policy application
- Documentation gap detection
- Details: agent/planner
- Select
queuedtasks - Acquire lease
- Assign execution agents
- Process / Docker startup
- Details: agent/dispatcher
- LLM execution (
opencode,claude_code, orcodex) - Change verification (commands + policy)
- Commit/push/PR creation (git mode)
- Recovery branching on failure
- Details: agent/worker, agent/tester, agent/docser
- Evaluate successful runs (CI / policy / LLM)
- Approve / request_changes decision
- Merge / retry / autofix task creation
- Details: agent/judge
- Cleanup loop
failed/blockedrecovery- Issue backlog sync
- Replan decision
- Details: agent/cycle-manager
- UI for startup/config/state monitoring
- Process start/stop
- Task/run/judgement/log display
- Query entry and job lifecycle API (
/plugins/tiger-research/*) - Planner-first claim decomposition
- Claim-level parallel collection/challenge/write tasks
- Research quality convergence loop
- Full UI observability from dashboard
pluginssection
Main tables:
tasksrunsartifactsleaseseventsagentscyclesconfig- TigerResearch plugin tables (
plugins/tiger-research/src/db.ts)
- Task queue
- Dead-letter queue
- Worker concurrency/lock control
- Planner creates tasks (
queued) - Dispatcher acquires lease and moves to
running - Worker/Tester/Docser execute and verify
- On success:
blocked(awaiting_judge)ordone - Judge evaluates and moves to
done/ retry / rework - Cycle Manager continues recovery and replanning
TigerResearch path:
- API creates plugin job row (
research_jobs) - Planner decomposes query to claims
- Dispatcher/Worker execute research tasks in parallel
- Cycle Manager drives collect/challenge/write/rework
- Judge applies research quality decision (when enabled)
Details in flow.
- Explicit blocked reason
awaiting_judgequota_waitneeds_reworkissue_linking(for Planner internal coordination)
- Duplicate execution prevention
- lease
- runtime lock
- Judge idempotency (
judgedAt,judgementVersion)
- Repository mode
git/local
- Judge mode
git/local/auto
- Execution environment
host(process)sandbox(docker)
Details in mode and execution-mode.
Plugin integration is standardized through PluginManifestV1 and a shared loader in
packages/plugin-sdk.
High-level loading model:
- Core discovers plugin packages (
plugins/<id>/index.ts) - Loader validates manifest compatibility (
pluginApiVersion) - Loader resolves dependency order (
requires) - Enabled plugins are mounted into each agent through hooks
Activation source:
ENABLED_PLUGINS(CSV)
Runtime inventory:
GET /pluginsreturns plugin status (enabled/disabled/incompatible/error)
Dashboard behavior:
- Plugin route modules are discovered with
import.meta.glob - New plugin package modules require dashboard rebuild
- Enabled/disabled filtering is applied during startup/runtime bootstrapping
DB behavior:
- Core migrations run first
- Plugin migrations run in dependency order
- Migration state is persisted to guarantee idempotent re-runs