nfltr orch: The Complete Tutorial

nfltr orch is the orchestration operator surface for hosted NFLTR at nfltr.xyz, and it has two faces. Typed with a group and a command — nfltr orch task status … — it is a scriptable CLI. Typed bare, it is an interactive operator console: a full-screen terminal app with live panes, a command bar, and keyboard shortcuts. Its own help calls it the primary operator loop. This guide documents both, end to end.


There is no orch tui subcommand

The interactive console is bare nfltr orch. Anything after the word orch that is not a flag is read as a command group, so nfltr orch tui is an error, not a console. Give the console a group only when you want the one-shot CLI instead.

Every screenshot below is a real PTY capture of the shipped binary, not a mockup. They were taken against an isolated test fleet, so the relay address, worker name, and task ids you see in them belong to the capture rig rather than to your account.

1. Check readiness first

orch doctor is the one command to run before anything else. It checks the three things a run depends on — a coordinator CLI that is installed and authenticated, a worker backend, and relay reachability — and prints the next action:

$ nfltr orch doctor
Terminal output of nfltr orch doctor showing three green readiness checks — coordinator CLI authenticated, worker backend found, relay — followed by a ready line suggesting nfltr orch, /fleet launch, and /start

Captured with nfltr orch doctor. Add --json for CI, and --backend claude or --backend codex to check a specific worker backend.

2. Enter and leave the console

Open the console with no arguments. To open it already attached to a run, pass that run's id:

$ nfltr orch
$ nfltr orch --task TASK_ID

To leave it, press Esc or Ctrl+C, or submit /quit (q, quit and exit work too). Leaving the console does not stop an orchestration — use /detach to make that explicit, and /cancel when you actually want the run to stop.

Two flags change what the console is before it starts:

Planner and coordinator choices are made at launch, not from inside:

$ nfltr orch --planner-cmd codex --planner-model MODEL --planner-effort EFFORT \
    --coordinator-provider PROVIDER --coordinator-model MODEL --coordinator-effort EFFORT

When stdin is not a terminal, the console falls back to a plain line-oriented reader instead of the full-screen renderer, so echo "/fleet workers" | nfltr orch behaves sensibly in a pipeline. For a repeatable sequence, use script mode: --script FILE runs newline-delimited console commands from a file (or - for stdin) and exits; blank lines and lines starting with # are ignored.

3. What the console shows you

The nfltr orch console: a startup line reporting relay, coordinator and worker state, a fleet pane listing one ready worker with capacity, an empty progress pane, then the status header, hint line, pane-indicator strip and the command prompt

Captured with nfltr orch, then Alt+F to reveal the fleet pane and 2 to jump to the progress pane.

The frame is built from the bottom up. Reading upward from the prompt:

LineWhat it tells you
> command barWhere you type. Plain English goes to the coordinator; a leading / runs a console command.
now:The single most useful next action right now, plus the clock, uptime, and whether input is still responsive while a command runs.
panes:All five toggleable panes and whether each is shown or hidden. The focused pane is marked with a leading *.
hint:A persistent, state-aware guidance line: launch a fleet, start a goal, or (with a run attached) watch and steer it.
orch:Status header — lifecycle word, attached= the run you are on, session mode, and a work pulse while something is moving.
transcriptEverything that has happened in this session: your submissions, command output, system acknowledgements, and live lifecycle events.

Depending on state, extra status lines appear between those: events: (live event counts by type), relay: (event-refresh health and latency), coord: (coordinator readiness), latency:, scroll:, and an issue:/alert: line when something needs you. On a short terminal the lower-priority ones yield so the prompt and the hint line always survive.

The five panes

Panes are hidden by default. Each has a uniform toggle command, /NAME pane, and refreshes on the console's own clock while it is visible — no separate polling to manage.

PaneToggleWhat it shows
fleet/fleet paneEvery connected worker: readiness, flavor, model/effort, task modes, capacity in use, heartbeat.
progress/progress paneActive orchestration roots, then the attached root's phase/task nodes with actor, state, outcome, worker, dependencies, retries and age.
selfevolve/selfevolve paneThe coordinator-owned improvement controller and campaign lifecycle (see controller and campaign below).
output/output paneA bounded raw-output tail per currently active task, newest lines last.
dashboard/dashboard paneFleet and orchestrations together — every connected worker and every active root, not just the attached one.

