Workers
By default every step runs in the server’s own process. When a step needs another machine
(Windows, a GPU, a box with devin logged in), a worker runs it there.
wfx workers # machines in the pool, and the line that adds anotherwfx workers rm <id> # forget a machinewfx workers rotate # new join token; machines already joined keep workingwfx workers prints the join line. On the other machine:
wfx-runner join --url https://wfx.example.com --token wfx_… --labels windows,devinwfx-runner runThe runner is outbound only. It connects to the server and asks for work, so no inbound
port needs to be opened on the worker. A step goes to a matching worker when its runs-on
(or the workflow’s) names a label:
steps: - id: build-windows runs-on: windows run: ./build.ps1 shell: pwshThe server side is the /api/workers endpoints: join, claim, heartbeat and job events.
Tools and config on a worker
Section titled “Tools and config on a worker”Each worker restores its own tools, config files and env defaults from a bucket through carry, so
adding jq to one machine is carry tool add, not an image rebuild. See
Tools and config with carry.
Steps that must not overlap
Section titled “Steps that must not overlap”A worker pool runs steps in parallel. When two runs of the same workflow must not overlap (a
migration, a nightly job), give the workflow a concurrency:
group.