Skip to content

Personal AI Router 0.9.0 — macOS Apple Silicon

Latest

Choose a tag to compare

@JaredP94 JaredP94 released this 06 Nov 09:08
· 106 commits to main since this release
Immutable release. Only release title and notes can be modified.
9d3c71e

Personal AI Router 0.9.0 — macOS Apple Silicon

Unsigned and not notarized. Not a production-ready or NVIDIA-signed distribution. It targets macOS arm64 only; Windows, Linux desktop and Intel Mac packages are not included. Privileged-helper registration and automatic firewall setup stay unavailable in unsigned builds: instead of prompting, PAIR shows Firewall setup: manual guidance under Settings → Service.

It is the fork's Latest release, so 0.8.0 installs are offered it through the in-app updater, and scripts/install-mac.sh installs it by default. Earlier releases remain on the releases page.

Upgrade notes

  • Breaking — verified peers only. A PAIR machine now counts for routing, models, telemetry and workloads only after proving its identity over its pinned cluster connection. A PAIR machine you added by address but haven't paired shows Not in your cluster with a Pair action, and PAIR no longer routes to it.
  • Upgrade every machine in a cluster. Peers still on 0.8.0 or older appear unverified until they're upgraded.
  • Using another machine's engine without pairing: add the engine's own address as Engine only. If that machine runs PAIR, its owner must also allow LAN engine binding (the engine_allow_lan_bind setting).
  • Saved machines: entries now record whether they're a PAIR machine or Engine only. Entries saved before this release become PAIR machine, so nothing becomes a routable bare engine without your choice.
  • Versions: Desktop 0.9.0 ships service product 3.0.0 (a major version because of the breaking change above). The relay envelope protocol stays v2; no JSON-RPC method was removed, and the new methods and fields are additive. Upgrade desktop/TUI and services together.

What this release adds

Verified peers and saved machines

  • Add by IP or hostname, including Tailscale and other overlay addresses, as a PAIR machine (saved and paired, then reached over the encrypted cluster connection) or Engine only.
  • Clear labels: "Not in your cluster" with Pair for unverified PAIR machines; "Engine only — added by address" for direct engines. An unverified machine claiming another machine's identity can't take its place.
  • Removing a machine from the cluster also forgets its saved PAIR address.

Engine settings

  • A Settings panel per engine, on this device and on verified peers: server port, proxy port, and launch arguments and environment variables (for example OLLAMA_*).
  • Changes that would override PAIR's bind address are rejected, and a failed apply restores the previous settings. oMLX shows only its proxy port, because its server settings live in the oMLX app.

LM Studio load options

  • Save per-model load options (context length, GPU offload, parallelism and other allowlisted tuning options), applied every time PAIR loads that model on that machine.
  • PAIR never unloads a model automatically. If a loaded model's options differ from the saved ones, it shows "Loaded with different options — reload to apply".

Download progress and cancel

  • Ollama and LM Studio downloads show live progress and can be cancelled, locally and on verified peers. The row shows Canceling until the engine confirms it stopped.
  • Cancelling keeps partial data so the download can resume; PAIR never deletes files from the engine's cache. A download interrupted by a restart is marked interrupted and can be retried. oMLX downloads can't be cancelled from PAIR.

Anthropic Messages API

  • /v1/messages routes through every proxy to engines that serve it natively (Ollama 0.14.0+, LM Studio 0.4.1+, oMLX 0.1.0+), with streaming, so clients such as Claude Code can use PAIR.

Fixes

  • Port conflicts are detected: another program listening on 127.0.0.1 on one of PAIR's ports (for example a separately running Ollama app on 127.0.0.1:11434) is now reported as a conflict instead of silently receiving local traffic meant for PAIR.
  • Stalled nodes no longer delay every request; an optional first-body deadline is available for proxies.
  • Also: more responsive engine controls, less mDNS socket churn, failed workloads on machines that disappear, clearer copied endpoints and download errors, and engine uninstall that keeps your models and settings.

Full list: CHANGELOG.

Validation