Two commands change what the panes are pointed at: /fleet select AGENT_ID focuses one worker, so the output pane tails that worker's active task, and /progress select ROOT_ID switches the progress pane to a different orchestration root.

The command bar

The nfltr orch console with a half-typed command in the bar: the prompt line reads slash task status --events 20 with a block cursor at the end, above it the live status lines for the attached, completed task

Captured with nfltr orch --task TASK_ID, typing /task status --events 20 and stopping before Enter.

The bar takes three kinds of input:

The bar stays live while a command runs. Submitting another line queues it as a follow-up rather than interleaving output, and the now: line then shows the queued command and reminds you that Ctrl+G cancels. When the console has suggestions for your current situation, a shortcuts: line offers the first three under Alt+13 with Tab to cycle the rest.

Help without leaving the console

Press ? on an empty command bar (or submit /help) for the grouped overlay: getting started, fleet, run, panes, intervene.

The grouped help overlay inside nfltr orch, listing console commands under the headings Getting started, Fleet, Run, Panes and Intervene, ending with slash quit to exit the console

Captured with nfltr orch, then pressing ?. /help advanced adds the coordinator-owned tools — /spec, /queue, /events, /tick, /loop, /daemon, /admin, /skills, /artifact and more.

Watching a run from inside

With a run attached, the console tails its lifecycle events into the transcript by itself. Alt+W runs a bounded watch on demand, and /watch --live keeps a continuous stream open. Open the progress and output panes at the same time and you can see the graph, the per-task tail, and the event stream in one frame:

The nfltr orch console attached to a run: live event entries for progress, verification recorded and completed, a progress pane showing the root and its single completed node, an output pane, and a status header reading orch completed attached to the task

Captured with nfltr orch --task TASK_ID, then 2 and 4 to open the progress and output panes while the run completed.

Intervening from inside

Everything you would do from the CLI has a console equivalent that already knows which run you are attached to:

You want to…Console command
Guide the coordinator mid-run/steer MESSAGE (or /ask MESSAGE to ask rather than direct)
Hold at a safe boundary, then continue/pause [REASON] then /resume
Stop the run/cancel [REASON]
Answer a human-intervention item/hitl list, then /task answer --task TASK_ID --message "…"
Retry or move a failed task/task retry …, /task reroute …
Kill the command you just startedCtrl+G
Walk away without stopping anything/detach, then Esc

When the coordinator raises a question, the console surfaces it as an attention signal on the now: line and points you at /hitl or /task answer rather than blocking silently.

4. Keyboard shortcuts

Every binding below was read off the shipped console. Two keys people expect are deliberately absent: / is not bound to anything — it is simply the first character of a console command — and q alone does nothing, because quitting by word requires submitting q with Enter.

Navigation

KeyDoesApplies when
TabMove pane focus forward through the currently visible panesCommand bar empty
Shift+TabMove pane focus backwardCommand bar empty
1 2 3 4Focus the fleet / progress / selfevolve / output pane, revealing it if hiddenCommand bar empty
Page Up / Page DownScroll the transcript back / forward one pageAlways
Ctrl+Page UpScroll to the oldest retained transcript lineAlways
Ctrl+Page DownJump back to the live tailAlways

Editing the command bar

KeyDoesApplies when
/ Move the cursor one characterAlways
Ctrl+AJump to the very start of the inputAlways
Ctrl+EJump to the very end of the inputAlways
Home / EndJump to the start / end of the current line — the same as Ctrl+A/Ctrl+E on single-line inputAlways
Backspace or Ctrl+HDelete the character before the cursorAlways
DeleteDelete the character at the cursorAlways
/ Move between lines of a multi-line entry; past the first or last line, step back or forward through command historyAlways
Ctrl+J, Alt+Enter, Shift+EnterInsert a newline instead of submittingAlways
Tab / Shift+TabCycle forward / backward through suggested commands, filtered by what you have already typedCommand bar not empty
Ctrl+LClear the transcript and the command barAlways
EnterSubmit the line; while a command is running, queue it as a follow-up insteadAlways

