版本:v0.1
日期:2026-06-04
状态:Draft
负责人:Tian
产品类型:macOS 原生桌面应用
Bufferly 是一款面向开发者和 AI heavy user 的本地优先剪贴板工作台。
它不是 Paste 的简单平替,而是围绕开发者每天高频复制的代码片段、命令、URL、JSON、prompt、错误信息和临时文本,提供快速搜索、复用、转换和安全过滤能力。
一句话定位:
为开发者和 AI 工作流打造的本地优先剪贴板工作台。
开发者和 AI 用户每天会频繁复制大量临时信息:
- 代码片段
- Shell 命令
- URL
- JSON / API response
- prompt
- 错误日志
- commit hash / branch name
.env配置片段- token、验证码、临时密码等敏感文本
普通剪贴板只保存当前一条内容,系统级剪贴板历史能力有限;通用剪贴板工具虽然能保存历史,但通常缺少开发者工作流里的类型识别、格式转换、敏感内容过滤和本地优先体验。
Bufferly 要解决的问题:
- 复制过的有用内容经常找不回来。
- 开发者需要反复复制、清洗、格式化和重用片段。
- 剪贴板历史可能泄露 token、密码、验证码等敏感内容。
- 通用剪贴板工具对代码、命令、JSON、prompt 等内容没有足够强的语义支持。
- 用户需要一个低打扰、随时可呼出的工作台,而不是一个重型笔记软件。
- macOS 开发者
- 高频使用 AI 编程工具的用户
- 经常在浏览器、终端、IDE、聊天工具之间复制内容的人
- 产品经理、设计师、运营等高频复用文本片段的人
- 经常处理链接、prompt、客服话术、临时资料的人
用户刚从文档复制了一条命令,又复制了其他内容导致命令丢失。用户按快捷键呼出 Bufferly,搜索命令关键字,回车粘贴。
用户把常用 AI prompt pin 到固定区域。需要时按快捷键呼出,输入关键词,直接粘贴到 ChatGPT、Codex、Cursor 或 Claude。
用户复制带有 tracking 参数的 URL。Bufferly 自动识别 URL,并提供“移除 tracking 参数后复制”的操作。
用户复制一段压缩 JSON。Bufferly 识别为 JSON,提供格式化、压缩、复制为代码块等操作。
用户复制 .env、API key、验证码或临时密码。Bufferly 判断为敏感内容,默认不保存,或只保存脱敏预览。
在 macOS 上提供一个稳定、快速、低打扰的本地剪贴板历史工具,并具备开发者向差异化能力。
MVP 阶段先以个人使用和可验证行为为指标:
| 指标 | 目标 |
|---|---|
| 呼出速度 | 快捷键触发后 200ms 内显示窗口 |
| 搜索响应 | 500 条历史内搜索无明显卡顿 |
| 剪贴板捕获准确性 | 普通文本复制可稳定入库 |
| 敏感内容过滤 | 明确规则命中的 token / 密码 / 验证码默认不保存明文 |
| 日常可用性 | 作者连续使用 7 天,不需要切回其他剪贴板工具 |
| 崩溃率 | 日常使用不出现可复现崩溃 |
-
剪贴板监听
- 监听 macOS 系统剪贴板文本变化。
- 自动保存新文本内容。
- 相同内容去重。
-
历史记录
- 保存最近 500 条文本历史。
- 显示内容预览、复制时间、类型标识。
- 支持删除单条记录。
-
快捷键呼出
- 支持全局快捷键呼出/隐藏主面板。
- 默认快捷键建议:
Option + Space,后续允许配置。
-
搜索
- 支持按内容模糊搜索。
- 搜索结果实时更新。
- 支持键盘上下选择。
-
粘贴
- 回车将选中内容写回剪贴板。
- 尽量自动粘贴到当前前台 App。
- 如自动粘贴受权限限制,至少保证内容已复制到剪贴板。
-
Pin 常用内容
- 用户可以 pin 常用片段。
- Pin 内容固定展示在独立区域或搜索结果顶部。
-
类型识别
- URL
- JSON
- Shell command
- Code-like text
- Plain text
-
敏感内容过滤
- 检测疑似 API key、token、password、验证码、
.env片段。 - 默认不保存明确敏感内容明文。
- UI 中显示“已过滤敏感内容”的占位记录或完全跳过,具体策略开发时确认。
- 检测疑似 API key、token、password、验证码、
-
本地存储
- 历史记录默认只保存在本机。
- 不做云同步。
- 粘贴为纯文本。
- URL 去 tracking 参数。
- JSON 格式化 / 压缩。
- 长文本自动生成短标题。
- 设置页:历史保留数量、敏感过滤开关、快捷键设置。
- 图片剪贴板历史。
- 文件剪贴板历史。
- Prompt 片段库。
- 多段复制栈。
- AI 总结 / 改写 / 翻译。
- iCloud 同步。
- Raycast / Alfred 集成。
MVP 明确不做:
- Windows / Linux 客户端
- iPhone / iPad 客户端
- 云同步
- 团队共享
- 账号系统
- 订阅付费
- 浏览器插件
- 完整笔记系统
- 所有文件类型的剪贴板管理
- 复杂 AI agent 功能
- 用户复制内容。
- Bufferly 后台监听剪贴板变化。
- 通过敏感规则检查。
- 合格内容写入本地历史。
- 用户按全局快捷键呼出面板。
- 用户搜索或键盘选择条目。
- 用户回车粘贴。
- 面板自动隐藏。
面板应满足:
- 低打扰,浮层展示。
- 默认聚焦搜索框。
- 支持键盘优先操作。
- 不把 UI 做成重型素材库。
- 列表信息密度高,但要能快速扫读。
建议布局:
------------------------------------------------+
| Search clips... |
+------------------------------------------------+
| Pinned |
| [JSON] API payload preview... pin |
| [Prompt] Rewrite selected text... pin |
+------------------------------------------------+
| Recent |
| [URL] github.com/... 2m |
| [CMD] npm run build 5m |
| [TEXT] error message... 8m |
+------------------------------------------------+
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-001 | App 启动后监听文本剪贴板变化 | P0 | 复制普通文本后,历史列表出现新记录 |
| FR-002 | 相同内容不重复保存 | P0 | 连续复制同一文本,只保留一条或更新时间 |
| FR-003 | 忽略空文本和纯空白文本 | P0 | 复制空白内容不会新增记录 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-010 | 展示最近剪贴板历史 | P0 | 面板中能看到最近复制内容 |
| FR-011 | 支持删除单条历史 | P1 | 删除后该条不再出现在列表 |
| FR-012 | 限制历史数量 | P0 | 超过 500 条后自动淘汰最旧记录 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-020 | 支持模糊搜索 | P0 | 输入关键词后列表只显示匹配项 |
| FR-021 | 支持键盘上下移动 | P0 | 上下键能改变当前选中项 |
| FR-022 | 支持回车选择 | P0 | 回车后选中内容写入剪贴板 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-030 | 用户可 pin 历史条目 | P0 | 被 pin 的条目显示在 pinned 区域 |
| FR-031 | 用户可 unpin | P0 | 取消后条目回到普通历史 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-040 | 识别 URL | P0 | URL 显示 URL 类型标识 |
| FR-041 | 识别 JSON | P0 | 合法 JSON 显示 JSON 类型标识 |
| FR-042 | 识别 Shell command | P1 | 常见命令显示 CMD 类型标识 |
| FR-043 | 识别 Email | P1 | 邮箱地址显示 Email 类型标识 |
| FR-044 | 识别 code-like text | P1 | 多行代码显示 Code 类型标识 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-050 | 识别 .env 风格 key-value |
P0 | API_KEY=... 不保存明文 |
| FR-051 | 识别 password/token/secret 关键词 | P0 | 命中关键词的内容默认不保存明文 |
| FR-052 | 识别常见 API key 形态 | P1 | 明显 token 字符串不保存明文 |
| FR-053 | 用户可在设置里查看过滤策略 | P2 | 设置页能看到规则说明 |
| 编号 | 需求 | 优先级 | 验收标准 |
|---|---|---|---|
| FR-060 | 粘贴为纯文本 | P1 | 富文本复制后可输出纯文本 |
| FR-061 | URL 去 tracking 参数 | P1 | utm_* 等参数可被移除 |
| FR-062 | JSON 格式化 | P1 | 压缩 JSON 可格式化后复制 |
| FR-063 | JSON 压缩 | P2 | 格式化 JSON 可压缩后复制 |
| 类别 | 要求 |
|---|---|
| 性能 | 快捷键呼出到可交互目标 200ms 内 |
| 存储 | 本地保存,默认不联网 |
| 隐私 | 敏感内容默认不保存明文 |
| 稳定性 | 后台监听不应导致明显 CPU 占用 |
| 可访问性 | 搜索、选择、粘贴主流程必须可纯键盘完成 |
| 可靠性 | App 重启后历史和 pinned 内容仍存在 |
| 可维护性 | 剪贴板监听、存储、过滤、识别、UI 分层实现 |
当前确认采用 macOS 原生技术栈:
- Swift
- SwiftUI
- AppKit
- SQLite
- Keychain
职责划分建议:
| 模块 | 技术 | 说明 |
|---|---|---|
| 主 UI | SwiftUI | 搜索面板、历史列表、设置页 |
| 系统能力 | AppKit | 剪贴板监听、全局快捷键、窗口层级、菜单栏 |
| 本地数据库 | SQLite | 保存历史、pin、设置 |
| 安全存储 | Keychain | 保存加密密钥或敏感配置 |
| 内容识别 | Swift service | URL / JSON / Command / Email / Code 类型判断 |
| 敏感过滤 | Swift service | token / password / secret / .env 规则检测 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 主键 |
| content | String | 剪贴板文本内容,敏感内容不保存明文 |
| preview | String | UI 预览文本 |
| contentHash | String | 去重用 hash |
| type | String | url / json / command / email / code / text |
| isPinned | Bool | 是否 pin |
| isSensitive | Bool | 是否命中敏感规则 |
| createdAt | Date | 首次复制时间 |
| updatedAt | Date | 最近复制时间 |
| sourceApp | String? | 来源 App,后续可选 |
| 字段 | 类型 | 默认值 |
|---|---|---|
| maxHistoryCount | Int | 500 |
| globalShortcut | String | Option+Space |
| enableSensitiveFilter | Bool | true |
| autoPasteAfterSelect | Bool | true |
| launchAtLogin | Bool | false |
- 初始化 Swift macOS app。
- 建立模块目录。
- App 可启动。
- 有基础主窗口。
- 后台监听文本剪贴板。
- 内存中展示历史。
- 去重。
- 搜索。
- 全局快捷键呼出。
- 回车复制/粘贴。
- Pin。
- 本地持久化。
- 类型识别。
- 敏感过滤。
- JSON 格式化。
- URL 清洗。
- 设置页。
- 启动项。
- 菜单栏图标。
- 错误处理。
- 连续 7 天自用修复。
MVP 可认为完成,当满足:
- App 能在 macOS 正常启动。
- 复制普通文本后,Bufferly 能捕获并显示。
- 按全局快捷键可呼出搜索面板。
- 搜索、上下选择、回车复制/粘贴流程可用。
- Pin / unpin 可用。
- App 重启后历史记录仍存在。
- 明确敏感内容不会保存明文。
- 作者能连续使用 7 天,不需要退回其他剪贴板工具完成日常工作。
- 默认快捷键是否使用
Option + Space?是否会和现有工具冲突? - 敏感内容命中后,是完全跳过,还是保存脱敏占位记录?
- 自动粘贴是否需要请求辅助功能权限?第一版是否接受只复制不自动粘贴?
- 数据库是否需要加密?如果加密,是否使用 Keychain 保存密钥?
- 第一版是否支持图片?当前建议不支持。
- UI 是做底部横向卡片流,还是 Raycast 风格垂直列表?
- 是否需要显示来源 App?
- Atlassian PRD 模板:强调 PRD 应定义产品目的、功能和需求,并包含目标、成功指标、假设、用户故事、设计和开放问题。https://www.atlassian.com/software/confluence/templates/product-requirements
- Atlassian PRD 指南:强调 PRD 是跨职能团队的单一事实源,敏捷 PRD 应保持足够上下文和可更新性。https://www.atlassian.com/agile/requirements
- Aha PRD 模板指南:强调 PRD 应包含目标、范围、特性、发布和清晰可执行的需求。https://www.aha.io/roadmapping/guide/requirements-management/what-is-a-good-product-requirements-document-template
- Cavaro PRD 模板:强调需求应可测试,避免“系统应该很快”这类模糊表述,改为明确性能目标。https://www.cavaro.io/templates/product-requirements-document
- mdkit PRD 写作指南:强调写给工程师能读懂的 PRD,保持结构清晰、避免反模式,并可用 Markdown 维护。https://mdkit.io/blog/how-to-write-prd