Live testing · v0.1.10 — Baryon is in early public preview. Expect bugs, missing UI states, and rough edges — for example adding an instance currently asks to install Gluon even if you already have it. We're shipping fixes constantly. Send feedback from inside the app or to lapizh@icloud.com.
Documentation

Baryon Systems, end to end.

What Baryon Systems is, what products ship inside it today, how each one installs on Linux, how the cryptography works, and the exact commands you’ll see. Read top to bottom or jump to the section you need.

What is Baryon Systems?

Baryon Systems is a desktop application (Electron, Windows today, macOS+Linux next) and a small company building it. The desktop signs you in, manages your account, and opens a Products panel that lists every Baryon product available to you. Each product runs on its own Linux footprint and keeps its own state — the desktop is just the shell.

Today the Products panel ships two unlocked tiles:

Three more tiles — Quark (confidential analytics), Lepton (zero-trust gateway), Boson (compliance hub) — are visible but locked; they unlock in place as they ship. The products are independent. Installing one does not require, configure, or talk to any of the others.

Baryon Gluon · overview

Gluon is a fleet manager for Linux instances you’ve paired with the desktop. It bundles five tightly-integrated layers:

  1. Layer 1 — Kernel firewall. Real eBPF/XDP, generated and compiled from your rules, hot-attached to the NIC.
  2. Layer 2 — Identity & attestation. Per-host HMAC challenge-response and full systemd-sandbox snapshots.
  3. Layer 3 — Audit ledger. SHA-256 hash-chained JSONL, verifiable offline.
  4. Layer 4 — Workspace backend. Postgres 16 + PostgREST + Supabase Realtime, deployed in Docker, reached only via SSH tunnel.
  5. Layer 5 — Chat & live alerts. Real-time collaboration with kernel-event mirroring.

The agent that runs on each Linux host is a single Python fileagent/gluon-agent.py — using only the standard library and ~1300 lines including all the eBPF code generation. The systemd unit grants the minimum capabilities required (CAP_BPF, CAP_PERFMON, CAP_NET_ADMIN, CAP_SYS_ADMIN) and locks everything else down.

i
“Baryon Systems” vs “Gluon”. Baryon Systems is the desktop app and the company. Gluon is one of the products inside it. Tachyon is another. The agent that runs on each Gluon-paired Linux host is informally “the gluon” — it’s what binds your desktop to your servers for that product.

Gluon architecture

There are three trust zones:

Nothing in this picture is reachable from the public Internet except port 22 (SSH). The XDP firewall additionally drops everything else at the NIC.

Trust model

The short version:


Requirements

Your desktop:

Each Linux host you want to pair:

Install the desktop app

Two binaries are shipped per release:

FileWhat it is
BaryonSystems-0.1.0-x64.exeNSIS installer, registers Start menu entries.
BaryonSystems-0.1.0-portable.exeSingle-file portable, no install needed.

On first launch you create a workspace passphrase. The app derives an AES key from it, stores nothing in the cloud, and unlocks the workspace on every subsequent open.

!
Lose the passphrase = lose the workspace. There is no recovery server. Write it down somewhere you trust.

Pair a Linux host

From the desktop, open Instances ? Add. The wizard asks for:

The wizard then runs the install script on the host. Output streams live into the panel. When it finishes you'll see three machine-parseable lines:

GLUON_INSTALL_OK
GLUON_FINGERPRINT=A1:B2:C3:…
GLUON_ADMIN_TOKEN=•••

The desktop pins that fingerprint and stores the admin token encrypted in the workspace. From now on it talks to the agent over the SSH tunnel on 127.0.0.1:7777, presenting the bearer token.

Your first firewall rules

Open Layer 1 · Per-instance XDP. The panel has three editors:

