Docs
The aetower command line tool
aetower talks to a running Aetower.app over its local MCP socket and prints live system state: friction, energy, storage, and repositories. It reads the exact same engine the app renders โ no second collector, no separate daemon.
$ aetower top
ENTITY FRICTION CPU% MEM
Chrome ยท 48 procs 72 119 1.2 GB
Ollama ยท GPU x 58 12 9.1 GB
Claude Code ยท repo x 14 8 340 MB
Add --json to any command for machine-readable output, or --watch <secs> to refresh read commands until interrupted.
Commands
aetower topโ loudest entities right now (friction, CPU, memory)aetower findingsโ the recommendation feed: what's straining the machine and what to doaetower alertsโ active alertsaetower hostโ host summary: CPU, memory, wakeups, energy, thermalaetower storageโ storage pressure and reclaim opportunitiesaetower reposโ repository health: git state, agent-contract readiness, clonesaetower tab <slug>โ switch the app's visible tab (aetower tab system,aetower tab activity/timeline)aetower doctorโ self-check: reachability, capabilities, engine healthaetower toolsโ list every MCP tool the running app exposesaetower call <tool>โ call any MCP tool directly and print its JSON payloadaetower install/aetower uninstallโ manage the/usr/local/binsymlinkaetower completionsโ shell completion scripts (zsh, bash, fish, โฆ)aetower manโ the man page
Options
--jsonโ emit the raw structured JSON payload instead of a formatted view--socket <PATH>โ override the MCP socket path (default:~/.aetower/mcp.sock)--watch <SECS>โ refresh every SECS seconds until interrupted (read verbs only)
Installation
The CLI ships inside the app bundle, so it arrives through every install channel:
- Installer package (.pkg) โ symlinks
aetoweronto yourPATHautomatically. - Homebrew tap โ
brew tap aeptus/aetower && brew install --cask aetowerlinks the command into Homebrew'sbindirectory. - DMG / ZIP โ add it from Settings โ AI Clients ("Install Command Line Tool") or run the bundled helper once:
/Applications/Aetower.app/Contents/Helpers/aetower install.
Driving the UI from scripts
Every workspace tab is addressable without Accessibility trust or synthetic clicks:
aetower tab storage
open "aetower://tab/activity/timeline"
aetower tab system --default # also persist as the startup tab
Slugs: monitor, activity, storage, repos, projects, agents, system, settings โ with sub-tabs like activity/timeline and system/diagnostics.
Exit codes and pipelines
Commands exit non-zero when the app is unreachable or the query fails, so aetower doctor && aetower top --json | jq ... composes the way you'd expect. If Aetower isn't running, the CLI says so and exits instead of starting a second engine.
Questions this page answers
How do I see what's straining my Mac from the terminal?
Run aetower top for the loudest entities by friction, or aetower findings for the recommendation feed. The app must be running.
How do I get machine-readable output from aetower?
Add --json to any command; exit codes are scriptable, so it composes with jq and pipelines.
How do I install the aetower command?
The installer package links it onto your PATH automatically; the Homebrew tap declares it as a binary; DMG/ZIP installs add it from Settings โ AI Clients or with aetower install.
Can I switch Aetower's tabs from a script?
Yes: aetower tab <slug> (or the aetower://tab/<slug> URL scheme) switches the visible workspace without Accessibility trust or synthetic clicks.
Aetower is a free early-alpha download for macOS 14+ (Apple silicon).
Download for macOS