Engineering preview Mac signed execution passed Windows / Linux not yet
Connect your machines.
Feel the speedup.
Your Mac borrows idle cores from your other machines, so your own Mac finishes jobs faster — and it tells you exactly what it gained. Your auth and your data stay on your Mac.
Measured on one thing: a CPU-bound Python script (xover_par.py) on one paired Mac. Everything else still runs locally. This is not a general speedup yet.
What the public release feed says today
Source: feed-snapshot.json
- HTTP
- not measured
- Fetched
- not measured
- Envelope sha256
- not measured
- Mac
- not measured
- Linux
- not measured
- Windows
- not measured
One line, verified before it installs.
Downloads the release archive for this machine, checks its SHA-256 against a signed manifest, then installs to ~/.local/opt/tether. No sudo, no shell profile edits.
sh install.sh
Needs python3 (3.9 or newer) on PATH. The installer never downloads Python.
Nothing is installed until a signed release manifest is published: the script refuses a manifest it cannot verify against the publisher key. No release archive is published yet.
Then pair a second machine
The installer prints this as the next step. It creates a one-time invite for a machine you own; nothing is sent anywhere until you import it there.
tether pair <host>
Uninstall: the same script with --uninstall removes only a tree it installed.
One job, one donor: measured on the product path
Measured with tether --auto, not a bench tool: a
python-cpu-parallel job run on this Mac alone, then split with one donor.
The two runs produced cmp-identical output. This is one workload class;
everything else still runs locally.
Warm stage: one round trip. Since 362bedbc, a warm
stage is one round trip — the apply's own answer is the preverify, so an
unchanged tree is not hashed twice. No donor timing is claimed for this change.
-
01
Pair a machine you own
One ssh relationship. No install on the donor: Tether sends the runner over ssh and runs it with the donor's own python3.
-
02
Tether splits the job
The job is cut into units. Each unit runs once — some on your Mac, some on the donor — and the merged output is checked against a local re-run.
-
03
Your Mac finishes sooner
Your Mac is always a worker, never just a dispatcher. If the donor would be slower, the job stays local.
Recorded run, played back
One job, split across two machines
A recorded run of one job, replayed at the speed it was measured: units leave this Mac, run on a donor machine, and the whole job finishes sooner. The bars below are the static record; the replay only adds movement.
A recorded split run of one job, drawn as two bars: python-cpu-parallel-v1, 24 units, split across two machines. This Mac ran 16 units in 21.150 s, the donor machine hk ran 8 units in 18.277 s. The whole job finished in 21.152 s against 27.161 s with this Mac alone, 1.28 times faster. Every arm produced the same output digest 896dd1ca79aeb406.
- Units kept here
- 16
- Units sent out
- 8
- Donor compute, of its leg
- 16.791 s of 18.277 s
- Dispatch and transfer
- 1.486 s
Static view of the recorded run. The replay animates only when the page loads its record.
21.152 s1.28× Whole job, split wall time. The same job alone on this Mac took 27.161 s.
896dd1ca79aeb406 Outputs identical: every arm of this run produced the same digest, recorded with the run.
Motion is the record's own timing on one shared scale, so the faster bar is the machine that finished first in the measurement. It plays once on load, honours prefers-reduced-motion, and the numbers above do not depend on it.
Jobs out, receipts back
Loading the measured fabric.
Two real runs, one win and one honest loss
Source: fabric-measured.json
The second result is the safety check working: when sending a job out would be slower, Tether keeps it on your Mac.
Measured, not claimed
Source: measured-not-claimed.json
Every figure is computed at deploy from the committed bench records, and keeps its load, pair count and spread. No headline speedup: the same donor wins on a saturated Mac and loses on a quieter one.
Shown from the committed records. The page reads the same file again when it can.
Saturated Mac
Quieter Mac
Bench run, one job
When sending work out starts to help
Source: when-it-helps.json
Splitting a job pays a fixed cost before any donor does useful work, so a small job is faster kept on your Mac. These are the sizes measured on 2026-10-18, and the conditions they were measured under.
These figures are not available right now.
How Tether decides
Source: how-it-decides.json
Work leaves this Mac only when all three of these are true.
-
A qualified donor
A donor is qualified only when its price was measured under one load: every leg at or under , and the campaign's load span within .
-
Above the crossover
The job has to be above the crossover size: a busy Mac first won at units, and the planner keeps local and sends .
-
A measured transfer
The data-transfer cost has to be measured for this directory, not estimated: fewer than timed transfers keeps the job on the Mac.
Your Mac stays a worker. A low-load benchmark of a -unit job ran –× as fast with this Mac still running part of the job, of pairs, with identical outputs. A benchmark at low load, not a guarantee. stays-a-worker.json
Every measured sample, run by run
Measured on real hardware
Not an illustrationReal runs of one workload on the Mac and one paired Linux peer. Each run shows its date, how busy the Mac was, and what the gate decided. When an offload would lose, Tether keeps the work local.
No measurement published.
Local against with-peer wall time
Measured samples, run orderEvery paired sample from the published runs, Mac against peer. The fabric records no continuous wall-time history, so this plots the measured campaign samples in the order they ran.
Loading the measured samples.
One job, split across machines
The same job run on this Mac alone, then split between the Mac and one donor machine. Each pair shows who did how much, when each finished against the plan, and whether the outputs matched.
Loading the split-run record.
Measured 2026-10-19: one job, this Mac and donor machines
Wall-clock seconds for one CPU job, measured on 2026-10-19 with tools/pull_split_run.py. This is a proof run. It is not yet what the everyday tether test --auto command does.
| Job | Mac load | This Mac alone | With one donor | With two donors | Faster by |
|---|---|---|---|---|---|
| 16 units, Mac heavily loaded | 486-1014 | 9.38 s, 10.77 s | 2.72 s, 2.77 s | not run | 3.5-3.9x |
| 16 units, quiet Mac | 45-49 | 3.68 s, 3.78 s | 2.00 s, 1.97 s | not run | 1.84-1.92x |
| 48 units, three machines | 43-65 | 12.2 s, 14.7 s | 6.8 s, 7.7 s | 4.4 s, 4.7 s | 2.8 to 3.1 times |
The output sha256 was identical on every arm of the 48-unit run. This Mac still did 16 of those 48 units: it works, it does not hand the job off.
Honest limit: a slow donor (hk, 2.49 s per unit against about 1.0 s locally) can lengthen the end of the job. A fix for that is in progress.
One tether with receipts behind it. Two with no authorized host.
Drawn from the state the CLI reports. A solid moving line is a link that has carried real work with identical output. A dashed grey line means no authorized machine exists yet.
Solid, animated — receipt-backed link Dashed, grey — no authorized host yet
-
This Mac · controller
QualifiedRuns the CLI and holds the pairing store. Eligible work uses
tether --auto; anything unqualified stays local. -
Authorized Mac peer
Receipt-backedThe one link with measured evidence: three signed runs, identical output, 17.1 s against 28.2 s on the Mac alone. Generation
20260901T081436Z. -
Windows host
No authorized hostTested in software only. No real Windows machine has joined a fabric, so there is no link to draw.
-
Linux host
No authorized hostSame as Windows: tested in software, not yet accepted on a real machine. GPU scheduling is not built for any platform.
What works today, and what does not
This page is static. It does not look at your machines. Live capacity is on the
status dashboard after
tether-fabric status --json.
Mac to Mac, signed
Three signed runs gave identical output, finishing in 17.1 s against 28.2 s on the Mac alone (generation 20260901T081436Z). A lapsed pairing fell back to local with nothing left behind.
Windows and Linux
No authorized Windows or Linux machine has been proven. Tether does not claim parity.
Not ready to turn on for everyone
Some activation checks are still blocked or unmeasured, so ready_for_activation: false. The safety check stays closed until they pass. That is the design working, not a broken page.
Four checkout steps. No public installer.
Eligible work uses tether --auto. If the peer is missing,
slower, or revoked, the job stays on your Mac. The
pairing steps page matches the Mac app exactly.
Install from checkout
Build the clean wheel and install it on the controller. A signed public installer and updater are not shipped; local archive installation is documented on the download page.
python3 -m pip install /path/to/tether-wheel.whl
Pair your machines
Create an explicit paired-key relationship with a machine you own or are authorized to use.
tether-fabric pair create PEER_ID --display-name NAME --json
Read signed status
Inspect the receipt-backed snapshot. Capacity totals come from signed status, not this page.
tether-fabric status --json
Run one qualified class
Eligible commands use tether --auto. Local fallback stays on if a peer is missing or slower.
tether --auto python3 xover_par.py
Current pair grammar
Invite lines start with tether-invite-v1. and
are never put in a URL or query string. Same-store second import is
refused as already used. The Mac app runs these; this page only prints them.
tether-fabric pair create PEER_ID --display-name NAME --json --invitetether-fabric pair import PEER_ID --invite CODEtether-fabric pair import PEER_ID --key-file PATH --display-name NAMEtether-fabric ingest PATHtether-fabric revoke PEER_ID WORKLOAD_CLASS --reason TEXT
Try it on two machines you own
Install from a checkout, pair a second machine, and run one qualified job. If the peer is slower, the job stays on your Mac.
Feed measurement and per-platform availability
Signed stable.json snapshot
MEASURED: the latest/download alias returned HTTP 404. There is no
signed tether.update-feed.v1 envelope to show.
Mac
local-unsigned lane only until Developer ID
Asset on public feed: none
Linux
archive when a signed feed exists
Asset on public feed: none
Windows
not yet
Asset on public feed: none