Skip to content

Releases: kinncj/Heimdall

v2.2.7

Choose a tag to compare

@kinncj kinncj released this 01 Jul 03:31
e383a9a

UI + CLI polish for the unified-memory work, plus a couple of build fixes.

Fixed

  • Top view: GB10 gpu.vram detail wrapped and broke the panel. The (shared) detail was longer than a discrete card's, so it wrapped and mangled the GPU box. It's now clipped to the line and shortened to 42/122 GB shared.
  • heimdall-cli hid unavailable metrics. It only emitted OK metrics, so Apple gpu.vram, npu.util, and anything needing the helper vanished with no reason. New unavailable object (name → {status, detail}); metrics is unchanged so existing scripts keep working.

Added

  • npu.util is Unavailable-with-reason everywhere instead of a bare dash (Apple ANE / Intel AI Boost / AMD XDNA expose no counter).

Build

  • scripts/release.sh builds macOS with CGO and refuses a CGO-free darwin binary off a Mac — make release on a Mac is no longer a footgun.
  • Makefile stamps -X main.version from git describe so local builds report a real version, not dev.

v2.2.6

Choose a tag to compare

@kinncj kinncj released this 01 Jul 02:06
9d7eb3b

Linux CPU power was blank next to a busy GPU — now filled and labelled.

Added

  • power.cpu on Linux from the RAPL core subdomain. The privileged path only read the RAPL package (power.pkg), so the top view's CPU power column was blank while the GPU showed 60W+ and the package ~17W. It now also reads the core (pp0) subdomain as power.cpu (cores only).

power.pkg is labelled "CPU package" and power.cpu "CPU cores" — both are the CPU socket only. A discrete GPU is a separate rail (power.gpu), which is why power.pkg can sit well below power.gpu; Linux has no whole-system power counter like macOS SMC PSTR. Absent on CPUs with no core subdomain. power.npu stays unavailable (Intel/AMD NPUs expose no power counter, same as Apple ANE).

v2.2.5

Choose a tag to compare

@kinncj kinncj released this 01 Jul 01:48
7191a07

GPU VRAM reporting on unified-memory hosts, and a broken nvidia-smi now says why.

Added

  • GPU VRAM on unified-memory NVIDIA (GB10 Grace-Blackwell). nvidia-smi reports memory.used/memory.total as [N/A] on GB10 (no discrete VRAM), so hosts like promaxgb10 showed GPU util but no gpu.vram. It's now derived from per-process GPU memory (--query-compute-apps=used_memory) over system RAM total, e.g. 34% 41.6 / 121.6 GB (shared). Idle reads a stable 0%. Discrete cards are unchanged.

Fixed

  • A broken nvidia-smi silently blanked GPU instead of saying why. When nvidia-smi is installed but exits non-zero — most often a Driver/library version mismatch after a driver upgrade without a reboot — every gpu.* key vanished. gpu.util/gpu.vram now come back unavailable carrying the nvidia-smi reason, so the fix (reboot) is obvious. The blank itself is host driver state, not a Heimdall bug.
  • Apple Silicon gpu.vram explains the dash. Unified memory has no discrete VRAM, so the metric was just absent. It now reads unavailable with unified memory (no discrete VRAM).

v2.2.4 — helper no longer shadows in-process power/GPU

Choose a tag to compare

@kinncj kinncj released this 30 Jun 21:16
1511bf5

Patch release.

Fixed

  • Running the helper could blank out the power/GPU it was meant to provide. The privileged adapter trusted any successful helper reply — even an empty one — and so a reachable-but-empty helper shadowed the daemon's own in-process reading. On Apple Silicon (IOReport/SMC are unprivileged) bootstrapping the helper made power.*/gpu.* vanish on a Mac that worked fine without it. The adapter now uses the helper only when it returns an ok metric, else falls back to in-process — additive, never subtractive. Also covers Windows hosts where the helper would shadow the nvidia-smi read.

If your Mac lost power/GPU after starting the helper, this fixes it; you can also just not run the helper on Apple Silicon (IOReport is unprivileged).

v2.2.3 — Windows process CPU/mem fix

Choose a tag to compare

@kinncj kinncj released this 30 Jun 20:42
10efe92

Patch release.

Fixed

  • Windows process table showed every process at 0% CPU and 0% memory. tasklist has no CPU column and the parser dropped its memory column, so p and the top view listed real processes with fake zeros. Windows now reads Win32_PerfFormattedData_PerfProc_Process for real instantaneous CPU% and working-set memory (% of total RAM), with tasklist (pid + name) as a fallback. macOS/Linux (ps) unchanged.

Deploy the v2.2.3 daemon to Windows hosts to get real per-process CPU/memory.

v2.2.2 — top-view process table fix

Choose a tag to compare

@kinncj kinncj released this 30 Jun 20:23
ff3efad

Patch release.

Fixed

  • First-run wizard stored process-interval as 0s, so the t top view's process table was empty out of the box. The wizard now prompts for it and suggests 2s, storing what you accept. The flag/config default stays 0s (off) for headless services — ADR 0017 opt-in posture unchanged. Daemons already started with --process-interval are unaffected; set 0 in the wizard to keep it off.
  • systemd ExecStart paths in the privileged-metrics guide now use /usr/local/bin (manual install dir), with a note that AUR installs use /usr/bin.

Re-run the daemon's first-run setup (or pass --process-interval 2s) on hosts where the top-view process table was blank.

v2.2.1 — AMD GPU metrics + richer GPU panel

Choose a tag to compare

@kinncj kinncj released this 30 Jun 19:49
6cb8370

Patch release: GPU coverage for AMD hardware and a fuller GPU panel.

