Přejít na obsah
~/case-studies/agentbar

AgentBar

Jedna položka v menu baru pro všechny AI coding agenty. Živý stav a vzdálené Allow/Deny, celé postavené jen na souborech.

Sólo projekt: koncept, Swift/AppKit, hook protokol, design2026Open source (MIT) · v1.4.0
SwiftAppKitmacOSNode.js hooksClaude Code hooksCodex notifyHomebrew

AgentBar je lehká nativní macOS aplikace v menu baru, která ukazuje živý stav tvých běžících AI coding sessions. Claude Code hlásí v plné věrnosti, ve stejném baru najdeš i Codex, GitHub Copilot a Google Antigravity. Každý agent má vlastního animovaného maskota (krab Clawd pochoduje barem, dokud Claude pracuje) a bar vždycky vytáhne nahoru tu session, která tě potřebuje nejvíc.

Hlavní funkce je vzdálené Allow/Deny. Když si Claude Code řekne o oprávnění, přesné znění požadavku se objeví přímo v menu. Povolíš jednou, povolíš napořád, nebo odmítneš, aniž bys přepínal do terminálu. Pod kapotou je architektura záměrně nudná: drobné hook skripty zapisují jeden JSON soubor na session, aplikace sleduje složku a vykresluje. Žádné sockety, žádní démoni, žádná síť.

4
AI agenti v jedné položce menu baru
0
socketů, démonů a síťových volání, jen soubory
1 řádek
na instalaci, curl nebo Homebrew
10 min
než se nezodpovězený prompt vrátí do terminálu

problém

Paralelní běh coding agentů má charakteristický způsob selhání, a není to chyba agenta. Je to agent, který potichu čeká. Session v terminálu na pozadí narazí na permission prompt a zablokuje se. Zjistíš to o dvacet minut později, když přepneš tab a dojde ti, že se od tvého posledního pohledu nestalo vůbec nic. Vynásob to třemi až čtyřmi souběžnými sessions napříč různými agenty a hlídání terminálů se stane tvojí hlavní prací.

Existující řešení neškálují. Buď notifikační appka pro každého agenta zvlášť, tedy pokaždé další položka v menu baru. Nebo záplava notifikací, které se naučíš ignorovat. Nebo prostě alt-tab každou chvíli podle časovače. Chtěl jsem jedno místo, na které se dá mrknout a vždycky ukazuje session, která mě potřebuje nejvíc. A u nejčastějšího vyrušení ze všech, u permission promptu, možnost odpovědět rovnou tam, bez opuštění rozdělané práce.

jak to funguje

Celý systém stojí na souborech. Drobné Node.js hook skripty zapisují jeden JSON soubor na session do ~/.agentbar/state.d/, aplikace tu složku sleduje a vykresluje. Claude Code hlásí v plné věrnosti (prompt, použití nástroje, oprávnění, stop, životní cyklus session), Codex hlásí dokončení tahu přes svůj notify hook. Copilot a Antigravity zatím žádné veřejné event API nemají, takže se z menu dají jen spustit. Jejich maskoti jsou připravení na den, kdy se nějaké API objeví.

Schvalování oprávnění jsou jen dvě další složky téhož protokolu. Blokující PermissionRequest hook zapíše požadavek do requests.d/, aplikace zapíše rozhodnutí do answers.d/ a hook se odblokuje. Když je toho víc, než se do baru vejde, rozhoduje priorita: oprávnění přebíjí práci, práce přebíjí nečinnost. Každá živá session má v menu vlastní řádek s názvem projektu, git větví a stavem. Kliknutím na něj skočíš do její aplikace nebo terminálu.

$the-protocol
claude hooks ──┐  one JSON per session
codex notify ──┴─▶ ~/.agentbar/state.d/  ──watch──▶ menu bar
permission ask ──▶ requests.d/ ─▶ ✓ Allow / ✕ Deny ─▶ answers.d/
                   (no sockets, no daemons, no network — just files)

vzdálené allow/deny

