One compute pool from the machines you own and the boxes you rent.

Type the command you would run here, put falllow run -- in front, and it runs on whichever machine has room. Output streams back, the exit code is the command's own.

Run it somewhere else

From any directory. It is packed and shipped as it is, the command runs in the same subdirectory on a pool machine, and the output arrives as it is written.

From your project
$ falllow run -- cargo test --workspace
falllow: run cargo-test-3f9a
falllow: waiting for a machine
   Compiling solver v0.4.0 (/workspace/crates/solver)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 41.02s
test result: ok. 212 passed; 0 failed

Fan it out

One submission becomes several jobs, each told its slice through FALLLOW_SHARD_INDEX. They queue for free machines and reduce to one exit code.

Across the pool
$ falllow run --shard 4 -- ./sweep.sh
falllow: 4 shards: sweep-sh-9c1e-0, sweep-sh-9c1e-1, ...

== shard 1/4: sweep-sh-9c1e-0 (exit 0) ==
f = 1.0 GHz .. 2.5 GHz, 64 points, 3m12s
...
falllow: all 4 shards succeeded

Add a machine

List it in the fleet and apply. It joins with its real cores, memory and GPUs, split into blocks so several jobs can share it.

The fleet
# deploy/pool.yml
fleet: pool
ssh:
  user: root
  identity_file: ~/.ssh/dstack_fleet

machines:
  # the workstation at home
  - name: workstation
    address: 10.7.0.2
  # a rented box, shared a core at a time
  - name: rented
    address: 10.7.0.3
    blocks: auto

$ falllow pool apply

How it behaves

Your machines, over SSH

A machine joins by being listed in the pool file: Linux, Docker and an SSH key. Through a WireGuard tunnel to the server, a workstation behind a home router is as reachable as a rented one, and nothing opens a port.

Your working directory, as it is

What is on disk is shipped and run: committed or not, in a git repository or not. No push, no token, no way into GitHub for any machine in the pool.

A queue, not a failure

When every machine that fits is busy, the job waits its turn. A job no machine in the pool could ever take is refused straight away instead of waiting a day for nothing.

Honest exit codes

A failing test exits with the test runner's own code. 170 means only that the pool failed you, so a script knows when running it again can help.

Built on dstack

Scheduling, the fleet, shipping the working tree and running the container are dstack, an open source orchestrator. falllow is the layer on top: a command that behaves like the local one, and a manager to watch the pool. The same server takes rented cloud capacity when the pool is not enough.

How the pieces fit