Přejít na obsah

AgentBar

Všichni tvoji AI coding agenti v jedné ikoně v menu baru — nebo v Dynamic Islandu pod notchem. Vidíš, co dělají, schvaluješ oprávnění, odpovídáš na otázky a odklepáváš plány bez přepínání do terminálu. Celé to jede na obyčejných souborech.

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

AgentBar je malá nativní macOS aplikace, která ukazuje, co zrovna dělají tvoje coding sessions. Devět agentů na jednom místě: Claude Code a Claude Cowork, Codex, Cursor CLI, Gemini CLI, Qwen Code, OpenCode, GitHub Copilot a Google Antigravity. Bydlí v menu baru, jako Dynamic Island pod notchem, nebo obojí. Každý agent má svého maskota (krab Clawd pochoduje barem, dokud Claude pracuje) a nahoře je vždycky ta session, která na tebe nejvíc čeká.

Ze schvalování oprávnění na dálku se stalo odpovídání na všechno, aniž bys sáhl na terminál. Permission prompt s diffem přímo v menu. Otázky s možnostmi jako průvodce, kde jen klikáš. A když Claude doplánuje, celý plán si přečteš jako Markdown a rovnou ho schválíš, nebo pošleš přepracovat. Uvnitř je to schválně co nejhloupější: hook skripty zapíšou JSON soubor, aplikace hlídá složku a kreslí. Žádné sockety, žádní démoni, žádná síť. A ty samé soubory pohání i CLI na Linuxu a nativní Windows port.

9
agentů v jedné ikoně
0
socketů, démonů a síťových volání
3
platformy — macOS, Linux CLI, Windows port
18
releasů za první měsíc

problém

Když pouštíš víc agentů najednou, nejčastěji ti to nespadne. Ono se to jen zasekne. Session běží v tabu na pozadí, narazí na permission prompt a čeká. Zjistíš to za dvacet minut, když se tam přepneš a dojde ti, že se od tvého posledního pohledu nestalo vůbec nic.

Se třemi nebo čtyřmi sessions najednou je najednou tvoje hlavní práce obcházet terminály a kontrolovat, jestli něco nečeká.

Co existovalo, mi nestačilo. Buď appka pro každého agenta zvlášť, takže máš v baru čtyři ikony místo jedné. Nebo notifikace, kterých je tolik, že je za den přestaneš vnímat. Nebo prostě alt-tab každých pár minut. Chtěl jsem jedno místo, kam mrknu a hned vidím, kdo na mě čeká. A u toho nejčastějšího vyrušení, u permission promptu, chtěl jsem odpovědět rovnou tam a nevypadnout z toho, co dělám.

jak to funguje

Celé to jsou soubory. Malé hook skripty zapisují jeden JSON na session do ~/.agentbar/state.d/ a frontendy tu složku hlídají a kreslí. Claude Code a Cowork hlásí úplně všechno: prompt, nástroje, oprávnění, otázky, plány, stop. Codex, Cursor CLI, Gemini CLI, Qwen Code a OpenCode se hlásí přes svoje vlastní hooky. Antigravity má pozorovací můstek a hlídače transkriptů. Jenom Copilot pořád žádné veřejné event API nemá, takže ho z menu aspoň spustíš. Maskota má připraveného.

Protokol ví, na čem se pracuje. Každý stavový soubor nese i to, co session zrovna dělá: prompt, model a kdy začala. Řádek pak neříká jen jméno repa, ale třeba „fix the auth bug in middleware · 28m“. Schvalování jsou další dvě složky stejného protokolu. Blokující hook zapíše žádost do requests.d/, frontend odpověď do answers.d/ a hook jede dál. Co je nahoře, řídí priorita: kdo čeká na oprávnění, jde před tím, kdo pracuje, a ten před tím, kdo nedělá nic. Spadlý tah svítí červeně a nikdy se neschová pod zelenými Done řádky. A když na řádek klikneš, skočíš na přesný tab nebo pane terminálu, kde session běží — spárováno přes tty (iTerm2, Terminal.app, WezTerm).

$the-protocol
claude · cowork ──┐
codex · cursor    │  one JSON per session
gemini · qwen     ├─▶ ~/.agentbar/state.d/ ──watch──▶ menu bar · island
opencode · antigr ┘                                   linux cli · windows
permission / question / plan ─▶ requests.d/
  ✓ Allow · ✕ Deny · answer · plan review ─▶ answers.d/
  (no sockets, no daemons, no network — just files)

vzdálené allow/deny

Session, která čeká na oprávnění, se ukáže žlutě jako needs approval. A pod tím vidíš přesně to, co schvaluješ: u Edit mini-diff −staré/+nové, u Bash celý příkaz, u Write náhled souboru.

✓ Allow pustí tenhle jeden případ. ✓ Always pustí i všechny další stejné — nabídne se jen tehdy, když Claude Code sám navrhne pravidlo, a vždycky ho uvidíš čitelně jako Bash(git push:*), ne jako syrový JSON. ✕ Deny zamítne. Nebo prompt vrátíš do terminálu. A když nechceš ani otvírat menu, je tu volitelná zkratka ⌥⌘A / ⌥⌘D.

Odpověď se vrací přes PermissionRequest hook, takže se v terminálu žádný prompt ani neukáže. Stejný pruh tlačítek mají i permission dialogy Antigravity. Codex a Copilot hooky na rozhodování nemají, takže jejich řádky nabízejí poctivě označený pokus: přepnout na terminál a odklepnout to za tebe. Chce to oprávnění Accessibility.