Click Compile & attach. Behind the scenes:

  1. The desktop POSTs the validated rules to the agent.
  2. The agent regenerates firewall.c with your rules and an SSH whitelist baked in (so you can't ever lock yourself out by accident — even with an empty rule set, SSH is always allowed).
  3. The agent runs clang -O2 -g -target bpf -c firewall.c -o firewall.o.
  4. The agent runs ip link set dev <iface> xdp obj firewall.o sec xdp, falling back to xdpgeneric on virtual NICs that don't support native XDP.
  5. Status panel goes green: XDP ATTACHED · native · sha256 7c4d…

Layer 1 — eBPF/XDP firewall

The kernel firewall is generated C, not config-driven. The generator lives in XdpEngine.generate_c() inside the agent and emits a self-contained program that:

Counters are dumped on demand via bpftool map dump -j and accumulated across CPUs. The status panel polls them every 3 seconds.

Endpoints

GET  /v1/xdp/status     # attached? iface, mode, sha256, counters, toolchain
GET  /v1/xdp/rules      # current ruleset
POST /v1/xdp/rules      # validate & save (admin)
GET  /v1/xdp/preview    # preview the generated C
POST /v1/attach         # compile + load + verify (admin)
POST /v1/detach         # ip link set dev <iface> xdp off (admin)

Layer 2 — Identity & attestation

Every agent generates a 32-byte random key at install time at /etc/gluon/agent.key (mode 0600, owned by gluon). Its SHA-256 fingerprint is exposed in /etc/gluon/agent.fpr and printed at the end of install.

The desktop pins that fingerprint on first pair. Any future verification request sends a fresh nonce and expects back an HMAC-SHA256 over nonce || instance-id || timestamp.

The Identity panel also surfaces the live systemd sandbox state: capabilities granted, mount-protection flags, no-new-privs, the currently-loaded XDP object's sha256, and the agent's process ID.

Layer 3 — Audit ledger

/var/lib/gluon/ledger.jsonl is append-only. One JSON object per line. Every entry carries:

FieldMeaning
seqMonotonic counter
tsUnix nanoseconds
kindagent.boot, xdp.attach, xdp.detach, ban, policy, …
actorIdentity that wrote it (admin / agent)
payloadkind-specific JSON
prevSHA-256 of the canonical-JSON encoding of the previous entry
hashSHA-256 of this entry's canonical-JSON without the hash field

The desktop's Ledger panel offers Verify chain — it streams the file, recomputes each line's hash, and reports the seq of the first break (or "OK, N entries").

Layer 4 — Workspace backend

From Workspace ? Backend the desktop will (over SSH):

  1. Install Docker if missing
  2. Write a docker-compose.yml with three services: postgres:16-alpine, postgrest/postgrest, supabase/realtime
  3. Generate a strong DB password, write it into the desktop's encrypted workspace
  4. Bring the stack up bound to 127.0.0.1
  5. Open a local SSH port-forward so the desktop can reach postgres://gluon:****@localhost:5433

The schema in schema.sql defines users, workspaces, roles, channels and messages. PostgREST gives you a REST + RPC surface bounded by row-level security. Realtime streams DB changes over WebSocket.

Layer 5 — Chat & alerts

The chat panel is a thin client over Realtime + LISTEN/NOTIFY. Owners can create channels; members can post; guests are read-only. The #kernel-alerts channel auto-receives every xdp.attach, xdp.detach and ban event from any paired host. You see drops happen in real time alongside the human conversation.


HTTP API · Gluon agent

All endpoints live on 127.0.0.1:7777. Admin endpoints require Authorization: Bearer <admin.token>.

Public (no auth)

GET  /v1/health         # {ok: true, uptime, version}
GET  /v1/status         # mode + xdp summary + capabilities
GET  /v1/identity       # fingerprint, sandbox snapshot
POST /v1/identity/challenge   # {nonce} ? {hmac, ts}

Admin (Bearer token)

GET  /v1/ledger          # stream last N entries
POST /v1/ledger/verify   # walk hash chain

GET  /v1/xdp/status
GET  /v1/xdp/rules
POST /v1/xdp/rules       # body: {blocked_ips, ratelimits, udp_flood, ssh_port}
GET  /v1/xdp/preview     # text/x-c source preview
POST /v1/attach          # body optional: {rules?, iface?}
POST /v1/detach

Example rule payload

{
  "blocked_ips": ["1.2.3.4", "198.51.100.0/24"],
  "ratelimits": [
    {"port": 80,  "pps": 1000},
    {"port": 443, "pps": 5000}
  ],
  "udp_flood": {"enabled": true, "pps_per_source": 800},
  "ssh_port": 22
}

Operator runbook · Gluon

If you're SSHed into a host directly and want to see what the agent is doing:

# Service health
$ systemctl status gluon-agent
$ journalctl -u gluon-agent -n 200 --no-pager

# Is the firewall attached?
$ ip -d link show eth0 | grep -A1 xdp

# Live counters
$ sudo bpftool map dump pinned /sys/fs/bpf/baryon_stats

# Verify the ledger
$ sudo cat /var/lib/gluon/ledger.jsonl | wc -l
$ curl -sH "Authorization: Bearer $(sudo cat /etc/gluon/admin.token)" \
       http://127.0.0.1:7777/v1/ledger/verify

# Detach (emergency)
$ sudo ip link set dev eth0 xdp off

Baryon Tachyon · runaway-process autopilot

Tachyon is a separate Baryon Systems product. It does not care about firewalls, identity, or chat. Its one job is to watch every Linux process on the host and, the moment one starts to misbehave, throttle it before a human notices. The Tachyon tile in the desktop’s Products panel has its own pairing flow, its own Linux installer, and its own state on disk — you can run it on boxes that have no other Baryon product installed.

What it’s for

Install

From the desktop: Products → Tachyon → Add host. The wizard SSHes into the host and runs a self-contained installer that drops a single binary plus a policy file. No clang, no kernel headers, no Postgres — Tachyon needs none of that.

ssh root@host bash tachyon-install.sh
[tachyon-install] python3 present
[tachyon-install] creating system user (tachyon)
[tachyon-install] writing /etc/tachyon/policy.yaml (default = stop @ 50k syscalls/s for 3s)
[tachyon-install] reloading systemd
TACHYON_INSTALL_OK
TACHYON_FINGERPRINT=D4:E5:F6:…

How it works

Policy

/etc/tachyon/policy.yaml is plain YAML. The default config ships with one rule and a safety allow-list:

rules:
  - name: syscall-storm
    match: syscalls_per_sec > 50000 for 3s
    action: sigstop

never_stop:
  - sshd
  - systemd*
  - docker*
  - containerd*
  - tachyon

Safety net

Tachyon refuses to touch PID ≤ 1, the daemon’s own PID, or its direct parent. Operators add additional never_stop globs in the policy file (matched against /proc/<pid>/comm).

Recovery

Trips are listed at GET /v1/circuit/breaks. To release a stopped process call DELETE /v1/circuit/breaks/<pid> — Tachyon sends SIGCONT or removes the throttling cgroup, and logs the recovery.


FAQ

Can I lock myself out with a bad rule?

No. The C generator always emits a hard-coded SSH whitelist branch at the top of the XDP program. tcp dport 22 passes regardless of what's in the block list.

What about IPv6?

The first release filters IPv4 only — IPv6 traffic passes through. IPv6 support is on the roadmap; if you need it sooner please tell us on the demo form.

What kernel features do I need?

Kernel = 5.10 covers XDP, BPF LRU hash maps, percpu arrays and bpftool dump. The agent works without these — it just degrades to "userspace mode" and the firewall panel stays inert.

Is the data plane encrypted?

The desktop reaches every host only via SSH tunnel. End to end TLS on top of that is on the roadmap for releases where you might want to let a teammate reach the desktop's API directly.

How do I uninstall?

sudo systemctl disable --now gluon-agent && sudo rm -rf /etc/gluon /var/lib/gluon /etc/systemd/system/gluon-agent.service /opt/gluon && sudo userdel gluon. That's it — nothing else is touched.


Found a gap in the docs? Email lapizh@icloud.com — every fix earns a credit in the changelog.