Když si Claude Code session řekne o oprávnění, požadavek se objeví pod žlutým řádkem needs approval. Uvidíš přesně to, co se žádá, například Bash: git push origin main, plný vstup najdeš v tooltipu. Pod tím je lišta tlačítek přímo v menu: ✓ Allow povolí jednou, ✓ Always povolí napořád (nabídne se jen tehdy, když Claude Code sám navrhne pravidlo, a zobrazí se jako čitelný text typu Bash(git push:*), nikdy jako syrový JSON), ✕ Deny odmítne. Prompt můžeš taky vrátit zpátky terminálu nebo desktopové appce Claude. Rozhodnutí se vrací přes vlastní PermissionRequest hook Claude Code, takže terminálový prompt se vůbec neukáže.

Jedno designové omezení tvarovalo úplně všechno: aplikace tě nikdy nesmí držet jako rukojmí. Když AgentBar neběží, spadne uprostřed čekání, nebo požadavek prostě deset minut ignoruješ, prompt se ukáže v terminálu přesně tak, jak by se ukázal bez AgentBaru. Fail-open od základu. Každý způsob selhání je vyjmenovaný a všechny končí u obyčejného terminálového promptu. Codex a Copilot žádné rozhodovací hooky nemají, takže jejich řádky nabízejí jasně označený best effort: přepnout na terminál dané session a stisknout schvalovací klávesu. Schované za macOS oprávněním Accessibility.

klíčová rozhodnutí

AgentBar je clean-room přepis staršího konceptu notifikátoru pro jednoho agenta, postavený znovu kolem jediné sázky: vyhrává nejjednodušší možný transport. Stav jsou obyčejné JSON soubory ve sledovaných složkách. Celý protokol se dá debugovat pomocí ls a cat, přežije pád na kterékoli straně, a přidat dalšího agenta znamená přidat skript, který zapíše soubor.

  • Otázka není schválení. Když se Claude na něco ptá (AskUserQuestion, tedy výběr možností nebo otázky k plánu), session ukáže modrou tečku s textem otázky místo falešného žlutého „needs approval“. Jiná naléhavost, jiná barva.
  • Jeden zapisovatel na jeden fakt. Verze 1.2.1 opravila sessions zaseknuté na „needs approval“. Starší notifikační hook mohl dorazit pozdě a přepsat čerstvý stav zastaralým příznakem. Stav oprávnění teď zapisuje přesně jeden skript, závodící hook byl odstraněn a staré registrace se uklidí při spuštění.
  • Idempotentní instalace. První spuštění sloučí hook záznamy do ~/.claude/settings.json a zachová všechno, co tam už je. Do ~/.codex/config.toml zasáhne jen tehdy, pokud tam žádný notify řádek není. Reinstalace je vždycky bezpečná.
  • Maskoti jako sprite snímky vykreslované nativně v AppKitu. Krab Clawd pro Claude, každý agent s vlastní značkou. K tomu monochromatický režim System, který splyne s menu barem, a rotující „thinking“ slovesa, dokud agent pracuje.
  • Nic navíc. Žádná ikona v docku, žádná okna, žádné odpočty, žádné zvuky. Jeden proces, mrňavá stopa.

stav a co dál

AgentBar je open source pod licencí MIT ve verzi 1.4.0. Pět releasů vyšlo hned první den: od prvního multi-agent baru přes vzdálené Allow/Deny a schvalovací lištu přímo v menu až po opravu race condition a stav otázky. Instaluje se jednořádkovým curl příkazem, přes Homebrew cask, nebo tak, že instalační příkaz vložíš svému coding agentovi a on to zařídí sám. Mapování hooků je zdokumentované jako specifikace: claude-code-states.md zaznamenává, které eventy Claude Code se mapují na které stavy, včetně toho, co se záměrně ignoruje a proč.

Další kroky: notarizovaný build (dnes je aplikace podepsaná ad hoc, takže ruční stažení spustí varování Gatekeeperu) a živý stav pro Copilot a Antigravity, jakmile některý z nich vydá veřejné event API. Bar, protokol i maskoti už čekají.

$try-it-in-60-seconds
# one line — downloads the latest release, installs the hooks
curl -fsSL https://raw.githubusercontent.com/michalstrnadel/AgentBar/main/Scripts/install.sh | bash

# or via Homebrew
brew install --cask michalstrnadel/tap/agentbar

# then open a NEW Claude Code session and watch the bar