Which of your agents is waiting on you?

A thin strip on the edge of your Mac’s screen. One click takes you straight back to whichever agent needs you.

macOS 14+ · Apple silicon · free · no permissions

Works with

What works where
One click back to
  • iTerm2
  • Warp
  • Ghostty
  • Terminal
  • VS Code
  • Cursor
  • cmux
  • herdr
  • tmux
  • any other

Process tracking

Not just agents. Anything that takes a while.

Start the long one (an image build, a training run, the full e2e suite, a deploy) with evlat watch in front, then go do something else. It keeps a ring on the bar while it runs: green when it exits 0, red with the exit code when it doesn’t. Your terminal doesn’t notice a thing.

sped up; in real life these take minutes to hours

evlat watch any command

Runs it exactly as it is: colours, input, Ctrl-C and the exit code all pass through. If Evlat isn’t running, the command simply runs.

evlat signal from your own scripts

For work that knows how far along it is: --progress 0.4 fills the ring, --waiting, --done or --failed set its state. Rows expire on their own.

Your servers too

The same command works on a server you reach over ssh: its jobs arrive tagged with the machine’s name. How servers connect

Command reference

Remote machines

Every machine, one strip.

A training run on the GPU box, Claude Code on the devbox, Codex on the build server. Their rows sit on your Mac’s bar next to your local ones, each tagged with the machine it runs on. Evlat reaches them over the ssh you already use.

Tagged by machine

Every row carries the name of the machine it runs on. An agent waiting on a server pulses amber on your Mac, the same as one on your laptop. For Claude Code, Codex and OpenCode you answer it right on the bar; anything else, in that server’s terminal.

Honest when a link drops

When a server can’t be heard, its rows dim and say no connection instead of showing a stale state. Evlat keeps retrying, and they light up again once it’s back.

Over your own ssh

Add a server by the name you give ssh, such as devbox or me@server. Evlat carries a socket on the server to your Mac: no port opened, no account, no relay in between. It can set up the hooks and the evlat command there, or hand you one block to run yourself.

Settings → Servers · passwordless ssh · Claude Code, Codex, Antigravity and OpenCode

How it works

Glance, hover, go.

Evlat hooks into your agents, and every session reports to it as it goes. Each one is a ring on the strip at your screen’s edge: turning while the agent works, pulsing amber when it needs you, green when it’s done. Everything else waits for your cursor.

Hover

The strip grows into the screen: every session’s name, what it’s doing and for how long. Waiting ones sit on top, your Claude and Codex limits underneath.

Rest on a row, then go

A card slides out with what it’s stuck on: the exact command it wants to run or Claude’s question, and for Claude Code and OpenCode the buttons to answer right there. Open in Terminal finds the app that owns the session (a terminal, VS Code, Orca) and brings it to the front. No permissions asked.

Click the mascot and ask

Or press ⇧⌘Space. A balloon opens right out of the bar and takes your keyboard without pulling Evlat to the front. It runs on your own Claude Code install, so it knows what your terminal knows.

Drop a file on the mascot

Its eyes lock onto the file as it comes closer, and the file lands in the chat.

Built to stay quiet

Native
Swift, AppKit and SwiftUI. No web view, no Electron.
Still when still
A waiting ring sends out one wave a beat. A working ring is turned by Core Animation, outside Evlat’s own process. A bar with nothing moving draws no frames at all.
No permissions, all local
No Accessibility, no screen recording, no Dock icon, no account. Hooks install from the menu and talk to Evlat over a socket only your user can open: no network port.
Out of your way
Right edge or left, above the Dock and on every Space. It never takes focus.

Questions

Is Evlat free?

Yes. There is no paid tier and no account. The source is on GitHub under the Functional Source License (FSL-1.1-ALv2).

Can we use it at work?

Yes. The license allows any use, including inside a company, except offering Evlat or something substantially like it as a competing commercial product. Each version also becomes Apache 2.0 two years after its release.

Does Evlat send my code or sessions anywhere?

No. Evlat has no account and no telemetry. Sessions, commands and usage stay on your Mac, and the hooks talk to a listener on 127.0.0.1. The only thing it fetches from the internet is its own update, from GitHub, which it looks for every hour. The chat balloon runs your own Claude Code, so what you ask there goes wherever your Claude Code already sends it. More in the privacy notice.

Which agents does it track?

Claude Code, Codex, Antigravity (its app, IDE and agy CLI) and OpenCode, through the hooks and plugin Evlat installs for you. What each one shows is on What works where. Anything else (a build, a test run, a deploy, your own script) shows up with evlat watch or evlat signal.

What does installing the hooks change?

Evlat adds its own entries to Claude Code’s ~/.claude/settings.json and Codex’s ~/.codex/hooks.json and Antigravity’s ~/.gemini/config/hooks.json, next to any hooks you already have, and before the first write it keeps a .evlat.bak copy beside each one. For OpenCode it writes one file of its own, ~/.config/opencode/plugins/evlat.js. No other file is touched. To uninstall, remove the hooks in Evlat’s settings, quit it and move it to the Trash.

Which Macs does it run on?

macOS 14 Sonoma or later, on Apple silicon. There is no Intel build and no Windows or Linux app. The servers it watches can be any machine you reach over ssh.

How is it updated?

Every release is signed and notarised by Apple. Evlat checks GitHub for a new version every hour and updates through Sparkle, which verifies each update against Evlat’s signing key before installing it. By default a new version downloads in the background and installs when Evlat quits; you can turn that off in Settings. Release notes

Where do I report a bug or ask a question?

In the GitHub issues. The source, the license and every release are in the same repository.

Put it on your screen's edge.

  1. Download and drag

    Open Evlat.dmg and drag Evlat into Applications.

  2. Open it

    It is signed and notarised, so it opens like any other app. It keeps itself up to date: Check for Updates… is in its menu.

  3. Install the hooks

    Right-click the mascot → install hooks for Claude Code, Codex, Antigravity and OpenCode. New sessions start reporting straight away; the ones already open show up too.

Download Evlat Read the source

3 MB · macOS 14+ · Apple silicon · updates itself