macOS 上的原生聊天窗口,直接调用你本机已经登录好的 Claude 命令行来回答 —— 用你订阅套餐里的额度,不需要 API key,也不额外按量计费。 这个页面除了介绍它,本身也是一个能真聊的网页版,往下滑就能用。
如果你已经装了 Claude Code 命令行、也已经登录,那你其实随时能问它任何问题 —— 但实际用起来会卡在三个地方:
| 你现在的做法 | 卡在哪 | 这个 app 怎么解 |
|---|---|---|
切到终端敲 claude -p "……" |
要么占用你正在干活的那个终端标签页,要么新开一个再关掉;随手问一句的成本比问题本身还高 | ⌘Tab 切到一个常驻的小窗口,敲完回车就走 |
| 等命令行返回 | 光标闪着,不知道是在连、在想,还是卡死了 | 三段实时状态 + 逐字流式出答案,模型名和耗时直接标在回答上方 |
| 想追问一句 | 再敲一遍命令就是全新上下文,得把前情重新贴一遍 | 自动接着上一轮的会话续聊;想重开按 ⌘N |
| 换成网页版 / 第三方客户端 | 要么再登一次账号,要么要你自己去配一把 API key,然后按 token 另外付一份钱 | 它调的就是你终端里那个 claude,同一份登录、同一份额度、同一份账单(也就是没有额外账单) |
一句话:把「随手问一句」的摩擦降到接近零,而且这一句不花额外的钱。
填了 key 之后,请求从你的浏览器直接发给 api.anthropic.com,
本站服务器完全不参与,也就不可能拿到你的 key。key 默认只存在当前页面的内存里,
刷新即消失;勾上「记住」才会写进这台设备的 localStorage,随时可以点「清除」抹掉。
| 这一条 | 网页版(本页) | Mac 桌面版 |
|---|---|---|
| 额度来源 | 作者的订阅,每 IP 每天 8 次;或你自己的 API key | 你本机已登录的 Claude 命令行 —— 你的订阅 |
| 额外花钱 | 填自己 key 时按 token 计费 | 不额外花钱 |
| 流式出字 | 没有,等一整段回答 | 逐字流式,带三段状态提示 |
| 多轮上下文 | 把前几轮拼进这一次的输入里(受 4000 字符限制) | 命令行原生会话续聊,⌘N 重开 |
| 模型 | 服务端定;自带 key 时为 claude-sonnet-4-5 | 默认 opus,一条 defaults write 换 |
| 装它 | 不用装,打开就用 | 下载 .zip 或自己编 |
defaults write 换成别的~/.local/bin → /opt/homebrew/bin → /usr/local/bin → $PATH 顺序自己找| 系统 | macOS 15 或更高,Apple Silicon 机型 |
| 命令行 | 已安装 Claude Code 命令行,且在终端里敲 claude 能正常工作(已登录) |
| 账号 | 一个 Claude 订阅(Pro / Max) |
claude 能用,这个 app 就能用;终端里不能用,先把终端修好。
它没有独立的登录体系,也不打算有。从发布页下载 AskClaude-<版本>-arm64.zip,解压后把 Ask Claude.app 拖进「应用程序」。
这个 app 用的是临时签名(没有花钱买 Apple 开发者证书),所以下载下来的副本会被系统隔离,首次打开会提示「已损坏」或直接拦下。清一次隔离标记即可:
xattr -cr "/Applications/Ask Claude.app"
或者右键点 app → 打开,然后在「系统设置 → 隐私与安全性」里放行。
git clone https://github.com/zengtianli/ask-claude.git cd ask-claude ./build.sh --install
./build.sh 不带参数只产出 build/Ask Claude.app;带 --install 才会装进「应用程序」(没权限时自动退回用户目录下的 Applications)。自己编出来的不经过下载,不存在上面那个隔离问题。
两个可选项,都是系统级偏好设置,改完重开 app 生效:
# 换掉默认模型(默认 opus) defaults write io.github.zengtianli.AskClaude model sonnet # 你的 claude 二进制装在冷门位置时,直接指给它 defaults write io.github.zengtianli.AskClaude claudePath ~/bin/claude
它没有任何黑盒调用 —— 做的事就是替你拼一条 claude 命令并解析它的输出流。
下面这个小工具按源码里的同一套规则现场拼给你看,你可以把结果复制到终端里跑,结果是等价的。
claudeclaudePath 指定的路径(如果指了,且那个文件确实可执行)~/.local/bin/claude —— 官方安装脚本的默认位置/opt/homebrew/bin/claude —— Homebrew 或 npm 全局安装(Apple Silicon)/usr/local/bin/claude —— npm 全局安装(Intel 布局)或手动安装$PATH 里逐个目录找四条都落空时,界面上出现的不是「出错了」,而是一条带安装地址和补救命令的完整提示。
桌面版是一层薄壳:一个 actor 负责起子进程、一个 @MainActor 的视图模型负责界面状态,中间只传三种事件(会话已建立 / 模型已确认 / 新增一段文字)。
子进程跑的是 claude -p --output-format stream-json --include-partial-messages --verbose,
输出按行解析:system/init 事件里取会话号,message_start 里取真实模型名,
content_block_delta 里取增量文字,最后的 result 信封作为权威答案 ——
增量拼出来的文本只当兜底,这样即便命令行在发出结尾信封前挂掉,已经出来的内容也不会丢。
难的部分全在进程处理这一侧,而且每条都是踩出来的:GUI 应用继承的是 launchd 的精简 PATH,
所以要显式把常见安装目录塞回环境变量,否则命令行自己要调起的辅助进程会找不到;
管道写满 64KB 会双向死锁,所以 stdout 必须用可读性回调增量抽干、stderr 丢到并发队列上读完,
绝不能等进程退出后再去读管道;超时和用户取消这两条路径都要真正 terminate() 掉子进程,
并且分别落到「超时提示」和「静默」两种不同的收尾上。
网页版(本页)就是这个单文件 HTML 自己:没有构建工具、没有前端框架、不加载任何外部资源。
默认通道把你的输入 POST 给同源的 /api/llm,由服务端拿作者的订阅去问,因此必须限量;
填了自己的 key 之后改成浏览器直连 api.anthropic.com,本站不再参与。
markdown 渲染器也是本页自己写的一小段代码 —— 标题、粗体、行内代码、代码块、列表、引用、表格、链接
够用就行,绝不把 ** 和 ## 原样甩给你看。
源码仓库(GitHub · MIT) 发布页 · 下载 .zip
/api/llm(跑在作者自己的 Claude 订阅上,故限量);填了 key 则由你的浏览器直连
api.anthropic.com,你的 key 与对话内容都不经过本站服务器。
本页不做任何服务端聊天记录留存,刷新页面对话即消失。