Przewodnik herdr – instalacja, konfiguracja i Claude Code | Detechtive
Rozdziały

~/.config/herdr%APPDATA%\herdr

Przewodnik herdr

Od instalacji na macOS albo Windows, przez konfigurację pod Claude Code i Codex, po stały serwer na VPS, z którym łączysz się z komputera albo telefonu. Krok po kroku, z gotowymi komendami.

Komendy pokazuję dla:

Start

Jak działa herdr

herdr to menedżer terminali dla agentów AI, podobny do tmux. Działa jako serwer w tle, więc panele i agenci pracują dalej, gdy zamkniesz okno. Do tego rozpoznaje agentów w panelach i pokazuje ich stan w panelu bocznym. Działa na macOS, Linuksie i Windows.

Od zwykłego terminala do herdr

  1. Agent w zwykłym terminalu. Otwierasz terminal, uruchamiasz claude i pracujesz. Działa to tak długo, jak otwarte jest okno: zamkniesz je albo zerwie się połączenie SSH, a agent kończy pracę razem z nim. Przy kilku agentach masz kilka okien i klikasz po kolei, żeby sprawdzić, który na ciebie czeka.

  2. tmux. Sesja należy do serwera tmux, a nie do okna, więc okno możesz zamknąć, a agent pracuje dalej. Dostajesz też panele i karty. Tylko że tmux widzi w panelach sam tekst: dla niego Claude to jeszcze jeden program i nie wie, czy pracuje, czy czeka na twoją zgodę.

  3. herdr. Robi to samo co tmux, a do tego rozpoznaje agentów w panelach i pokazuje ich stan w pasku bocznym. Obsługujesz go myszką, a agenci mogą nim sterować przez komendy herdr. Panele trzyma serwer działający w tle, a okno terminala jest tylko widokiem na nie.

Zwykły terminaltmuxherdr
Agent działa po zamknięciu oknaNieTakTak
Panele i kartyZależy od terminalaTakTak
Widać, który agent czekaNieNieTak
Obsługa myszą od pierwszej minutyCzęściowoSłaboTak
Agent może uruchomić innego agentaNieRęcznie, przez skryptyWbudowane
PojęcieCo to jest
SesjaSerwer w tle. Polecenie herdr łączy się z sesją domyślną albo ją uruchamia.
WorkspaceKontener na jeden projekt albo zadanie. Zasada: jeden projekt, jeden workspace.
KartaUkład paneli w workspace, np. agents, logs, server.
PanelPrawdziwy terminal. Dzielisz go w prawo albo w dół. Przetrwa odłączenie.
AgentRozpoznany program w panelu: Claude Code, Codex, Pi i inne.

Stany agenta w panelu bocznym

■ blockedCzeka na twoją zgodę albo odpowiedź
▶ workingPracuje
✓ doneSkończył, jeszcze tego nie widziałeś
○ idleGotowy na polecenie

Start

Instalacja

  1. Zainstaluj herdr w Terminalu albo iTerm2. Plik trafia do ~/.local/bin/herdr. Możesz też użyć brew install herdr.

    Terminal
    curl -fsSL https://herdr.dev/install.sh | sh
  2. Sprawdź wersję. Jeśli system nie znajduje polecenia, otwórz terminal ponownie.

    herdr --version
  3. Uruchom w katalogu projektu. Przy pierwszym starcie przejdziesz onboarding: motyw, powiadomienia i integracje agentów.

    cd ~/Developer/moj-projekt
    herdr
  4. Aktualizacje robisz jedną komendą. Działające panele zostają. Przy instalacji z Homebrew aktualizujesz przez brew upgrade herdr.

    herdr update
  1. Zainstaluj Windows Terminal, jeśli go nie masz (w Windows 11 jest wbudowany). Na nim herdr jest testowany, a stary wiersz poleceń konsoli działa gorzej.

    PowerShell
    winget install Microsoft.WindowsTerminal
  2. Zainstaluj herdr w PowerShellu. Instalator dopisuje herdr do PATH.

    PowerShell
    powershell -ExecutionPolicy Bypass -c "irm https://herdr.dev/install.ps1 | iex"

    Jeśli antywirus albo polityka firmy zablokuje to polecenie, użyj wersji dla wiersza poleceń (cmd):

    cmd
    curl.exe -fsSLo install.cmd https://herdr.dev/install.cmd && install.cmd && del install.cmd
  3. Otwórz nowe okno terminala i sprawdź wersję.

    herdr --version
  4. Uruchom w katalogu projektu. Przy pierwszym starcie przejdziesz onboarding.

    cd $HOME\Projects\moj-projekt
    herdr
  5. Aktualizacje robisz jedną komendą. Nowe instalacje są na kanale stable. Jeśli kiedyś instalowałeś wersję preview, przełącz się poleceniem herdr channel set stable.

    herdr update
