LLM-powered zsh completion scaffolding for arbitrary CLIs
Project description
completion-ai
LLM-powered zsh completion scaffolding for arbitrary CLIs. Point it at any
command on your PATH and it will:
- Recursively run
<cmd> --help(and discovered subcommand--helps). Subcommand discovery is done by the LLM, not regex — soinstall [options],plugin|plugins, and other oddly-formatted entries are picked up. - Ask Qwen (via DashScope OpenAI-compatible API) to extract a structured schema of flags, subcommands, and positional arguments.
- Render a
#compdefzsh completion script using a deterministic template (the LLM never writes shell directly). - Run
zsh -nagainst the result and warn on syntax errors.
The output is meant to be reviewed by a human before installation — it's a scaffold, not a runtime completion engine.
Install
Recommended (global CLI, isolated venv managed by uv):
uv tool install -e .
Other options:
uv pip install -e . # into the current uv venv
pip install -e . # into the active python (conda, system, ...)
Requires DASHSCOPE_API_KEY in the environment.
Usage
completion-ai claude # writes ./_claude
completion-ai claude --install # install straight into oh-my-zsh
completion-ai claude -o ~/.zsh/completions/_claude
completion-ai docker --depth 3 -v # crawl deeper, verbose
completion-ai gh --dump-schema gh.json # also save intermediate schema
Options
| Flag | Default | Notes |
|---|---|---|
-o, --output PATH |
./_<cmd> |
Where to write the completion script |
-d, --depth N |
2 |
How deep to crawl subcommand help |
--model ID |
qwen-plus |
Override via COMPLETION_AI_MODEL too |
--dump-schema PATH |
— | Also save the JSON the LLM produced |
--no-syntax-check |
off | Skip zsh -n validation |
--install |
off | Install into $ZSH/custom/plugins/completion-ai/ |
-v, --verbose |
off | Progress logs to stderr |
Environment
DASHSCOPE_API_KEY— requiredCOMPLETION_AI_MODEL— defaults toqwen-plusCOMPLETION_AI_BASE_URL— defaults to DashScope OpenAI-compatible endpointZSH— oh-my-zsh root, used by--install(defaults to~/.oh-my-zsh)
Installing the generated completion
Option A — oh-my-zsh users (recommended)
completion-ai claude --install
This creates $ZSH/custom/plugins/completion-ai/_claude plus a
plugin stub. First time only, add the plugin to ~/.zshrc:
plugins=(git ... completion-ai)
Then refresh:
rm -f ~/.zcompdump* && exec zsh
Subsequent completion-ai <cmd> --install calls drop new completions into the
same plugin directory — no zshrc edits needed.
Option B — plain zsh
completion-ai claude -o ~/.zsh/completions/_claude
# in ~/.zshrc (one-time):
fpath=(~/.zsh/completions $fpath)
autoload -U compinit && compinit
How it works
[crawler] run `<cmd> --help`
↓
[llm] discover subcommand names from help text (1 call per node)
↓
[crawler] recursively run discovered subcommands' --help
↓
[llm] extract structured JSON schema from all help texts (1 call)
↓
[renderer] JSON → #compdef zsh template (deterministic, not LLM)
↓
[validator] zsh -n syntax check
For depth=2, that's 2 LLM calls total (1 discover + 1 extract).
Limitations
- Static only: dynamic completions (e.g.
git checkout <branch>) are not generated — the script may suggest a hint type (branch,host, ...) but won't query live state. - The LLM may miss hidden flags or mislabel value hints. Always diff against
<cmd> --helpbefore trusting. - Only zsh for now.
Development
git clone <repo> && cd completion-ai
uv venv && source .venv/bin/activate
uv pip install -e .
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file completion_ai-0.2.0.tar.gz.
File metadata
- Download URL: completion_ai-0.2.0.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
343017bceafa222b6b893105ce6fb86f6bc16b9b48229da9c1cd40dd34747dc3
|
|
| MD5 |
62a7c8ae73199bdf34be290b100fd8e3
|
|
| BLAKE2b-256 |
5a35f32eabed409d1a27d2878d66d03d77e8b7f2041c28b3617f9cb8c29c1f5c
|
File details
Details for the file completion_ai-0.2.0-py3-none-any.whl.
File metadata
- Download URL: completion_ai-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34722c57889d07715fe22bd254a48f409c7d279b6cd43fde6535aa932062ba4a
|
|
| MD5 |
b3147f90375e9ed48fda9b59a014fc2b
|
|
| BLAKE2b-256 |
945649d42063ba53b94e5049f2461c3ccafbcdfca9fe818548521fc470e30c88
|