Fob
Browse the docs

Inspect lines and workpieces

These commands read the worker repo on the machine you run them on: station and line files from .orchestrator/, and bins from temp/stations/. Run them on the machine where the worker runs to see its real state.

Lines#

fob-worker lines list
LINE  NAME            LOCATION  STATIONS  MEMBERS
--------------------------------------------------
IN    Invoice intake  acme      2         IN0, IN1

Total: 1 lines, 2 stations

lines show <line> lists a line's stations in order, their steps and dependencies, and the conveyors between them. See Stations and lines.

How much is where#

fob-worker lines status
LINE  IN-FLIGHT  STUCK  FINISHED  HEALTH
---------------------------------------------------
IN    0          1      2         ⚠ 1 at IN1/failed
  • In-flight: workpieces in input, doing or output of any station except the last.
  • Stuck: workpieces in a failed bin.
  • Finished: workpieces in the last station's output.

Name a line for its bins, station by station:

fob-worker lines status IN
Line: IN
Stations:     IN0 → IN1
Terminal:     IN1

STATION  INPUT  DOING  OUTPUT  FAILED  (DONE)
---------------------------------------------
IN0      —      —      0       —       —
IN1      0      0      2       1       (2)
live     0      0      2       1       —

— means the bin folder doesn't exist yet. done is shown in brackets because it holds receipts, not live work.

stations status IN1 lists the workpieces in each of one station's bins. Add --watch to lines status or stations status to redraw every second (--interval 5 for every five) while a run is going.

One workpiece#

fob-worker workpieces show INV-1002
Workpiece: INV-1002
Position:  IN1/failed  (stuck)

Journey (UTC)
-------------
2026-10-03 14:35:02  IN0  workpiece_created
2026-10-03 14:35:03  IN1  station_started
2026-10-03 14:35:03  IN1  station_failed       (0ms)

Folder: file:///home/dev/worker-acme/temp/stations/IN1/failed/INV-1002

The journey comes from the workpiece's log.jsonl, in your local time zone. The folder link opens in most terminals; for a failed workpiece, error.txt there has the error.

Part of an id works too. If it matches several workpieces, you get the list instead.

All workpieces#

fob-worker workpieces list
fob-worker workpieces list --line IN
fob-worker workpieces list --bin IN1/failed
fob-worker workpieces list --match 1002
Workpieces — 3 workpieces

WORKPIECE  POSITION               LAST EVENT (UTC)
--------------------------------------------------------------------
INV-1001   IN1/output (finished)  14:35  IN1  station_complete (1ms)
INV-1002   IN1/failed (stuck)     14:35  IN1  station_failed (0ms)
INV-1003   IN1/output (finished)  14:35  IN1  station_complete (0ms)

A workpiece's position is the furthest live bin it's in; the done copies don't count.

Live tail#

fob-worker workpieces watch INV-1002          # one workpiece
fob-worker workpieces watch --line IN         # everything on a line
fob-worker workpieces watch --bin IN1/input

It prints each move between bins and each new log event as it happens, until you press Ctrl-C.

JSON#

lines list, lines show, lines status, stations status, workpieces list, workpieces show and procs list take --json:

fob-worker stations status IN1 --json | jq '.bins.failed'
[
  "INV-1002"
]

Clearing bins#

While you develop, empty a line's or a station's bins to start over:

fob-worker lines empty-bins IN --all-bins     # every bin on the line
fob-worker stations empty-bins IN1 --failed   # one station's failed bin
FlagEmpties
--input, --doing, --output, --failed, --doneThat bin
--all-binsAll five bins
--intake-registryThe line head's intake-registry.jsonl
--allAll five bins and the intake registry

It shows what it will delete and asks before deleting. --yes skips the question; use it with care on a machine running a real worker.