An inline engine block with four cylinders under a bridge of sprung probes; one piston has risen high, and a sky-blue line runs from it up its probe and along the bridge to a threshold notch.
Development

Vitals

macOS performance diagnostics via a read-only CLI: CPU/GPU/memory hogs, throttling, swap, disk

03
Workflows
01
Tool
01
Reference
24
Triggers

Key Points

Not for network/wifi, deployed-app health, or security scanning

Inside the Skill

The thinking, frameworks, and architecture that distinguish this skill from a generic version of the same task.

Ideal State

  • Every report is a diagnosis judged against Interpretation.md, verdict or culprit first, never a raw dump of numbers.
  • When the operator names a symptom (a stuttering mouse cursor, loud fans, a lagging app), the report says which finding explains it, or says plainly that none of the collected evidence does.
  • Normal macOS behavior that looks alarming (cache-filled memory, kernel_task cooling, Spotlight indexing) is named as normal, so the operator never chases a ghost.
  • Nothing on the machine changes: every remediation is a specific command or setting offered for the operator's approval.
  • The default path needs no sudo; the sudo leg runs only with the operator's consent.

Intent Routing

Intent Trigger File
HealthCheck "how's my system", "check my mac", "system health" Intents/HealthCheck.md
FindCulprit "mac is slow", "what's eating CPU/GPU/memory", "fans loud" Intents/FindCulprit.md
DeepDiagnosis "full diagnosis", "deep check", chronic/recurring slowness Intents/DeepDiagnosis.md
File Read when
Interpretation.md any intent: thresholds, known-process table, diagnosis shape

Data & Config

User customizations at <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Vitals/ (configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude) override the defaults when that directory exists.

Gotchas

Provenance for the first four: live probes during the 2026-08-13 build.

  • top's first sample is garbage: its CPU% is cumulative since boot. The tool runs -l 2 and parses the second sample, so keep that even though it costs ~3s.
  • ps -m does not reliably sort by memory on modern macOS. A live probe listed a larger process below a smaller one, so the tool sorts in code; keep it that way.
  • top -l truncates command names (~16 chars) regardless of COLUMNS in logging mode. Use the PID to identify the full process (ps -p <pid> -o comm=).
  • GPU via ioreg -c IOAccelerator works without sudo on Apple Silicon (Device Utilization % in PerformanceStatistics) but is not guaranteed on every GPU. The tool degrades to an explicit unavailable-message, never a silent blank.
  • pmset -g therm may not report CPU_Speed_Limit on desktops. thermalInfo() in Tools/Vitals.ts treats a missing key as not-throttled rather than erroring; no desktop reproduction is recorded.

Examples

Example 1: Something feels slow

User: "My Mac is dragging, what's going on?"
→ FindCulprit intent
→ A named culprit with two evidence classes and a recommended action awaiting approval

Example 2: Routine check

User: "How's my system doing?"
→ HealthCheck intent
→ A one-screen 🟢/🟡/🔴 verdict with per-subsystem lines, abnormalities flagged against thresholds

Example 3: Fans blasting

User: "Why are my fans so loud?"
→ FindCulprit intent
→ When `kernel_task` tops the list, the report names the thermal cause behind the cooling response, not the process

Workflows & Routing · 3

Each workflow is one job the skill runs. The trigger phrases route your request to the right one — this is the skill's routing table.

  1. 01
    HealthCheck Intents/HealthCheck.md

    hows my system, check my mac, system health

  2. 02
    FindCulprit Intents/FindCulprit.md

    mac is slow, whats eating CPU/GPU/memory, fans loud

  3. 03
    DeepDiagnosis Intents/DeepDiagnosis.md

    full diagnosis, deep check, chronic/recurring slowness

Tools · 1

Deterministic executables the workflows call — the code that does the real work, not prompt scaffolding.

  • Vitals.ts

How to Invoke

Say any of these to your DA and LifeOS activates the Vitals skill automatically:

  • "mac slow"
  • "system slow"
  • "what's slowing down my mac"
  • "computer is slow"
  • "what's eating CPU"
  • "CPU usage"
  • "GPU usage"
  • "what's using the GPU"
  • "memory pressure"
  • "RAM usage"
  • "swap"
  • "runaway process"
  • "fans loud"
  • "mac running hot"

Or invoke explicitly:

Skill("Vitals")

References · 1

Auxiliary files the skill loads at runtime — frameworks, guides, configs.

  • Interpretation

Want LifeOS to do this for you?

Install LifeOS on your machine — your DA gets the Vitals skill plus 96 others, all hooked into one Life OS.