Back to portal

Health

Health Session

This section is reserved for health-related notes, reports, and review pages.

# MacBook Air M5 Health Check and Optimization Assessment

Date: 2026-06-15
Host: MacBook Air `Mac17,3`
Chip: Apple M5, 10 cores
Memory: 32 GB
macOS: 26.5.1 (`25F80`)

## Scope

This was a read-only audit. No changes were made.

Some live macOS telemetry commands were restricted in this environment, so a few areas use filesystem and configuration evidence rather than full live-process inspection. In particular:

- `top`, `ps`, `iostat`, and some `sysctl` values were blocked
- current swap allocation was not directly readable
- thermal detail was limited
- login items could not be fully enumerated via AppleScript

## Executive Summary

This machine is healthy from a hardware wear perspective, but it is carrying a very large local AI/dev footprint and has a few exposure and housekeeping issues:

- Battery health is excellent: `3` cycles, `100%` maximum capacity, condition `Normal`
- Memory pressure is healthy right now, but the system has a noticeable historical compression/swap footprint
- Data volume free space is tight: about `39 GiB` free on a `460 GiB` volume (`91%` used)
- The main storage pressure comes from local AI models:
  - `~/.ollama`: `112G`
  - `~/.lmstudio`: `39G`
  - `~/.hermes`: `5.8G`
  - `~/.openclaw`: `1.5G`
- Several persistent background AI/dev services are configured to auto-start
- Firewall is disabled
- `sshd` and Screen Sharing are enabled at the service level
- Multiple runtime stacks overlap: Homebrew Node, `/usr/local` Node, `nvm`, multiple Python installs, Docker, Codex, Hermes, OpenClaw, Ollama, and LM Studio

## 1. Hardware & Resources

### CPU utilization

- Exact per-process CPU sampling was blocked
- System load at audit time: `3.36 5.20 6.54`
- This suggests moderate active load, not an obvious runaway state

### Memory usage and pressure

- Installed memory: `32 GB`
- `memory_pressure` reported `System-wide memory free percentage: 55%`
- `vm_stat` showed active compression:
  - pages stored in compressor: `1,597,392`
  - pages occupied by compressor: `94,887`
- Interpretation: memory is currently fine, but the machine has seen meaningful memory churn in prior sessions

### Swap usage

- Current swap allocation could not be read directly in this environment
- Historical swap activity exists:
  - `Swapins: 18,517,015`
  - `Swapouts: 47,022,082`
- Interpretation: not necessarily a present problem, but large-model workflows are definitely capable of pushing memory pressure

### Disk utilization / SSD free space

- System/Data volume: `460 GiB`
- Data volume used: `381 GiB`
- Free: about `39 GiB`
- Capacity used: `91%`

### Battery health

- Power source at audit time: AC
- Battery charge: `100%`
- Cycle count: `3`
- Maximum capacity: `100%`
- Condition: `Normal`

### Thermal status

- No explicit thermal warning was observed
- Detailed thermal telemetry was not available in this environment

## 2. Startup & Background Services

### LaunchAgents

User LaunchAgents found:

- `ai.hermes.gateway.plist`
- `ai.openclaw.gateway.plist`
- `com.hermes.mac-host-worker.plist`
- Dropbox updater agents
- Google updater agents
- `com.openai.atlas.update-helper.plist`
- iMazing mini

Notable behavior:

- Hermes gateway: `RunAtLoad=true`, `KeepAlive=true`
- OpenClaw gateway: `RunAtLoad=true`, `KeepAlive=true`
- Hermes mac host worker: `RunAtLoad=true`, `KeepAlive=true`

### LaunchDaemons

System LaunchDaemons found:

- Docker helpers:
  - `com.docker.socket.plist`
  - `com.docker.vmnetd.plist`
- Tailscale:
  - `homebrew.mxcl.tailscale.plist`
- Adobe, Google, Microsoft, pCloud, Zoom, Logitech helpers

### Login Items / auto-start applications

Full Login Items enumeration was restricted, but `backgrounditems.btm` exists at:

- `/Users/allen/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm`

Installed apps and agents strongly suggest regular auto-start/background presence for:

- Docker Desktop
- Dropbox
- OneDrive
- Google updaters
- Logitech Options+
- Hermes
- OpenClaw
- ChatGPT Atlas updater
- Zoom daemon

### Menu bar utilities / likely resident apps

Likely resident or frequently backgrounded utilities installed:

- Alfred
- Amphetamine
- Dropbox
- Google Drive
- pCloud Drive
- TradingView
- WireGuard
- LinearMouse
- logioptionsplus
- Microsoft Teams
- Spotify

### Resource-heavy background patterns

Evidence points to the following as the most likely heavy background/resource contributors:

- Ollama model storage and model serving
- LM Studio local server with auto-start
- Hermes gateway and mac host worker
- OpenClaw gateway
- Docker Desktop helpers
- Dropbox/OneDrive sync agents

## 3. AI / Development Environment

### Ollama

Observed config:

- `OLLAMA_MAX_LOADED_MODELS=1`
- `OLLAMA_KEEP_ALIVE=2m`
- cloud disabled in `server.json`

Installed manifests found for:

- `qwen3-vl:8b`
- `phi4-mini:latest`
- `qwen2.5:14b-instruct`
- `gemma4:e4b-mlx`
- `qwen3.6:27b-mlx`
- `qwen3.6:27b`
- `qwen3-coder:30b`
- `qwen3.5:27b-mlx`
- `qwen3.5:4b-mlx`
- `qwen3.5:9b-mlx`
- `qwen3.5:2b-mlx`
- `qwen3.5:0.8b-mlx`

Storage:

- `~/.ollama`: `112G`
- largest blobs include:
  - `17G`
  - `16G`
  - `8.4G`
  - `5.7G`
  - `5.3G`

### Hermes Desktop

Observed config highlights:

- default model: `qwen3.5:9b-mlx`
- provider base URL: `http://localhost:11434/v1`
- configured context length: `65536`
- cached context lengths include:
  - `qwen3.5:9b-mlx` at `262144`
  - `qwen3.5:2b-mlx` at `262144`
  - `qwen2.5:14b-instruct` at `65536`
- gateway state showed connected platforms
- persistent tracked process found:
  - Python HTTP server on port `8089`

Storage:

- `~/.hermes`: `5.8G`
- `~/.hermes/mac-computer-use`: `3.9G`
- notable single file:
  - `~/.hermes/mac-computer-use/actions.log`: `3.8G`

### OpenClaw

Observed config highlights:

- gateway auto-run via LaunchAgent
- local gateway port: `18789`
- bind mode: `loopback`
- default primary model: `ollama/qwen3.5:9b-mlx`
- other configured models include:
  - `gemma4:e4b-mlx`
  - `qwen3.6:27b-mlx`
  - `qwen2.5:14b-instruct`
  - `phi4-mini:latest`
  - `qwen3.6:27b`
  - `qwen3-vl:8b`
  - `qwen3-coder:30b`
- configured context windows include:
  - `131072`
  - `262144`
  - `32768`
- Chrome DevTools MCP plugin configured via `npx`

Storage:

- `~/.openclaw`: `1.5G`

### LM Studio

Observed config highlights:

- models folder: `~/.lmstudio/models`
- local server enabled: `true`
- auto start on launch: `true`
- server port: `1234`
- network interface: `0.0.0.0`
- verbose logging: `true`
- sensitive data logging: `true`
- JIT model loading: `true`
- default context length: `8192`
- JIT model TTL: `3600` seconds

Known local models:

- `Qwen3.5-27B-Claude-4.6-Opus-Distilled-MLX-4bit`
- `Qwen3.5-4B-MLX-4bit`
- `Qwen3.5-9B-MLX-4bit`
- `gemma-4-E4B-it-MLX-4bit`
- `Qwen2.5-14B_Uncensored_Instruct-Q4_K_S.gguf`

Storage:

- `~/.lmstudio`: `39G`
- `~/.lmstudio/models`: `37G`

Largest LM Studio files:

- `8.0G` `Qwen2.5-14B_Uncensored_Instruct-Q4_K_S.gguf`
- `5.0G` model shard
- `5.0G` model shard
- `5.0G` model shard
- `4.1G` model shard
- `4.0G` model shard

### Screenpipe

- No clear Screenpipe installation/configuration was found in the inspected paths

### MCP servers

Observed:

- Codex MCP server: `node_repl`
- LM Studio `mcp.json`: empty
- Google Workspace MCP config directory exists:
  - `~/.config/google-workspace-mcp`
- OpenClaw Chrome DevTools MCP plugin configured

### Docker

- Docker CLI installed: `29.5.3`
- Docker Desktop support directories present
- Docker daemon socket helper installed
- `docker info` could not fully query the server due permission denied on:
  - `unix:///Users/allen/.docker/run/docker.sock`

