1. 项目概述:当AI拥有“屏幕记忆”
你有没有过这样的时刻?刚关掉一个网页,转头就忘了那个关键数据在哪;开完一个线上会议,却想不起同事提到的某个细节;或者,你希望你的AI助手能真正理解你此刻正在做什么,而不是每次都需要你手动复制粘贴上下文。这正是我过去几年在探索人机协作时遇到的核心痛点。我们每天都在电脑前产生海量的视觉和听觉信息,但这些信息转瞬即逝,无法被系统地记忆和利用。直到我深度体验并拆解了screenpipe这个项目,我才意识到,一个真正“懂你”的个人AI助手,其核心能力可能不是生成,而是“记忆”。
简单来说,screenpipe是一个运行在你电脑后台的“数字记忆体”。它持续、智能地记录你的屏幕活动和音频,将所有内容(你看到的、听到的、操作的)转化为一个本地的、可搜索的、AI可理解的数据库。这不仅仅是录屏,而是一种事件驱动的智能捕获。它不会傻乎乎地每秒截30张图,而是像一位细心的观察者,只在有“意义的事件”发生时(比如你切换了应用、停止了打字、滚动页面、复制了内容)才记录一帧,并同时抓取操作系统底层的“无障碍树”数据(即屏幕上所有按钮、文本框、标签的结构化文本信息)。这种方式,让它在极低的资源消耗下(官方数据是5-10% CPU,每月约20GB存储),构建起一个属于你自己的、永不遗忘的“第二大脑”。
它的魔力在于“连接”。通过内置的MCP服务器,你的AI编码助手(如Cursor、Claude Code)或聊天助手(如Claude Desktop)可以直接查询这个记忆库。你可以直接问:“我过去一小时在哪个文档里修改了API密钥?”或者“把今天所有会议中关于项目预算的讨论总结一下。”更强大的是它的Pipes系统,你可以创建基于Markdown文件的自动化AI智能体,让它根据你的活动自动触发任务,比如:“每当我打开Jira处理‘BUG-123’这个任务时,自动在Linear中创建对应的追踪项。”
我之所以花大量时间研究它,是因为它代表了一种范式转变:AI不再是一个需要你不断“喂养”信息的被动工具,而是一个拥有持续上下文感知能力的主动协作者。它100%本地运行的特性,也彻底打消了隐私顾虑。下面,我将从设计思路、核心实现、高级玩法到避坑指南,为你完整拆解如何利用screenpipe构建你的个人AI记忆中枢。
2. 核心设计思路与架构解析
2.1 为什么是“事件驱动”而非“连续录制”?
这是screenpipe设计上最精妙的一笔,也是其能做到低资源占用的根本。传统的屏幕录制软件,其工作模式是“无脑抓帧”,无论屏幕内容是否变化,都会以固定频率(如30FPS)捕获图像。这带来了两个致命问题:
- 存储爆炸:按30FPS、1080p分辨率、中等压缩计算,一小时视频约需1-2GB。一天工作8小时,存储需求是天文数字。
- 处理冗余:绝大部分相邻帧的内容是相同或高度相似的,对它们进行OCR或分析是巨大的计算浪费。
screenpipe反其道而行之,采用了事件驱动架构。它监听操作系统底层的事件流:
- 应用/窗口焦点切换:当你从浏览器切换到IDE,这是一个关键上下文切换。
- 用户输入事件:键盘输入暂停一段时间(比如你停下来思考)、鼠标点击、滚动操作。
- 系统事件:剪贴板内容变化。
只有当这些“有意义的事件”发生时,它才会触发一次捕获。一次捕获是一个原子单元,包含:
- 时间戳:精确到毫秒的事件发生时间。
- 屏幕帧:当前所有显示器的截图。
- 无障碍树:操作系统提供的、当前活动窗口所有UI元素的层级化文本和属性数据。这是比OCR更精准、更高效的数据源。
- 活动窗口信息:应用名称、窗口标题、浏览器URL(如果适用)。
实操心得:理解“无障碍树”的优势很多同类工具依赖OCR(光学字符识别)从图片中提取文字,这存在准确率问题(尤其是字体小、背景复杂时),且计算成本高。无障碍树是操作系统为辅助功能(如读屏软件)提供的API,能直接获取屏幕上按钮的文本、输入框的内容、标签的文字。screenpipe优先使用它,仅在无法获取时(如游戏、远程桌面)才降级到OCR。这保证了数据质量最高、处理速度最快。
2.2 数据流转与存储架构
理解了捕获逻辑,我们来看数据是如何被处理和存储的,这是实现高效搜索和AI调用的基础。
[OS事件] -> [screenpipe核心服务] -> [数据处理管道] -> [本地存储与索引] | | | | 事件监听 智能触发 文本提取/音频转写 SQLite + 全文搜索- 捕获层:以守护进程形式运行,监听上述系统事件。在macOS上,它可能用到
CGEventTap;在Windows上,可能是SetWinEventHook。这是平台相关的底层代码。 - 处理层:
- 图像与文本:将截图保存为JPEG(高压缩比),并与从无障碍树提取的文本关联存储。
- 音频:同时捕获系统音频和麦克风输入,通过本地运行的OpenAI Whisper模型进行实时语音转文字(STT)。这里的一个细节是说话人分离,它能区分不同人的声音,这对于会议记录至关重要。
- 存储与索引层:所有数据存入一个本地的SQLite数据库。为什么是SQLite?因为它轻量、单文件、无需服务,完美契合“本地优先”理念。数据库中使用FTS5(全文搜索)扩展模块,对提取的文本和转写的音频字幕建立倒排索引,实现毫秒级的关键词搜索。
- 服务层:一个本地HTTP服务器(默认端口3030)提供RESTful API。这是所有功能的前置网关,无论是桌面UI、CLI工具还是MCP服务器,都通过它与底层数据交互。
- 应用层:
- 桌面GUI:提供时间线浏览、搜索界面、设置管理。
- MCP服务器:实现Model Context Protocol,让外部AI助手能安全、结构化地查询数据。
- Pipes引擎:解析和执行用户定义的
pipe.md文件,运行自动化AI工作流。
2.3 隐私与安全的设计哲学
“所有数据都在本地”不是一句空话,而是贯穿整个架构的设计原则:
- 零网络传输:默认情况下,捕获的数据绝不会离开你的电脑。Whisper模型也是本地运行的。
- 本地AI集成:你可以配置它使用本地的Ollama服务,调用Llama、Mistral等开源模型进行处理,实现从数据捕获到AI分析的完全离线闭环。
- 加密同步(可选):如果你购买Pro服务在多设备间同步,数据会使用端到端加密(E2EE),服务提供商无法解密。
- 开源可审计:MIT许可证意味着任何人都可以审查其代码,确认没有后门。
这种设计让它在与Rewind.ai、Microsoft Recall等产品的对比中,赢得了注重隐私用户的青睐。对于开发者而言,开源也意味着无限的定制可能。
3. 从安装到上手指南
3.1 环境准备与安装选择
screenpipe提供了两种主要安装方式,适合不同用户。
方案一:桌面应用(推荐大多数用户)这是最省心的方式。直接访问官网下载对应系统的安装包(.dmg for macOS, .exe for Windows)。安装过程是标准的向导式操作。一次性付费(目前是$400终身)解锁全部功能,包含自动更新。对于不想折腾命令行、希望获得稳定图形化体验的用户,这是最佳选择。
方案二:命令行界面适合开发者、喜欢终端操作或想在服务器(无GUI)环境测试核心功能的用户。
# 使用npm直接运行最新版(无需全局安装) npx screenpipe@latest record运行后,它会引导你完成初始设置,并在后台启动记录服务。你可以通过npx screenpipe@latest --help查看所有命令。
注意事项:权限问题首次运行时,系统会频繁弹出权限请求(macOS尤其多),包括:
- 屏幕录制权限:必须授予,否则无法截图。
- 无障碍权限:必须授予,否则无法获取无障碍树数据。
- 麦克风权限:如果你需要录制音频。
- 磁盘访问权限:用于存储数据。 请务必在系统设置中全部允许。在Windows上,可能还需要在防病毒软件中添加例外。
3.2 基础配置与初体验
安装完成后,建议先进行基础配置,以平衡功能与资源占用。
- 打开设置界面:通常在系统菜单栏或托盘图标中找到screenpipe图标,点击进入设置。
- 配置捕获源:
- 屏幕:默认全屏捕获。如果你有多个显示器,可以在这里选择。建议开启“智能捕获”(即事件驱动模式)。
- 音频:选择需要录制的音频输入(麦克风)和输出(系统声音)设备。会议记录强烈建议两者都开。
- 设置存储限制:在“存储”选项中,可以设置历史记录保留时长(如30天),或设置总存储空间上限(如50GB)。screenpipe会自动清理旧数据。
- 体验时间线:打开主界面,你会看到一个纵向的时间线,类似一个视频编辑器的轨道。上面按时间排列着你所有的屏幕快照。点击任意一点,右侧会显示当时的完整截图和提取的文本。你可以像使用DVR一样,快速回溯你一天的工作。
- 进行第一次搜索:在搜索框里,尝试用自然语言搜索,比如“昨天下午我看到的那个蓝色图表”。AI语义搜索会理解你的意图,而不是简单匹配关键词。
3.3 连接你的AI助手(MCP集成)
这是发挥screenpipe威力的关键一步。以连接Claude Desktop为例:
- 确保screenpipe正在运行(桌面应用或
npx screenpipe record在后台运行)。 - 打开终端,执行以下命令,为Claude添加screenpipe作为上下文源:
这个命令会安装一个轻量的MCP适配器,并在Claude的配置中注册screenpipe服务器。claude mcp add screenpipe -- npx -y screenpipe-mcp - 重启Claude Desktop。
- 现在,你可以在Claude的聊天框中直接提问了!例如:
- “
what did I see in the last 5 minutes?”(过去五分钟我看了什么?) - “
summarize the conversation I had in Zoom this morning.”(总结一下我今天上午Zoom会议的内容。) - “
find all code snippets where I used the ‘axios’ library today.”(找出我今天所有使用过‘axios’库的代码片段。)
- “
Claude现在能够查询你的屏幕历史,并基于这些上下文给出更精准的回答。对于Cursor、VS Code with Continue等支持MCP的编辑器,配置流程类似,具体请参考它们的插件配置文档。
实操心得:MCP连接失败排查如果连接后AI助手无法查询数据,请按以下步骤检查:
- 确认screenpipe服务运行:检查任务管理器/活动监视器,或访问
http://localhost:3030/health看是否返回ok。- 检查MCP配置:Claude的配置通常位于
~/Library/Application Support/Claude/claude_desktop_config.json。确认其中包含了screenpipe的服务器配置。- 防火墙/网络设置:确保localhost(127.0.0.1)的3030端口没有被其他应用占用或防火墙阻止。
- 查看日志:运行
npx screenpipe@latest logs或在桌面应用的设置中查看日志,寻找错误信息。
4. 核心功能深度解析与实战
4.1 智能搜索:从关键词到语义理解
screenpipe的搜索不仅仅是字符串匹配。它结合了多种技术:
- 全文检索:基于SQLite FTS5,对OCR文本、无障碍树文本、音频转录文本进行快速关键词匹配。支持布尔操作符(AND, OR, NOT)和短语搜索。
- 元数据过滤:你可以通过UI或API轻松过滤:
- 应用:
app:Visual Studio Code - 时间范围:
after:2024-01-01 before:2024-01-02 - 内容类型:
type:audio或type:ocr
- 应用:
- 语义搜索:这是AI能力的体现。它使用嵌入模型(Embedding Model)将你的查询和所有历史记录片段转换为数学向量,然后计算相似度。这意味着你可以用“我上次看的那个关于狗的视频”来搜索,即使记录里没有“狗”这个字,但内容是关于“金毛犬”的,也能被找到。这需要你在设置中启用并配置一个嵌入模型(可以是本地Ollama的nomic-embed-text,也可以是OpenAI的API)。
实战案例:找回丢失的信息片段假设你记得上周在某个网页上看到过一个关于“React性能优化”的图表,但忘了是哪个网站。你可以搜索:“chart about React performance optimization last week”。结果会按相关性排序,并高亮显示匹配的文本片段和对应的屏幕截图,你一眼就能认出来。
4.2 Pipes:将自动化AI智能体变为现实
Pipes是screenpipe最革命性的功能。它允许你创建基于时间或事件触发的AI工作流。每个Pipe就是一个Markdown文件,放在~/.screenpipe/pipes/目录下。
一个Pipe文件的基本结构:
--- name: “Daily Standup Logger” schedule: “0 9 * * 1-5” # 工作日早上9点运行(Cron表达式) model: “claude-3-5-sonnet” # 使用的AI模型 allow-apps: [“Slack”, “Microsoft Teams”, “Zoom”] # 只允许访问这些应用的数据 deny-windows: [“*personal*”] # 拒绝标题包含“personal”的窗口 --- # 任务:生成每日站会摘要 请你分析我从昨天站会到今天站会之间,在Slack、Teams和Zoom中的所有沟通记录和屏幕活动。 请总结: 1. 我昨天完成了哪些工作? 2. 今天计划做什么? 3. 遇到了哪些阻塞问题? 将总结输出为Markdown格式,并保存到我的Obsidian日记库中今天的日期文件下。这个Pipe会在每个工作日上午9点自动运行。screenpipe的Pipes引擎会:
- 根据YAML前言的权限设置(
allow-apps,deny-windows),筛选出可访问的数据。 - 将筛选后的数据(过去24小时内在指定应用中的屏幕文本和音频转录)作为上下文,连同Markdown中的提示词(Prompt)一起发送给指定的AI模型(如Claude)。
- AI模型执行任务,生成站会摘要。
- 引擎可以调用预定义的工具(Tool),如“写入文件”、“发送HTTP请求”等,将结果保存到Obsidian。
你可以用Pipes做什么?
- 自动会议记录员:每次Zoom会议结束后,自动生成带有行动项的会议纪要,并发送到Notion。
- 代码上下文同步器:当你打开某个GitHub Issue页面时,自动将相关代码文件和历史讨论摘要推送给你的IDE AI助手。
- 灵感捕捉器:当你浏览Product Hunt或技术博客超过10分钟,自动提取核心观点并存入你的知识库。
- 健康提醒器:检测到你在某个应用(如IDE)前连续工作超过2小时,自动通过系统通知提醒你休息。
避坑指南:Pipe开发的权限控制Pipe的YAML权限配置是确定性的、在操作系统层面强制执行的,而不是依赖AI“自觉遵守”。这意味着:
allow-apps: [“Slack”]的Pipe,AI模型绝对无法读取你Chrome浏览器中的数据,即使它在Prompt里要求。- 这种控制通过三层实现:技能门控(AI模型根本不知道有查询其他应用的接口)、代理拦截(请求在发送前被拦截)、服务器中间件(每个Pipe有独立的加密令牌)。这为企业部署提供了坚实的安全基础。
- 开发建议:开始时先设置宽松的权限(如不设
allow-apps),让Pipe跑通逻辑。然后再逐步收紧权限,遵循最小权限原则。
4.3 音频处理与会议记录实战
对于远程工作者,音频记录是刚需。screenpipe的音频处理流程如下:
- 捕获:同时录制系统声音(对方说话)和麦克风(你说话)。
- 分离:利用音频处理算法进行声源分离和说话人分类,区分“你”和“其他人”。
- 转写:使用本地Whisper模型将音频流实时转换为文字。Whisper的优势是对背景噪音和不同口音有较好的鲁棒性。
- 同步:将转写的文字与屏幕截图的时间轴精确对齐。
实战设置:打造自动会议纪要系统
- 在screenpipe设置中,确保音频捕获已开启,并正确选择了麦克风和扬声器设备。
- 开会时,正常使用Zoom/Teams/Meet。screenpipe在后台默默记录。
- 会议结束后,你可以在screenpipe的时间线中看到一条“音频”轨道。点击播放可以回顾录音。
- 更高效的方式是使用搜索或创建一个Pipe。例如,搜索“
audio today meeting budget”,可以直接定位到相关讨论部分。 - 进阶:创建一个Pipe,计划在每个工作日下午6点运行,搜索当天所有包含“Zoom”或“Meet”窗口标题的音频记录,使用AI总结成“今日会议纪要”,并邮件发送给你自己。
5. 高级配置、性能调优与问题排查
5.1 性能调优:在资源与功能间取得平衡
虽然screenpipe设计高效,但在老旧硬件或需要极限性能的场景下,仍需微调。
| 配置项 | 默认/推荐值 | 调优建议 | 对资源的影响 |
|---|---|---|---|
| 捕获分辨率 | 原生分辨率 | 降低为原生的50%-75% | 显著降低CPU/GPU负载和存储占用,文本识别精度略有下降。 |
| 捕获帧率(事件驱动) | 由事件触发 | 调整“空闲捕获间隔”(如从30秒改为60秒) | 降低低频活动时的存储占用。 |
| OCR引擎 | 优先无障碍树 | 确保无障碍权限开启。在Linux上可尝试不同Tesseract语言包。 | 无障碍树比OCR快得多且准。 |
| 音频转录 | Whisper本地 | 可关闭或选择更小的Whisper模型(如tiny或base) | 极大影响CPU(尤其是实时转录)。关闭后仅存音频,不可搜索。 |
| 嵌入模型(语义搜索) | 无(或本地小模型) | 若不常用语义搜索,可关闭。或使用Ollama的nomic-embed-text(约100MB)。 | 嵌入模型加载占用内存,计算向量消耗CPU。 |
| 历史数据保留 | 30天 | 根据磁盘空间调整。可设置为14天或按容量自动清理。 | 直接影响存储占用。 |
在终端中查看实时资源占用:
# 如果你用CLI启动,日志会显示资源使用情况 npx screenpipe record --verbose # 或者使用系统工具 # macOS top -pid $(pgrep -f screenpipe) # Linux htop -p $(pgrep -f screenpipe)5.2 常见问题与解决方案速查表
以下是我在长期使用和测试中遇到的一些典型问题及解决方法。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 屏幕捕获失败,提示“无权限” | 操作系统屏幕录制权限未授予。 | 前往系统设置 > 隐私与安全性 > 屏幕录制,确保screenpipe应用被勾选。重启应用。 |
| 无法获取窗口文字(全是图片OCR) | 无障碍权限未授予。 | 前往系统设置 > 隐私与安全性 > 辅助功能,确保screenpipe应用被勾选。重启应用。 |
| CPU占用持续过高(>20%) | 1. 实时音频转录开启。 2. 高分辨率多显示器。 3. 后台有频繁变化的动画/视频。 | 1. 关闭或使用更小的Whisper模型。 2. 降低捕获分辨率。 3. 在设置中排除相关应用(如游戏、视频播放器)。 |
| 磁盘空间增长过快 | 1. 捕获频率过高。 2. 未设置存储限制。 3. 录制了高帧率视频内容。 | 1. 增加“空闲捕获间隔”。 2. 设置保留时长或存储上限。 3. 在“应用排除列表”中添加视频播放器、游戏等。 |
| MCP连接成功但AI助手查询无结果 | 1. 时间范围不对。 2. 查询语法错误。 3. AI助手上下文窗口限制。 | 1. 在screenpipe自己的UI中尝试相同搜索,确认是否有数据。 2. 使用更简单的关键词测试。 3. 检查AI助手的上下文令牌限制,过于久远的数据可能被截断。 |
| 音频转录文字不准确 | 1. 背景噪音大。 2. 非主流语言或口音重。 3. Whisper模型不合适。 | 1. 使用外接麦克风,改善录音环境。 2. 在设置中尝试切换Whisper模型版本或语言。 3. 对于重要会议,可考虑后期用更精准的云服务(如Deepgram)重新处理音频文件(需Pro版)。 |
| Pipe没有按计划执行 | 1. Cron表达式错误。 2. screenpipe服务未运行。 3. Pipe文件语法错误。 | 1. 使用在线Cron表达式验证器检查。 2. 确保 npx screenpipe record或桌面应用在运行。3. 查看screenpipe日志 ( ~/.screenpipe/logs/),通常会有详细的错误信息。 |
5.3 开发者API与二次开发
对于开发者,screenpipe提供了完整的本地REST API和JavaScript SDK,允许你将其集成到自己的自动化脚本或应用中。
基础API调用示例(使用curl):
# 健康检查 curl http://localhost:3030/health # 搜索过去24小时内包含“error”的屏幕内容 curl “http://localhost:3030/search?q=error&content_type=ocr&limit=5&start_time=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ)” # 获取最近10条音频转录记录 curl “http://localhost:3030/audio?limit=10”使用JavaScript SDK进行更复杂的查询:
import { pipe } from “@screenpipe/js”; async function findRecentCodeContext() { const results = await pipe.queryScreenpipe({ q: “function calculateTotal”, // 自然语言查询 contentType: “ocr”, // 只搜索屏幕文本 app: “Code”, // 限制在VS Code或同类IDE limit: 10, startTime: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(), // 最近2小时 }); for (const result of results) { console.log(`At ${result.timestamp}, in ${result.app}:`); console.log(`Snippet: ${result.textSnippet}`); console.log(`---`); } }你可以基于这些API构建:
- 自定义仪表盘:可视化你的工作习惯,统计在不同应用上花费的时间。
- 自动化工作流:当捕获到特定错误日志时,自动在项目管理工具中创建工单。
- 知识库构建器:定期将屏幕中出现的优秀代码片段、文章摘要自动归档到你的笔记系统。
screenpipe不仅仅是一个记录工具,它通过本地化、事件驱动和强大的可扩展性,为我们提供了一个构建高度个性化、隐私安全的数字记忆与自动化系统的基石。从被动搜索到主动的智能体驱动自动化,它正在重新定义我们与个人电脑的交互方式。