Ręczna instalacja z ZIP

Pobierając herdr-windows-x86_64.zip z GitHuba, rozpakuj cały katalog. Obok herdr.exe leży środowisko ConPTY, bez którego herdr nie działa poprawnie.

Start

Pierwsze kroki

  1. Uruchom agenta w panelu: claude albo codex. herdr sam go wykryje i pokaże jego stan w panelu bocznym.

  2. Podziel ekran: ctrl+b v w prawo, ctrl+b - w dół. W drugim panelu uruchom testy albo serwer.

  3. Używaj myszy. Kliknięcie przenosi do panelu, przeciągnięcie krawędzi zmienia rozmiar, prawy przycisk otwiera menu, a zaznaczenie tekstu kopiuje go.

    Wklejanie w Windows Terminal: ctrl+shift+v. shift + prawy przycisk włącza wklejanie samego terminala.

  4. Odłącz się przez ctrl+b q albo zamknij okno terminala. Agenci pracują dalej. Wracasz poleceniem herdr.

Zatrzymanie serwera kończy wszystkie procesy

herdr server stop zamyka wszystkie panele i agentów. Po ponownym starcie wraca układ, a agenci z integracją wznawiają swoje rozmowy.

Start

Skróty 80/20

Na macOS i Windows skróty są takie same. Każdy zaczyna się od prefiksu: naciśnij ctrl+b, puść, potem klawisz akcji. Na macOS to klawisz Control, nie Command.

Najważniejsze

SkrótCo robi
ctrl+b gLista wszystkich agentów i terminali. b pokazuje tylko te, które czekają na ciebie, / szuka, Enter przenosi
ctrl+b oPrzenosi do agenta, który właśnie wysłał powiadomienie
ctrl+b wPrzełącza workspace, także te z VPS
ctrl+b v / -Dzieli panel w prawo / w dół
ctrl+b zPowiększa panel na cały ekran i z powrotem

Karty, panele i tekst