### Node.js installations

Multiple overlapping Node locations detected:

- `/opt/homebrew/bin/node`
- `/usr/local/bin/node`
- `~/.nvm/versions/node/v22.22.3/bin/node`

Observed versions/footprints:

- active `node --version`: `v23.11.0`
- `~/.nvm`: `1.3G`
- `/opt/homebrew/Cellar/node`: `79M`
- `/usr/local/lib/node_modules`: `19M`

### Python environments

Multiple Python entry points detected:

- `/Library/Frameworks/Python.framework/Versions/3.12/bin/python3`
- `/opt/homebrew/bin/python3`
- `/usr/local/bin/python3`
- `/usr/bin/python3`

Observed version:

- `Python 3.12.3`

Virtual environments found under the home directory include:

- `~/open-webui/venv`
- `~/mac-computer-use/.venv`
- `~/.hermes/hermes-agent/venv`
- `~/trade/.venv`
- `~/trade/venv`
- `~/ibkr-test/.venv`
- `~/ibkr_project/.venv`
- `~/venv`
- others

## 4. Network & Security

### Tailscale

- Tailscale CLI installed: `1.98.5`
- LaunchDaemon exists for `tailscaled`
- `tailscale status` could not connect to the local daemon at audit time
- Interpretation: installed and configured for launchd, but not confirmed healthy/running in this session

### Open listening ports

Direct socket/process correlation was limited in this environment.

From configuration evidence, likely relevant listeners/services are:

- SSH daemon: default port `22` if active
- LM Studio local API: `0.0.0.0:1234`
- OpenClaw gateway: loopback `18789`
- Hermes mac host worker: `0.0.0.0:8765`
- Hermes tracked Python HTTP server: `8089`
- Ollama typically serves on `11434`

### SSH configuration

- `/etc/ssh/sshd_config` is mostly default
- `AuthorizedKeysFile .ssh/authorized_keys`
- user SSH config contains host:
  - `anakinfs` on port `822`

### Firewall status

- macOS Application Firewall: `disabled`

### Remote access services

Service-level evidence:

- `com.openssh.sshd` => enabled
- `com.apple.screensharing` => enabled

This does not prove current external exposure by itself, but it does increase the need for intentional network hardening.

## 5. Storage Analysis

### Top 20 largest directories

1. `112G` `/Users/allen/.ollama`
2. `45G` `/Users/allen/Library`
3. `39G` `/Users/allen/.lmstudio`
4. `6.3G` `/Users/allen/docker`
5. `5.8G` `/Users/allen/.hermes`
6. `3.6G` `/Users/allen/Downloads`
7. `3.6G` `/Users/allen/.cache`
8. `2.8G` `/Users/allen/.npm`
9. `2.1G` `/Users/allen/Applications`
10. `1.7G` `/Users/allen/open-webui`
11. `1.6G` `/Users/allen/.pcloud`
12. `1.5G` `/Users/allen/.openclaw`
13. `1.3G` `/Users/allen/.nvm`
14. `1.2G` `/Users/allen/ollama-webui`
15. `1.1G` `/Users/allen/mac-computer-use`
16. `921M` `/Users/allen/.vscode`
17. `772M` `/Users/allen/.cursor`
18. `638M` `/Users/allen/hermes_skills`
19. `619M` `/Users/allen/.com.moomoo.OpenD`
20. `607M` `/Users/allen/mbose`

### Cache consumption

Largest cache areas found:

- `5.5G` `~/Library/Caches`
- `1.5G` `~/Library/Caches/Homebrew`
- `755M` `~/Library/Caches/com.microsoft.VSCode.ShipIt`
- `611M` `~/Library/Caches/Mozilla`
- `534M` `~/Library/Caches/ms-playwright`
- `450M` `~/Library/Caches/com.openai.atlas`
- `394M` `~/Library/Caches/tradingview-desktop-updater`
- `247M` `~/Library/Caches/Google`
- `240M` `~/Library/Caches/pip`
- `122M` `~/Library/Caches/com.spotify.client`
- `115M` `~/Library/Caches/node-gyp`
- `95M` `~/Library/Caches/ms-playwright-mcp`

### Old logs

- `~/Library/Logs`: `72M`
- `~/.hermes/logs`: `7.7M`
- `~/.ollama/logs`: `3.3M`
- largest old log found:
  - `12M` Zoom memory log

### Large files