Run control

KeyRunsApplies when
Ctrl+R/status — refresh coordinator, task and worker stateAlways
Ctrl+N/next — run the latest recommended follow-upAlways
Ctrl+O/overview — active tasks and worker capacityAlways
Alt+O/overview workersAlways
Alt+F/fleet pane — toggle the fleet paneAlways
Alt+WA bounded watch: /watch --max-events 20 --timeout 5sA run is attached
Alt+S/task status --events 20 for the attached runA run is attached
Alt+1Alt+9, Alt+0Run the 1st–10th suggested command. Suggestions that need words from you — /task answer, /task reject — load into the bar as an editable draft instead of runningSuggestions exist
Ctrl+GCancel the command that is running; with nothing running, drop the queued follow-upAlways

Help and exit

KeyDoesApplies when
?Open the grouped help overlay (/help)Command bar empty
Esc or Ctrl+CLeave the console. The orchestration keeps runningAlways

5. Command reference

Outside the console, nfltr orch is organised into groups. nfltr orch --help lists them all; nfltr orch GROUP --help prints that group's shapes, and nfltr orch GROUP COMMAND --help prints every flag.

$ nfltr orch --help
Terminal output of nfltr orch --help listing command groups: doctor, start, task, memory, queue, diagnose, smoke, fleet, hitl, spec, admin, campaign, and controller

doctor — first-run readiness

$ nfltr orch doctor --backend claude --json

--backend codex|claude picks which worker backend to check; --json emits the checklist for CI.

start — start work

Five ways in, from most to least English:

$ nfltr orch start goal "Confirm the on-call workstation is ready to run orchestration tasks" --watch
$ nfltr orch start spec ./onboarding-check.json --watch
$ nfltr orch start task --task-mode implement --worker WORKER_ID --objective "Stabilize the widget cache test" --watch
$ nfltr orch start batch ./two-slices.json --batch-id docs-fanout --watch
$ nfltr orch start graph run --manifest ./work-graph.json

start last-spec re-runs the most recent spec this session or coordinator memory retained. Flags worth knowing:

task — inspect and intervene

$ nfltr orch task list --active
$ nfltr orch task status --task TASK_ID --events 20
$ nfltr orch task watch --task TASK_ID
$ nfltr orch task result --task TASK_ID
CommandForFlags that matter
listFind the task you mean--active, --state or the --completed/--failed/--cancelled shortcuts, --filter key=val (repeatable), --batch, --mine, --max-age, --limit, --stalled, --sort-by age|priority|state, --format wide|short, and --output text|json|csv|jsonl
statusOne task's current state, result and gate--task (required), --events N, --watch with --poll-interval/--timeout, --result-max-bytes
watchLive lifecycle event stream--task or --all-tasks, --filter REGEX, --max-events N, --since-event-id to resume, --quiet
wait / result / diffBlock until terminal; print just the structured result; show the produced diff--task or --tasks T1,T2,…
cancelStop work--task, --tasks, --batch, --all-stalled, --code, --reason
retry / rerouteRe-dispatch a failed task, optionally elsewhere--task (required), --worker (retry only), --bump-priority, --timeout-ms
pause / resume / unpauseHold and release a task--task
steerSend guidance mid-run--task, --message
answer / approve / reject / reviewResolve a human-intervention item or a setup gate--task (required), --message, --approve/--reject, --reason
events / auditFull event history and audit trail--task
children aggregateRoll child results up to a parent--parent TASK_ID
artifact list|get|preview|apply|fulfillWork with files a task produced or asked for--artifact-id, --output-file, --check/--yes, --content-file, --file, --dir

Most of these also accept --json for scripting. task list is the exception — it takes --output text|json|csv|jsonl instead.

memory — what the coordinator knows

$ nfltr orch memory --task TASK_ID --limit 50

Prints the coordinator's context, plan, worker summaries and learning trail for one orchestration. --json for the raw record.

queue — the local YAML queue runner

$ nfltr orch queue init
$ nfltr orch queue validate --workflow ./workflow.yaml
$ nfltr orch queue plan
$ nfltr orch queue run --once

