TerminalPad
AI agent launcher for Mac — launch Claude Code, Gemini CLI, Ollama, OpenCode, Cursor & every CLI you've installed in one keystroke. Free, open-source, native macOS. By Abhisar Singh.
Links
README
From the repo.
TerminalPad
The home screen for your terminal on Mac.
Every AI agent. Every CLI. One keystroke. Built for AI coding agents — Claude Code, Gemini CLI, Ollama, OpenCode — and ready for every other CLI tool you've installed.
A free, open-source terminal launcher for macOS. Click a tile (or type and hit Enter) and it launches in a new Terminal window — your agents, plus docker, ffmpeg, gh, kubectl, and everything else.
Website · Install · Features · AI agents · Changelog · Releases · Contributing · Privacy · Discussions
Why
You keep typing claude --dangerously-skip-permissions, gemini --yolo, ollama run …, docker compose up, kubectl get pods into a terminal. TerminalPad turns your whole toolbox into a searchable grid, so getting into the right tool is one shortcut away instead of a remembered command. AI agents are first-class — each gets its real logo and one tile per mode — and every other CLI you've installed (scrcpy, ffmpeg, gh, docker, …) is auto-discovered and added too.
Features
- Fast — into your agent in milliseconds. Opens focused. Type,
↑/↓to move,Enterlaunches the top match,Esccloses. No mouse, no menus. - Instant — every CLI you own, already here. Auto-discovers Homebrew, npm, pipx, cargo, go & bun in parallel. Cached to disk, so the grid is there the moment you open it.
- Precise — every flag, its own tile.
claudevsclaude --dangerously-skip-permissionsvsclaude -ceach get their own tile, icon, and color. Never look up a flag again. - Everywhere — one shortcut, from any app.
⌥⌘Spacesummons it over whatever you're doing. Menu-bar resident, always a keystroke away. - Native — looks like Mac, because it is. Pure SwiftUI with real Simple Icons brand logos. Liquid Glass on macOS 26, a clean dark panel everywhere else.
- Yours — bend it to your setup. Plain JSON at
~/.config/terminalpad/agents.json— add agents, modes, working dirs. Hit reload, no rebuild.
Supported agents
TerminalPad ships curated tiles for the AI coding agents people actually run from the terminal — each with its real logo and one tile per mode:
| Agent | Modes |
|---|---|
| Claude Code | Normal · Skip permissions · Continue · Background |
| Gemini CLI | Normal · YOLO · Auto-edit · Plan |
| Ollama | Run any local model |
| OpenCode | Open-source coding agent |
| Cursor | cursor-agent or the app |
| GitHub Copilot CLI | Copilot in the terminal |
| Antigravity | Google's agentic CLI |
| Codex · Aider · Goose · Crush · Qwen · Amp · Cline · OpenHands · Grok | Auto-detected when installed |
Anything else on your PATH (docker, ffmpeg, gh, kubectl, scrcpy, …) is auto-discovered and added too. New AI agent on your machine? TerminalPad finds it, or you add it in seconds.
Screenshots
| Every mode is a tile | Spotlight search | Add anything, auto-detected icons |
|---|---|---|
![]() | ![]() | ![]() |
Install
Requires macOS 14 (Sonoma) or later — Apple Silicon or Intel — and the Swift toolchain (xcode-select --install is enough, no full Xcode needed). On macOS 26 (Tahoe) you get real Liquid Glass; on earlier versions it falls back to a clean dark panel.
git clone https://github.com/git-abhisar-singh/TerminalPad.git
cd TerminalPad
./install.sh
install.sh builds the app and drops it in /Applications. Because you compile it yourself, there's no Gatekeeper warning — no Apple Developer account or signing required.
Prefer to do it by hand?
./build.sh
mv TerminalPad.app /Applications/
First time you launch an agent, macOS asks "TerminalPad wants to control Terminal." Click Allow (it's how it opens a new Terminal window).
Configure
~/.config/terminalpad/agents.json is seeded on first run. Add or edit agents, then hit the ⟳ button (or relaunch):
{
"agents": [
{
"name": "Claude Code",
"icon": "CC",
"color": "#D97757",
"logo": "claude",
"variants": [
{ "label": "Normal", "command": "claude", "icon": "play.fill", "color": "#D97757" },
{ "label": "Skip Permissions", "command": "claude --dangerously-skip-permissions", "icon": "bolt.fill", "color": "#F4A261" }
]
}
]
}
| Field | Meaning |
|---|---|
name | Display name |
icon | 1–2 char monogram (shown when no logo) |
color | Tile accent (hex) |
logo | Logo slug → Resources/logos/<slug>.png, else fetched from Simple Icons |
variants[].command | The exact shell command run in Terminal |
variants[].icon | SF Symbol name |
How it works
- Launch — runs
osascripttotell application "Terminal" to do script "<command>"in a login shell, so your normalPATHresolves the binary. - Logos —
logos.pypulls black SVGs from Simple Icons, rasterizes via macOSqlmanage, and keys white→transparent. At runtimeLogoStoredoes the same in Swift (CoreImage) for tools discovered later. - Discovery —
Discovery.swiftrunsbrew leaves, npm, and pipx in parallel, resolves each formula to its real binary, skips libraries, and builds a tile per tool. The last scan is cached to~/.config/terminalpad/discovered.jsonand painted instantly while a fresh scan runs in the background. - Build —
build.shcompiles the SwiftUI sources withswiftcand assembles the.appbundle by hand (no Xcode project).
Project layout
Sources/
App.swift @main + transparent window config
ContentView.swift grid, spotlight search, tiles, popover
AgentModel.swift models + JSON config store
Discovery.swift installed-CLI scanner
LogoStore.swift logo resolution + runtime fetch
Launcher.swift Terminal launcher
Resources/logos/ bundled brand logos (PNG, white on transparent)
build.sh compile + bundle
install.sh build + install to /Applications
make_icon.py app icon + menu-bar template generator
logos.py logo fetcher
Info.plist
Contributing & community
- Contributing guide — build from source, project layout, PR flow
- Code of Conduct
- Security policy — report vulnerabilities privately
- Privacy — no telemetry, no analytics, no accounts
- Changelog
- Discussions · Issues
- Contact: abhisar.s.work@gmail.com
License
MIT © Abhisar Singh — see LICENSE. Brand logos are trademarks of their respective owners, sourced via Simple Icons; see NOTICE.md.
Collected info
- ★ 2 stars
- Language: Swift
- Source updated: 6/28/2026
Config for your environment
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.


