Devince
AI,  Development

Siedem sesji Claude Code i żadnej nie widać

Date Published

Siedem świecących szklanych kostek ustawionych w rzędzie na ciemnej tacy, jedna świeci mocniej od reszty

Wczoraj wieczorem policzyłem: siedem otwartych sesji Claude Code, każda w osobnym oknie Terminatora. Pipeline wideo odpalony o pierwszej w nocy, dwie sesje w projekcie security, roadmapa, skill do audytu, dwie w katalogu domowym, bo „na chwilę”. Która z nich czeka na moją odpowiedź? Nie wiedziałem, dopóki nie przeklikałem wszystkich okien.

herdr screenshot devince.dev

Postawiłem więc Herdra jako tablicę projektów. Poniżej co ustawiłem, na czym się wyłożyłem i prompt, którym zrobisz to samo u siebie.

Czym jest Herdr

Herdr to aplikacja desktopowa do trzymania terminali z agentami. Ma trzy poziomy:

  • space to projekt (folder, a nawet inna maszyna przez SSH),
  • tab to wątek pracy w projekcie,
  • agent to terminal, którego program raportuje status: pracuje, czeka na ciebie, skończył.

Claude Code wysyła ten status sam (sekwencja OSC 7501), więc niczego nie trzeba podpinać. Cały interfejs Herdra jest zbudowany z modów w JavaScripcie i layoutów w JSON-ie, a w katalogu konfiguracji leży AGENTS.md z dokumentacją API. Claude Code czyta ten plik i pisze mody sam. Ja głównie mówiłem, czego chcę, i oglądałem zrzuty z herdr-app shot.

Co ustawiłem

  1. Space na projekt. 20 projektów z mojej listy przypiętych. Moja komenda p add, która dopisuje projekt do listy, od razu zakłada też space w Herdrze.
  2. Grupy w sidebarze. Projekty grupują się po katalogu nadrzędnym (main, business, client, video...), nagłówki są zwijane i pokazują, ilu agentów czeka.
  3. Pasek NEXT MOVE. Nad terminalem liczniki (czeka na ciebie, pracuje, skończył) i agent, który czeka najdłużej, razem z jego pytaniem wyciągniętym przez hc read. Przycisk Odpowiedz przenosi prosto do jego terminala.
  4. Powiadomienia. Gdy agent przejdzie w „czeka” albo „skończył”, a okno Herdra nie jest aktywne, dostaję systemowe powiadomienie przez notify-send.
  5. Tablica Corral od martinkozle jako widok kolumnowy, a kolory z layoutu Slate od jkuepkera.

Gdzie się wyłożyłem

„Transcript saving is off”

Pierwszy Claude odpalony w Herdrze pokazał ostrzeżenie, którego w zwykłym terminalu nie miałem. Przeszukałem binarkę Claude Code i znalazłem pełny tekst: inherited CLAUDE_CODE_CHILD_SESSION marker.

Herdra uruchomił Claude z mojej sesji, przez swojego Basha. Każdy terminal w Herdrze odziedziczył więc zmienne tej sesji, a Claude uznał się za podsesję i wyłączył zapis transkryptu. Taka sesja nie wraca przez --resume i nie trafia do nocnego changeloga. Naprawa to hc server stop i start Herdra z menu systemu. Wniosek ogólniejszy: jeśli agent uruchamia długo żyjący proces, który potem odpala kolejne agenty, środowisko przechodzi dalej.

Taby znikały

Odpalam agenta w jednym projekcie, klikam drugi projekt i tab z działającym agentem znika. Szczerze mówiąc, byłem pewien, że Herdr go zamyka.

Herdr niczego nie zamykał. Pasek tabów pokazuje tylko taby bieżącego space'a, więc po zmianie projektu wymienia się cały, a agent dalej pracuje w swoim projekcie, tyle że poza zasięgiem wzroku. Model jest spójny. Ja po prostu pracuję po jednej sesji w kilku projektach naraz, więc pasek tabów prawie zawsze miał u mnie jedną pozycję.

Rozwiązanie zajęło niecałe 100 linii: mod z drugim paskiem nad tabami, działający jak karty w przeglądarce. Projekt wchodzi na pasek, gdy do niego zajrzę, projekt z agentem jest tam zawsze, a obok nazwy kręci się spinner albo świeci kropka statusu. Pod spodem zostają zwykłe taby wybranego projektu.

Mod w dwóch kopiach

Herdr wstawia nowy mod do layoutu sam, jeśli zobaczy main.js bez mod.json. Raz wylądował mi przez to w layoucie dodatkowy panel szeroki na 320 pikseli. Kolejność jest prosta: najpierw mod.json z "place": "none", potem kod.

Prompt do skopiowania

Wklej to do Claude Code. Prompt prowadzi go krok po kroku, każe pokazywać dowód po każdym etapie i omija pułapki, w które ja wpadłem.

