QuickGPT
用 HJSON 文件和 Git 管理提示词、在调用瞬间用占位符注入真实上下文的开源 Raycast 扩展,2023 年写到现在。
为什么做
我的提示词一度散落在备忘录、聊天记录和各个 AI 工具的自定义指令框里。数量少的时候靠翻,积累到上百条之后,三个问题都压不住了:没有版本管理,改坏了回不去;没法迭代,好的提示词要逐次打磨,散落存放意味着每次从头写;带不上上下文,用的时候要手动把选中内容、剪贴板、相关文件一段段贴进去。
2023 年我开始写 QuickGPT。它是一个开源的 Raycast 扩展(Raycast 是 macOS 上的快捷启动器,支持第三方扩展),到今天管理着我个人 300 多条提示词。
它是什么
QuickGPT 围绕两个理念设计。
Manage prompts like code:提示词以 HJSON 文件存放,整个库是一个 Git 仓库。HJSON 是对人友好的 JSON 变体,支持注释和多行字符串——写提示词这种多段长文本,不用把换行转义成 \n,还能在某条提示词旁边注明适用场景。修改历史、回滚、对比实验,都直接用 Git 完成。
Use prompts like tools:在 Raycast 里搜索提示词标题即可调用,支持拼音搜索。调用的瞬间,占位符把当前的真实上下文注入进去,提示词从一段死文本变成随手可用的工具。
技术要点与设计决策
占位符系统是这个工具的核心。{{selection}} 取当前选中文本,{{clipboard}} 取剪贴板,{{currentApp}} 取前台应用名,{{browserContent}} 取浏览器页面内容,{{diff}} 注入当前仓库的 git diff,{{file:路径}} 注入文件或整个目录的内容,{{option:key}} 弹出交互式下拉让人临时选值。占位符还支持 fallback 链:{{selection|clipboard}} 表示优先取选中文本,取不到再退回剪贴板。一条写好的提示词配上几个占位符,就能覆盖一类场景,不必为相似需求复制出多个变体。
忽略规则是数据边界。{{file:}} 读取目录时,叠加应用 .quickgptignore 和 .gitignore 两层忽略规则(语法与 gitignore 相同),把生成物、大文件和私密配置挡在上下文之外。这里有一条明确的设计立场:忽略规则是数据边界,不为「上下文更完整」而绕过它。.quickgptignore 后来也被我的另一个工具 FinderLink 复用,成了跨项目的约定。
Deeplink 让提示词可以被别的工具调用。每条提示词都有一个 Raycast deeplink,可以携带占位符参数直达。FinderLink 的「送进 QuickGPT」动作走的就是这条协议,PopClip 这类选词工具也能通过它触发提示词。工具之间靠 URL 协议互相衔接,不需要谁依赖谁的代码。
其余几处值得一提的设计:嵌套 subprompt 支持属性继承,一组相关提示词可以共享公共配置;临时目录里的上下文文件 7 天自动过期,避免越攒越多。开发过程中还趟出两个 Raycast 扩展的通用坑:getSelectedText() 如果等扩展窗口打开、焦点被抢之后才调用,经常取不到选中文本,要在启动最早期就发起捕获;从外部取来的文本要清理首尾的零宽字符和控制字符,否则搜索和匹配会出现肉眼看不出的失败。
当前状态
2023 年 8 月创建,持续维护三年,最近一次更新在 2026 年 7 月。GitHub 31 star,Apache 2.0 协议。它是开源自装形态(clone 后本地安装),未上架 Raycast Store。这是我全部个人工具里使用频率最高的一个,也是其他几个工具的衔接点。