☰
你的书签数据到底去了哪里?Siftly本地优先架构与隐私安全全解析
2026/9/30 4:44:02 网站建设 项目流程

你的书签数据到底去了哪里?Siftly本地优先架构与隐私安全全解析

【免费下载链接】SiftlyLocal Twitter/X bookmark organizer with AI categorization and mindmap visualization项目地址: https://gitcode.com/gh_mirrors/si/Siftly

Siftly 是一个运行在你自己电脑上的本地优先 Twitter/X 书签管理工具:导入书签后,AI 自动分类打标,并提供思维导图与语义搜索。它没有云端账户、没有订阅、没有遥测追踪——你的书签数据默认永远不会离开本机,这是理解它隐私边界的关键。

一、本地优先意味着什么?

"本地优先(Local-First)"不是营销口号,而是指数据的默认存储位置和主权:

  • 数据存在哪?全部落在本机一个 SQLite 数据库文件里(默认prisma/dev.db),路径可在 lib/db.ts 中看到,通过环境变量DATABASE_URL覆盖。
  • 数据归谁?归你。删掉这个文件等于彻底删除所有书签,反过来备份一个文件就完成全部迁移。
  • 谁在看?没有遥测、没有追踪、没有账号体系——README 的 Privacy 章节 明确写道:唯一的例外是"你主动配置的 AI 接口"。

换句话说,Siftly 的隐私模型可以用一句话概括:数据留在本地,AI 调用透明可控,其他第三方服务器一概不碰。

二、数据流全景:从书签到 SQLite

理解"数据去了哪里",先看数据"怎么流动":

你的 X 书签页 │ ① 内置 Bookmarklet 自动滚动抓取 ▼ bookmarks.json(下载到本地) │ ② 拖拽上传到 Import 页面 ▼ SQLite 数据库(Bookmark / MediaItem / Category 等表) │ ③ AI 四级流水线:实体提取 → 视觉分析 → 语义打标 → 分类 ▼ 带分类、标签、置信度的完整知识库
  • 导入入口:app/api/import/ 目录下的路由负责接收 JSON 文件并自动去重;
  • 表结构设计:prisma/schema.prisma 定义了Bookmark、MediaItem、BookmarkCategory、Category、Setting、ImportJob六张表——你的推文原文、原始 JSON、AI 标签、分类置信度全部存在这些表里;
  • 搜索加速:SQLite 的 FTS5 全文索引在 lib/fts.ts 中于运行时维护,让"按语义搜索"能在纯本地数据库上跑起来。

整个过程不经过任何 Siftly 官方的"服务器",因为 Siftly 根本没有服务器——"云端"就是你的硬盘。

三、唯一的例外:AI 调用会发什么出去?

Siftly 的 AI 功能(图像视觉分析、语义打标、智能搜索)确实需要把数据发给大模型提供方,这是本地优先架构中唯一的数据出口。它的设计是"透明且可选"的:

1. 发出什么?

  • 推文文本与图片数据,仅在你触发 AI 流水线时发送;
  • 实体提取(hashtags、URL、@提及、100+ 已知工具名)是纯本地完成的,零 API 调用,这部分源码在 lib/rawjson-extractor.ts。

2. 发给谁?

你配置谁就发给谁。支持 Anthropic、OpenAI、MiniMax 三家,切换逻辑见 lib/settings.ts。更妙的是支持ANTHROPIC_BASE_URL指向任意本地代理或本地模型——把接口指向 localhost,数据就一步都不出机器。

3. 用不用都行?

可以。不配置任何 AI 密钥时,导入、浏览、筛选、导出、思维导图照常工作,只有 AI 打标和语义搜索不可用。隐私与功能之间的权衡,完全由你把控。

四、密钥与凭证如何保管?

API 密钥本身也是敏感数据,Siftly 的存储策略值得参考:

凭证类型存储位置说明
API 密钥本地 SQLite 的Setting表存在你自己的数据库文件里,不出本机
Claude CLI 登录态系统钥匙串(macOS)/~/.claude/目录只读取你已登录的会话,lib/claude-cli-auth.ts 展示了读取逻辑,绝不回传任何地方
Docker 环境变量docker/.env(已 gitignore)docker/README.md 明确注明"密钥只留在本地"

值得注意的是 lib/claude-cli-auth.ts 中的认证优先级:请求覆盖键 → 数据库保存的密钥 → CLI 会话 → 环境变量 → 本地代理。整个解析链都在你本机进程内完成,没有第三方中转。

五、访问控制与供应链安全细节

很多本地工具把"安全"止步于"数据在本地",Siftly 在细节上还做了两层防护:

1. 可选的 HTTP 基础认证

middleware.ts 实现了全局 Basic Auth:在.env中设置SIFTLY_USERNAME和SIFTLY_PASSWORD后,局域网内访问 Siftly 需要登录。默认不启用(纯本地使用零配置),但暴露到内网时一开关即生效。

2. 媒体代理白名单

app/api/media/route.ts 中的媒体代理只允许转发pbs.twimg.com等 5 个固定域名,且强制 HTTPS——这不是功能需求,而是防止 SSRF(服务器端请求伪造)的典型防御:你的本地服务绝不会被诱导去访问任意外部地址。

3. 漏洞报告通道

安全问题走私有渠道而非公开 Issue,响应承诺 48 小时内确认,详见 SECURITY.md。MIT 许可证源码开放,所有"安全承诺"都可直接在代码中逐行验证——这是本地优先工具最独特的安全优势:你审计不了大厂的黑盒,但可以审计 Siftly 的每一行。

六、Docker 部署下数据照样"本地"

用 Docker 跑 Siftly 会引入一层容器隔离,但数据主权不变:

  • SQLite 文件存放在命名卷siftly_data → /data/dev.db,docker compose down重启不丢数据;
  • 备份一条命令完成,重置也是一条命令——见 docker/README.md 的 Data Persistence 章节;
  • 密钥通过docker/.env注入,该文件被 gitignore,永不入库。
本地开发 → prisma migrate dev 镜像构建 → prisma generate 容器启动 → prisma migrate deploy → next start

数据始终绑定在本地卷上,容器可随时销毁重建,书签毫发无损。

七、如何自己动手验证隐私承诺?

本地优先架构最大的好处是"可验证"。你可以亲手做三件事来确认:

  1. 抓包验证:不配置 AI 密钥时运行 Siftly,用任意抓包工具确认除 X 媒体 CDN 外没有任何出站请求;
  2. 翻数据库:npx prisma studio打开数据库 GUI,确认所有书签都在dev.db这一个文件里;
  3. 读源码:全文检索项目中所有fetch(调用,逐一核对目的地——你会看到媒体代理白名单和 AI 配置端点是仅有的两个出口。

总结:一条清晰的隐私边界

数据类型去向是否可配置
书签文本、图片、AI 标签仅本地 SQLite可改存储路径
实体提取、搜索、分类浏览纯本地计算—
AI 打标、语义搜索你指定的模型服务商可换供应商/本地代理/关闭
API 密钥本地 SQLiteSetting表—
遥测、账号、追踪无—

Siftly 的"本地优先"不是把云端服务搬到家里,而是从架构第一天就把数据主权交还给你:一个文件即全部数据,一个开关即数据边界。对于把书签当作个人知识库的 X 用户来说,这套"默认本地、例外透明"的隐私模型,值得作为自选部署(self-hosted)工具的参考范本。

如需部署,从 start.sh 一键启动脚本开始:

git clone https://gitcode.com/gh_mirrors/si/Siftly.git cd Siftly ./start.sh

【免费下载链接】SiftlyLocal Twitter/X bookmark organizer with AI categorization and mindmap visualization项目地址: https://gitcode.com/gh_mirrors/si/Siftly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询