Claude Code 一键启动+自动安装:macOS 图形化工具,支持四种终端
我每天启动 Claude Code 大约 30 次。在不同项目之间切换,每次都要执行同样的流程: 换个项目,再来一遍: 一天 30 次,4 步操作 × 20 秒 = 每天浪费 10 分钟。一年就是 60 小时。 问题不在 Claude Code 本身——它很好用。问题在于启动它的工作流太笨了。所以我做了 GroAsk,一个 macOS 菜单栏的 AI 启动器,用全局快捷键 按 关键点:不是打开终端让你输入,而是终端打开时 Claude Code 已经带着你的指令在跑了。 路径来源有三个优先级: 这是项目里最有技术含量的部分。macOS 上四种主流终端,每一种的自动化实现完全不同。 最标准的实现。AppleScript 字典完整,可以控制窗口、Tab、执行任意命令。 和 Terminal.app 类似,但 API 更现代。Profile 支持让你可以指定特定的终端配置。 Ghostty 是 Mitchell Hashimoto 做的新终端,性能很好但没有 AppleScript 支持。用 踩坑点: Warp 是最棘手的。没有 AppleScript,没有 唯一能用的是 Launch Configuration 机制: 然后通过 URI scheme 触发: GroAsk 每次启动时动态生成这个 YAML 文件,写入 Warp 配置目录,再触发 URI scheme。多了一步文件 I/O,但用户体验和其他终端一致。 因为没法统一。四种终端的能力边界完全不同: 只能逐个适配,做四套实现。 不同 CLI AI 工具的安装路径差异很大: 有 curl 安装器的工具(Claude Code、Kimi Code): 依赖 npm 的工具(Gemini CLI、Codex)需要处理依赖链: 全程不需要 sudo、Homebrew、Xcode Command Line Tools。 安装触发后,后台每 2 秒执行一次检测: 用 macOS GUI 应用不加载 shell profile,PATH 和终端里不一样。GroAsk 的做法: 用 再加上文件系统扫描兜底——扫描 GroAsk 支持 6 个 CLI AI + 4 个 Web AI: 同一个 | 能力 | Claude Code Now | Raycast 插件 | GroAsk | GroAsk 本身就是 Claude Code 协作的产物: 每个模块——AppleScript 终端控制、WebKit 注入脚本、PATH 环境检测、Cloudflare Workers 后端——都是我定方向、Claude Code 写实现、我审代码的循环。 GroAsk 免费,macOS 原生,100% 本地桥接,不存数据。 欢迎 Star,有问题到 GitHub Discussions 聊。背景
cd ~/Projects/my-app
claude "fix the login bug"cd ~/Projects/api-server
claude "add rate limiting"⌥Space 一步到位。一键启动的实现
用户视角
传统方式:
打开终端 → cd ~/Projects/my-app → claude "fix the login bug" → 等
GroAsk:
⌥Space → 输入 "fix the login bug" → 回车⌥Space(可自定义),弹出输入框。选 Claude Code 通道,写 prompt,回车。终端自动打开,cd 到正确目录,带着 prompt 直接启动 Agent。工作目录检测
/app fix bug 展开为 cd ~/Projects/my-app && claude "fix bug"四种终端的自动化差异
Terminal.app — AppleScript
do scripttell application "Terminal"
activate
do script "cd ~/Projects/my-app && claude \"fix the login bug\""
end telliTerm2 — AppleScript
create window with profiletell application "iTerm"
activate
create window with profile "Default" command "cd ~/Projects/my-app && claude \"fix the login bug\""
end tellGhostty —
-e 参数 + login shell 包装-e 参数启动:open -na Ghostty --args -e bash -l -c 'cd ~/Projects/my-app && claude "fix the login bug"'-e 是替换 shell 而不是在 shell 里执行,.zshrc 不会加载,PATH 不完整。所以必须包一层 bash -l -c 来加载完整的 shell profile。Warp — YAML Launch Config + URI scheme
-e 参数,没有任何编程接口。# ~/.warp/launch_configurations/groask_session.yaml
---
name: groask_session
windows:
- tabs:
- layout:
cwd: ~/Projects/my-app
command: claude "fix the login bug"open "warp://action/launch?config=groask_session"为什么不统一抽象?
终端 AppleScript -e 参数配置文件触发 窗口控制 Terminal.app 完整 - - 完整 iTerm2 完整 - - 完整 Ghostty 无 有(替换 shell) - 无 Warp 无 无 有 无 一键安装 CLI 工具
依赖链自动处理
# 一行搞定
curl -fsSL https://cli.example.com/install.sh | bash
# 自动追加 PATH 到 .zshrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc检测 npm → 有就直接装
→ 没有,检测 fnm → 有就用 fnm 装 Node.js 再装 CLI
→ 没有 → 装 fnm → 装 Node.js → 装 CLI安装状态轮询
bash -l -c 'command -v claude'bash -l 加载完整 shell 环境,确保能发现 fnm 刚安装的工具。检测到就立刻刷新 UI。设了 3 分钟超时保护。PATH 问题的解决
bash -l -c 'printf MARKER%s "$PATH"'MARKER 前缀隔离 conda/pyenv 等工具在 shell 初始化时输出到 stdout 的噪声。~/.local/bin、~/.cargo/bin、Homebrew 路径、nvm/fnm/Volta/mise 的安装路径,覆盖所有安装方式。不只是 Claude Code
⌥Space 输入框,Tab 切换不同 AI。还支持划词即问——选中文本,按快捷键,自动填入输入框发给 AI。竞品对比
|------|:-:|:-:|:-:|
| 启动方式 | Dock 图标 | Raycast 搜索 | ⌥Space 全局快捷键 |
| 带 prompt 启动 | 不支持 | 不支持 | 支持 |
| 多终端 | 仅 Terminal.app | Terminal/Alacritty/Ghostty/Warp | Terminal/iTerm2/Ghostty/Warp |
| 图形化安装 | 不支持 | 不支持 | 支持,依赖链全自动 |
| 多 AI 切换 | 仅 Claude Code | 仅 Claude Code | 6 CLI + 4 Web AI |
| 划词即问 | 不支持 | 不支持 | 支持 |用 Claude Code 做了一个 Claude Code 启动器