← Tools

The inference mesh

jat.run

The fabric — many appliances pooled behind one tailnet endpoint.

One endpoint

jat.run/v1/chat/completions

OpenAI-compatible. Every appliance on your tailnet answers behind it.

Install

jat install run Source →

A single appliance is one box. jat.run is the fabric that turns every appliance on your tailnet into one pool of private compute and inference — one endpoint, backed by as many machines as you've joined. Clients hit jat.run; the mesh routes each job to the node that can serve it fastest.

The box

A jat-appliance is one node — a single machine on your tailnet.

The fabric

jat.run is the mesh — the networked plural of appliances, many boxes pooled behind one endpoint.

Add a box, add capacity

Joining is one command. Find a good deal on a used Mac, or splurge on a big-memory workstation — plug either into the tailnet and the mesh's capacity and redundancy go up. A node that dies just reroutes; nothing to reconfigure. Every node declares one of two roles:

dedicated

always-on nodes — models pinned, capacity guaranteed

opportunistic

a laptop that joins when on AC + idle, and drains gracefully the moment you pick it up

Routed by measured performance

Every node benchmarks itself, so the router doesn't guess where to send a job — it knows which box does a given model at what throughput and routes accordingly. The same bench data answers the question you actually have when you're shopping: if I add this machine, how much more can the mesh serve?

Run on the mesh

jat-appliance join --role opportunistic
curl jat.run/v1/chat/completions -d @job.json
routed → appliance-01 (31 tok/s) · private, on your tailnet

How it fits

jat.run is what many jat-appliances become when you pool them: one private endpoint on your tailnet that jat's agents — and any OpenAI-compatible client — hit for inference. One box is capacity; the mesh is capacity that compounds. Add a box, add capacity.

Mesh topology, routing, and the join protocol on GitHub.

View on GitHub