init scaffolds the files, validate checks them, plan shows what would run, run executes (--once for a single pass), and status reports where the runner got to. --workflow, --queue and --state-dir point at non-default paths.

diagnose — is the path healthy?

$ nfltr orch diagnose relay --proxy-url https://nfltr.xyz

Checks relay, edge/origin and orchestration readiness in one pass. --origin-url and --json are the other flags you will use.

fleet — the workers

$ nfltr orch fleet status
Terminal output of nfltr orch fleet status showing one connected worker with capacity, active task count, and heartbeat columns
CommandFor
fleet statusOne line per worker: capacity, active tasks, heartbeat
fleet workers [--flavor F] [--worker ID]Full worker records including labels and advertised task modes
fleet ping [--workers CSV] [--strict]Liveness check: is the control plane answering, and are the workers you named connected?
fleet top [--refresh-interval 2s]A live, refreshing capacity view
fleet preflight [--flavor codex] [--worker ID]Run readiness checks against connected workers before you dispatch to them
fleet launch [PROFILE] [--dry-run]Bring up a local worker fleet from a named profile — claude-standard, claude-worktree, claude-lite, mixed-frontier, codex-standard, codex-worktree, cursor-standard
fleet stop --manifest FILETear down a fleet you launched
fleet drain / undrain / restart-stale / wait / drift / upgradeDay-two maintenance on a running fleet

Add --json to any of them for machine-readable output.

hitl — what is waiting on a human

$ nfltr orch hitl list --kind question

--kind approval|question|escalation|review|exception narrows the queue, --worker filters by worker, and --limit caps the rows. Resolve entries with orch task answer, approve or reject.

spec — author and check objectives before dispatch

$ nfltr orch spec template --name single-task
$ nfltr orch spec validate ./onboarding-check.json
$ nfltr orch spec decompose --goal "Confirm the on-call workstation is ready to run orchestration tasks"

template emits a starter spec — valid names are generic, research, single-task, multi-task and pipeline. validate checks shape and references without talking to a worker (--workers, --require-worktree), and decompose asks the planner to turn plain English into spec JSON (--workers, --dry-run, --json).

smoke — the readiness ladder

$ nfltr orch smoke host-local --mode live

--mode mixed|live|dry-run chooses how much really executes; --leg NAME runs one rung of the ladder.

admin — maintenance

$ nfltr orch admin task-store stats
$ nfltr orch admin task-store vacuum --max-events 200 --dry-run

Also admin cleanup --base-dir DIR --worktrees (dry-run unless you add --yes), admin prune-state --older-than DUR, and admin preauthorize-origin-write / admin preauthorizations for workspaces that may write to their origin.

campaign — bounded, coordinator-owned improvement contracts

$ nfltr orch campaign create --task TASK_ID --contract-file ./campaign.json
$ nfltr orch campaign list --task TASK_ID
$ nfltr orch campaign status --task TASK_ID --campaign-id relay-p95
$ nfltr orch campaign story --task TASK_ID --campaign-id relay-p95
$ nfltr orch campaign ready --task TASK_ID --scope relay
$ nfltr orch campaign signals --scope relay
$ nfltr orch campaign validate --contract-file ./campaign.json

A campaign records a scoped improvement contract — objective, immutable intent, allowed scopes, rollback checkpoint, budget, promotion rule, metrics — against an existing task. list, status, story, ready, signals, and validate are read-only. campaign story projects Intent / Path / Outcome — see Why did this campaign promote or roll back?. Preflight helpers live in Campaign operator tools. campaign admission set --max-concurrent N caps how many candidate slots may be in flight across every campaign at once; campaign admission status reads it back.

controller — keep campaigns coming

$ nfltr orch controller start --policy-file ./controller.json
$ nfltr orch controller status
$ nfltr orch controller update --controller-id relay-discovery --cadence 6h
$ nfltr orch controller stop --controller-id relay-discovery

A controller holds a durable policy — allowed scopes, intent template, budget and promotion templates, cadence — and creates campaigns from it on a schedule. The policy is immutable after creation; update only changes lifecycle fields (--enabled, --status, --cadence). Omit --controller-id on status to list them all.

Flags every group shares