Added

  • AMD GPU metricsgpu.util, gpu.vram, gpu.temp, power.gpu on AMD (discrete Radeon and the Strix Halo iGPU). Prefers amd-smi (ROCm), falls back to the in-tree amdgpu sysfs nodes — both unprivileged, works with no extra install. npu.util is unavailable on XDNA until the driver exposes a counter.
  • Richer GPU panelgpu.clock, gpu.mem.util, and gpu.fan on both NVIDIA (nvidia-smi) and AMD. The top view shows clock / mem / fan; anything unavailable renders .
  • Per-platform privileged-metrics guides — separate macOS, Linux+NVIDIA, Linux+AMD, and Windows guides (with amd-smi install + Windows service setup).

Deploy the v2.2.1 daemon to AMD hosts to pick up the GPU panel; the hub does not need upgrading.

v2.2.0 — Hliðskjálf: full-screen top view + responsive TUI

Choose a tag to compare

@kinncj kinncj released this 30 Jun 17:13

A mactop/btop-style single-host view, a vendor-neutral NPU rename, new collectors, and a screen-aware TUI — backward compatible across a mixed fleet.

Added

  • Full-screen top view (Hliðskjálf) — press t on a focused host: per-core CPU bars, braille sparklines (CPU/memory/power), GPU/NPU, network & disk, and a process list that fills the screen. Live-refreshing; esc back, q quits. Works on macOS, Linux, and Windows.
  • Responsive across four width tiers (wide grid → iPhone-portrait key-numbers), so it stays readable over SSH from Termius on a phone — and the host detail view is now responsive too.
  • New collectors mem.swap, cpu.load, cpu.freq — each renders (never a fake 0) where the platform can't supply it (load on Windows, clock on Apple Silicon). cpu.freq reads /sys cpufreq on Linux.

Changed

  • t / p — the process table now opens on p; t is the new top view.
  • ANE → NPU — accelerator power is the vendor-neutral power.npu; the legacy power.ane key is accepted and normalised on ingest, so a mixed fleet with older daemons keeps working (additive wire, no proto change).

Upgrade

heimdall-daemon update (and the other binaries). To see the new metrics in the top view, run the v2.2.0 daemon on each host; the hub does not need upgrading (it relays the additive metrics).

See ADR 0020 and docs/guides/12-top-view.md for details.

v2.1.1 — macOS power fix for Apple Silicon Pro/Max

Choose a tag to compare

@kinncj kinncj released this 30 Jun 15:03

Fixed

  • macOS reported 0 W on Apple Silicon Pro/Max (e.g. M3 Max). Those chips report 0 for the IOReport per-domain CPU/ANE energy counters and only a sub-watt GPU figure, so package power collapsed to ~0 W. Base M-series Macs populate the counters and were unaffected — the variable was the SoC, not the version.

    Heimdall now reads the SMC PSTR ("System Total Power") rail — the same unprivileged source mactop/btop use — as the package figure on macOS. The daemon gets real power in-process, no privileged helper needed. Source precedence is now SMC → powermetrics → IOReport sum, so a phantom sub-watt IOReport total can no longer shadow a real reading.

    Linux (RAPL/hwmon) and Windows (WMI) paths are unchanged.

Upgrade: heimdall-daemon update (and the other binaries), or reinstall from the release assets.

v2.1.0 — ephemeral runs & agent onboarding

Choose a tag to compare

@kinncj kinncj released this 29 Jun 20:00
cbf6dbb

Heimdall v2.1.0 — ephemeral runs & agent onboarding

Released: 2026-06-29 · Type: MINOR (additive) · Follows v2.0.0

A quality-of-life follow-up to the everything socket release. Nothing changes in
the transport or the security model — daemons still never listen, the hub is still
the sole listener. v2.1.0 adds two things: ephemeral runs that never rewrite
your config, and broader agent/CLI onboarding so any harness can talk to a
fleet out of the box.


Highlights

--no-save / --ephemeral on every binary

Every binary persists resolved flags to its config file so the next run repeats
them. That is the right default for a daemon you set up once — but wrong for a
one-off. v2.1.0 adds two equivalent flags that run with the given options without
writing them back
:

# spin up a hub on a throwaway port without making :19090 the new default
heimdall-hub --listen :19090 --no-save

# point a dashboard at another hub for one session, leave config untouched
heimdall-dashboard --hub other-hub:9090 --ephemeral

The flag itself is never persisted, and it is built in at the catalog layer so it
works uniformly across heimdall-hub, heimdall-daemon, heimdall-dashboard,
heimdall-helper, and heimdall-cli.

Agent onboarding for any harness

The heimdall-cli guide gained drop-in snippets beyond
the Claude Code trio:

  • a .github/copilot-instructions.md block for GitHub Copilot,
  • a portable CLI wrapper plus an OpenAI-style tool schema for Hermes,
    OpenAI-compatible, and custom harnesses,
  • three real, unedited claude -p transcripts — a free-form "check my fleet",
    the /fleet slash command, and a targeted risk question — showing what fleet Q&A
    actually looks like, including hub discovery and capability-gap reporting.

Run-as-a-service guide

The Privileged Metrics guide now has a
complete, verified systemd setup: helper as root, daemon as your user, a
shared heimdall group, and a /run/heimdall socket matching the v2 0660 helper
socket. The fleet guide cross-links it.


Upgrade guide

Drop-in. No config migration, no wire change — a v2.1.0 binary interoperates with a
v2.0.0 hub or daemon.

heimdall-dashboard update   # each binary self-updates
heimdall-<binary> --version # confirm v2.1.0

Or pull fresh binaries from the release page.


Documentation map