Coding Agentes: Commands en Gemini
Serie de artículos sobre funcionalidades para inyectar contexto en los coding agents:
En esta artículo nos centramos en cómo funcionan los commands en Gemini. Las pruebas han sido hechas sobre la versión 0.33.1.
Gemini no tiene un nombre genérico para estas funcionalidades y en su documentación están dispersas entre "Features", "Usage" y "Configuration". Contempla:
- AGENTS.md. GEMINI.md
- Skills
- MCP
- Hooks
- Extensions (Plugins)
- Custom Commands
Además de otras funcionalidades cómo modificar el System Prompt, Subagents, Remote Subagents y Plan Mode. Y no tiene un sistema de reglas.
Commands
La documentación oficial es bastante clara.
- Van en
.gemini/commandsdel proyecto o de~.- Admite namespaces (subdirectorios).
.gemini/commands/git/commit.tomlse convierte en/git:commit.
- Admite namespaces (subdirectorios).
- Por algún motivo inexplicable, usa ficheros TOML
- Los campos del TOML son
descriptionel texto de ayuda que pone para el comando ypromptdonde metes las instrucciones en sí. - Admite cierto grado de interpolación.
{{args}}El placeholder es substituido por el texto que acompaña al comando en el chat.!{{...}}. Ejecuta el comando y substituye el placeholder por la salida. Se puede combinar con args:!{grep -r {{args}} .}@{path/to/file_or_dir}. El placeholder es substituido por el contenido del fichero o los ficheros del directorio. Esta substitución es la primera así que no se puede combinar con{{args}}y pasar el path cómo parámetro.
- No son composables sólo funciona el
/al principio del prompt.
Una de las cosas buenas de que gemini-cli sea software libre es que podemos ver cómo funciona y no hacer observaciones indirectas cómo en Cursor.
El propio gemini tras estudiar su código responde más o menos esto a si es lo mismo usar @ que un command
Gemini CLI uses clear separators and headers to help the model distinguish between your prompt, injected files, and shell command outputs, rather than complex XML tags. For
@filereferences, it usesREFERENCE_CONTENT_STARTandREFERENCE_CONTENT_END markers, with individual file contents prefixed by--- filename ---. Custom slash commands defined in .toml files expand@{path}with similar--- filename ---headers and use--- Start of content for directory: path ---for directory injectionsShell command output
!{command}is appended with exit codes or signal markers if they fail, and if a command doesn't use{{args}}, the raw invocation is appended to the end of the prompt to provide context. Overall, the system relies on these human-readable delimiters to maintain context without over-engineering the prompt structure.
Vamos que no hay magia. Y en las pruebas que he hecho los resultados era similares.
Conclusiones
- gemini-cli al contrario que Cursor, no hace magia con los comandos, simplemente es un texto añadido al prompt
- Las opciones de interpolación de los comandos pueden abrir usos creativos. Pero no tengo claro cual puede ser la diferencia entre interpolar un
!{git diff}y decirle que usegit diffy con la salida escriba el mensaje de commit. Allá de menos requests. Quizás menos consumo de tokens - Usar formato TOML para algo cómo esto es tocar las narices. Tiene pinta de over engineering.