Evlat · for macOS

Which of your agents is waiting on you?

Evlat docks a thin black strip to the edge of your screen. One ring per Claude Code or Codex session, one face for all of them — and an amber pulse the moment one stops and needs your answer.

v0.1.0 · macOS 14 Sonoma or later · Apple silicon · free

try it — drag a file onto the mascot, or click it

Why it exists

Waiting is not idle.

An agent that finished and an agent that stopped to ask you something look the same in a terminal tab. They are not the same: one can sit there all afternoon, the other is holding your work hostage until you answer. Evlat keeps those two apart — the whole product lives in that distinction.

Working

Claude is calling tools or writing.

you: nothing — let it work

Waiting for you

It asked for a permission or a question. Nothing happens until you answer.

you: go and answer

Idle

Done, sitting at the prompt. Nobody is waiting on anybody.

you: whenever you like

PermissionRequest→waiting
Notification(permission_prompt)→waiting
Notification(elicitation_dialog)→waiting
Notification(agent_needs_input)→waiting
Notification(idle_prompt)→not waiting
Stop→done

"you've been idle a while" is not "I need you" — so it never lights amber.

State comes from Claude Code's and Codex's own hooks, which Evlat installs for you from the mascot's menu. Sessions you opened before installing still show up right away: Evlat also reads Claude Code's session files, so a session killed with kill -9 disappears instead of spinning forever.

Out of the way until you want it

Glance, hover, go.

The face answers “should I look?”. The rings answer “at what?”. Everything else waits for your cursor.

Closed The mascot and the first few rings. No names, no text, no numbers — only a +N when there's overflow.
Hover The strip grows into the screen: every session's name, what it's doing and for how long. Waiting ones always sit on top; your Claude and Codex limits sit underneath.

one click → that terminal comes to the front

Rest on a row A card slides out with the tool it's stuck on and the exact command. Go to session finds the app that owns it — a terminal, VS Code, Orca — and brings it forward. No permissions asked.

The mascot

Two eyes, five moods.

A cube with two eyes and no mouth. Everything it says, it says with its eyes and posture — and it follows your cursor while it does. It always shows the most urgent state across all your sessions.

idlebreathes, blinks, watches you
workingsquints at its own work
waitingeyes wide, locked on you
donehead tilt: “is this right?”
failedlids drop, one shudder

who wins: failed › waiting › working › done › idle

Click the mascot

Ask without switching windows.

Click the mascot or press ⇧⌘Space and a balloon opens right out of the bar. It takes your keyboard without pulling Evlat to the front, and it runs on your own Claude Code install.

  • Permission requests show up as a card in the balloon — allow or deny in place.
  • Drag a file onto the mascot; its eyes lock onto it and it lands in the chat.
  • Close the balloon and the chat keeps running as a row in the bar, with the mascot's face in its ring.
  • Workspace chats share one memory. History prunes itself after 7 days unless you pin it.

And the rest of what's on the strip

Claude Code and Codex, side by side

Each ring carries its tool's mark in the state's colour, so two sessions in the same folder stay apart — even on the closed bar.

CLAUDE

5h25%↻ 1h 12m

7d52%↻ 3d 4h

CODEX

5h84%↻ 38m

Your limits, on the same strip

The 5-hour and 7-day windows for Claude and Codex. Turns amber past 80%.

apiDEVBOX

workerGPU-01

no connection · 5 min

Sessions on other machines

Add a server and its Claude sessions arrive over an ssh -R tunnel, labelled with the machine's name. A lost link dims the row and says why.

Left edge or right edge

Right by default, left from the mascot's menu. It sits above the Dock and on every Space, and never steals focus.

Built to stay quiet

Native
Swift, AppKit and SwiftUI. No web view, no Electron.
Still when still
Rings beat instead of spinning forever. A bar with nothing moving draws no frames at all.
No permissions
No Accessibility, no screen recording, no Dock icon. Hooks install and uninstall from the menu.
Local
Hooks talk to a listener on 127.0.0.1:48151 that turns browsers away. No account, no server of ours.
Two languages
English and Turkish, down to the menu.

Two minutes

Put it on your screen's edge.

  1. Download and unzip

    Move Evlat.app into Applications.

  2. Open it the first time with a right-click

    This early build isn't notarised yet, so macOS asks first: right-click Evlat.app → Open → Open. Only needed once.

  3. Install the hooks

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

Download Evlat 0.1.0 Read the source

1.4 MB · macOS 14+ · Apple silicon