# Referensi Cepat Herdr

*Workspace, pane, state agent, otomasi CLI (v0.9.x)*

> Source: Herdr documentation (herdr.dev, v0.9.3) and herdr CLI help output · MIT

## Model Mental

### Lapisan

| Command | Description |
|---------|-------------|
| `session` | Namespace server latar; pemilik semua proses |
| `workspace` | Satu per repo/task; sidebar merangkum state agent |
| `tab` | Layout di dalam workspace (agent, log, server) |
| `pane` | Terminal nyata; bagi kanan/bawah, tetap jalan saat detach |
| `agent` | Coding agent yang dikenali Herdr di dalam pane |

*Detach client membiarkan server dan semua pane tetap jalan*

### State Agent

| Command | Description |
|---------|-------------|
| `working` | Agent sibuk mengerjakan giliran |
| `blocked` | Menunggu prompt persetujuan atau pertanyaan |
| `done` | Selesai, dan belum Anda lihat |
| `idle` | Selesai atau menunggu, sudah dilihat |
| `unknown` | Agent ada, state tak jelas; bukan bukti selesai |

*idle dan done sama-sama berarti agent siap menerima prompt baru*

### Mode Input

| Command | Description |
|---------|-------------|
| `terminal` | Tombol langsung ke pane yang difokuskan |
| `prefix` | Setelah Ctrl-b, tombol berikutnya adalah aksi Herdr |
| `navigate` | Tampilan navigasi workspace yang menetap |
| `copy` | Scrollback, cari, dan pilih via keyboard (Prefix [) |

## Memulai

### Instalasi & Menjalankan

```
curl -fsSL https://herdr.dev/install.sh | sh
cd ~/projects/app
herdr           # launch or attach
claude          # any agent, auto-detected
herdr update    # self-update
herdr status    # client vs server version
```

### Integrasi Agent

```
herdr integration install claude
herdr integration install codex
herdr integration status --outdated-only
```

*Integrasi melaporkan state pasti dan agent bisa lanjut setelah server restart*

### Utamakan Mouse

> Semua bisa diklik: pane, tab, workspace, baris agent. Seret batas untuk ubah ukuran, klik kanan untuk menu split dan tab, seret-pilih untuk menyalin. Tombol hanyalah lapisan opsional.

## Key Binding

### Pelajari Ini Dulu

| Command | Description |
|---------|-------------|
| `Prefix ?` | Tampilkan semua binding aktif (/ untuk filter) |
| `Prefix c` | Tab baru |
| `Prefix v` | Bagi: pane baru di kanan |
| `Prefix -` | Bagi: pane baru di bawah |
| `Prefix h/j/k/l` | Fokus pane kiri / bawah / atas / kanan |
| `Prefix w` | Navigasi workspace |
| `Prefix q` | Detach; semuanya tetap jalan |

*Prefix default adalah Ctrl-b. Detach dengan q, bukan d seperti tmux*

### Pane

| Command | Description |
|---------|-------------|
| `Prefix z` | Zoom (layar penuh) pane yang difokuskan |
| `Prefix x` | Tutup pane |
| `Prefix Shift-h/j/k/l` | Tukar pane dengan tetangganya |
| `Prefix r` | Mode ubah ukuran |
| `Prefix Tab` | Siklus ke pane berikutnya |
| `Prefix Shift-p` | Ganti nama pane |
| `Prefix e` | Buka scrollback di editor |

### Tab & Workspace

| Command | Description |
|---------|-------------|
| `Prefix n / p` | Tab berikutnya / sebelumnya |
| `Prefix 1..9` | Ke tab berdasarkan nomor |
| `Prefix Shift-t / Shift-x` | Ganti nama / tutup tab |
| `Prefix Shift-n` | Workspace baru |
| `Prefix Shift-g` | Workspace baru di git worktree |
| `Prefix Shift-w / Shift-d` | Ganti nama / tutup workspace |
| `Prefix g` | Pemilih Goto: semua agent dan terminal |
| `Prefix o` | Pindah ke pane notifikasi terakhir |
| `Prefix b` | Toggle sidebar |
| `Prefix s` | Pengaturan |

*Di pemilih Goto, b/w/i/d memfilter blocked/working/idle/done; / untuk mencari*

### Copy Mode (Prefix [)

| Command | Description |
|---------|-------------|
| `h/j/k/l  w/b/e` | Gerak per karakter atau kata |
| `Ctrl-u / Ctrl-d` | Setengah halaman atas / bawah |
| `/  ?  n  N` | Cari maju / mundur, ulangi |
| `v or Space` | Mulai seleksi |
| `y or Enter` | Salin seleksi lalu keluar |
| `q or Esc` | Keluar tanpa menyalin |

*Pane tetap jalan saat Anda menggulir ke belakang*

## Session & Remote

### Persistensi

```
herdr                      # reattach
herdr session list
herdr session attach work  # isolated server
herdr session stop work
herdr server stop          # kills ALL panes
```

### Lewat SSH

```
herdr --remote workbox  # local UI, remote panes
herdr --remote workbox --session agents
herdr machine add workbox --label box
herdr --machine box agent list
```

### Workspace sebagai Worktree

```
herdr worktree create --branch fix/login --base main
herdr worktree list
herdr worktree remove --workspace w3
```

## Scripting Pane

### ID & Konteks

> Format ID: w1 (workspace), w1:t1 (tab), w1:p1 (pane). Di dalam pane Herdr, HERDR_ENV=1 dan HERDR_PANE_ID tersedia. Perintah mengembalikan JSON: baca ID baru dari respons, jangan menebaknya dari urutan sidebar.

### Menemukan

```
herdr workspace list
herdr tab list --workspace "$HERDR_WORKSPACE_ID"
herdr pane list --workspace "$HERDR_WORKSPACE_ID"
herdr pane layout --current
```

### Jalankan Perintah di Sebelah

```
id=$(herdr pane split --current \
       --direction right --no-focus \
     | jq -r .result.pane.pane_id)
herdr pane run "$id" "npm test"
herdr pane wait-output "$id" \
  --match "passed" --timeout 120000
herdr pane read "$id" --lines 80 \
  --source recent-unwrapped
```

### Perintah Pane

| Command | Description |
|---------|-------------|
| `pane run ID CMD` | Ketik perintah dan tekan Enter sekaligus |
| `pane send-text ID TEXT` | Ketik teks literal, tanpa Enter |
| `pane send-keys ID ctrl+c` | Kirim tombol bernama |
| `pane wait-output --regex RE` | Tunggu sampai output cocok (regex Rust) |
| `pane zoom ID --toggle` | Zoom pane dari skrip |
| `pane move ID --new-tab` | Pindahkan pane; ID-nya berubah |
| `notification show TITLE` | Munculkan toast, opsional dengan --sound done |

## Orkestrasi Agent

### Mulai, Prompt, Ambil Hasil

```
herdr agent start reviewer --kind codex --pane "$id"
herdr agent prompt reviewer "Review the diff" \
  --wait --timeout 300000
herdr agent read reviewer --lines 120
herdr agent wait reviewer --until blocked
herdr agent send-keys reviewer esc
```

### Perintah Agent

| Command | Description |
|---------|-------------|
| `agent list` | Semua agent aktif beserta state-nya |
| `agent get NAME` | Pane, jenis, dan state satu agent |
| `agent focus NAME` | Pindahkan UI ke agent itu (tandai dilihat) |
| `agent attach NAME` | Buka terminal itu saja, tanpa UI Herdr |
| `agent explain NAME` | Alasan deteksi memilih state ini |

*Target berupa nama agent unik atau ID pane tempatnya berjalan*

### Perintah Pane vs Agent

| Choice | Use when | Watch for |
|--------|----------|-----------|
| `pane` | Shell, test, server | Tidak tahu state agent |
| `agent` | Coding agent yang terdeteksi | Menolak agent yang blocked |

### Aturan Praktis

> agent start butuh pane yang sudah ada dan berada di prompt shell; ia tidak pernah membuat layout. Pakai --no-focus untuk kerja latar. Setelah timeout, baca agent sebelum mengirim ulang: prompt mungkin sudah masuk.

## Konfigurasi

### ~/.config/herdr/config.toml

```
[keys]
prefix = "ctrl+a"
focus_pane_left = ["prefix+h", "ctrl+alt+h"]
[theme]
name = "tokyo-night"
[ui.toast]
delivery = "system"  # or herdr / terminal
```

### Perintah Popup Kustom

```
[[keys.command]]
key = "prefix+alt+g"
type = "popup"       # or "pane" / "shell"
command = "lazygit"
width = "80%"
height = "80%"
```

### Perintah Config

| Command | Description |
|---------|-------------|
| `herdr --default-config` | Cetak semua opsi beserta komentar |
| `herdr config check` | Validasi config.toml |
| `Prefix Shift-r` | Muat ulang config di server yang berjalan |
| `herdr config reset-keys` | Backup config, hapus binding kustom |

*Kombinasi ctrl+alt adalah binding tanpa prefix paling aman di berbagai terminal*
