Pick and launch your AI CLI tools when you open a terminal (macOS).
Works with any AI CLI — Claude Code, Codex, Gemini, Aider, Ollama, and
whatever else you add. It ships with a few common ones out of the box and is
fully configurable via tools.conf. Opening a terminal
lists the tools you actually have installed; arrow-key select and it launches.
If only one tool is installed, it launches straight away.
- 🔍 Auto-detects which AI tools are installed
- ⌨️ Zero-dependency menu — pure shell: arrow keys to move, space to multi-select, enter to confirm
- 🪟 Multi-select opens multiple terminals — pick several tools, each opens in its own terminal
- 🚀 Single tool launches directly — no menu when there's only one
- 🔔 Optional auto-popup — show the menu on terminal open, or just run
ailwhen you want it - 🧹 Clean uninstall — marker-fenced, removes only what it added
curl -fsSL https://raw.githubusercontent.com/pubwave/ailaunch/main/install.sh | bashOr from a local clone:
git clone https://github.com/pubwave/ailaunch.git
cd ailaunch && ./install.shThe installer asks: show the menu automatically on every terminal open?
y: the menu pops up whenever you open a terminal.n: terminals stay as-is; runailwhen you want the menu.
ail show the menu and pick a tool
ail --enable auto-show the menu on terminal open
ail --disable stop auto-showing (keeps the ail command)
ail --help help
Menu keys:
| Key | Action |
|---|---|
↑ ↓ |
move |
Space |
multi-select (first runs here, the rest open new terminals) |
Enter |
confirm |
q / Esc / Ctrl+C |
quit to a normal shell |
Temporarily skip the menu: set AIL_OFF=1 before opening a terminal.
Single-select always runs in the current terminal, so it works everywhere. Multi-select runs the first pick in the current terminal and opens the rest in new terminals, using the best method for your host:
| Terminal | Method | Notes |
|---|---|---|
| tmux | tmux new-window |
in-place, used first when inside tmux |
| WezTerm | wezterm cli spawn |
native CLI |
| kitty | kitty @ launch |
needs allow_remote_control yes |
| iTerm2 | AppleScript tab | Automation permission |
| Apple Terminal | AppleScript window | Automation permission |
| Ghostty | open -na new window |
no tab-in-window CLI yet |
| VS Code | keystroke `Ctrl+Shift+`` | Accessibility permission |
| Zed | keystroke Cmd+N |
Accessibility permission |
| Warp | keystroke Cmd+T |
Accessibility permission |
Each terminal is a small driver in lib/terminals/<name>.sh — add a new one by
dropping in a file that defines detect, open, and a priority.
Permissions: VS Code / Zed / Warp have no API to spawn a terminal, so ailaunch sends a keystroke via System Events. macOS will prompt once to grant the host app Accessibility access (System Settings → Privacy & Security → Accessibility). iTerm / Terminal use lighter Automation permission. The API-based terminals (tmux / WezTerm / kitty) need no permission.
The block written to ~/.zshrc only triggers when it genuinely should. It
auto-skips in all of these cases:
- Non-interactive shells (scripts / CI / git hooks /
ssh host cmd) - Non-TTY (pipes, redirects)
- A sub-shell opened inside an AI tool (sentinel var + parent process name, both checked)
- Inside tmux (off by default; set
AIL_IN_TMUX=1to enable) - Temporarily disabled (
AIL_OFF=1)
You can always drop straight into a normal shell with q / Esc / Ctrl+C.
Edit tools.conf before running install.sh. The installer copies it to
~/.config/ailaunch/tools.conf automatically — no manual setup needed.
One tool per line:
Display Name | command
Example:
Claude Code | claude
Codex | codex
Aider | aider
Ollama | ollama
Rules:
- Omit
Name |to use the command itself as the display name #starts a comment; blank lines are ignored- Tools whose command isn't installed are skipped automatically
To change it later, edit ~/.config/ailaunch/tools.conf directly — it takes
effect on the next terminal. Re-running install.sh overwrites it with the
repo version and backs up the old one as tools.conf.bak.
curl -fsSL https://raw.githubusercontent.com/pubwave/ailaunch/main/uninstall.sh | bashOr from a local clone: ./uninstall.sh
Removes the ail command, the ailaunch block in ~/.zshrc, the drivers, and
the config. Safe to re-run.
MIT