Notable large files:

- `17G` Ollama blob
- `16G` Ollama blob
- `8.4G` Ollama blob
- `8.0G` LM Studio GGUF
- `5.0G` LM Studio model shards
- `3.8G` `~/.hermes/mac-computer-use/actions.log`
- `2.8G` `~/Downloads/ubuntu-arm64.iso`

### Duplicate AI model families / overlap

There is clear overlap across AI stacks:

- Ollama and LM Studio both contain Qwen-family models
- Ollama and LM Studio both contain Gemma-family models
- Ollama and Hermes/OpenClaw are configured around many of the same local Ollama models

Most obvious overlap:

- `qwen3.5:4b`
- `qwen3.5:9b`
- `qwen2.5:14b`
- `gemma4/e4b`

This is the single largest optimization opportunity on the machine.

## 6. Recommendations

## A. Quick Wins (<5 minutes)

### 1. Remove or rotate the oversized Hermes action log

- Benefit: immediate disk recovery with no impact on model quality
- Risk: loss of old interaction/action trace history
- Estimated resource savings: `~3.8G`
- Exact commands required:

```bash
ls -lh ~/.hermes/mac-computer-use/actions.log
mv ~/.hermes/mac-computer-use/actions.log ~/.hermes/mac-computer-use/actions.log.bak
truncate -s 0 ~/.hermes/mac-computer-use/actions.log
```

### 2. Delete the Ubuntu ISO if no longer needed

- Benefit: fast, low-risk disk recovery
- Risk: you would need to re-download it later
- Estimated resource savings: `~2.8G`
- Exact commands required:

```bash
ls -lh ~/Downloads/ubuntu-arm64.iso
rm ~/Downloads/ubuntu-arm64.iso
```

### 3. Clear user caches

- Benefit: easy space recovery and lower cache sprawl
- Risk: first launch of some apps may be slower
- Estimated resource savings: `2G` to `5G`
- Exact commands required:

```bash
du -sh ~/Library/Caches
rm -rf ~/Library/Caches/*
```

### 4. Trim old logs

- Benefit: modest cleanup and lower log noise
- Risk: lose old diagnostic history
- Estimated resource savings: `50M` to `200M`
- Exact commands required:

```bash
find ~/Library/Logs -type f -mtime +30 -print
find ~/Library/Logs -type f -mtime +30 -delete
```

### 5. Confirm Tailscale health before keeping it auto-started

- Benefit: removes uncertainty around a background daemon
- Risk: none if only inspecting; loss of connectivity if later disabled
- Estimated resource savings: small CPU/RAM savings if later disabled
- Exact commands required:

```bash
tailscale status
sudo launchctl print system/homebrew.mxcl.tailscale
tail -n 100 /opt/homebrew/var/log/tailscaled.log
```

## B. Medium Improvements (<30 minutes)

### 6. Consolidate duplicate local model families across Ollama and LM Studio

- Benefit: largest disk-space win on the machine
- Risk: losing convenience if both toolchains need their own copies
- Estimated resource savings: `20G` to `60G+`
- Exact commands required:

```bash
du -sh ~/.ollama ~/.lmstudio
find ~/.ollama/models/manifests -type f
find ~/.lmstudio/models -type f \( -name '*.gguf' -o -name '*.safetensors' \)
ollama rm qwen3.5:4b-mlx
ollama rm qwen3.5:9b-mlx
ollama rm qwen2.5:14b-instruct
ollama rm gemma4:e4b-mlx
```

LM Studio cleanup is usually safest from its UI, but file-level review commands are:

```bash
du -xhd 2 ~/.lmstudio/models | sort -hr | head -n 30
find ~/.lmstudio/models -type f -size +1G
```

### 7. Disable LM Studio local server auto-start if it is not needed all day

- Benefit: lower background RAM/CPU usage and reduced network exposure
- Risk: local API clients will fail until LM Studio is launched
- Estimated resource savings: small-to-moderate background savings
- Exact commands required:

```bash
cat ~/.lmstudio/.internal/http-server-config.json
```

Recommended manual change after approval:

- set `autoStartOnLaunch` to `false`
- optionally change `networkInterface` from `0.0.0.0` to loopback-only if supported in-app

### 8. Reduce local model context sizes where 262k is unnecessary

- Benefit: lower RAM pressure during inference and fewer swap events
- Risk: shorter available context for long prompts
- Estimated resource savings: workload-dependent, potentially several GB of active RAM during model runs
- Exact commands required:

```bash
cat ~/.hermes/config.yaml
cat ~/.openclaw/openclaw.json
cat ~/.ollama/config
```

Examples of later adjustments:

```bash
export OLLAMA_KEEP_ALIVE=30s
```

And reduce `num_ctx` values in tool configs for large models where appropriate.

### 9. Review and prune always-on LaunchAgents for Hermes/OpenClaw if they are not needed continuously

- Benefit: lower idle overhead and less background complexity
- Risk: those tools stop being instantly available
- Estimated resource savings: small-to-moderate CPU/RAM savings, lower login overhead
- Exact commands required:

```bash
plutil -p ~/Library/LaunchAgents/ai.hermes.gateway.plist
plutil -p ~/Library/LaunchAgents/ai.openclaw.gateway.plist
plutil -p ~/Library/LaunchAgents/com.hermes.mac-host-worker.plist
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist
```

### 10. Rationalize Node installations

- Benefit: simpler PATH behavior and fewer update surfaces
- Risk: some tools may depend on a specific install path
- Estimated resource savings: `1G+` possible, plus lower maintenance overhead
- Exact commands required:

```bash
which -a node npm
du -sh ~/.nvm /opt/homebrew/Cellar/node /usr/local/lib/node_modules
nvm ls
brew list node
```

## C. Advanced Optimizations

### 11. Enable firewall and re-check remote services

- Benefit: meaningful security improvement
- Risk: may block desired inbound workflows until explicitly allowed
- Estimated resource savings: none; security gain only
- Exact commands required:

```bash
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo launchctl print-disabled system | rg 'com.openssh.sshd|com.apple.screensharing'
```

### 12. Disable SSH and Screen Sharing if not intentionally in use

- Benefit: reduces attack surface
- Risk: remote admin/access stops working
- Estimated resource savings: small background savings; primary benefit is security
- Exact commands required:

```bash
sudo systemsetup -getremotelogin
sudo launchctl disable system/com.openssh.sshd
sudo launchctl disable system/com.apple.screensharing
```

### 13. Put LM Studio on loopback only and review sensitive-data logging

- Benefit: reduces exposure of local inference APIs and log sensitivity
- Risk: breaks LAN access to LM Studio if currently relied on
- Estimated resource savings: none; security and privacy gain only
- Exact commands required:

```bash
cat ~/.lmstudio/.internal/http-server-config.json
```

Recommended manual changes after approval:

- set `networkInterface` to loopback-only
- set `logSensitiveData` to `false`
- set `verbose` to `false`

### 14. Build a single “primary local inference stack”

- Benefit: biggest long-term simplification
- Risk: migration effort; some tool-specific workflows may need reconfiguration
- Estimated resource savings: `30G` to `80G+`, plus lower idle complexity
- Exact commands required:

```bash
du -sh ~/.ollama ~/.lmstudio ~/.hermes ~/.openclaw
find ~/.ollama/models/manifests -type f
find ~/.lmstudio/models -maxdepth 3 -type f
```

Target state options:

- keep Ollama + Hermes/OpenClaw, reduce LM Studio
- keep LM Studio for interactive use, reduce Ollama inventory
- keep both, but separate by model family and size class

### 15. Audit Docker Desktop usage and decide whether it should remain installed and auto-started

- Benefit: can remove a persistent virtualization stack if rarely used
- Risk: container workflows stop until Docker is relaunched/reinstalled
- Estimated resource savings: moderate idle RAM/CPU and helper overhead
- Exact commands required:

```bash
docker context ls
docker images
docker ps -a
plutil -p /Library/LaunchDaemons/com.docker.socket.plist
plutil -p /Library/LaunchDaemons/com.docker.vmnetd.plist
```

## Suggested Priority Order

1. Free space first: AI model consolidation, Hermes log cleanup, caches, ISO removal
2. Harden network posture: firewall, SSH, Screen Sharing, LM Studio bind scope
3. Reduce background complexity: Hermes/OpenClaw/LM Studio auto-start review
4. Simplify runtimes: Node/Python/Docker sprawl

## Best Next Actions

If you want the highest-value changes with the least risk, the first approved actions I would recommend are:

1. prune `~/.hermes/mac-computer-use/actions.log`
2. remove the Ubuntu ISO if unused
3. clear user caches
4. decide whether LM Studio and Ollama both need full local model inventories
5. enable firewall and review SSH/Screen Sharing intent