--proxy-url URL, --server ADDR, --api-key KEY, --agent-id ID, --task-store-file PATH, --quiet, --silent and --no-derive-proxy work across the commands that talk to the control plane. The task store defaults to a shared path so start task in one shell and task status in another see the same run.

6. Workflows

From nothing to a first result

$ nfltr orch doctor
$ nfltr orch fleet status

No workers? Start one on the machine that should do the work, with the labels your objective will target:

$ nfltr worker --labels nfltr.supports_task_mode.implement=true,nfltr.worker.tool=run_task,pool=dev \
    --mcp-command "nfltr claude-mcp --cwd ~/project --task-mode \${TASK_MODE}"

Or bring up a whole local fleet from a named profile, previewing it first:

$ nfltr orch fleet launch claude-standard --dry-run
$ nfltr orch fleet launch claude-standard

Confirm capacity, then dispatch:

$ nfltr orch fleet status
$ nfltr orch start goal "Confirm the on-call workstation is ready to run orchestration tasks" --watch

Start from a spec instead of a goal

A spec is one or more phases, each with a task_mode, a worker_label to target, and plain-English instructions. Draft, check, then run it:

$ nfltr orch spec template --name single-task > ./onboarding-check.json
$ nfltr orch spec validate ./onboarding-check.json
$ nfltr orch start spec ./onboarding-check.json --dry-run
$ nfltr orch start spec ./onboarding-check.json --watch
Terminal output of nfltr orch start spec --watch streaming live dispatch, acceptance, verification, and completion events, ending with a phases table showing outcome passed

Captured with nfltr orch start spec ./onboarding-check.json --watch. Prefer plain English? nfltr orch spec decompose --goal "…" drafts the phase graph for you, and its output pipes straight into nfltr orch start spec - --watch.

Watch it

Three levels of detail, cheapest first:

$ nfltr orch task status --task TASK_ID --events 20
$ nfltr orch task watch --task TASK_ID
$ nfltr orch --task TASK_ID

The last one opens the console attached to that run: the transcript tails events for you, 2 opens the progress pane, and 4 opens the per-task output tail. For a wide view across several runs at once, the same events mirror onto the Causal Operations Atlas at nfltr.xyz/dashboard (attention rail, causal canvas, task drawer, Trace Lab) — see the Dashboard walkthrough.

Inspect one task

$ nfltr orch task list --active
$ nfltr orch task status --task TASK_ID --events 20
Terminal output of nfltr orch task status showing a completed task's verification gate, structured result JSON, and full nine-event history from dispatch to completion

Captured with nfltr orch task status --task TASK_ID --events 20. For the artifacts a task produced, use nfltr orch task artifact list --task TASK_ID.

Answer a human-intervention question

When a phase needs a decision it lands in the HITL queue rather than blocking silently:

$ nfltr orch hitl list --kind question
$ nfltr orch task answer --task TASK_ID --message "proceed with the default pool"

Setup gates and risky mutations are approvals rather than questions:

$ nfltr orch task approve --task TASK_ID --reason "verified evidence looks correct"
$ nfltr orch task reject --task TASK_ID --reason "verification evidence is incomplete"

Cancel or retry

$ nfltr orch task cancel --task TASK_ID --reason "stuck past SLA"
$ nfltr orch task retry --task TASK_ID --bump-priority
$ nfltr orch task reroute --task TASK_ID

retry re-dispatches, preferring a worker other than the one that failed unless you pin --worker. reroute always sends it elsewhere. To clear a whole stuck fan-out at once:

$ nfltr orch task cancel --batch BATCH_ID --reason "superseded"

Read the result

$ nfltr orch task wait --task TASK_ID
$ nfltr orch task result --task TASK_ID
$ nfltr orch memory --task TASK_ID

wait blocks until the task is terminal, result prints just the structured result body with no event history, and memory shows the reasoning trail behind it.

Next

For a screenshot walkthrough of the same run on the dashboard, read nfltr orch: A Visual User Guide. For inner-LLM turn detail and tool calls, read Observe orchestration. For fan-out patterns across several workers, see Multi-agent orchestration. When something goes wrong, Troubleshooting is organised by symptom.