Workflow Export Formats
Operator is a kanban-shaped orchestrator: each ticket carries the work, and its issue type carries an Operator workflow - an ordered graph of steps (tasks, classifiers, delegators, fan-outs, pipelines, human review gates). That JSON-defined workflow is the native format, and it is what collections share.
A workflow export renders a ticket + issue type pair into a concrete
orchestration format some other tool or model can execute. Exports are
derived from the native workflow - never the other way round.
This is export-only and lossy-by-design: Operator emits the format; it does not parse one back. Shapes a target can’t represent natively (human review gates, fan-out, RAG/MCP) are flattened deterministically and annotated, so the same input always produces the same output.
Formats
| Format | Artifact | Status | Docs |
|---|---|---|---|
| Claude Workflow | .js (Claude Code dynamic workflow) |
GA | Claude Workflow |
| AGNT Workflow | .json (AGNT.gg graph) |
Alpha | AGNT Workflow |
The authoritative, machine-readable list is the
GET /api/v1/workflow-formats
endpoint, derived from the same source of truth that backs this page.
How to export
CLI:
operator workflow export FEAT-1234 # default: claude (.js)
operator workflow export FEAT-1234 --format agnt
REST (the web UI and VS Code use the same shared code path):
# Concrete ticket -> workflow
curl -X POST "http://localhost:7008/api/v1/tickets/FEAT-1234/workflow-export?format=claude"
# Issue type alone -> preview (placeholder values, no ticket required)
curl "http://localhost:7008/api/v1/issuetypes/FEAT/workflow-preview?format=agnt"
# Discover the available formats
curl "http://localhost:7008/api/v1/workflow-formats"
In the TUI, web UI, and VS Code, the Workflows section lists the formats and links to preview/export.
Voting and judging
Fan-out steps run several agents and then keep one answer. How that answer is chosen at runtime:
| Step | Setting | Runtime selection |
|---|---|---|
multi_model |
voting_mode = "single_judge" (default) |
Deterministic rule (LLM judge planned) |
multi_model |
voting_mode = "multi_voter" |
Deterministic rule (voting round not yet run) |
multi_prompt |
selection_strategy = "model_choice" |
First variation (LLM judge planned) |
multi_prompt |
selection_strategy = "scored" |
First variation |
matrixed |
- | No aggregation yet (value is null) |
The deterministic rule is: first delegator with output for majority /
ranked, the longest answer for unanimous.
Planned: LLM judge. A judge that picks the winner with a single typed API
call from the Operator daemon (not an agent session), guided by voting_prompt
or selection_prompt, is implemented but not yet included in release builds.
The configuration it will read is already accepted:
[native_llm.judge]
model_server = "anthropic-api" # any declared or implicit model server
model = "claude-sonnet-5" # full API model id, not a CLI alias
timeout_secs = 120 # optional
Until the judge ships, a configured judge is reported as unavailable in the ticket history and the deterministic rule applies.
Exports render the same prompts as a vote/select agent(...) call instead.