···134134echo 'source ~/.my-cli-completion.zsh' >> ~/.zshrc
135135```
136136137137+### Development Workflow
138138+139139+Generated completion scripts invoke your CLI by its **program name** (e.g. `my-cli`),
140140+which the shell resolves via `PATH`, an alias, or a shell function. During local
141141+development your CLI usually isn't installed on `PATH`, so define a session-scoped
142142+shell function that runs it from source, then source the completions. No build,
143143+no install, and no `PATH` changes are needed — the function disappears when you
144144+close the terminal.
145145+146146+Replace `my-cli` with your program name and adjust the source path if needed.
147147+148148+```zsh
149149+# zsh
150150+my-cli() { pnpm tsx src/index.ts "$@"; }
151151+source <(my-cli complete zsh)
152152+```
153153+154154+```bash
155155+# bash
156156+my-cli() { pnpm tsx src/index.ts "$@"; }
157157+source <(my-cli complete bash)
158158+```
159159+160160+```fish
161161+# fish
162162+function my-cli; pnpm tsx src/index.ts $argv; end
163163+source (my-cli complete fish | psub)
164164+```
165165+166166+```powershell
167167+# powershell
168168+function my-cli { pnpm tsx src/index.ts $args }
169169+my-cli complete powershell | Out-String | Invoke-Expression
170170+```
171171+172172+The function name must match your CLI's program name so the shell resolves the
173173+completion callback back to it.
174174+137175## Package Manager Completions
138176139177As mentioned earlier, tab provides completions for package managers as well: