Skip to content

Releases: msitarzewski/anomalous-mac

Anomalous 0.3.1

Choose a tag to compare

@msitarzewski msitarzewski released this 07 Oct 14:45
00c7191
  • Fixed a crash when a process's baseline was nearly flat, which made a
    deviation too large to display. Such values now read "far above a flat
    baseline" instead of quitting the app.

This fixes a crash in 0.3.0. Existing installs update automatically; or download the DMG below, or brew upgrade --cask msitarzewski/tap/anomalous.

Anomalous 0.3.0

Choose a tag to compare

@msitarzewski msitarzewski released this 06 Oct 16:27
8dc6454
  • New vector app icon.
  • Settings uses the standard macOS toolbar tabs, with the window title following
    the selected tab.
  • A stored App Attest key that the Mac can no longer sign with is replaced
    automatically, instead of leaving lookups stuck on "couldn't verify this app".
  • Updating restarts the privileged helper, so the new process protections take
    effect without a reboot.
  • Home window, expanded diagnosis cards, and consistent settings-window navigation.
  • Energy-aware wakeup checks and conservative GPU activity descriptions: driver
    counters are a relative activity index, not percent of whole-GPU capacity or
    evidence of a continuously sustained cause.
  • Release configuration restrictions and explicit contribution consent.
  • Shared process safety guidance requires human review; unreviewed research
    remains labeled as research.
  • Release tooling requires explicit artifacts and provisioning, and verifies the
    public download before publishing its update feed.
  • Network documentation distinguishes contribution, discovery, account-linked
    help, and inactive Private Cloud Compute.
  • Paid Get Help is retry-safe: a pending request is resent with the same
    idempotency key, so retrying never charges twice.
  • App Attest registration is scoped to each server. Existing installs register
    once more after updating; registrations made against another server are no
    longer trusted.
  • Detection: rate rules use time-weighted recent windows, memory Verify checks
    for continued growth, and chronic CPU alerts need a warm baseline plus current
    activity, so steady legitimate work raises fewer alerts.
  • Lookup errors say what failed (service status, network, timeout) instead of a
    generic message.
  • Sparkle is pinned to 2.9.4.
  • Homebrew service checks no longer hang when brew prints more than a pipe
    buffer of output.
  • Enabling system-wide monitoring opens Login Items & Extensions when macOS
    needs approval, and the monitoring status is correct from launch.
  • The root helper refuses to stop more core system services (for example
    tccd, amfid, sshd, mDNSResponder and configd).
  • The menu-bar accessibility label says "anomalies" instead of "anomalyies".
  • Thanks to @fallenmaverick (PR #6) for reporting several of these.

Install: download the DMG below, or brew install --cask msitarzewski/tap/anomalous. Existing installs update automatically.

Anomalous 0.2.3

Choose a tag to compare

@msitarzewski msitarzewski released this 19 Jul 21:39

Free-tier discovery now works in production.

Anonymous discovery and contribution now use real App Attest (DCAppAttestService) instead of a placeholder the fail-closed production API rejected — so identifying an unknown process no longer fails with "Couldn't reach the service." No API posture was weakened to make this work.

Auto-updates via Sparkle, or download the DMG below. Requires macOS 26+ on Apple Silicon.

Anomalous 0.2.2 — launch fix for Macs without Apple Intelligence

Choose a tag to compare

@msitarzewski msitarzewski released this 17 Jul 18:13

0.2.2 (2026-07-17)

Crash fix + graceful degradation for Macs without Apple Intelligence.

Fixed

  • Launch crash on some macOS 26.5.x Macs (#3).
    The app strong‑linked a FoundationModels symbol present only in newer
    framework builds, so on 26.5.1/26.5.2 stable it aborted in dyld at launch
    ("Symbol not found") before any code ran. FoundationModels is now weak‑
    linked
    , so a missing symbol resolves to null at load instead of crashing;
    all on‑device‑AI use was already availability‑gated, so nothing calls it on
    an incapable Mac. Confirmed fixed on 26.5.1/26.5.2, no regression on macOS 27.

Added

  • "Apple Intelligence recommended" notice. When Apple Intelligence isn't
    available, the Welcome window now explains — honestly — that diagnosis cards
    come from the built‑in knowledge map and everything else works the same,
    instead of leaving you wondering why cards look generic.

Anomalous 0.2.1

Choose a tag to compare

@msitarzewski msitarzewski released this 16 Jul 20:34

0.2.1 (2026-07-15)

Post-0.2.0 hardening and polish.

Security

  • CSV export hardened against spreadsheet formula injection. A field
    beginning with =, +, -, @, TAB, or CR is executed as a formula by
    Excel/Numbers/Sheets; the exported history carries untrusted values (a
    process's own name, an LLM‑written summary), so those fields are now
    neutralized (leading apostrophe) before RFC‑4180 escaping. A failed CSV
    save now surfaces an error instead of silently doing nothing.

Changed

  • Larger default text in the history dashboards. Primary reading content —
    process‑name identifiers, incident descriptions, and the By‑Process summary
    line — now renders at body size for readability. Secondary chrome
    (timestamps, counts, pills) is unchanged, and all text still scales with the
    system Accessibility Text Size setting.

Anomalous 0.2.0 — the "vibes" release

Choose a tag to compare

@msitarzewski msitarzewski released this 16 Jul 20:34

0.2.0 — the "vibes" release (2026-07-14)

The jump from a CPU‑and‑RAM watcher to a Mac that can tell you what's wrong,
what it is, and what to do
— and stay silent when nothing is. Everything below
is new since 0.1.3.

Sees your whole Mac, not just CPU & RAM

  • Per process, every check: sustained and cumulative CPU, physical‑footprint
    memory
    (the honest number, not RSS), disk I/O, energy (nanojoules, P‑core
    vs E‑core split), wakeups (the real battery‑drain signal), per‑process
    GPU
    utilization & memory, per‑process network throughput, and
    Neural‑Engine memory — plus system context (memory pressure, swap, thermal,
    load). Most of it read from calls the OS was already making.

Explains, in plain language, on‑device

  • Diagnosis cards written by Apple's Foundation Models, grounded by a reviewed
    process corpus — what it is · why it's probably hot · is this normal · what to
    do.
    The classical detector decides; the model only phrases the verdict over
    the exact numbers, and never invents identities or facts.
  • Three‑tier escalation, cheapest first: on‑device → Apple Private Cloud
    Compute
    → paid Get Help cloud triage with cited evidence (only on an
    explicit tap).
  • Discovery engine — for an unknown process, an anonymous identity lookup that
    fails safe to "unknown" rather than guessing.
  • Signed corpus feed (Ed25519), verified locally before it's trusted.

A redesigned diagnosis card

  • Progressive disclosure — the collapsed card is just the tier icon, process
    name, and a one‑line verdict; the plain‑English explanation and the action
    buttons live behind Details. The stack scrolls (and never runs off‑screen)
    when several fire at once.
  • Tier shown as an icon in front of the name (tap for a popover with the
    tier + a plain description); Get Help as a glowing footer CTA; a ⋯ card
    menu
    for Normal for me, Snooze, and Check again.
  • Check again (Verify) — re‑checks the live metric so a card that's
    actually calmed down clears in about a second, instead of waiting ~45 minutes
    for the window/median to decay. Great right after you take the recommended
    action. Plus a "first flagged" timestamp on each card.

Learns your normal

  • Robust median/MAD baselines, seasonal hour‑of‑day / weekday buckets,
    cross‑dimension correlation (one insight, not five notifications), a warm‑up
    gate, and a per‑alert confidence score — only high‑confidence findings ever
    reach you.
  • "Normal for me" raises the envelope for a process instead of muting it;
    Snooze for an hour or a day; and the anti‑mute guarantee — if something
    you accepted comes back materially worse, or misbehaves in a new way, you hear
    about it.
  • Card auto‑resolve + Journal — a cleared card shows a brief "resolved" state,
    then files into a local incident history. A process that clears and re‑trips
    now reads its true saga from that history — "first flagged … · returned N×"
    — instead of resetting to a fresh one‑minute blip each time.

Review what it's caught

  • Anomaly History window (menu‑bar gear → Anomaly History…, or Settings) —
    a private, on‑device review of everything Anomalous has caught. Overview
    is a dashboard: how many incidents, what types happen most, how they resolved
    (most clear on their own), a trend over time, and your most‑flagged processes —
    over a Day / Week / Month / Unlimited range. By Process drills into any
    one process: a chart of its incidents over time and a timeline of every episode,
    so you can see whether something keeps misbehaving or whether a fix held.
  • You control the depth and the data — keep the last 250 / 1,000 / 5,000 /
    25,000 / Unlimited incidents (default 1,000), Export the whole history to a
    CSV you choose, or Clear it. It never leaves your Mac; clearing the logbook
    doesn't touch detection or your learned baselines.

Lives quietly in the OS

  • Ambient desktop widget — "All systems nominal" at rest, comes to life only
    on a confirmed anomaly, with Snooze / Normal‑for‑me right in the tile.
  • Siri · Shortcuts · Control Center via App Intents ("Is my Mac behaving
    normally?").
  • Notifications with discipline — passive by default; a confirmed,
    high‑confidence anomaly posts Time Sensitive to break through Focus, with
    Investigate / Snooze / Normal‑for‑me inline. Recomposed to be scannable, not a
    wall of text.
  • Energy‑aware adaptive sampling — the base cadence adapts to power (~60s on
    wall power, ~90s on battery) and backs off ×3 under thermal pressure or Low
    Power Mode. Measured ~0.4% CPU on a busy Mac, 0% between checks.

Acts, conservatively

  • Safety tiers gate the action: one‑click Quit / Restart, Force Quit
    behind an explicit confirmation, brew services stop/restart, root‑daemon
    termination via the helper, or an explain‑only card for things you must not
    touch.
  • Privileged root helper — installed with one System Settings approval (never
    a password prompt) to watch and safely stop root daemons like dasd and
    WindowServer, where the worst runaways hide. Self‑heals across updates.
  • First‑run onboarding — a brief, skippable setup that explains the helper
    and the two opt‑in flows (anonymous signatures, unknown‑process lookup) in
    plain language, each linking to its help page; informed defaults, not a gate.

Accounts & paid triage

  • Invite‑gated accounts, a prepaid balance, and Stripe top‑up. When Get Help
    needs balance, the card offers Add credit (→ Account), not a dead‑end retry.
    Every payload that leaves is allowlisted and logged locally byte‑for‑byte, and
    the server mirrors exactly what it received so you can diff the two.

Privacy, transparency & updates

  • Detection, judgment, baselines, acknowledgments, and the journal stay
    on‑device. Nothing identifiable leaves; the open‑source client plus a local
    send log let you verify exactly what's sent. Auto‑updates via Sparkle
    (EdDSA‑signed feed).

Fixes & hardening

  • Get Help now works for every anomaly kind — fixed the empty‑metric_curves
    422 (GPU / wakeups / disk anomalies) and the scalar‑baseline 422 (sustained‑CPU
    / leak anomalies); honest escalation errors instead of a catch‑all "couldn't
    reach the service."
  • Channel‑variant identity — dev.zed.Zed‑Preview and friends reuse the base
    app's record instead of the model inventing "a preview tool."
  • Leak heal gate — a process that ballooned then stabilized auto‑resolves
    instead of pinning a card for an hour.
  • Baseline‑poisoning fix — catches chronically‑hot runaways (e.g.
    appstoreagent) that spike‑only rules and a poisoned baseline both miss.
  • Warm, plain voice — user‑facing text says "quit it," not "kill"; "macOS
    starts it back up," not "respawns."
  • Duration grammar — "for 1 hour," not "for 1 hours."
  • Security: tested termination‑guard and server‑override policies, helper
    self‑heal, honest CPU‑cost documentation.

Anomalous 0.1.3

Choose a tag to compare

@msitarzewski msitarzewski released this 05 Jul 02:00

The one where anomalies actually show up. 🔴

Fixes the full detection→display pipeline: the monitoring loop could stall on the privileged-helper connection, diagnoses weren't persisted in time, a known runaway wasn't re-surfaced after relaunch, and the UI observed a separate copy of app state — so detection worked but cards never appeared. Also: the active menu-bar mark now shows a real red spike, and Settings gains an About tab.

Recommended update for everyone.

Install: download the DMG, drag Anomalous to Applications. Requires macOS 26 (Tahoe)+, Apple Silicon.

🌐 https://anomalous.bot · ♥ https://github.com/sponsors/msitarzewski

Anomalous 0.1.2

Choose a tag to compare

@msitarzewski msitarzewski released this 05 Jul 01:13

Fixes a regression in 0.1.1 where system-wide monitoring could appear stuck "off" even with the helper installed. Also adds an About tab in Settings, updates the all-clear mark, and removes a dev-only Server field.

Recommended update for anyone on 0.1.1.

Install: download the DMG, drag Anomalous to Applications. Requires macOS 26 (Tahoe)+, Apple Silicon.

🌐 https://anomalous.bot · ♥ https://github.com/sponsors/msitarzewski

Anomalous 0.1.1 — security hardening

Choose a tag to compare

@msitarzewski msitarzewski released this 05 Jul 00:57

A security-hardening release. Recommended update for everyone on 0.1.0.

Highlights

  • Root helper XPC trust boundary hardened: release builds always enforce client code-signing, and terminate now refuses critical/system processes (never SIGTERMs launchd, WindowServer, security daemons, …).
  • Account token moved from UserDefaults to the Keychain.
  • Bearer token requires HTTPS to any non-loopback host.
  • (Plus server-side auth / billing / attestation fixes on the backend.)

Install: download the DMG, drag Anomalous to Applications.
Requirements: macOS 26 (Tahoe) or later, Apple Silicon. No Intel build (macOS 26 is Apple-Silicon-only).

🌐 https://anomalous.bot · ♥ https://github.com/sponsors/msitarzewski

Anomalous 0.1.0 — first public release

Choose a tag to compare

@msitarzewski msitarzewski released this 05 Jul 00:02

Activity Monitor with a “So what?” and “Now what?” layer.

A quiet menu-bar app that watches your Mac, judges anomalies on-device with Apple Intelligence, and tells you what a process is, whether it's normal, and the safest thing to do — then stays silent until it has something worth saying.

Install

  1. Download Anomalous-0.1.0-macOS-arm64.dmg below.
  2. Open it and drag Anomalous onto Applications.
  3. Launch it — it lives in your menu bar. Optionally enable system-wide monitoring (one System Settings approval) to also watch root daemons like dasd.

Signed with Developer ID, notarized, and stapled — opens clean, no “unidentified developer” warning.

Requirements

  • macOS 26 (Tahoe) or later, Apple Silicon. There is no Intel build: macOS 26 is Apple-Silicon-only and the on-device judgment layer requires Apple Intelligence.

Notes

  • Free. Open source (Apache-2.0). No account needed — detection, judgment, and actions run entirely on-device.
  • A .pkg installer is coming in a point release.

🌐 https://anomalous.bot · ♥ https://github.com/sponsors/msitarzewski