Configuración de Herdr (sidebar, teclas, plugins de estado) lista para replicar — exportación saneada
  • Python 86.6%
  • Shell 13.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
vicio a4abe03a25 fleet/state: un rename fallido no se registra
Si el rename no llega a herdr, guardar el título hacía que el tick siguiente viera
current != record y lo marcase como nombre manual para siempre.
2026-11-02 21:35:05 +01:00
bin herdr-config-public: config, split dwindle y plugins de estado (export saneado) 2026-11-02 20:55:44 +01:00
config herdr-config-public: config, split dwindle y plugins de estado (export saneado) 2026-11-02 20:55:44 +01:00
fleet fleet/state: un rename fallido no se registra 2026-11-02 21:35:05 +01:00
patches Replicable completo: plugins con commit fijado, integraciones y parche de auto-title 2026-11-02 21:18:16 +01:00
.gitignore herdr-config-public: config, split dwindle y plugins de estado (export saneado) 2026-11-02 20:55:44 +01:00
check.sh Replicable completo: plugins con commit fijado, integraciones y parche de auto-title 2026-11-02 21:18:16 +01:00
install.sh fix(--skip-plugins): el flag y el README dicen lo mismo que hace 2026-11-02 21:18:54 +01:00
LICENSE herdr-config-public: config, split dwindle y plugins de estado (export saneado) 2026-11-02 20:55:44 +01:00
NOTICE.md Replicable completo: plugins con commit fijado, integraciones y parche de auto-title 2026-11-02 21:18:16 +01:00
plugins.tsv Replicable completo: plugins con commit fijado, integraciones y parche de auto-title 2026-11-02 21:18:16 +01:00
README.md fix(--skip-plugins): el flag y el README dicen lo mismo que hace 2026-11-02 21:18:54 +01:00

herdr-config-public

Todo lo necesario para dejar otra máquina con este Herdr: config.toml, los plugins con su commit fijado, el script de split, el plugin propio que alimenta el sidebar (estado y actividad de cada panel) y la instalación de las integraciones de los agentes.

Es una exportación saneada de una configuración personal: sin credenciales, sin direcciones de red privadas, sin nombres de máquina ni historial git. Traducida a $HOME donde hacía falta, para que se pueda clonar en cualquier equipo.

Qué incluye

Ruta Qué es
config/config.toml La config: tema, teclas, sidebar de spaces y tarjetas de agentes, toasts
plugins.tsv Los 7 plugins que usa, con owner/repo y commit fijado (uno es el auto-title de upstream)
bin/herdr-split Split tipo dwindle (derecha, abajo, derecha…) para prefix+t
fleet/ Plugin vicio.fleet-state: publica $status, $activity, $title, $elapsed, $proj, $adds/$dels y el árbol de tabs de cada space
patches/ auto-title-wrapper-ssh.patch: que un panel abierto con un wrapper de ssh (sshm) se llame por host y no por directorio
install.sh Config + helpers + plugins + integraciones, con backup y preflight
check.sh Detecta deriva entre el repo y lo instalado

Qué NO incluye

  • Credenciales, .env, auth.json, tokens.
  • Estado de sesión (session.json, sessions/), logs, checkouts de plugins (los clona Herdr).
  • Notificaciones personales al móvil (Telegram/Matrix): son de cada casa y no se replican.
  • Fuentes: los glifos Nerd Font (PUA) salen de la fuente que use el terminal; install.sh avisa si no hay ninguna que cubra U+F04B2.
  • Las configs de los agentes (omp, Claude, Codex, Pi, Hermes): cada uno tiene su repo.

Requisitos

  • Herdr 0.9.5 o superior (herdr --version).
  • Python 3 para el plugin de estado.
  • Go 1.24+ si vas a instalar herdr.auto-title (Herdr lo compila al instalarlo).
  • Un agente con su integración instalada (herdr integration install <agente>) si quieres que Herdr sepa el estado real de cada panel.

Instalación

git clone https://git.okvicio.club/vicio/herdr-config-public.git
cd herdr-config-public
./install.sh            # pide confirmación si ya hay config.toml
./check.sh              # comprueba que lo instalado coincide con el repo

install.sh es idempotente y falla en cerrado: preflight de todo, backup con fecha de lo que sustituye y error (--force para modo no interactivo) si ya existe un config.toml. --skip-plugins se salta los plugins de plugins.tsv (deja config, herdr-split y el plugin de estado, que van con los helpers).

El orden que sigue: config → herdr-split → fleet/ (y herdr plugin link) → los plugins de plugins.tsv con su commit → herdr integration install para cada agente que esté en el PATH → aviso de tipografía → herdr server reload-config. Instala en:

~/.config/herdr/config.toml              (o $HERDR_CONF_DIR/config.toml)
~/.local/bin/herdr-split
~/.local/share/herdr-config/fleet

Plugins

