Nexus Harness
One place to run, govern, and move work across every coding-agent harness your team uses.
Nexus Harness is the fleet plane for coding agents. Claude Code, Codex, Gemini CLI, Cursor, opencode, amp and the rest each keep their own sessions, their own history and their own idea of what a unit of work is. Nexus Harness puts one surface over all of them: a single list of every session, one way to start a governed one, and one way to move a piece of work from one harness to another without losing what it was for.
- Product overview — https://www.swfte.com/products/nexus
- Documentation — https://www.swfte.com/docs
- Support — https://www.swfte.com/support
- Contact — https://www.swfte.com/contact
Install
pip install swfte-nexus-harness
The command is nexus-harness. It requires Python 3.10 or newer and has zero runtime
dependencies — nothing but the standard library. That is deliberate. This is a developer
terminal tool that gets installed with pipx, with uv tool install, or into whatever
interpreter happens to be first on PATH. Every dependency is a version range that can conflict
with yours, and a conflict at install time is where adoption ends. It is also the tool you reach
for when the rest of the stack is broken, and a diagnostic that cannot start because one of its
dependencies failed to resolve is worse than no diagnostic at all.
Verify the install:
nexus-harness --version
nexus-harness doctor
Start with doctor
doctor is the command to run first, and the one that tells you the truth:
ok nexus binary …/nexus (nexus 0.3.0)
ok harness registry 2/6 harnesses can host a governed session (claude, codex)
FAIL collector read API collector not reachable at http://127.0.0.1:8791
fix: `nexus collector` to start it
WARN harness codex hooks not installed yet
FAIL harness opencode Nexus has no hook installer — a session here would run uninstrumented
WARN harness opencode registry row is an unverified seed
Every failure line carries the fix. Note that there are three states, not two. A gap that is
not a fault reports WARN and never ok, because an unverified registry row printed under a
green ok renders an absence as if it were fine — and that is precisely the class of bug this
product exists to prevent.
Sign in (optional)
Every command below works signed out. Signing in attributes sessions to your workspace and your user, so the fleet view, the cost figures and the audit trail belong to somebody rather than to a machine.
nexus-harness login # opens your browser, approve the device, done
nexus-harness connect <code> # no browser: redeem a setup code from your dashboard
nexus-harness whoami # who this machine is signed in as (never prints the key)
nexus-harness logout # revoke the credential, then delete it locally
login is the usual road. connect is the same destination by a different one, and the only
one available where no browser can be opened — a CI runner, a fleet image, an ssh session on
somebody else's box.
The credential is written to ~/.nexus/credentials.json at 0600. It is the same file the
nexus CLI writes, in the same format, so signing in with either tool signs in both. One
credential, not two.
doctor reports being signed out as a WARN, not a FAIL — it is a real gap worth naming, but
nothing here is broken because of it.
These four commands are the only ones that reach off your machine, and they only do so when you type them. There is no telemetry, no licence check-in and no update ping. See SECURITY.md.
The four capabilities
Fleet
See every session across every harness in one table — which are governed, which are not, and why. Start a new one on any harness that Nexus can instrument.
nexus-harness harnesses # what is installed, what can be governed
nexus-harness sessions # the fleet view
nexus-harness sessions --live # only what the control plane confirms is alive now
nexus-harness start codex # launch a governed session
Handoff
Move a unit of work from one harness to another — carrying the objective, the plan, the completion gates, the files touched and the cost — without losing lineage.
nexus-harness handoff <session-id> --to claude
Roles
Bind a model, a provider and a harness to a job: Claude for planning, Codex for coding, another model for testing. The routing is a property of the work, not of whichever terminal you happened to open.
Workflows
Turn recurring work into ordered, role-bound plans. Workflows are advisory first — they propose, they do not seize the wheel.
These are deliberately one product rather than four features. A workflow step boundary, a role transition and a handoff are the same edge. Built separately they would disagree about what a unit of work is, and the audit trail would fragment at exactly the boundaries where it matters.
What it will not do
It never reports a session as governed when it is not. A harness can be installed and on your
PATH and still be impossible to instrument. Nexus Harness shows that difference loudly rather
than quietly counting the session as covered.
It never renders absence as zero. Cost from a harness with no readable transcript is
unknown, not free. unknown and 0 never share a pixel.
It degrades honestly. If the Nexus binary is missing or the collector is down, every command still runs and names precisely what is unavailable and how to fix it. An ungoverned session that says so is acceptable. A session that reports itself governed while capturing nothing is the failure the whole product exists to prevent.
Requirements
| Python | 3.10, 3.11, 3.12 or 3.13 |
| Platform | macOS (Apple Silicon or Intel), Linux x86-64 or arm64, glibc or musl |
| Runtime dependencies | none |
| Nexus binary | required for governed sessions; every command degrades without it |
| Collector | optional; doctor reports its absence rather than failing |
The wheels are platform-tagged, because each one carries a compiled executable rather than Python
source. On a platform not in that list pip install reports "could not find a version that
satisfies the requirement" — which reads like the package is missing or the name is wrong, so it
is worth naming the real cause here.
Windows is not published yet. It ships as its own release with its own signed artifacts rather than being folded into this one. This is release sequencing, not a portability limit.
The desktop application is a separate download for macOS and Linux. See https://www.swfte.com/products/nexus.
Licence and support
Nexus Harness is proprietary software, licensed and not sold. Copyright © 2026 Swfte. All rights
reserved. See the bundled LICENSE for the full terms, and
https://www.swfte.com/terms and https://www.swfte.com/privacy.
For help, a licence question, or a bug report, contact us at https://www.swfte.com/contact — we do not run a public issue tracker.
Swfte — https://www.swfte.com
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 7.1 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b0dbd2c8609da3a1fbe7ba7f0fbb181bc45c81ca6da5193c833fa3667bffd76
|
|
| MD5 |
10509666c5d710e9c24e7a280daf8990
|
|
| BLAKE2b-256 |
da84b121da960c5658ee066767626a7a70f33f0198fc7479e1bc9394b1b145fe
|
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 7.3 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dad6cec96f966244077e8f3b5cdbf1e16800a95802eb743a06a13b3f867587fc
|
|
| MD5 |
591c6560feff3a02cba3626bd8e32bf4
|
|
| BLAKE2b-256 |
7661a926143f1507eefbce1de90260edb993e249aa59f75cb4498efe3bcdf171
|
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.2 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a061a427309b571f26cc5e4e5dd1ecbf5cede924848b4da27858cfea887ebdb3
|
|
| MD5 |
b8a77de4587d2972ee6f75bcc0a6e3c9
|
|
| BLAKE2b-256 |
f4327e396b0c41c8d7c6b577a307f7ee1ba5002f0f5cfbc73ee2adcbaca3a3fb
|
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 6.0 MB
- Tags: Python 3, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c0dc8ee1739c5c1d191e29b63288488cfacad82c665c4012c440d5d753d0398
|
|
| MD5 |
ed517a1ccf725f42fd4dc8ef8aaaee72
|
|
| BLAKE2b-256 |
8b7e23502fea0c5a09c34b7a5d2533ef13ca9f1c4b0869909e500a471926e333
|
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 8.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4c850cb7cd4928b0eb50cdfa6f5655e71eeb6578e4df363ce8c3bbc342dfab4
|
|
| MD5 |
14c2558be45cfa34a3f1fed4b45963a7
|
|
| BLAKE2b-256 |
cab8e4845ee0a84a15c92d7c0025a0156f44431727a5cf96970f014a54f7848f
|
File details
Details for the file swfte_nexus_harness-0.1.0-py3-none-macosx_10_9_x86_64.whl.
File metadata
- Download URL: swfte_nexus_harness-0.1.0-py3-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 8.2 MB
- Tags: Python 3, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91c1baeebdb11b70e60862f2b1c582bb4403c321436ec1ebc389c0ce801458f1
|
|
| MD5 |
ca5b1e7b8461e6ae1db3b400ea1e7c67
|
|
| BLAKE2b-256 |
bb3c4c073c42a6d12ae2d6ab641245f76f933283bf377723fa17cd96aae2dd0e
|