Repository navigation
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.