Jedna věc mi určila celý zbytek: aplikace tě nikdy nesmí držet v šachu. Prompt v terminálu žije celou dobu a vyhrává, kdo odpoví dřív — druhá odpověď se v klidu zahodí. Když AgentBar neběží, spadne uprostřed čekání, nebo si ho prostě nevšimneš, prompt vyskočí v terminálu úplně stejně, jako by AgentBar vůbec neexistoval. Prošel jsem si všechny způsoby, jak se to může rozbít, a každý z nich končí obyčejným promptem v terminálu.

dynamic island

Od verze 1.10 může AgentBar bydlet jako Dynamic Island: malá pilulka pod notchem s maskotem pracujícího agenta a jeho úkolem. Najedeš na ni a rozbalí se do panelu se sessions. To, co na tebe čeká, vede jako velká karta, zbytek jsou tiché řádky pod ní. Panel se nikdy neotevře sám, nikdy ti nesebere fokus z editoru a na displejích bez notche se z něj stane plovoucí pilulka.

Na islandu se z odpovídání stalo víc než schvalování. Když se Claude ptá, možnosti vidíš jako karty, na které klepneš. Ze čtyř otázek najednou je průvodce po jedné otázce, s tichým „2/4“ a tlačítkem zpět. Když Claude doplánuje, celý plán se vykreslí jako Markdown — nadpisy, odrážky, kód — a dole máš Keep planning, které ho pošle přepracovat, a Approve plan. Hotová session řekne, co dodělala: jeden řádek závěrečných slov agenta pod zeleným Done. V patičce tiše svítí spotřeba kvóty, čtená z lokálních souborů CLI — žádná síť, žádná keychain, nic neopouští počítač. A k tomu volitelné zvuky: čtyři malé syntetizované retro motivy pro momenty, kdy tě session potřebuje.

island: najedeš, schválíš na místě, odpovíš na otázku — a zase se složí

klíčová rozhodnutí

AgentBar je clean-room přepis staršího notifikátoru pro jednoho agenta. Postavil jsem ho znovu kolem jedné myšlenky: čím hloupější přenos dat, tím líp. Stav jsou obyčejné JSONy ve složce. Celý protokol se dá odladit přes lscat, přežije pád na obou stranách a přidat agenta znamená napsat skript, co zapíše soubor. Dneska je sepsaný jako normativní, na OS nezávislý spec — docs/protocol.md — a macOS appka, linuxové CLI a Windows port jsou jen tři frontendy nad stejným kontraktem.

  • Otázka není totéž co schválení. Když se tě Claude na něco ptá (AskUserQuestion, typicky výběr z možností nebo dotaz k plánu), session dostane modrou tečku a text otázky. Ne falešné žluté „needs approval“. Jiná naléhavost si zaslouží jinou barvu.
  • Nejčastější druh chyby jsou závody mezi hooky. Proto každý fakt zapisuje přesně jeden skript a každé mazání si ověří, že soubor pořád patří jemu. Verze 1.2.1 opravila sessions visící na „needs approval“, protože starý hook přepsal čerstvý stav. Verze 1.12.0 chytila hook, který po sobě smazal soubor svého nástupce.
  • Terminál nikdy nepřijde o slovo. Průvodce v terminálu žije i ve chvíli, kdy AgentBar ukazuje tu samou žádost. Vyhrává, kdo odpoví dřív, druhá odpověď se v klidu zahodí. A odpověď na dálku může říct jen to, co žádost sama nabídla.
  • Instalace, kterou můžeš pustit kolikrát chceš. První spuštění přidá hooky do ~/.claude/settings.json a nechá tam všechno ostatní, jak to bylo. Do configů Codexu, Cursoru, Gemini, Qwenu nebo OpenCode sáhne jen u nástrojů, které fakt používáš. Instalátor napřed vypíše, co změní, a teprve pak to udělá.
  • Oprávnění, která přežijí update. macOS si pamatuje TCC granty podle podpisové identity a ad-hoc podpis je pokaždé nová identita. Buildy se proto podepisují stabilní identitou, takže Accessibility a Automation přežijí rebuild i upgrade přes cask.
  • Maskoti jsou sprity kreslené přímo v AppKitu. Krab Clawd za Claude, každý agent ve svých barvách. K tomu černobílý režim, který splyne se zbytkem menu baru, a slovesa, co se během práce střídají.
  • Nic navíc. Žádná ikona v docku, žádná okna, žádné odpočty, žádné zvuky, dokud si je nezapneš. Jeden proces, skoro nic to nežere.

stav a co dál

AgentBar je open source pod MIT, aktuálně v1.12.0. 18 releasů za první měsíc: od první verze s víc agenty přes schvalování na dálku až po Dynamic Island, průvodce otázkami a review plánů. Nainstaluješ ho jedním curl příkazem, přes Homebrew cask, nebo ten příkaz hodíš do coding agenta a on si to udělá sám. Pak už se aktualizuje sám na jeden klik. CLI agentbar je na Linuxu plnohodnotný parťák menu bar appky (status, watch s allow/deny z klávesnice, modul pro waybar) a AgentBar for Windows je nativní system-tray verze nad stejným protokolem.

Dál chci notarizovaný build. Dnešní buildy se podepisují stabilní lokální identitou, takže oprávnění přežijí update, ale při ručním stažení tě Gatekeeper pořád vystraší. Pak živý stav pro Copilot, jakmile vydá veřejné event API. A schvalování na dálku pro Qwen Code, až si ověřím jeho rozhodovací kontrakt.

$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