plugins.tsv fija el commit exacto de cada uno; install.sh instala los que falten. Los required son los que usa el config tal cual; los optional puedes quitarlos de la lista.

Plugin Para qué
herdr.auto-title Nombra tabs y paneles con el tema de la sesión required
ray.plugin-manager Popup de gestión de plugins (prefix+m) required
usagebar Cuota y gasto del agente en el sidebar optional
herdr-file-viewer Ver ficheros sobre el panel optional
persiyanov.reviewr Revisar diffs al lado del chat optional
gavintomlins.herdr-oh-my-agent Un panel por delegación de OMP/OpenCode optional
herdr-mobile-relay.events Acceso desde el móvil por WebRTC optional

El parche de auto-title existe porque Herdr informa el líder del grupo de procesos en primer plano: un lanzador propio (sshm y similares) se queda delante del ssh y el panel acababa llamado por el directorio local. Aplicarlo necesita compilar, así que es manual:

git clone https://github.com/kryptamine/herdr-auto-title && cd herdr-auto-title
git checkout v0.16.0 && git apply /ruta/al/patches/auto-title-wrapper-ssh.patch
herdr plugin link "$PWD"          # Herdr lo compila y lo usa ese checkout

Integraciones

install.sh lanza herdr integration install para cada agente que encuentre en el PATH (hermes, pi, omp, claude, codex, opencode). Sin la integración Herdr no sabe qué sesión hay en cada panel: los títulos salen del título del terminal y el estado se adivina.

Cómo se pinta el sidebar

Herdr sólo expone unos cuantos tokens fijos (pane, agent, workspace…). Todo lo demás lo publica fleet/state.py como metadata del panel o del workspace, y el sidebar lo lee como $nombre:

Token Qué es
$spin Spinner braille mientras trabaja; glifo fijo por estado cuando no
$icon Etiqueta corta del harness (HM, π, ⌥, CC…)
$title / $title_dim Tema de la sesión; en gris cuando el panel ya está leído y quieto
$status working / blocked / done / idle / sleeping / stalled / error
$activity Qué está haciendo ahora mismo cuando el estado no lo dice
$elapsed, $proj, $adds, $dels, $wsn, $ws Tiempo en el estado, proyecto git, diff, número y nombre del space
$count, $t1…$t4 Cuántas tabs/paneles lleva el space y el árbol de sus tabs

Dos reglas que explican el diseño:

  • La pantalla manda sobre la integración. Un panel que genera o compacta a veces sigue reportando idle; state.py mira el pie de la TUI y, si hay señal de vida, empuja working. Al contrario no: nunca informa idle/done por su cuenta.
  • Los títulos se generan aparte. titles.py pide un título de 3-6 palabras al modelo barato que configures; sin endpoint, se queda el que publique el propio agente.

Títulos con IA (opcional)

export FLEET_TITLE_ENDPOINT=http://localhost:8080/v1/chat/completions   # cualquier API OpenAI-compatible
export FLEET_TITLE_API_KEY=...
export FLEET_TITLE_MODEL=...            # por defecto deepseek-v4.1-flash

También acepta CPA_API_KEY en el entorno (y, si existe, en ~/.hermes/.env). Si no hay endpoint alcanzable no rompe: deja el título que publique el harness y sigue.

Teclas

prefix es ctrl+space. La idea: una tecla por nivel, y q para cerrar, r para renombrar, k para la space.

Tecla Acción
prefix+k Cerrar la space (pide confirmación)
prefix+q Cerrar el panel: pela un nivel (split → tab si era el único panel → space si era la última tab)
prefix+shift+q Cerrar la tab entera con sus splits
prefix+r / prefix+shift+r / prefix+alt+r Renombrar space / tab / panel
prefix+alt+shift+r Recargar config.toml
prefix+t Split alternando derecha/abajo (herdr-split)
prefix+h / prefix+v Split derecha / abajo
prefix+f Flota: todos los agentes a la vista (fleet/fleet.py)
prefix+alt+t Terminal flotante (popup)
prefix+m Plugin manager (ray.plugin-manager, si está instalado)

Sobre confirm_close = true: Herdr sólo pregunta cuando el cierre se lleva algo más que el objetivo — la space (siempre), la última tab de una space, o el último panel de la última tab. Cerrar un split con hermanos no pregunta. No hay granularidad por acción en [ui].

Al replicar, revisa

  • Rutas $HOME de los [[keys.command]] si cambias dónde viven los scripts.
  • FLEET_TITLE_ENDPOINT: viene apuntando a localhost; pon el tuyo.
  • Ids de plugins de terceros (ray.plugin-manager, usagebar): si no los tienes, quita esas filas del sidebar o instálalos.
  • theme.name = "terminal": usa la paleta del terminal en vez de un tema de Herdr.

Licencia

MIT, ver LICENSE. Atribuciones de terceros en NOTICE.md.