Shell completions — Developer guide#
This document is intended for implementors who want to add or maintain shell
completion support in gmuse. The canonical, detailed implementation notes for
Zsh are kept in specs/002-zsh-completions/spec.md — use that spec as the
single source of truth for any compatibility or protocol requirements.
Runtime helper contract#
Completion scripts should invoke the runtime helper gmuse git-completions-run
with arguments --shell <shell> --for "git commit -m" and expect a JSON
response of the form:
{
"suggestion": "feat: add login",
"status": "ok",
"metadata": {
"truncated": false,
"elapsed_ms": 1200
}
}
Status values: ok, timeout, offline, no_staged_changes, error.
Completion scripts must:
Parse
suggestionand insert it into the appropriate argument or buffer location for the target shell.Inspect
statusand implement reasonable fallbacks (e.g., show a short warning whenno_staged_changesis returned).Treat the
metadatafields as auxiliary for observability and logging.
Implementation checklist#
Implement a completion script for the target shell that:
Calls
gmuse git-completions-run --shell <shell> --for "git commit -m"Parses the returned JSON and extracts
suggestionandstatusInserts the suggestion only when appropriate (e.g., when the message argument is empty)
Falls back to the shell’s normal completion behavior when needed
Add or update automated tests where possible (unit tests for parsing, integration tests that exercise
gmuse git-completions-runand the completion script in a controlled environment).Document installation and usage in
docs/source/how_to/completions.mdby adding the shell to the Supported shells section and linking to this developer guide for implementors.If the new shell requires special contract extensions or behaviors, add or extend a spec under
specs/and reference it from this guide.
Zsh notes & testing#
The current Zsh implementation keeps the completion script dependency-free and uses small
sedexpressions instead ofjqto extract the minimal JSON fields. Other shells may choose different strategies.For local testing of the runtime helper, run:
GMUSE_DEBUG=1 gmuse git-completions-run --shell zsh --for "git commit -m" --timeout 3.0
(adjust --shell and other args as needed for the target shell).
Contributing & specs#
For Zsh-specific low-level details, see:
specs/002-zsh-completions/spec.md.Prefer updating the spec for any contract changes and link the spec from this guide to avoid duplication.
When opening a PR, include tests and a short usage example in
docs/for the new shell.