Comandos personalizados
Dónde va
Sección titulada «Dónde va».opencode/commands/nombre.md → proyecto~/.config/opencode/commands/nombre.md → globalPlantilla base
Sección titulada «Plantilla base»---description: Revisa el diff actualagent: build---
template: |Revisa los cambios actuales con `git diff` y señala:
1. Bugs potenciales2. Problemas de legibilidad
Argumentos: $ARGUMENTSA diferencia de Claude Code (donde el cuerpo entero del archivo es el prompt), OpenCode requiere el campo template: explícito con el texto que se manda al modelo — el resto del frontmatter es metadata.
O inline en opencode.json
Sección titulada «O inline en opencode.json»{ "command": { "review": { "template": "Revisa el diff actual: !`git diff`", "description": "Revisa el diff actual", "agent": "build" } }}Interpolación
Sección titulada «Interpolación»$ARGUMENTS → todo lo que sigue al comando$1 $2 $3 → argumentos posicionales!`comando` → corre un shell command antes, inyecta el resultado@archivo → referencia un archivoMisma sintaxis que Claude Code para esto — solo cambia dónde vive el prompt (template: explícito vs. cuerpo del archivo).
Resumen
Sección titulada «Resumen»| Campo | Para qué |
|---|---|
template | El prompt en sí (requerido) |
agent | Qué agente ejecuta el comando |
model | Override del modelo para este comando puntual |
subtask | Fuerza que corra como subagente aunque el agente activo sea primario |
Consideraciones
Sección titulada «Consideraciones»- Olvidar
template:es el error más común migrando un comando desde Claude Code — sin ese campo, el comando no tiene prompt.