SkrótCo robi
ctrl+b cNowa karta
ctrl+b 1…9Przejście do karty o tym numerze
ctrl+b h j k lPrzejście do panelu w lewo / dół / górę / prawo
ctrl+b xZamyka panel
ctrl+b shift+xZamyka kartę
ctrl+b shift+nNowy workspace
ctrl+b fFile viewer z diffami (wymaga wtyczki)
ctrl+b [Tryb kopiowania: / szuka, v zaznacza, y kopiuje
ctrl+b qOdłącza od herdr
ctrl+b ?Lista wszystkich aktywnych skrótów

Konfiguracja

Plik config.toml

Konfiguracja jest w pliku ~/.config/herdr/config.toml%APPDATA%\herdr\config.toml. Dokładną ścieżkę pokazuje herdr --help. herdr działa bez tego pliku, a błędna wartość nie psuje startu: herdr bierze wartość domyślną i pokazuje ostrzeżenie.

Otwórz plik w edytorze
mkdir -p ~/.config/herdr
open -e ~/.config/herdr/config.toml
PowerShell: otwórz plik w Notatniku
New-Item -ItemType Directory -Force "$env:APPDATA\herdr" | Out-Null
notepad "$env:APPDATA\herdr\config.toml"
  • Pełna konfiguracja domyślna z opisami: herdr --default-config
  • Wczytanie zmian bez restartu: herdr server reload-config albo ctrl+b shift+r
  • Przed większą zmianą zrób kopię pliku

Sprawdzona konfiguracja startowa

config.toml
onboarding = false

[theme]
name = "nord"

[ui]
# agenci wg pilności: blocked → working → done → idle
agent_panel_sort = "priority"
# kształty zamiast samych kolorowych kropek
status_indicators = "symbols"
# nazwa agenta na krawędzi panelu
show_agent_labels_on_pane_borders = true

[ui.toast]
delivery = "system"     # powiadomienia systemowe

Skrót do wtyczki file viewer dopisujesz po jej instalacji, zob. Wtyczki.

Konfiguracja

Kolory i motywy

Motyw ustawiasz w sekcji [theme]. Wbudowane motywy:

nord catppuccin tokyo-night dracula gruvbox one-dark solarized kanagawa rose-pine vesper terminal

terminal bierze kolory z profilu twojego terminala (iTerm2, Terminal, GhosttyWindows Terminal, WezTerm, Alacritty).

Automatyczny jasny i ciemny tryb

herdr przełącza motyw razem z jasnym lub ciemnym wyglądem terminala.

config.toml
[theme]
auto_switch = true
dark_name = "catppuccin"
light_name = "catppuccin-latte"

Własne kolory na bazie motywu

W [theme.custom] nadpisujesz pojedyncze kolory. Działa zapis hex, nazwy kolorów i rgb(r,g,b). Dostępne pola: sidebar_bg, active_row_bg, selection_bg, panel_bg, accent, text, red, green, blue, yellow.

config.toml
[theme.custom]
accent = "#88c0d0"
sidebar_bg = "#2e3440"
panel_bg = "reset"      # tło paneli = tło terminala

# osobne nadpisania dla trybów, gdy auto_switch = true
[theme.custom.light]
panel_bg = "#eceff4"

Konfiguracja

Powiadomienia i dźwięk

Dźwięk gra domyślnie, gdy agent w tle skończy pracę albo czeka na ciebie. Dymki ustawiasz w [ui.toast]:

deliveryKiedy wybrać
systemPowiadomienia systemu (macOS albo Windows). Najlepsze lokalnie
herdrDymek w rogu okna herdr. Dobre na serwerze bez pulpitu
terminalPowiadomienie wyświetla terminal. Działa też przez SSH
offBez dymków, sam dźwięk
  1. Zainstaluj terminal-notifier. Bez niego powiadomienia przychodzą jako „Script Editor” i kliknięcie w nie nie przenosi do terminala.

    brew install terminal-notifier
  2. Daj zgodę na powiadomienia: Ustawienia systemowe → Powiadomienia → terminal-notifier. Jeśli go tam nie ma, wyślij jedno powiadomienie testowe:

    terminal-notifier -title herdr -message test
  1. Nic nie instalujesz. Powiadomienia systemowe i dźwięki mp3 działają w Windows od razu.

  2. Sprawdź zgodę: Ustawienia → System → Powiadomienia. Muszą być włączone dla terminala. Wyłącz też tryb „Nie przeszkadzać”, jeśli chcesz je widzieć w trakcie pracy.

  3. Kliknięcie w powiadomienie przenosi do panelu agenta, o ile okno herdr jest otwarte.

Własne dźwięki (mp3) ustawiasz kluczami [ui.sound] done_path i request_path.

Konfiguracja

Terminal i klawiatura

ctrl+b w Claude Code

Claude Code używa ctrl+b do przenoszenia uruchomionego polecenia w tło. Przy domyślnym prefiksie herdr przejmuje ten skrót. Jeśli często z niego korzystasz, zmień prefiks, np. prefix = "ctrl+a" w [keys].

macOS: iTerm2, Terminal, Ghostty

  • Skróty z samym alt (Option) nie działają przy domyślnym ustawieniu Option = Normal. Zamiast tego terminal wpisuje znaki specjalne.
  • ctrl+alt działa zawsze. Tak budujesz skróty bez prefiksu.
  • Jeśli skrót nic nie robi, przechwytuje go macOS albo terminal. Zwolnij go tam albo wybierz inny.

Windows: Windows Terminal

  • Polska klawiatura: ctrl+alt to AltGr. ctrl+alt+a wpisuje „ą”, +c „ć”, +e „ę”, +l „ł”, +n „ń”, +o „ó”, +s „ś”, +x „ź”, +z „ż”. Do skrótów bez prefiksu używaj tylko innych liter albo zostań przy prefiksie.
  • Wklejanie: ctrl+shift+v. Kopiowanie przez zaznaczenie myszą.
  • Migający albo skaczący kursor przy szybkim wypisywaniu to ograniczenie ConPTY w Windows. Jeśli okno podpowiedzi przy pisaniu pojawia się w złym miejscu, ustaw host_cursor = "native" w [ui].
  • PowerShell: po cd herdr nie zawsze widzi nowy katalog. Nowe panele mogą wtedy otwierać się w starym miejscu.
  • herdr uruchomiony jako administrator odrzuca zwykłe okna terminala. Uruchamiaj go normalnie.

Opcjonalnie: skróty bez prefiksu

config.toml (macOS)
[keys]
focus_pane_left  = ["prefix+h", "ctrl+alt+h"]
focus_pane_down  = ["prefix+j", "ctrl+alt+j"]
focus_pane_up    = ["prefix+k", "ctrl+alt+k"]
focus_pane_right = ["prefix+l", "ctrl+alt+l"]
split_vertical   = ["prefix+v", "ctrl+alt+d"]
new_tab          = ["prefix+c", "ctrl+alt+c"]
zoom             = ["prefix+z", "ctrl+alt+z"]
config.toml (Windows, bez liter z polskim AltGr)
[keys]
focus_pane_left  = ["prefix+h", "ctrl+alt+h"]
focus_pane_down  = ["prefix+j", "ctrl+alt+j"]
focus_pane_up    = ["prefix+k", "ctrl+alt+k"]
split_vertical   = ["prefix+v", "ctrl+alt+d"]
new_tab          = ["prefix+c", "ctrl+alt+t"]
zoom             = ["prefix+z", "ctrl+alt+m"]

Konfiguracja

Wtyczki

Wtyczki są na GitHubie pod tagiem herdr-plugin. herdr ich nie sprawdza ani nie izoluje: działają z twoimi uprawnieniami. Zanim zainstalujesz wtyczkę, przeczytaj jej herdr-plugin.toml i skrypty, a instalację przypnij do commita, który przeczytałeś.

Na Windows wtyczki są w wersji preview

Działają, ale bez gwarancji. Wiele wtyczek ma tylko skrypty sh/Bash i nie zadziała. Sprawdź w herdr-plugin.toml, czy wtyczka ma akcje z platforms = ["windows"].

File viewer: drzewo plików i diffy

  1. Programy do podglądu: diffy (delta), kod (bat) i markdown (glow).

    brew install git-delta bat glow
    PowerShell
    winget install dandavison.delta sharkdp.bat charmbracelet.glow
  2. Instalacja przypięta do przejrzanego commita.

    herdr plugin install smarzban/herdr-file-viewer --ref <commit>
  3. Dopisz skróty do config.toml, potem herdr server reload-config. Na Windows wtyczka ma osobne akcje z końcówką -windows.

    config.toml (macOS)
    [[keys.command]]
    key = "prefix+f"
    type = "plugin_action"
    command = "herdr-file-viewer.open-file-viewer"
    description = "file viewer (split)"
    
    [[keys.command]]
    key = "prefix+shift+f"
    type = "plugin_action"
    command = "herdr-file-viewer.open-file-viewer-tab"
    description = "file viewer (tab)"
    config.toml (Windows)
    [[keys.command]]
    key = "prefix+f"
    type = "plugin_action"
    command = "herdr-file-viewer.open-file-viewer-windows"
    description = "file viewer (split)"
    
    [[keys.command]]
    key = "prefix+shift+f"
    type = "plugin_action"
    command = "herdr-file-viewer.open-file-viewer-tab-windows"
    description = "file viewer (tab)"
Przydatne komendy
herdr plugin list
herdr plugin action list --plugin herdr-file-viewer
herdr plugin update

Claude i agenci

Integracje agentów

Integracja to hook w ustawieniach agenta. Dzięki niej herdr dokładnie zna stan agenta i po restarcie serwera wznawia jego rozmowę.

Terminal
herdr integration install claude
herdr integration install codex
herdr integration status

Na Windows integracje obsługują węższą grupę agentów niż na macOS: m.in. Claude Code, Codex, Pi i OpenCode.

Jeśli agent pokazuje zły stan albo nie jest wykryty, sprawdź herdr agent list, a potem herdr agent explain <panel> --json.

Claude i agenci

Skill herdr dla Claude

Oficjalny skill uczy Claude komend herdr: dzielenia paneli, uruchamiania innych agentów, czytania ich wyników i czekania na zmiany stanu. Działa tylko wtedy, gdy Claude pracuje w panelu herdr (zmienna HERDR_ENV=1).

  1. Zainstaluj skill z binarki herdr. Bez pobierania z internetu, zawsze w wersji zgodnej z twoim herdr.

    Terminal
    mkdir -p ~/.claude/skills/herdr
    herdr --skill > ~/.claude/skills/herdr/SKILL.md
    PowerShell (zapis w UTF-8 bez BOM)
    New-Item -ItemType Directory -Force "$HOME\.claude\skills\herdr" | Out-Null
    [IO.File]::WriteAllLines("$HOME\.claude\skills\herdr\SKILL.md", (herdr --skill))
  2. Po każdym herdr update powtórz drugą linię, żeby skill pasował do nowej wersji.

  3. Wywołuj go wprost. Skill włącza się, gdy w prośbie pada słowo „herdr”. Przykłady znajdziesz w sekcji Gotowe prompty.

Claude i agenci

Zasady w CLAUDE.md

Skill mówi Claude, jakich komend użyć, a te zasady mówią, jak to robić porządnie. Wklej je do globalnego pliku ~/.claude/CLAUDE.md%USERPROFILE%\.claude\CLAUDE.md (wszystkie projekty) albo do CLAUDE.md w konkretnym repozytorium.

CLAUDE.md
## herdr — praca w panelach (gdy HERDR_ENV=1)

Szczegóły komend: skill `herdr`. Te zasady mówią, JAK z nich korzystać.

**Nazewnictwo**
- Każdy uruchamiany agent dostaje nazwę roli: `herdr agent start <rola> --kind claude|codex --pane <id>`.
  Role: `impl-<zadanie>`, `review`, `test`, `codex-review`, małymi literami.
- Panel z procesem bez agenta (serwer, testy, logi) podpisz: `herdr pane rename <pane_id> "dev server"`.
- Nowa karta = jeden etap pracy, od razu nazwana: `herdr tab rename <tab_id> "etap 2"`.

**Układ**
- Pracuj w bieżącej karcie i katalogu. Nowy workspace, kartę lub worktree tylko na moją prośbę
  albo gdy zadania równolegle dotykają tych samych plików.
- Szeroki panel dziel w prawo, wąski w dół. Maksymalnie 3–4 panele w karcie.
- Zawsze `--no-focus`: nie zabieraj mi fokusu.
- ID bierz z JSON-a odpowiedzi, nigdy nie zgaduj.

**Koordynacja**
- Prompt z `--wait --timeout <ms>`, wynik czytaj: `herdr agent read <nazwa> --source recent-unwrapped`.
- `blocked` = agent pyta o zgodę: pokaż mi pytanie, nie odpowiadaj za mnie.
- Timeout nie oznacza, że prompt nie doszedł: najpierw przeczytaj panel, potem ponawiaj.
- Po długim zadaniu: `herdr notification show "<tytuł>" --body "<co dalej>" --sound done`.

**Sprzątanie**
- Zamykaj tylko panele i karty, które sam utworzyłeś, po zakończeniu ich pracy. Moich nigdy.
- Nie uruchamiaj `herdr server stop` i nie ubijaj procesu herdr.
Nazwy widoczne na ekranie

Ustaw show_agent_labels_on_pane_borders = true w [ui]. Nazwy ról, takie jak review czy impl-auth, pojawią się wtedy na krawędziach paneli.

Claude i agenci

Gotowe prompty

Wpisujesz je w Claude Code uruchomionym w panelu herdr. Słowo „herdr” w prośbie włącza skill. Działają tak samo na macOS i Windows.

Użyj herdr: otwórz obok panel z Codexem nazwanym codex-review i poproś go o recenzję bieżącego diffa. Pokaż mi tylko konkretne uwagi.
Druga opinia od innego modelu, a ty zostajesz w swoim panelu.
Użyj herdr: uruchom testy w panelu poniżej, podpisz go „testy”, poczekaj na wynik i napraw to, co nie przechodzi.
Testy działają w osobnym, widocznym panelu, a Claude czyta ich wynik.
Użyj herdr: w nowej karcie „server” uruchom dev server i daj znać, gdy wystartuje.
Długie procesy w osobnej karcie nie zaśmiecają widoku pracy.
Użyj herdr: rozdziel ten plan na dwa niezależne zadania, uruchom dla każdego agenta Claude w osobnym panelu (impl-api, impl-ui), a po skończeniu daj ich zmiany do recenzji agentowi review.
Orkiestracja: Claude koordynuje, agenci implementują, recenzent sprawdza.
Użyj herdr: pokaż listę agentów i ich stan, a przy tych w stanie blocked przeczytaj, o co pytają.
Szybki przegląd tego, co czeka na ciebie.
Użyj herdr na maszynie vps: uruchom w ~/projects/<repo> agenta Claude nazwanego nocna-zmiana z zadaniem z pliku TODO.md i wyślij mi powiadomienie, gdy skończy.
Praca, która trwa dalej na serwerze, gdy zamkniesz laptopa.

VPS i zdalnie

Wdrożenie na VPS

Na VPS-ie z Linuksem herdr działa 24/7, więc agenci pracują nawet przy wyłączonym komputerze. Łączysz się z nim z macOS, Windows albo telefonu. Działające sesje nie przenoszą się z komputera: na serwerze stawiasz herdr od nowa i klonujesz repozytoria.

herdr to nie kontener

herdr działa jako proces użytkownika dev pod kontrolą systemd. Nie zobaczysz go w docker ps ani w panelu Dockera. Agenci w kontenerze nie mieliby dostępu do twoich repozytoriów i narzędzi.

Najszybciej: jeden prompt dla Claude

Wklej ten prompt do Claude Code na swoim komputerze. Claude znajdzie VPS przez Hostinger MCP, dobierze komendy do twojego systemu i przeprowadzi całe wdrożenie. O hasła i logowania poprosi ciebie, a przed każdą ryzykowną zmianą zapyta o zgodę.

Potrzebujesz: Claude Code z podłączonym Hostinger MCP (plugin hostinger) albo, bez MCP, adresu IP serwera. Na samym komputerze herdr musi być już zainstalowany.

Prompt dla Claude Code
Wdróż herdr na moim VPS-ie, żebym mógł łączyć się z nim z lokalnego herdr.
VPS znajdź przez Hostinger MCP (bez MCP zapytaj mnie o adres).
Dopasuj komendy do mojego systemu. Mów krótko, po polsku.

1. Rozpoznanie (tylko odczyt): co działa na serwerze, czy ktoś loguje się hasłem.
   Nie ruszaj Dockera ani działających usług.
2. Osobny użytkownik dev bez sudo i bez dostępu do Dockera, logowanie kluczem,
   u mnie alias SSH "herdr-vps".
3. Zabezpieczenia: logowanie do SSH tylko kluczem i firewall ufw.
   Najpierw pokaż plan i poczekaj na moje "tak".
4. Dla dev: Node LTS, Claude Code, Codex, herdr i integracje herdr dla claude i codex.
5. herdr jako usługa systemd --user, działająca 24/7 także po restarcie serwera,
   z konfiguracją jak u mnie lokalnie.
6. Podepnij serwer: herdr machine add herdr-vps --label vps i sprawdź połączenie.

Jako podsumowanie zwróć krótką tabelę, co zrobiłeś i sprawdziłeś, oraz co zostało
dla mnie (logowanie claude i codex na serwerze, dostęp do GitHuba).
Dlaczego Claude pyta o zgodę przy SSH i firewallu

To jedyne kroki, które mogą odciąć cię od serwera, więc decyzja należy do ciebie. Gdyby coś poszło nie tak, zostaje konsola przeglądarkowa w panelu Hostingera. Szczegóły tych kroków, np. zapasowe połączenie i automatyczne wycofanie ufw, znajdziesz w rozdziale SSH i firewall.

Krok po kroku, ręcznie

  1. Na swoim komputerze wygeneruj klucz dla serwera i wyświetl jego część publiczną.

    Terminal
    ssh-keygen -t ed25519 -C "herdr-vps-dev" -f ~/.ssh/id_ed25519_herdr_vps
    cat ~/.ssh/id_ed25519_herdr_vps.pub
    PowerShell (OpenSSH jest wbudowany w Windows 10/11)
    ssh-keygen -t ed25519 -C "herdr-vps-dev" -f "$HOME\.ssh\id_ed25519_herdr_vps"
    Get-Content "$HOME\.ssh\id_ed25519_herdr_vps.pub"
  2. Na serwerze jako root załóż użytkownika dev, bez sudo i bez grupy docker. Grupa docker to w praktyce dostęp roota.

    VPS, root
    adduser --disabled-password --gecos '' dev
    install -d -m 700 -o dev -g dev /home/dev/.ssh
    nano /home/dev/.ssh/authorized_keys      # wklej klucz .pub
    chown dev:dev /home/dev/.ssh/authorized_keys
    chmod 600 /home/dev/.ssh/authorized_keys
    loginctl enable-linger dev               # usługi dev działają bez logowania
  3. Na swoim komputerze dodaj alias SSH w pliku ~/.ssh/config%USERPROFILE%\.ssh\config i sprawdź logowanie: ssh herdr-vps.

    .ssh/config
    Host herdr-vps
        HostName <adres-IP-VPS>
        User dev
        IdentityFile ~/.ssh/id_ed25519_herdr_vps
        IdentitiesOnly yes
        ServerAliveInterval 30
        ServerAliveCountMax 3

    Zapis ~/.ssh/... działa też w OpenSSH na Windows. Plik zapisz bez rozszerzenia, nie jako config.txt.

  4. Jako dev zainstaluj narzędzia w katalogu domowym. Node bierzesz z oficjalnej paczki LTS z nodejs.org, rozpakowanej do ~/.local/node (sprawdź sumę SHA-256).

    VPS, dev
    echo 'export PATH="$HOME/.local/bin:$HOME/.local/node/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc
    npm config set prefix "$HOME/.local"
    npm install -g @openai/codex
    curl -fsSL https://claude.ai/install.sh | bash
    curl -fsSL https://herdr.dev/install.sh | sh
    herdr integration install claude
    herdr integration install codex
  5. Uruchom herdr jako usługę systemd, żeby wstawał sam po restarcie serwera.

    ~/.config/systemd/user/herdr.service
    [Unit]
    Description=herdr headless server (default session)
    After=network-online.target
    
    [Service]
    Type=simple
    WorkingDirectory=%h/projects
    Environment=PATH=%h/.local/bin:%h/.local/node/bin:/usr/local/bin:/usr/bin:/bin
    Environment=SHELL=/bin/bash
    ExecStart=%h/.local/bin/herdr server
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=default.target
    VPS, dev
    mkdir -p ~/projects
    systemctl --user daemon-reload
    systemctl --user enable --now herdr.service
    systemctl --user status herdr.service
  6. Zaloguj agentów na serwerze: claude, potem codex login. Logowanie robisz sam, bo wymaga twoich danych.

Konfiguracja herdr na serwerze

VPS: ~/.config/herdr/config.toml
onboarding = false

[theme]
name = "nord"

[terminal]
new_cwd = "~/projects"

[ui]
agent_panel_sort = "priority"
status_indicators = "symbols"

[ui.toast]
delivery = "herdr"      # serwer nie ma pulpitu

[experimental]
pane_history = true     # zawartość paneli przetrwa restart

VPS i zdalnie

SSH i firewall

Agenci z dostępem do powłoki na serwerze z produkcją wymagają porządnie zabezpieczonego wejścia. Zrób te dwa kroki przed pierwszym uruchomieniem agentów. Wszystkie komendy wykonujesz na serwerze, więc są takie same niezależnie od twojego systemu.

Logowanie tylko kluczem

Przed zmianą sprawdź w logach, czy ktoś loguje się hasłem: zgrep "Accepted password" /var/log/auth.log*. Plik z prefiksem 00- wygrywa z ustawieniami cloud-init, bo w sshd liczy się pierwsza znaleziona wartość.

/etc/ssh/sshd_config.d/00-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PermitEmptyPasswords no
MaxAuthTries 4
sshd -t && systemctl reload ssh
Nie zamykaj bieżącego połączenia

Przeładowanie sshd nie zrywa otwartych połączeń. Dopóki nie potwierdzisz w nowym oknie, że logowanie kluczem działa, trzymaj stare połączenie otwarte.

ufw z automatycznym wycofaniem

Timer wyłączy ufw po 3 minutach, gdybyś stracił dostęp. Gdy wszystko działa, zatrzymaj go.

VPS, root
systemd-run --unit=ufw-rollback --on-active=180 /usr/sbin/ufw --force disable
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp  comment "SSH (tylko klucze)"
ufw allow 80/tcp  comment "HTTP"
ufw allow 443/tcp comment "HTTPS"
ufw allow in on tailscale0 comment "Tailscale"   # jeśli używasz
ufw --force enable
# test nowego logowania w osobnym oknie, potem:
systemctl stop ufw-rollback.timer
Docker omija ufw

Porty wystawione przez Dockera na 0.0.0.0 są otwarte mimo reguł ufw. Chroń je firewallem w panelu dostawcy albo przypisz w konfiguracji kontenera do 127.0.0.1.

VPS i zdalnie

Agenci a kontenery

Na serwerze działają dwa oddzielne światy. Produkcja żyje w Dockerze roota. herdr i agenci działają jako użytkownik dev, który nie ma dostępu do Dockera.

VPS
├── Docker (root)            # produkcja: twoje aplikacje, reverse proxy
└── użytkownik dev           # bez sudo, bez grupy docker
    ├── herdr.service        # herdr i agenci
    └── ~/projects/<repo>    # klony repozytoriów, na nich pracują agenci

Dlaczego bez dostępu do Dockera

  • Grupa docker to w praktyce root. Kto może uruchomić kontener, może zamontować cały dysk serwera i zmienić w nim wszystko.
  • Agent popełnia błędy jak każdy. Źle zrozumiane polecenie albo prompt injection z czytanej strony nie powinny móc zatrzymać produkcji ani skasować bazy.
  • Oddzielenie ułatwia sprawdzanie. Każda zmiana przechodzi przez gita, więc widzisz diff, zanim trafi na produkcję.

Na czym pracują agenci

VPS jest dla agentów osobnym środowiskiem pracy, takim jak twój laptop, tylko działającym 24/7. Klonujesz repozytoria do ~/projects, agenci zmieniają kod, uruchamiają testy i wypychają zmiany do gita. Do kontenerów zmiany trafiają tą samą drogą co z laptopa.

  1. Agent pracuje na klonie w ~/projects/<repo>: edytuje, testuje, robi commit na osobnej gałęzi.

  2. Wypycha gałąź i otwiera PR. Serwer potrzebuje do tego klucza z dostępem tylko do wybranych repozytoriów.

  3. Wdrożenie idzie twoją zwykłą drogą, np. przez CI po scaleniu PR-a.

Sekrety produkcji zostają u roota

Pliki .env i dane z produkcji trzymaj w katalogu produkcyjnym roota, nie w ~/projects. Agent nie potrzebuje produkcyjnych haseł, żeby pisać kod i uruchamiać testy.

VPS i zdalnie

Podpięcie remote

  1. Na swoim komputerze zapisz serwer jako maszynę. Robisz to raz.

    Terminal
    herdr machine add herdr-vps --label vps
    herdr machine status vps
  2. Uruchom herdr lokalnie. Połączenie z serwerem zestawia się samo w tle, a w panelu bocznym pojawia się sekcja „vps” z jej workspace'ami.

  3. Przełączaj się przez ctrl+b w i Enter na workspace z „vps”. Nowe karty i panele powstają wtedy na serwerze.

SposóbKiedy
herdr machine addKomputer i VPS w jednym oknie. Działają lokalne skróty, motyw i wklejanie obrazków
herdr --remote herdr-vpsTylko sesja z serwera, w lokalnym oknie
ssh herdr-vps, potem herdrTelefon albo cudzy komputer. Interfejs dopasowuje się do wąskiego ekranu

Na Windows herdr korzysta z wbudowanego klienta OpenSSH. Nie współdzieli jednego połączenia jak na macOS, więc pierwsze połączenie po starcie trwa chwilę dłużej. Klucz z hasłem dodaj najpierw do agenta: ssh-add $HOME\.ssh\id_ed25519_herdr_vps (wymaga włączonej usługi „OpenSSH Authentication Agent”).

Gdy maszyna pokazuje „Attention”, uruchom herdr machine status vps, a przy problemie z logowaniem herdr machine reconnect vps.

Pomoc

Na co uważać

ObjawPrzyczyna i rozwiązanie
„plugin not found” przy skrócieSkrót jest w konfiguracji, ale wtyczka nie jest zainstalowana. Sprawdź herdr plugin list
Brak powiadomieńterminal-notifier nie ma zgody. Ustawienia systemowe → Powiadomienia
Brak powiadomieńWyłączone powiadomienia terminala albo włączone „Nie przeszkadzać”. Ustawienia → System → Powiadomienia
Skrót nic nie robiPrzechwytuje go macOS albo terminal. Z samym alt nie zadziała, użyj ctrl+alt
Skrót wpisuje polską literęctrl+alt to AltGr. Wybierz literę bez polskiego znaku albo skrót z prefiksem
„herdr” nie jest rozpoznawanyOtwórz nowe okno terminala, żeby wczytał nowy PATH
Agent ma stan „unknown”Brak integracji albo stara wersja: herdr integration status
Po restarcie agenci jako zwykłe terminaleAgent nie zgłosił sesji. Wymaga aktualnej integracji
Różne wersje herdr na komputerze i VPS-ieherdr update po obu stronach. Restartu serwera nie potwierdzaj w trakcie pracy agentów
  • Logi: ~/.config/herdr/%APPDATA%\herdr\, pliki herdr-server.log i herdr-client.log
  • Stan klienta i serwera: herdr status
  • Dokumentacja: herdr.dev/docs, osobno herdr na Windows