选中文字,按 ⌘E,答案就在光标旁边。
otiin 常驻在 macOS 菜单栏里,不占 Dock,不弹通知。你在读什么、写什么都不用停下来—— 划选一段文字,按下快捷键,解释、总结、翻译、润色直接出现在原地。
你正在读的任意一篇文档
分布式系统里的共识问题,指的是一组节点在存在故障和网络延迟的前提下, 就某个值达成一致的过程。
Paxos 通过两阶段的提案与承诺机制,保证即使部分节点失联, 已经被多数派接受的值也不会被推翻。
工程实现上更常见的是 Raft,它把同样的保证拆成了领导者选举、日志复制 和安全性三个更容易讲清楚的子问题。
三个动作,两秒钟
不用打开新窗口,不用复制粘贴来回切,整件事发生在你原本就在的那个页面上。
划选一段文字
网页、邮件、代码、PDF、聊天记录都行。任何能选中文字的地方都能用。
按下快捷键
浮窗出现在鼠标旁边,当前应用不会失焦,你也不需要切窗口。
挑一个动作
五个预设提示词点一下就走,也可以直接敲你自己的指令。回答边生成边渲染。
为「不打断」而做的细节
功能不多,但每一个都是为了让你尽快回到原本在做的事情上。
五个预设,也可以自己写
解释、总结、翻译、润色、续写开箱即用。自定义提示词随便加,想让它干什么都行。
Markdown 边生成边渲染
标题、列表、引用、代码块在流式输出过程中实时成型。没闭合的标记会自动退回纯文本,不会闪成一团。
代码块单独复制
每个代码块右上角都有自己的复制按钮,拿到的是干净的代码,不带围栏标记。
钉住不放
把结果钉在屏幕上,切到别的应用它也不会消失,始终浮在普通窗口上方。
多个窗口互不干扰
可以同时开好几个结果窗口,自动错开排列,每个窗口独立管自己的请求和状态。
记住你调过的尺寸
回复窗口可以随意拖拽缩放,最小 380×360。调过一次就记住,重启也还在。
用你自己的 API
任何兼容 OpenAI 接口的服务都能接。填地址、填 Key、刷新模型列表,三步搞定。没有账号体系,也没有中间商。
| 服务 | Base URL |
|---|---|
| OpenAI | https://api.openai.com/v1 |
| OpenRouter | https://openrouter.ai/api/v1 |
| DeepSeek | https://api.deepseek.com |
| Azure OpenAI | 你的专属部署地址 |
| Ollama(本地) | http://localhost:11434/v1 |
| LM Studio(本地) | http://localhost:1234/v1 |
它要什么权限,你的文字去了哪
这类工具最该讲清楚的两件事,写在这里,不藏在 FAQ 里。
为什么需要辅助功能权限
- macOS 不允许一个应用直接读另一个应用里选中的文字
- otiin 的做法是模拟一次 ⌘C,然后读剪贴板
- 读完立刻把你原来的剪贴板内容写回去
- 权限只用于这一件事,不监听按键,不截屏,不读窗口内容
不会发生的事
- 不收集任何使用数据或遥测
- 没有 otiin 自己的服务器,你的文字只发往你填的那个地址
- API Key 存在 macOS 钥匙串里,日志和报错都不会打印完整 Key
- AI 的回复内容不落盘,关掉窗口就没了
你可能会问
快捷键能改吗?
目前固定是 ⌘E。自定义快捷键在计划中。如果 ⌘E 和你常用的应用冲突,可以先在那个应用里改掉它的绑定。
支持哪些 Markdown 语法?
标题、粗体、斜体、删除线、有序与无序列表、引用、分隔线、行内代码、围栏代码块(带独立复制按钮)、Markdown 链接。表格、图片、数学公式和内嵌 HTML 暂不支持,会降级成可读的纯文本,不会显示成乱码。
为什么我的请求一直失败?
按顺序排查:Base URL 是否填对、API Key 是否还有额度、服务端是否提供 /chat/completions 接口、网络是否能直连该地址。如果你在用系统代理,otiin 会主动绕过它——因为部分代理会把 Authorization 请求头剥掉,导致鉴权失败。
钉住的窗口位置会保存吗?
不会。固定状态和窗口位置只在当前这次会话里有效,关掉浮窗或重启应用就重置了。窗口的尺寸会被记住。
可以完全离线用吗?
可以。把 Base URL 指向本机跑的 Ollama 或 LM Studio,文字就不会离开你的电脑。
为什么上不了 Mac App Store?
读取选中文字需要模拟键盘事件,这在 App Store 要求的沙盒环境里被禁止。所以 otiin 只能通过 GitHub Releases 分发。