Multi-user wrapper for managing terminal AI coding agent sessions (claude, codex, cursor)
Project description
uxon
Session manager for development teams using terminal AI coding agents (Claude Code, Codex, Cursor CLI) on one or more Linux servers. Team visibility via OS accounts, cross-host visibility via SSH, supervision via sudoers.
When to use uxon
Use uxon when terminal AI coding agents are a runtime someone
else may need to see, attach to, or stop. Four shapes of
deployment, one tool:
- One developer, one host. Persistent TUI over
tmux; agents optionally sandboxed in a low-priv<user>_agentaccount so a yolo run can't trash your$HOME. - One developer, several hosts. Aggregate everything into
one TUI with a
HOSTcolumn; locals first, then peers grouped by host. - A team sharing one host. Each developer runs as their
paired
<user>_agent. The lead's TUI sees everyone viasudo. Cross-user supervision without impersonation — the lead never becomes the developer. - A team across several hosts. Same supervision property
per host; per-peer authority (each host's
sudoersis the authority on that host); cross-host audit correlation via UUIDcorrelation_idjoining caller-side and peer-side events.
Aggregation is client-side: the lead's TUI fans out over SSH. No daemon, no database, no central server to deploy. Each host stays independently configured and independently authorised.
Install
Requires Python 3.11+, tmux, and Linux.
# Team / shared host (recommended): one root-owned binary in
# /usr/local/bin/uxon. Operator owns the version and the install
# path; launch users can append audit events but cannot edit
# the binary or the trail.
sudo pipx install --global uxon
# Solo / single-owner: each OS user manages their own copy.
uv tool install uxon # or: pipx install uxon
uxon # launch the TUI; it self-diagnoses
For the bundled installer, PEP 668 caveat, and unreleased-from-
main builds, see docs/start/install.md.
Documentation
The site at docs/ is organised two ways. Pick the
entry that matches what you have in mind.
By scenario:
By task (Diátaxis layout):
docs/start/— tutorials (install, bootstrap a host, add a peer).docs/guides/— how-to recipes (operate, harden, customise, debug).docs/reference/— every command, every flag, every config key, every audit event.docs/explain/— the model (isolation, supervision, multi-host, audit channel).
Top-level pointers:
docs/index.md— full table of contents.docs/clients.md— laptop side (Eternal Terminal, SSH config, hardware keys).docs/privacy.md— whatuxonrecords about each developer; for sharing with your team.docs/migrations.md— version-bump operator notes.SECURITY.md— disclosure policy + threat model summary.CHANGELOG.md— version history.CONTRIBUTING.md— local checks, branch policy, release process.
Quick TUI tour
uxon (no args, on a TTY) opens a full-screen picker:
- New session in current folder — start the default agent
in
$PWD. - Create new project — prompt for a name, create
<new_project_root>/<name>, optionally create a GitHub repo, launch the agent. - Open existing project — pick a directory under
new_project_rootand launch.
Below that: a unified session dashboard mounting your own
sessions, other-user sessions visible via sudo (when the
superuser block is active), and one row per session on each
configured [[remote_hosts]] peer. Two view modes — flat
(default; single ranked list) and by_host (per-host tabs and
a status bar); toggle with v. ←/→ on the dashboard cycles
between hosts (host tabs in by_host, (host, own/other)
transitions in flat).
A search bar at the top filters across all rows; / refocuses
it. Per-row data: agent, working dir, live CPU / RAM, attached
glyph (●/○), creation time, last activity time. Enter
attaches; d kills with confirmation.
Every launch asks whether to start in normal mode or with
--dangerously-skip-permissions ("yolo") — the TUI does not
start yolo without that explicit choice.
Full keybinding list:
docs/reference/keybindings.md.
Supported agents
| Agent id | Binary | --auto mode |
--dsp (yolo) |
Install |
|---|---|---|---|---|
claude |
claude |
--permission-mode auto |
--dangerously-skip-permissions |
Anthropic docs |
codex |
codex |
--full-auto |
--dangerously-bypass-approvals-and-sandbox |
npm i -g @openai/codex |
cursor |
cursor-agent |
(not supported) | --yolo |
curl https://cursor.com/install -fsSL | bash |
Enable agents in config/config.toml:
[agents]
enabled = ["claude", "codex"]
default = "claude"
-w <branch> (worktree) is currently claude-only. --auto is
unavailable for cursor.
uxon doctor probes each enabled agent and prints its path,
version, and status. The TUI auto-detects newly-installed
agents and offers a one-keypress enable.
Versioning
uxon follows SemVer. uxon --version
prints the version and short git commit (with -dirty when the
checkout has uncommitted changes).
In a team·N fleet, all peers must run the same major version
— see docs/guides/operate/roll-fleet-upgrade.md.
License
MIT © 2026 Vasily Zakharov.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 uxon-3.4.0.tar.gz.
File metadata
- Download URL: uxon-3.4.0.tar.gz
- Upload date:
- Size: 543.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19977a7f531b0f8b4ddc457a7651175f105d2036ec42e21455125536532c86a6
|
|
| MD5 |
59d86bded6e987624bb36b6598ba238d
|
|
| BLAKE2b-256 |
7ce0f78de508b741e901927d1c56f1843d8796929bddc9d49925e95844fdfd40
|
Provenance
The following attestation bundles were made for uxon-3.4.0.tar.gz:
Publisher:
release.yml on vzd3v/uxon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uxon-3.4.0.tar.gz -
Subject digest:
19977a7f531b0f8b4ddc457a7651175f105d2036ec42e21455125536532c86a6 - Sigstore transparency entry: 1525026657
- Sigstore integration time:
-
Permalink:
vzd3v/uxon@58c65cb015de1ce9856f7e6564dff63c76369036 -
Branch / Tag:
refs/tags/v3.4.0 - Owner: https://github.com/vzd3v
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58c65cb015de1ce9856f7e6564dff63c76369036 -
Trigger Event:
push
-
Statement type:
File details
Details for the file uxon-3.4.0-py3-none-any.whl.
File metadata
- Download URL: uxon-3.4.0-py3-none-any.whl
- Upload date:
- Size: 240.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
812b91dce966220f10351768159a72de694dc12fa23cde1d9cf6b39b428e183e
|
|
| MD5 |
db4cb9720d3a26fc788f0a5fa757d094
|
|
| BLAKE2b-256 |
7d1f9ac2e3900d3bf665de87c5fad809b3379f51bce0f39e2498e3a285cc3038
|
Provenance
The following attestation bundles were made for uxon-3.4.0-py3-none-any.whl:
Publisher:
release.yml on vzd3v/uxon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uxon-3.4.0-py3-none-any.whl -
Subject digest:
812b91dce966220f10351768159a72de694dc12fa23cde1d9cf6b39b428e183e - Sigstore transparency entry: 1525026684
- Sigstore integration time:
-
Permalink:
vzd3v/uxon@58c65cb015de1ce9856f7e6564dff63c76369036 -
Branch / Tag:
refs/tags/v3.4.0 - Owner: https://github.com/vzd3v
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58c65cb015de1ce9856f7e6564dff63c76369036 -
Trigger Event:
push
-
Statement type: