New · Rearrange tiles

Every background job.
One click away.

See what runs on your Mac, switch it off, run it now. LaunchAgents and Paseo schedules, side by side.

Download for macOS Try it below

Go on, play with it.

This popover is live. Flip a switch, run a job, open its log, or drag a tile somewhere else.

Built for the stuff
you forget is running.

Brew upgrades, backups, AI agents on a schedule. Stagehand shows them all and tells you when one fails.

Status at a glance

Next run, last result and a history of recent runs on every tile.

Keep awake

Hold the Mac awake for 30 minutes or until you say so, lid closed too.

AI configurations

Your CLAUDE.md, Copilot and Gemini instructions in one list.

What it shows

One tile per job.

Each background job gets a tile with its name, a switch, when it runs next and how the last run went. A job you switch off stays off after a restart.

A tile turns red when a job fails, and dims while it's off or paused. When a launchd job's plist has been edited since it was loaded, the tile offers to reload it. Hover one and it leans toward the cursor, like a poster on an Apple TV.

The faders say it first

You don't have to open the popover to know how things are going. The menu bar icon changes with the jobs behind it.

  • Red knobs: something is holding the Mac awake.
  • All red: a job is failing.
  • Dimmed: nothing is running.
Four tiles: Keep awake on and idle, Keep awake switched off and dimmed, Brew upgrade in red after its last run failed with exit 1, and CI improvement report paused since 9 October
On, off, failed, paused.

Features

Everything happens on the tile.

Run it

  • The switch turns a launchd job off with launchctl disable and bootout, and pauses or resumes a Paseo schedule.
  • ▶ runs a scheduled job now. For a Paseo schedule it asks first, since a run starts a paid agent.
  • The keep-awake tile has a timer: hold the Mac awake for half an hour, a few hours or until you stop it, lid closed included.

Watch it

  • Open a job's log under its tile and watch lines arrive as they're written, or follow it in your terminal.
  • Bars show the last five runs. Height is how long each took, colour is how it ended.
  • When a job starts failing, a notification tells you.
  • Add a plist or a schedule and its tile shows up within a second, no restart.

Change it

  • ⓘ explains what a job does, taken from its prompt, its script's header comment or its command. Write a note if you'd put it better.
  • Edit script, Edit plist and Edit prompt open the file in your editor. A saved prompt goes straight back to Paseo.
  • Edited a plist by hand? The tile says Changed · Reload, and one click checks the plist and loads it again.
  • Change how often a Paseo schedule runs: daily, weekdays, weekly or monthly at a set time, or any cron. You see the next run before you save.
Brew upgrade's log open under its tile, listing five outdated packages being upgraded, with a Follow in Terminal link; below it, a prompt asking whether to start a Paseo agent now
A live log, and the check before a paid run.
The details panel of the CI improvement report: its description from the prompt, and the frequency editor set to weekly on Mondays at 08:15, with the next run shown as tomorrow 08:15
Details, and a schedule moving from monthly to weekly.

How it works

It reads what's already there.

launchd and Paseo run your jobs and keep their schedules. Stagehand asks them how things stand and passes your clicks on.

launchd

Every LaunchAgent in ~/Library/LaunchAgents gets a tile, apart from the updaters and helpers other apps leave there. Add a plist and it appears. State comes from launchctl print, the next run from the plist's calendar, and it all runs as you, without admin rights.

Paseo

Every Paseo schedule gets a tile too, read with paseo schedule. Pausing, running once, new prompts and new frequencies all go through the same command, so Paseo stays in charge of the schedule. Without Paseo you get one tile that says it's unavailable.

One config file

~/.config/stagehand/config.json is written on first launch and applies as soon as you save it. It sets which labels get a tile (all of yours by default, or only those starting with a prefix), and per job a name, an SF Symbol, a note or a custom on/off command. It also picks the terminal and editor the buttons open.

{
  "labelPrefixes": [],
  "hiddenPrefixes": ["com.apple.", "com.google.", "…"],
  "overrides": {
    "com.example.brew-upgrade": { "name": "Brew upgrade", "symbol": "shippingbox" },
    "12d16c9a": { "name": "CI improvement report" }
  },
  "terminalApp": null,
  "editorApp": "Visual Studio Code"
}

Download

Download for macOS

Open the disk image and drag Stagehand to your Applications folder.

Download for macOS Requires macOS 14 or later and an Apple silicon Mac.

First launch

Stagehand isn't notarized by Apple yet, so macOS blocks it the first time. You only need to allow it once.

  1. Open Stagehand from your Applications folder. macOS says it can't verify the app; close the message.

  2. Open System Settings › Privacy & Security and scroll down to Security.

  3. Click Open Anyway next to Stagehand, then confirm. Click the faders in the menu bar, and turn on Open at login in Settings if you want it back after a restart.

To remove it, quit Stagehand and delete /Applications/Stagehand.app and ~/.config/stagehand.

Enjoying Stagehand?

It's free. If it saves you a minute, you can buy me a coffee.

Buy me a coffee, please