Skip to content

SysMon 3.0.0

Choose a tag to compare

@RamenFast RamenFast released this 01 Aug 22:52
· 41 commits to main since this release

A compact system monitor for AMD-GPU Linux desktops, with an API an agent can drive without ever seeing a pixel.

v3.0.0 is not a rewrite. It is v2's engine held to the house standard until it passed — and then wired so it cannot quietly stop passing.

v2.2.2 → v3.0.0, honestly

v2.2.2 v3.0.0
sysmon schema prose map; no status/ts; nothing strict carries the envelope; strict JSON schemas for the envelope, the stream line and probe's result; every verb's arguments, enums and exit codes published
enum lists in the schema hand-written, free to drift read from the code that enforces them — a theme can't exist in the docs and not in the binary
ts float unix seconds ISO-8601 with a UTC offset (2026-08-01T22:14:07+00:00); ts_epoch rides along for arithmetic
stream lines anonymous JSON objects every line carries event: "snapshot"
an unknown command raw stderr, nothing parseable on stdout the same envelope as any other error, with a fix
ctl theme nosuchtheme exit 1 exit 3 — the instance classifies its own failure and the code rides on the wire as exit
themes ten rooms, all moods eleven — a Greyscale a11y floor, colourless by assertion, WCAG AAA, auto-selected under desktop high contrast
motion egui's linear default 120 ms smoothstep, and instant when the desktop asks for reduced motion
conformance believed scripts/conformance.sh — 13 checks against a real binary, and a release gate

Everything v2 emitted, v3 still emits. Every key and every exit code of 2.2.2 was diffed against 3.0.0 before this shipped; all changes are additive.

Highlights

  • The standard is executable. scripts/conformance.sh runs every clause of the workspace agent-first CLI standard against a real binary — envelope, ISO-8601 timestamps, fix-bearing errors, exit codes 0/2/3/4 each provoked, isatty auto-switch proven both ways, stdout purity, stream self-identification, language law, native install. It prints 13/13 on a terminal and one envelope in a pipe, and release.sh refuses to publish without it.
  • A schema that cannot lie. A command printed by sysmon schema and repeated in the docs had returned null since v2.0 (.result.top_processes; the field is at .result.network.top_processes). Fixed — then made unrepeatable: a test harvests every jq path out of the live schema and out of docs/API.md and runs each one against a real probe.
  • Greyscale. Ten rooms existed and every one was a mood. This is the room that still reads when colour can't be relied on.
  • Two flakes killed at the root. The UI test failed ~1 run in 6 (a fixed-frame wait for a context menu, plus a live process ranking that re-sorted mid-interaction): 0 failures in 25 runs now. Three network tests were blaming sysmon for a rate limiter — they probed with 1 KB and depended on 20 MB, so a 429 read as "the collector saw 0 B/s". They now ask for a real megabyte, fall back to a second host, and skip honestly.

Removed, honestly

  • Nothing was removed from the wire. ts changed type (float → ISO-8601 string) — if you were doing arithmetic on it, read ts_epoch, which carries the same instant.
  • sysmon --version now says (v3), not (v2).
  • The old run_steps(8)-style waits are gone from the context-menu path in the UI suite; if you copied that pattern, prefer waiting for the thing to exist.

Install

# Debian / Ubuntu / Mint
sudo apt install ./sysmon_3.0.0_amd64.deb

# Fedora / RHEL (built on Mint, rpm --test verified — reports welcome)
sudo dnf install ./sysmon-3.0.0-1.x86_64.rpm

# from source
sudo apt install build-essential curl git            # apt
sudo dnf install gcc make curl git                   # dnf
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone https://github.com/RamenFast/sysmon && cd sysmon
cargo build --release && sudo install -m755 target/release/sysmon /usr/local/bin/

Double-clicking the package in a file manager works too.

Verify: sysmon --version → sysmon 3.0.0 (v3).

SHA256SUMS covers every asset on this release; sha256sum -c SHA256SUMS in the download directory checks them all at once.

Receipts

conformance 13/13 · cargo test --release green across three consecutive full runs (unit, contract, a11y, kittest UI, live accuracy, live network attribution) · scripts/e2e.sh green on a private Xvfb: 22 theme/page screenshots, pop-out drag-dock, single-instance forward, clean shutdown · old-vs-new structural diff over every documented verb · no Python and no GTK anywhere in the 455-package dependency tree or the packaging.

Built with Claude on Ben's machine. GPLv3.