1Chcę ustawić Herdr (herdr.dev) jako tablicę moich projektów dla agentów Claude Code: jeden space na projekt, grupy w sidebarze, pasek projektów nadtabami, baner z agentem, który na mnie czeka, i powiadomienia. Pracuj krokami. Po każdym kroku pokaż dowód (komenda i wynik albo zrzut `herdr-app shot plik.png`) i dopiero wtedy idź dalej.
2
3Zasady na cały czas:
4 - Zanim cokolwiek zmienisz, przeczytaj AGENTS.md w katalogu konfiguracji Herdra (na Linuksie ~/.config/herdr-app). To dokumentacja layoutów, modów i komend; nie zgaduj API.
5 - Nie uruchamiaj herdr-app ani herdr-core ze swojego Basha. Terminale Herdra odziedziczą zmienne tej sesji (CLAUDECODE, CLAUDE_CODE_CHILD_SESSION) i Claude odpalony w Herdrze przestanie zapisywać transkrypt ("Transcript saving is off"). Herdra uruchamiam ja, z menu systemu. Jeśli już działa z twojego shella, powiedz mi, żebym zrobił `hc server stop` i uruchomił go od nowa.
6 - Nie edytuj wbudowanego layoutu main.json. Sklonuj go do layouts/board.json i pracuj na klonie; przed każdą edycją zrób kopię zapasową.
7 - Każdy własny mod: najpierw mod.json z `{"place":"none"}`, dopiero potem main.js, bo inaczej Herdr sam wstawi kopię moda do layoutu. Po każdej zmianie `herdr-app check <folder moda>` i `herdr-app status` (pole errors ma być puste).
8 - Czysta logika moda (filtrowanie, sortowanie) w osobnych funkcjach z małym `demo()` na asercjach, uruchomionym przez node.
9 - Cudzy kod z GitHuba najpierw przeczytaj i streść mi (sieć, uruchamiane programy, zapisywane pliki). Kopiujesz dopiero po mojej zgodzie.
10
11 Kroki:
12 1. Instalacja: pobierz https://releases.herdr.dev/app/install.sh do pliku, przeczytaj go i powiedz, co robi (checksumy, sudo, gdzie instaluje). Uruchom po mojej zgodzie, potem `herdr-app --version` i `hc --version`.
13 2. Space na projekt: zapytaj, gdzie trzymam projekty (lista ścieżek albo katalog nadrzędny). Dla każdego `herdr-app do space.new
14 '{"name":"<nazwa>","folder":"<ścieżka>"}'`, pomijając te, które już są w `herdr-app ls`. Daj mi jednolinijkową funkcję shella, która dodaje space dla bieżącego katalogu.
15 3. Grupy: sklonuj wbudowany mod spaces jako spaces-grouped i grupuj space'y według katalogu nadrzędnego (albo reguły, którą podam). Nagłówki zwijane, z liczbą agentów czekających na mnie. Podłącz go w board.json zamiast spaces.
16 4. Pasek projektów: nowy mod nad paskiem tabów, jak karty w przeglądarce. Projekt trafia na pasek, gdy do niego wejdę; projekt z agentem jest tam zawsze. Klik robi space.select, przy nazwie status agenta (pracuje, czeka, skończył), × zdejmuje projekt tylko z paska (bez × na aktywnym i na tym z agentem). Pod spodem zostają zwykłe taby wybranego projektu.
17 5. Baner NEXT MOVE: mod nad terminalem z licznikami (czeka na mnie, pracuje, skończył, bezczynny) i agentem, który czeka najdłużej. Pokaż jego pytanie (ostatni sensowny akapit z `hc read <terminal> --lines 40`) i przycisk Odpowiedz, który przenosi mnie do jego terminala. Status agentów przychodzi przez OSC 7501; sprawdź na żywym Claude, że go wysyła, zamiast zakładać.
18 6. Powiadomienia: mod, który przy przejściu agenta w blocked albo done wysyła powiadomienie systemowe (Linux notify-send, macOS osascript), tylko gdy okno Herdra nie jest aktywne. Bez duplikatów: klucz to terminal i czas zmiany statusu.
19 7. Opcjonalnie tablica Corral (github.com/martinkozle/herdr-corral): przeczytaj, streść, zainstaluj tylko po mojej zgodzie. Na Linuksie ctrl-shift-k zajmuje picker Herdra, więc przypisz inny skrót.
20
21Na koniec: lista zmienionych plików, skróty klawiszowe i jak wrócić do czystego Herdra (przełączenie na layout main).

Część z CRM-em i zadaniami celowo zostawiłem poza promptem, bo to już zależy od tego, gdzie kto trzyma swoje zadania.

Co dalej

Tablica pokazuje, co czeka. Nie mówi jednak, czym się nie zajmować. Następny krok to limit trzech, czterech projektów w fokusie, z etapami z roadmapy, a reszta zwinięta pod „poza fokusem”. Otwarte zostaje pytanie, ile z tego wyboru oddać agentowi, który czyta roadmapę i podpowiada kolejny ruch.

Herdr: tablica projektów dla agentów Claude Code | Devince