机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
筛选
自托管的 Twitter/X 书签管理器,具有 AI 支持的组织功能
导入 · 分析 · 分类 · 搜索 · 探索
Siftly是什么?
Siftly 将你的 Twitter/X 收藏夹变成一个可搜索、分类、可视化的知识库——完全在你的设备上运行。无需云端、无需订阅、无需浏览器扩展。除你配置的 AI API 调用外,一切数据都保持本地。
它在你的收藏夹上运行一个四阶段 AI 流程:
📥 Import (built-in bookmarklet or console script — no extensions needed)
↓
🏷️ Entity Extraction — mines hashtags, URLs, mentions, and 100+ known tools from raw tweet data (free, zero API calls)
↓
👁️ Vision Analysis — reads text, objects, and context from every image/GIF/video thumbnail (30–40 visual tags per image)
↓
🧠 Semantic Tagging — generates 25–35 searchable tags per bookmark for AI-powered search
↓
📂 Categorization — assigns each bookmark to 1–3 categories with confidence scores
管道运行后,你会得到:
- AI 搜索 — 按意义查找书签,而不仅仅是关键词(“关于加密货币暴跌的搞笑表情包”)
- 交互式思维导图 — 可视化探索你的整个书签图谱
- 过滤浏览 — 网格或列表视图,可按类别、媒体类型和日期过滤
- 导出工具 — 下载媒体,导出为 CSV / JSON / ZIP
快速开始
先决条件
- Node.js 18
- npm(随 Node.js 一起提供)
就这些。 如果你已经安装并登录了 Claude Code CLI,AI 功能会自动工作 — 无需 API 密钥。
选项 A — 一条命令(推荐)
git clone https://github.com/viperrcrypto/Siftly.git
cd Siftly
./start.sh
start.sh 安装依赖项,设置数据库,检查 Claude CLI 认证,并自动打开 http://localhost:3000 。
选项 B — 使用 Claude Code
如果你使用 Claude Code 来设置项目,它会读取 CLAUDE.md 并完全了解如何开始。只需打开项目文件夹:
git clone https://github.com/viperrcrypto/Siftly.git
claude Siftly/
Claude Code 将使用您现有的 Claude 订阅来处理设置并启动应用程序 —— 无需额外配置。
选项 C —— 手动设置
git clone https://github.com/viperrcrypto/Siftly.git
cd Siftly
npm install
npx prisma generate
npx prisma migrate dev --name init
npx next dev
AI 身份验证
Siftly会自动检测最适合的认证方法——在大多数常见情况下无需配置。
优先顺序
| # | 方法 | 操作 |
|---|---|---|
| 1 | Claude Code CLI (零配置) | 已经登录?Siftly会自动从macOS钥匙串读取你的会话 |
| 2 | 在设置中使用API密钥 | 打开应用设置并粘贴你的密钥 |
| 3 | ANTHROPIC_API_KEY环境变量 |
在.env.local或你的shell环境中设置 |
| 4 | 本地代理 | 将ANTHROPIC_BASE_URL设置为任意Anthropic兼容的端点 |
Claude Code CLI(无需API密钥)
如果你使用Claude Code,你已经登录。Siftly会从macOS钥匙串检测你的会话,并自动使用你的Claude订阅(免费/Pro/Max)。
在此功能激活时,设置页面会显示绿色“检测到Claude CLI — 无需API密钥”徽章,以及你的订阅等级。
注意: 仅限macOS。在Linux/Windows上,请在设置中添加API密钥。
获取API密钥(如需要)
- 访问 console.anthropic.com
- 创建新的API密钥
- 打开Siftly → 设置 → 粘贴密钥
新账户包含5美元免费额度——足够用于以Haiku价格(~$0.00025/书签)保存数千条书签。
导入您的书签
Siftly 内置了导入工具 —— 无需浏览器扩展。前往导入页面并选择任一方法:
方法 A — 书签小工具 (推荐)
- 在 Siftly 侧边栏中进入导入
- 将“导出 X 个书签”链接拖到浏览器的书签栏 (或右键点击书签栏 → 添加书签 → 粘贴 URL)
- 登录 X 后访问 x.com/i/bookmarks
- 点击书签栏中的 “导出 X 个书签” —— 页面上会出现紫色按钮
- 点击 “▶ 自动滚动” —— 工具会自动滚动并捕获所有书签
- 完成后,点击紫色 “导出 N 个书签” 按钮 ——
bookmarks.json会自动下载 - 回到 Siftly → 导入 → 拖放或上传文件
方法 B — 浏览器控制台脚本
- 登录 X 后访问 x.com/i/bookmarks
- 打开开发者工具:按
F12(Windows/Linux) 或⌘⌥J(Mac),然后进入控制台标签 - 从 Siftly 导入页面复制控制台脚本,粘贴到控制台中并按回车
- 点击 “▶ 自动滚动” 并等待所有书签被捕获
- 点击导出按钮 ——
bookmarks.json会自动下载 - 回到 Siftly → 导入 → 上传文件
重新导入
随时可重新导入 —— Siftly 会自动跳过重复项,只添加新的书签。
AI 分类
一旦导入,分类会自动开始。 你也可以从以下位置手动触发它:
- 导入 页面(上传后)
- 思维导图 页面(当书签未分类时)
- 侧边栏中的 分类 页面
四阶段管道
| 阶段 | 功能 |
|---|---|
| 实体提取 | 从存储的推文 JSON 中提取标签、URL、@提及以及 100 个已知工具/产品名称 — 免费,零 API 调用 |
| 视觉分析 | 分析每个图像、GIF 和视频缩略图 — OCR 文字、物体、场景、情绪、表情包模板,每张图像 30–40 个视觉标签 |
| 语义标签 | 结合推文文本与图像上下文,为每个书签生成 25–35 个精准搜索标签。同时提取情绪、人物和公司名称。 |
| 分类 | 使用所有丰富数据为每个书签分配 1–3 个类别,并附带置信评分 |
该管道是 增量式 的 — 如果中断,它会从中断处继续。使用 "重新运行全部(强制所有)" 以重新分析已经处理过的书签。
功能
🔍 AI 搜索
跨所有收藏数据的自然语言查询:
- “有关加密货币崩盘的搞笑表情包”
- “React Hooks 教程”
- “比特币价格图表”
- “最佳 AI 编程工具”
同时搜索推文文本、图像 OCR、视觉标签、语义标签和类别,使用全文搜索索引 (FTS5) 并进行 Claude 语义重新排序。结果按相关性排名,并为每个匹配项生成 AI 解释。
🗺️ 思维导图
显示按类别组织的所有收藏的交互式力导向图:
- 展开/折叠任意类别以查看其收藏
- 点击收藏节点以在 X 打开原始推文
- 按类别的颜色编码图例
- 如果收藏尚未分类,内联 AI 分类 按钮可在不离开页面的情况下启动流程
📚 浏览与筛选
- 网格视图(瀑布流布局)或 列表视图
- 按类别、媒体类型(照片/视频)或搜索文本筛选
- 按最新或最旧排序
- 每页 24 项的分页
- 活动筛选标签 — 可单独或全部移除
- 悬停任意卡片以下载媒体或跳转到原始推文
⚙️ 类别
8 个默认类别,预设有 AI 可读描述:
| 类别 | 颜色 |
|---|---|
| 搞笑表情包 | 琥珀色 |
| AI 资源 | 紫罗兰色 |
| 开发工具 | 青色 |
| 设计 | 粉色 |
| 金融与加密货币 | 绿色 |
| 生产力 | 橙色 |
| 新闻 | 靛蓝色 |
| 综合 | 石板色 |
创建自定义类别,可设置名称、颜色和可选描述。描述会在分类时直接传递给 AI —— 描述越具体,结果越准确。
📤 导出
- CSV — 与电子表格兼容的所有字段
- JSON — 完整结构化数据导出
- ZIP — 导出某个类别的书签及所有媒体文件,带有
manifest.csv
⌨️ 命令面板
按下 Cmd+K(Mac)或 Ctrl+K(Windows/Linux)即可从应用中的任何位置搜索所有书签。
配置
所有设置都可以在 Settings(设置) 页面 /settings 或通过环境变量进行管理:
| 设置 | 环境变量 | 描述 |
|---|---|---|
| Anthropic API Key(Anthropic API 密钥) | ANTHROPIC_API_KEY |
如果已登录 Claude CLI 可选 — 否则 AI 功能需要 |
| API Base URL(API 基础 URL) | ANTHROPIC_BASE_URL |
为代理或本地兼容 Anthropic 的模型自定义端点 |
| AI Model(AI 模型) | 仅限设置页面 | Haiku 4.5(默认,最快/最便宜)、Sonnet 4.6、Opus 4.6 |
| OpenAI Key(OpenAI 密钥) | OPENAI_API_KEY |
可替代提供者 — GPT-4.1 Mini/Nano/Full, o4-mini, o3 |
| MiniMax Key(MiniMax 密钥) | MINIMAX_API_KEY |
可替代提供者 — M2.7(1M 上下文)、M2.5、M2.5 高速 |
| MiniMax Base URL(MiniMax 基础 URL) | MINIMAX_BASE_URL |
自定义 MiniMax API 端点(默认:https://api.minimax.io/v1) |
| Database(数据库) | DATABASE_URL |
SQLite 文件路径(默认:file:./prisma/dev.db) |
自定义 API 端点
将 Siftly 指向任何兼容 Anthropic 的服务器:
ANTHROPIC_BASE_URL=http://localhost:8080
架构
siftly/
├── app/
│ ├── api/
│ │ ├── analyze/images/ # Batch image vision analysis (GET progress, POST run)
│ │ ├── bookmarks/ # List, filter, paginate, delete
│ │ │ └── [id]/categories/ # Per-bookmark category management
│ │ ├── categories/ # Category CRUD
│ │ │ └── [slug]/ # Individual category operations
│ │ ├── categorize/ # 4-stage AI pipeline (start, status, stop)
│ │ ├── export/ # CSV, JSON, ZIP export
│ │ ├── import/ # JSON file import with dedup + auto-pipeline trigger
│ │ │ ├── bookmarklet/ # Bookmarklet-specific import endpoint
│ │ │ └── twitter/ # Twitter-specific import endpoint
│ │ ├── link-preview/ # Server-side OG metadata scraper
│ │ ├── media/ # Media proxy/download endpoint
│ │ ├── mindmap/ # Graph nodes + edges for visualization
│ │ ├── search/ai/ # Natural language semantic search (FTS5 + Claude)
│ │ ├── settings/ # API key + model config
│ │ │ ├── cli-status/ # Claude CLI auth detection endpoint
│ │ │ └── test/ # API key validation endpoint
│ │ └── stats/ # Dashboard stats
│ ├── ai-search/ # AI search page
│ ├── bookmarks/ # Browse, filter, paginate
│ ├── categories/ # Category management
│ │ └── [slug]/ # Category detail page
│ ├── categorize/ # Pipeline monitor with live progress
│ ├── import/ # 3-step import flow (instructions → upload → categorize)
│ ├── mindmap/ # Interactive graph
│ ├── settings/ # Configuration
│ └── page.tsx # Dashboard
│
├── components/
│ ├── mindmap/ # Mindmap canvas, nodes, edges
│ │ ├── mindmap-canvas.tsx
│ │ ├── category-node.tsx
│ │ ├── tweet-node.tsx
│ │ ├── root-node.tsx
│ │ ├── chain-edge.tsx
│ │ └── mindmap-context.ts
│ ├── command-palette.tsx # Cmd+K global search
│ ├── nav.tsx # Sidebar navigation
│ └── theme-toggle.tsx # Light/dark mode
│
├── lib/
│ ├── categorizer.ts # AI categorization logic + default categories
│ ├── claude-cli-auth.ts # Claude CLI OAuth session detection (macOS keychain)
│ ├── vision-analyzer.ts # Image analysis + batch semantic tagging
│ ├── image-context.ts # Shared image context builder
│ ├── fts.ts # SQLite FTS5 full-text search index
│ ├── rawjson-extractor.ts # Entity extraction from raw tweet JSON
│ ├── parser.ts # Multi-format JSON parser
│ ├── exporter.ts # CSV, JSON, ZIP export
│ ├── types.ts # Shared TypeScript types
│ └── db.ts # Prisma client singleton
│
├── prisma/
│ └── schema.prisma # SQLite schema
│
├── start.sh # One-command launcher (install + DB setup + open browser)
└── CLAUDE.md # Instructions for Claude Code AI assistant
数据库模式
Bookmark — tweet text, author, date, raw JSON, semantic tags, enrichment metadata
├── MediaItem — images / videos / GIFs with AI-generated image tags
└── BookmarkCategory — category assignments with confidence scores (0–1)
Category — name, slug, hex color, AI-readable description
Setting — key-value store (API keys, model preferences)
ImportJob — tracks import file status and progress
Prisma SQLite FTS5
Siftly 使用 Prisma 迁移进行关系模式更改。在开发中,当模式更改时运行 npx prisma migrate dev --name <change-name>。对于运行时/生产风格的启动,使用 npx prisma migrate deploy 应用已提交的迁移。FTS5(bookmark_fts)在运行时由 lib/fts.ts 管理,而不是在 schema.prisma 中管理。这是有意为之,因为 Prisma 目前不能直接建模 SQLite 虚拟表定义。
有关 Prisma 命令和工作流的详细信息,请参见:
- https://www.prisma.io/docs/orm/prisma-migrate/workflows/development-and-production
- https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client
技术栈
| 技术 | 版本 | 角色 |
|---|---|---|
| Next.js | 16 | 全栈框架(应用路由器) |
| TypeScript | 5 | 全程类型安全 |
| Prisma | 7 | ORM 迁移 |
| SQLite | — | 本地数据库 — 零配置,包括 FTS5 |
| Tailwind CSS | v4 | 样式 |
| Anthropic SDK | — | 视觉、语义标签、分类、搜索 |
| MiniMax | — | 替代 AI 提供商(M2.7 1M 上下文,M2.5) |
| @xyflow/react | 12 | 交互式思维导图图形 |
| Framer Motion | 12 | 动画 |
| Radix UI | — | 可访问的 UI 原语 |
| JSZip | — | 分类 ZIP 导出 |
| Lucide React | — | 图标 |
开发
# One-command start (installs, sets up DB, opens browser)
./start.sh
# Or manually:
npm install
npx prisma generate
npx prisma migrate dev --name init
npx next dev
# Type check
npx tsc --noEmit
# Open database GUI
npx prisma studio
# Build for production
npm run build && npm start
自定义类别
在 lib/categorizer.ts 中编辑 DEFAULT_CATEGORIES 。每个条目需要:
{
name: 'My Category', // Display name
slug: 'my-category', // URL-safe identifier (must be unique)
color: '#6366f1', // Hex color shown in UI
description: '...', // Natural language description — used verbatim in AI prompts
}
description 字段直接决定 AI 如何对书签进行分类。请具体说明。
添加已知工具
在 lib/rawjson-extractor.ts 中将域字符串添加到 KNOWN_TOOL_DOMAINS,以便实体提取器自动识别推文数据中指向这些工具的链接。
隐私
- 所有数据都存储在您计算机上的 本地 SQLite 文件中
- 唯一的外部调用是您配置的 AI 提供者(推文文本、图像数据)
- 没有遥测,没有跟踪,也不需要账户
- 您的书签永远不会接触任何第三方服务器,除了您配置的 AI 端点
支持开发
如果 Siftly 为你节省了时间,考虑留下小费 ☕
许可证
MIT — 参见 LICENSE
由 @viperr 构建 · 自托管 · 无扩展 · 无云
- 本文标题:Siftly - 本地 Twitter/X 书签管理器
- 本文链接:https://cn121.com/productivity/viperrcrypto-siftly.html
- 原项目:viperrcrypto/Siftly 版权归原作者 viperrcrypto 及贡献者所有
- 收录信息:本站于 2026-10-10 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 viperrcrypto/Siftly。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。