Built from 9d3c71e (merge of the release-prep PR #54) on a clean tree.

  • CI on that commit: all six jobs pass. The cross-process suite ran 122 tests on Linux with none skipped, and 105 on macOS; the 14 macOS skips are discovery tests that need multicast, which GitHub's hosted macOS machines can't send.
  • Release checks: npm run dead-code:check and npm run licenses:check pass; SPDX headers pass; scripts/install-mac.sh passes bash -n and shellcheck.
  • Reviews: every change in this release was reviewed by an independent model before merge, with fixes re-reviewed.
  • Package checks:
    • Versions: the app reports 0.9.0. All 14 bundled service binaries report their services/versions.json versions and are arm64-only, and the bundled manifest reports product 3.0.0.
    • Licences: LICENSE, LICENSE.electron.txt, LICENSES.chromium.html and THIRD_PARTY_NOTICES.md are present in the packaged app.
    • Contents: the app inside the DMG and inside the ZIP is identical to the built bundle (content-manifest SHA-256 4c440f25bb768ef29befc00651f9f983b9921ad1d53e68543da4c8af844e6d4c, 295 files). service-binaries-mac-arm64.zip matches the bundled cli-bin.
    • Checksums:
      • NVPAIR-Setup-0.9.0-arm64.dmg: SHA-256 6296b6eed89b712dd655019763cdac6aa4c8fe3279bfe68f841450bf3074cf0f
      • NVPAIR-Setup-0.9.0-arm64.zip: SHA-256 499109400d469aed225c586bbd2085163af9af9cf32af5b11a7d1c83a30f9b43
      • service-binaries-mac-arm64.zip: SHA-256 da347959a25779af618152b0f217c69c86659db0852991f67996200bb12fb8ed
    • Signing and updates: the update feed points at this fork. Code signing is ad-hoc only.
  • Live checks on two macOS 27.2 arm64 machines, upgraded in place from 0.8.0 data. The features were exercised on a build of 44611f9, which differs from this release only in documentation and version numbers; this exact ZIP was then installed on one machine, launched, and started the broker and all 12 workers.
    • Driven through the packaged broker exactly as the desktop app drives it: engine install with real progress, start and stop of Ollama, LM Studio and oMLX, download cancel (nothing deleted), interrupted and retried downloads, inference on all three API styles including /v1/messages, settings apply and restore, rejected bind overrides, and LM Studio load-option validation.
    • Across the two machines, joined by a saved Tailscale address: the peer verified in about a second; engine start, settings, downloads and cancel on the peer; inference routed to the peer; the saved entry kept its kind across restarts; a legacy saved entry migrated to PAIR machine.
    • With another program on 127.0.0.1:<port>, moving a proxy to that port was refused and nothing changed.
    • Details: Next release readiness.

Assets

  • NVPAIR-Setup-0.9.0-arm64.dmg and .zip, with their blockmaps.
  • service-binaries-mac-arm64.zip: the packaged service binaries.
  • SHA256SUMS.
  • The macOS update feeds latest-mac.yml / latest-arm64-mac.yml.

Not validated

  • Desktop UI: the live checks drove the packaged services, not a click-through of the desktop app.
  • LM Studio: loading a model with saved options (no LM Studio model was on the test machines).
  • oMLX: installing oMLX from its release disk image (the test machines run an oMLX development build).
  • Clusters: removing a machine from the cluster or unpairing on real machines; whether the second machine counted the first as verified (its logs don't say).
  • Settings rollback after an engine has stopped: port conflicts are now refused before anything stops, so this path is covered by unit tests only.
  • Other platforms: Windows, Linux desktop and Intel Mac runtime.
  • Performance: no profiling of this build; no performance change is claimed.
  • Apple trust: no Developer ID signing or notarization; Gatekeeper may block first launch.

Known issues

  • A machine that changes networks can't be reached by its peer unless the peer has a saved address for it.
  • A leftover ~/.omlx launcher without /Applications/oMLX.app is treated as installed oMLX, and PAIR retries starting it at every launch.
  • Ollama's install download is the vendor's latest build and isn't checksum-pinned.
  • Starting some oMLX builds immediately after stopping them can fail; starting again a moment later works.

See Known issues.