6.4 KiB
6.4 KiB
Agent Switcher
Cambio de agentes estilo opencode para pi: alterna entre agentes (p. ej.
planner y build) y cada agente aplica su propio modelo, nivel de
thinking, allowlist de herramientas, rol de solo lectura y system prompt.
Instalación
- Instalación permanente:
pi install https://git.sargatxet.cloud/sargatxet/pi-agent-switcher - Una sola sesión:
pi -e https://git.sargatxet.cloud/sargatxet/pi-agent-switcher - Manual (fallback):
git clone https://git.sargatxet.cloud/sargatxet/pi-agent-switcher.git ~/.pi/agent/extensions/agent-switchero probar sin instalar:pi --extension <ruta-del-repo>/extensions/agent-switcher/index.ts
Comandos
| Comando / atajo | Acción |
|---|---|
/agent |
Selector de agentes (lista si no hay TUI) |
/agent <nombre> |
Cambiar al agente <nombre> (también alias) |
/agents |
Listar agentes con su estado y modelo |
/agent model |
Modelo efectivo del agente activo |
/agent model <ref> |
Fijar el modelo del agente activo para esta sesión |
/agent model reset |
Quitar el override y volver al model: del archivo |
F5 / F6 |
Cambiar al agente planner/build (configurable con shortcut:) |
pi --agent planner |
Arrancar con un agente concreto |
El agente activo se confirma con el aviso Agente activo: … · modelo … al
cambiar, y con /agent list. La línea de estado del footer se eliminó por
resultar confusa.
Definir agentes
Cada agente es un Markdown con frontmatter en:
~/.pi/agent/agents/*.md— agentes de usuario<proyecto>/.pi/agents/*.md— agentes de proyecto (sobrescriben al mismo nombre)
Ejemplo (~/.pi/agent/agents/build.md):
---
name: build
description: Implementation agent running on the fast model
aliases: constructor, implement
advertise: true
model: provider/model-id
thinking: medium
systemPromptMode: append
inheritProjectContext: true
inheritSkills: true
---
You are `build`: the implementation agent. ...
Claves del frontmatter
| Clave | Defecto | Significado |
|---|---|---|
name |
nombre del archivo | Identificador único para /agent <nombre> |
description |
— | Texto mostrado en el selector |
aliases |
— | Nombres alternativos, separados por comas |
advertise |
true |
false = oculto en el selector y en el ciclo |
shortcut |
— | Atajos directos al agente, separados por comas (p. ej. f5). Conflicto con atajos nativos: pi lo descarta con aviso |
model |
— | provider/id o un id único. Sin valor = conserva el modelo actual |
thinking |
— | off|minimal|low|medium|high|xhigh|max |
systemPromptMode |
append |
replace = el cuerpo sustituye el prefijo del prompt; append = se añade |
inheritProjectContext |
true |
false = el agente no ve AGENTS.md/archivos de contexto |
inheritSkills |
true |
false = el agente no ve las skills |
tools |
— | Allowlist de herramientas activas (separadas por comas o espacios) |
acceptanceRole |
— | read-only = bloquea edit/write y restringe bash a comandos de solo lectura |
defaultContext |
— | Aceptado e ignorado (fresco no aplica al cambio inline) |
El cuerpo del archivo (tras el frontmatter) es el system prompt del agente.
Semántica (equivalente a opencode)
- El agente activo gobierna: su
modelythinkingse aplican al activarse y se reafirman en cadabefore_agent_start; sutoolsy su prompt también se aplican cada run (todo idempotente). - Agente sin
model= no toca el modelo: conserva el de la sesión (útil para unbuildque simplemente hereda el modelo por defecto de pi). - Overrides de sesión: solo
/agent model <ref>crea un override para el agente activo y se restaura al volver a él. Los cambios con/modeloCtrl+Paplican de inmediato, pero el modelo del agente se reafirma en cada prompt (los eventos de modelo ya no se autograban: así los cambios de otras extensiones no pueden intercambiar los modelos de los agentes). El override lleva memoria del valor del archivo que tenía al crearse: si editasmodel:en el.md, el archivo manda y el override se descarta./agent model resetlo borra a mano;/agent listmarca los agentes con modelo «(sesión)». Para fijarlo de forma permanente, edita elmodel:del archivo del agente. - Persistencia: el agente activo y los overrides se guardan en la sesión y se restauran al reanudarla.
- Solo lectura: además de desactivar las herramientas de escritura,
hay una segunda barrera en
tool_callque bloqueaedit/writey cualquier comando bash que no esté en la lista de solo lectura (policy.ts).
Notas
- Los agentes se recargan en cada inicio de sesión; tras editar un
.mddurante la sesión usa/reload(también recarga los atajos nuevos).
Los atajos de teclado no funcionan
- ¿La sesión cargó la extensión? Ejecuta
/hotkeys: debe aparecerCambiar al agente …. Si no aparece, ejecuta/reload(o reinicia pi): las sesiones abiertas antes de instalar el plugin no lo cargan solas. - ¿El terminal entrega la combinación? La configuración por defecto usa
teclas de función (
f5,f6) precisamente porque llegan en todos los terminales. Si cambias a combinaciones comoctrl+alt+x, estas solo llegan a pi si el terminal usa el protocolo kitty/CSI-u (kitty, Ghostty, WezTerm conenable_kitty_keyboard, VS Code ≥ 1.109.5) o si envíaESC + carácter de control; fallan en terminales clásicas, dentro de tmux y con teclado español donde AltGr = Ctrl+Alt. - En tmux, habilita
set -s extended-keys onpara que lleguen las teclas modificadas (ver la doc de pi sobre tmux). - Cambia las teclas editando
shortcut:en el.mddel agente y ejecutando/reload. Cualquier combinación que aparezca en/hotkeyses válida.
- Si otra extensión también llama a
setModelenbefore_agent_start(p. ej. un cambio de modelo automático por fases), las dos competirán en cada run: mantén solo una estrategia activa. - Con pi-subagents instalado,
subagents_enablese fuerza siempre en las herramientas activas. En agentes contools:/read-onlyesa llamada se bloquea entool_call(delegar permitiría escribir ficheros); el resto de su comportamiento no se ve afectado. - Para probar sin instalar nada:
pi --extension <ruta-del-repo>/extensions/agent-switcher/index.ts.