Repository navigation
Releases: spacyapps/ground-control
Release list
Ground Control 0.10.0
Faster
Animated themes cost far less. An animated theme was the app's real CPU cost, not the panel itself. Frames are now unpacked once to a cache folder and read back as needed, instead of being re-decoded every redraw, and the analyser's colour ramp is cached instead of blended per segment per frame. On one Mac with agents working, Nami Star measured about 24.5% of a core before this release against about 11.7% for the built-in Default theme; the gap is what this release goes after.
Hold still (opt-in). Settings → Motion has two checkboxes: Hold still when the Mac is busy and Hold still on a low battery. When either applies, the panel stops animating but keeps showing every mood. A session that needs you always overrides it, so the red alarm is never held. Measured on Nami Star: 23.8% → 2.1% of a core while held. Both are off until you turn them on, and the app only glances at overall processor load and battery level; it looks at no process, file or window.
New
- Idle agent-team teammates stay on the panel as child rows (Claude Code agent teams), instead of vanishing when they go quiet.
- A "Context meter: how to enable ↗" link in the menu, and the meter is now shown in the README, so the opt-in meter from 0.9.0 is easier to find.
Fixed
- A child row's name is sized from its cell, so a short name is no longer clipped to "al…".
- The
defaultscommands in the app's own Settings text now use the real preference domain,com.spacyapps.groundcontrol. - Each running copy keeps its own frame folder, and rebuilds an animation if its files vanish, so one copy (or a test run) can no longer delete another's frames and make a skin flicker.
Docs
- The bundled theme art is stated plainly as Grok Imagine output, edited and arranged by hand.
- Claude Code 2.1.301 and 2.1.306 marked verified, with a repeatable upgrade check for the next one.
Upgrading
Replace the app, then run the hook installer again (menu → Hooks (install, uninstall, status)). This release adds the TeammateIdle event, and the app updates cc-notify by itself but never touches the registration in ~/.claude/settings.json; without the reinstall, idle teammates will not show.
The cache folder lives in ~/Library/Caches/GroundControl and is emptied at launch, at quit and when the theme changes.
Ground Control 0.9.0
New
Context meter (Claude Code, opt-in). A small meter under a row's text fills
as that session's context window fills, with a pale-green outline that turns red
from 85%. Claude Code has no hook that reports this, so a small Claude Code mod
does, and it is not on by default. To turn it on, add one line to the env
block of ~/.claude/settings.json and restart Claude Code:
"env": { "CLAUDE_CODE_PLUGIN_DIRS": "/Applications/GroundControl.app/Contents/Resources/Mods/context-meter" }The meter appears after a session's first turn. It is Claude Code only; other
agents never draw one. Details: docs/CONTEXT-METER.md.
Fixed
- A parent row shows as working while one of its subagents is. Before, the
parent could read "done" while a child was still running. - A subagent's own tool calls appear on its own row, not on its parent's
(measured on Claude Code 2.1.286). - Claude Code's background sessions show as what they are. A backgrounded
session no longer leaves a stale "working" row behind, the daemon's own
sessions no longer make "Session started" rows, and clicking one no longer
opens Finder. The handoff from a backgrounded tab is unit-tested; it had not
been seen live when this was written. - Grok Bot's red alarm works again for approvals, and the row names the
command waiting for you.
Docs
- Why a Claude for Desktop cloud session never gets a row: nothing runs on
your Mac. - Claude Code 2.1.286 and Grok CLI 1.0.46 marked verified.
Upgrading
Replace the app. No hook reinstall is needed: the new app updates cc-notify
itself when it launches.
Ground Control 0.8.0
Ground Control puts one row per AI coding agent above every Desktop, turns it red when an agent is waiting on you, and takes you to the exact terminal tab when you click it.
The first public release.
Install
Download GroundControl-0.8.0.dmg, drag the app to Applications, and open it. Signed with a Developer ID and notarised, so it opens on an ordinary double-click — macOS asks "are you sure you want to open it?" the first time, as it does for anything downloaded from the internet.
Then click the menu-bar icon and choose Set Up Hooks…. It registers with the agents you already have and merges with hooks you already use, backing up every file first.
The .zip is the same app, for anyone who would rather not mount a disk image. It carries INSTALL.txt beside it.
What it works with
| Rows | Turns red | |
|---|---|---|
| Claude Code | yes, subagents grouped | yes |
| OpenAI Codex | yes, sub-agents grouped | yes — needs a one-time trust prompt |
| opencode | yes | yes |
| Grok CLI | yes, subagents grouped | yes, for its input prompts |
| Claude for Desktop (Code tab) | yes | yes — a click opens that conversation |
| Cursor's own agent (Composer) | yes | no — it fires no hook while it waits |
| Grok Bot | yes, bots grouped | no on its current cache format |
Rows appear for all of them. Not all of them can say when they are stuck, and nothing on this side can invent that. The README carries the full table with the date and version each was tested against, and docs/LIMITATIONS.md says what is measured versus merely believed.
What it does with your machine
- No network code at all. No account, no telemetry, no update check.
- It reads a folder of text files your agent already writes, in your temp directory, deleted 24 hours after a session goes quiet.
- macOS asks once for permission to control your terminal. That is how a click reaches the right tab — a short script that selects a tab and raises a window. It cannot type.
- Settings → About lists exactly what is stored and everything the app can reach.
Themes
The app ships with one. Themes are plain folders of JSON and images, so they cost nothing to try and nothing to remove — Settings has a Create a Theme… flow that writes a starter for you.
Feel free to open a theme's theme.json and change things to see what happens — back it up first, and the app reloads as you save. Every setting is documented in two places: docs/THEMING.md is the guide, and the bundled default theme's own theme.json lists every key that exists, annotated, at its built-in value. Delete any key you do not want and the app fills it back in — an empty { } is a valid theme.
Known rough edges
- If you run your agent with permissions on
auto, it never stops to ask, so you will never see a row turn red. Worth testing once with the default permission mode. - Sessions in tmux, over ssh, or from a launchd job have no app to jump to; clicking reveals the folder instead.
- Cursor's own agent and Grok Bot appear but cannot raise the alarm, as above.
Licence
AGPL-3.0-or-later. The artwork and the names are not covered by it — see TRADEMARK.md.
Bug reports and feature requests are very welcome. Code contributions are not accepted, and the pull request template explains why.