Skip to content
wenluwindyPublic

About

Spoor — 本地优先空间便签画布

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Spoor

Spoor

把思考铺在画布上,让 AI 站到画布里来——本地优先的无限画布笔记与研究工具。

Spoor(踪迹)是一张装着 AI 的无限画布。想法、资料、PDF、网页、图片都以卡片落在空间里,用连线表达它们之间的关系;四个性格各异的 AI 人格在这张画布上替你反问、联想、改写与推演,研究实验室则把一个问题拆成计划、逐步检索分析,最后把整份研究摊回画布。

它和聊天机器人的根本区别:AI 的每一次回答都是画布上的一张卡——可以移动、连线、改写、打标签,可以重新生成并翻看历史版本;改了上游的想法,还能顺着连线把下游整条重算一遍。思考的痕迹不会沉进聊天记录里,而是留在空间中,随时接得上。

它和云端白板的根本区别:一切都在你自己的电脑上,而且是文件。每张画布就是数据目录里的一个 .canvas 文件(JSON Canvas 开放格式,Obsidian 直接打得开),随编辑自动更新;把数据目录放进网盘同步文件夹,另一台电脑启动时自动合并改动。模型用你自己的 API Key(存在系统加密存储里)或本地 GGUF。不注册账号,不内置密钥,不上传任何东西。


能做什么

  • 无限画布便签 — 拖拽、缩放、连线,把想法铺在空间里,而不是塞进文件夹。每张卡片左侧是连线入口、右侧是出口,连线走曲线并带箭头,方向一眼能看出来。
  • 右键随处新建 — 在画布空白处右键即可建便签、主题卡、生图节点,插入图片/视频/文档,节点落在你点击的位置。
  • AI 生图节点 — 连图片进来当参考图,连文本进来当提示词,也可以直接在节点里写。支持火山方舟 Seedream、OpenAI、Gemini(Nano Banana)与自定义 OpenAI 兼容端点;一个服务下可挂多个生图模型,节点上随时切换。生成历史永久保留、可逐张翻看与删除,也能一键「输出为图片节点」再作为下游节点的参考图。
  • 跟 AI 说话就能建节点 — 在底部输入栏说「建三个便签,分别写…」,AI 直接把它们放到画布上;问问题则照常生成一张 AI 回答卡。
  • 给 AI 带附件 — 输入栏可附加图片与 docx/txt/md:图片作为参考图,文档作为正文上下文。附件只服务这一次提问,不会落到画布上。
  • 多个人格 Agent — 真知镜负责反问,编织者负责联想,熨烫师负责文字实验,占星术负责情景推演。
  • 上下文 AI 便签 — 选中便签后让 AI 分析,结果会作为新便签留在画布上。
  • 多选批量操作 — 框选或多选后右键:全部连到一个节点、合成长文、对齐与等间距分布、打标签、存为模板、批量删除。
  • 对象吸附与辅助线 — 拖动时贴近别的卡片的边缘或中线会自动吸附并画出参考线;对象吸附优先于网格。
  • 小地图 — 右下角缩略图显示全部卡片与视口位置,点击/拖动直接跳转,可收起。
  • 节点标签与颜色 — 右键打标签(卡上显示徽章、可搜索),双击卡片改颜色字体——现在会保存,且随导出走。
  • 模板 — 把一组连好线的卡片存成模板,空白处右键随时插入复用。
  • AI 卡生成历史 — 每次生成/重生成都留档,卡上左右翻版本、固定某一版为当前内容;重跑不再毁掉旧回答。
  • 撤销与重做 — Ctrl+Z / Ctrl+Shift+Z,覆盖建卡、删卡、移动、拉伸、连线与改字。整组拖拽算一步,长按方向键走一路也算一步。AI 生成期间暂时禁用,等它写完再撤。
  • 全套键盘操作 — Delete 删选中、Ctrl+A 全选、Ctrl+C/X/V 复制剪切粘贴(带连线,跨窗口可用)、Ctrl+D 复制、方向键微调(开着网格时按格走,Shift 加十倍)、Ctrl+0 复位视图、Ctrl+1 适应内容。焦点在输入框里时一律让给原生行为。
  • 画布内搜索 — Ctrl+F 搜便签正文、主题说明、文件名、生图提示词、标签与人设名,回车逐个跳过去并居中;别的画布里的命中按画布聚合列在下面,点一下就切过去接着找。
  • 全局搜索 — Ctrl+Shift+F 一个面板搜全部画布、长文与研究会话,按来源分组,回车直达。
  • 标签视图 — 画布顶部标签栏,点亮标签让命中的卡保持、其余淡成幽灵态;标签可重命名、合并、删除,一步撤销。
  • 演示模式 — 右键「开始演示」按连线关系逐卡聚焦放映,顺序可调、方向键翻页;区域框上右键就是"只讲这一块"。
  • AI 整理画布 — 框选散卡右键「AI 分组整理」,模型按主题聚类,虚影预览确认后落成区域框,一步撤销。
  • 人格接力 — 任何有正文的卡右键「让人格接着说」:真知镜挑完刺,让熨烫师接着改。
  • 笔记落文件 — 每张画布一个 .canvas 文件躺在 SpoorData/notes/(Obsidian 可开),随编辑自动镜像;经网盘同步的多设备改动在启动时按卡片级时间戳自动合并,合并前自动快照。
  • 数据带得走 — 画布可导出为 .canvas(JSON Canvas 开放格式,Obsidian 能直接打开)、Markdown 包(一篇正文 + 一个 assets/)或整张 PNG;.canvas 也能导回来,落成一张新画布。
  • 备份与恢复 — 设置 → 存储可导出全部数据(画布、长文、人设与偏好,不含密钥),也可一键还原。每天第一次启动会自动在 SpoorData/backups/ 留一份快照,滚动保留 7 份。
  • Research Lab — 把研究问题拆成计划后逐步执行:每一步改写检索子查询、检索、带着前序结论分析,最后汇总成报告;执行前显示预计调用次数,每步进度可见、随时可停。报告可以整块落到画布,题目、计划、论点、结论各成一张卡并圈进一个区域框。
  • PDF 阅读与摘录 — 拖进来就能翻页读,划中一段点「摘成便签」,那段文字变成旁边一张卡并自动连回 PDF。读到第几页会记住。
  • 网页卡片 — 粘贴一条链接直接成卡:标题、站点、封面、正文摘要都抓回来,摘要同时进 AI 上下文。
  • 跨画布传送门 — 右键「链接到画布」得到一张传送卡,双击跳过去;画布历史面板里能看到反链(谁指向当前这张)。
  • 沿边重算 — 改了上游便签后右键「重算下游」,顺着连线的 AI 卡与生图节点按依赖顺序重跑;站在 AI 卡上则是「重新生成」。
  • 区域框 — 一个带标题的矩形画在卡片后面,拖它就带着框里的卡片一起走。
  • 长文综合 — 把多张便签整理成文章草稿、项目说明或研究总结。
  • 多画布 — 左上角历史记录里新建、重命名、删除画布(删除需二次确认,会连同该画布的节点与连线一起清掉)。
  • 本地文件存储 — 导入的图片/视频/文档原件与 AI 生成的图片都存在 SpoorData/ 里,数据库只记相对路径。设置 → 存储 可以看占用、筛出未被引用的文件、导出或删除,也可以把数据目录整体迁到自选位置(比如网盘同步文件夹)。
  • 四套全局主题 — 设置 → 通用 → 主题,一次切换整个界面:纸感(默认)、夜幕(深色)、极简、新粗野。改的不只是配色——侧边栏、设置面板、画布、连线、便签与主题卡的外壳形态一并跟着换。
  • 网格与吸附 — 右下角网格按钮,开启后画布显示 24px 点阵,拖动卡片时自动对齐格点。
  • 本地优先 — 画布数据保存在本机 IndexedDB,API Key 保存在本地设置中,不内置任何密钥。
  • 桌面应用 — 通过 Tauri 打包,Windows 与 macOS(通用二进制,未签名);本地文件存储与直连模型服务都依赖桌面端能力。

画布操作

一个手势只做一件事:

操作 行为
鼠标左键拖动空白处 拖出矩形框选中节点(按住 Shift 追加选择)
按住鼠标中键拖动 平移画布
按住空格 + 左键拖动 平移画布(光标变手型,此时拖到卡片上也是拖画布)
滚轮上下滑动 以指针为锚点缩放画布
右键 打开菜单(画布 / 节点 / 连线 / 多选各有各的菜单)
卡片右侧 ⊕ 按住拖动 拖到另一张卡片上松手即连;松在空白处则当场问要建张什么卡
卡片右侧 ⊕ 点一下 也可以点出口起连,再点另一张卡片收线
连线途中按 Esc / 右键 放弃这根线
右下角 ▦ 开关网格显示与卡片吸附
右下角 ⛶ 缩放至适应全部内容
Ctrl+Z / Ctrl+Shift+Z 撤销 / 重做(右上角也有按钮)
Ctrl+F 画布内搜索,回车逐个跳转
Delete / Ctrl+A / Ctrl+D 删除选中 / 全选 / 复制选中
Ctrl+C / Ctrl+X / Ctrl+V 复制 / 剪切 / 粘贴(连同选区内部的连线)
方向键 / Shift+方向键 微调选中卡片;开着网格时按格走
Ctrl+0 / Ctrl+1 复位视图 / 缩放至适应全部内容

节点内部可滚动的区域(长文 AI 卡、文档节点)滚轮仍然滚内容,不会误触发缩放。输入框内右键保留系统原生菜单,方便复制粘贴。

一个例子

如果你想写一篇关于"AI 如何改变独立创作者"的文章,可以先把零散想法放成便签:AI 写作、个人品牌、平台依赖、真实经验。然后让真知镜找逻辑漏洞,让编织者找隐藏联系,让熨烫师改写关键句,最后把这些便签合成为文章草稿。

快速开始

方式 适合谁 怎么做
Windows 桌面 所有使用者 从 Releases 下载 Spoor_*_x64-setup.exe 并安装
macOS 桌面 Mac 用户 下载 Spoor_*_universal.dmg(Intel/Apple Silicon 通用)。包未签名,首次打开需右键 → 打开
本地开发 贡献者 / 二次开发 npm install → npm run tauri:dev

网页版已停止维护。浏览器打开构建产物只会看到桌面版引导页;npm run dev 仍可用于开发调试。

首次使用:Spoor 不内置 API Key,需要你自己填一个模型服务。打开应用后点左下角齿轮 → 模型服务 → 选一个预设(火山方舟 / OpenAI / Gemini / 自定义),填入 API 密钥与模型名。每条模型旁边有「测试」按钮,会真发一次请求,当场告诉你能不能通。首次启动时画布上也会有一张引导卡片直接带你过去。

支持的服务商:Google Gemini、OpenAI、Anthropic Claude、DeepSeek、MiMo(小米)、豆包(火山方舟)、自定义 OpenAI 兼容端点,以及桌面端的本地 GGUF。同一个服务下可以挂多个对话模型和多个生图模型。联网搜索可选配秘塔(Metaso)密钥。

本地模型(0.6.0 起即插即用):推理引擎(llama.cpp)随安装包内置,选一个本机的 .gguf 模型文件就能直接对话——运行参数按你的显存、内存与 CPU 自动设置(选完文件当场显示模型信息和「装不装得下」),高级面板可逐项手改。NVIDIA 用户可一键下载 GPU 加速组件(约 500MB);模型按需加载、空闲自动退出,只用在线 API 时零开销。详见本地模型指南。

豆包(火山方舟)的「模型」填的是账号下的推理接入点 ID(形如 ep-xxxxxxxx),不是模型名。

从 cc-switch 导入:如果你已经在用 cc-switch 管理 Claude Code / Codex 的中转配置,点击模型服务页底部的「导入 cc-switch 配置」会自动读取 <用户目录>\.cc-switch\cc-switch.db 中的 providers 表。带密钥的 Claude 与 Codex 条目会被追加进来,已有配置不会被覆盖,重复的条目会跳过;数据库不存在时会直接提示未安装。

Anthropic 与中转站:Base URL 填站点根(https://xxx.com)或带 /v1 都可以,两种写法都认。

密钥只保存在本机,不会上传。

卸载:卸载程序会先问你要不要保留 SpoorData/(生成的图片、导入的文件原件,以及 notes/ 下的画布笔记镜像)。选择保留会把它移到 %LOCALAPPDATA%\Spoor\SpoorData-kept——0.5.0 起画布笔记也镜像在这个目录里,保留它就保留了一切;重装后首次启动会自动从镜像恢复画布。

开发

npm install
npm run tauri:dev     # 桌面端开发
npm run dev           # 仅前端调试

npm run lint          # tsc + i18n 键校验 + 悬停提示守卫
npm test              # Vitest
npm run tauri:build   # 产出 Windows 安装包

npm run lint 除了类型检查,还会跑两个守卫脚本:check-i18n 保证中英两份文案键一致、组件里没有裸文案;audit-tooltips 保证每个纯图标按钮都有悬停提示。加新 UI 时它们会直接拦下遗漏。

项目结构

spoor/
├── src/                    前端(React 19 + Vite + Tailwind 4)
│   ├── assets/             LOGO 与四个 Agent 图标(agents/)
│   ├── index.css           设计令牌与四套主题的配色(html[data-theme])
│   ├── components/         UI 组件
│   │   ├── canvas/         画布本体:右键菜单、连线、拖拽节点
│   │   ├── nodes/          各类节点:便签 / AI 卡 / 生图 / 图片 / 视频 / 文档 / 主题
│   │   ├── settings/       设置面板各 Tab(通用、模型服务、存储)
│   │   └── ui/             通用件
│   ├── config/             持久化配置
│   ├── constants/          静态表:主题表、服务商预设、默认 Agent、菜单项、节点能力
│   ├── hooks/              画布交互与 AI 动作的状态逻辑
│   ├── i18n/               中英文案(键必须一一对应,由 check-i18n 守卫)
│   ├── services/           AI 调用、生图、联网搜索、文件导入、媒体与画布仓储、
│                           撤销栈与可撤销写入、JSON Canvas 与 Markdown 导出、备份、
│                           主题与网格开关的外部 store
│   ├── types/              跨模块类型
│   ├── utils/              无副作用纯函数
│   ├── App.tsx             画布主体
│   ├── db.ts               Dexie / IndexedDB schema
│   └── main.tsx            入口
├── src-tauri/              Rust 桌面端
│   └── src/                media(本地文件存储)、imagegen(生图)、userfile(用户选定路径的读写)、
│                           snapshot(自动快照)、notes(笔记镜像)、keystore(密钥加密)、
│                           gguf/hardware/engine/llama_server(本地模型)、cc_switch(配置导入)
├── tests/                  Vitest,目录结构镜像 src/
├── scripts/                构建、发布与 lint 守卫脚本
├── docs/                   guide/ 用户指南 · product/ 产品说明
│                           dev/ 开发文档 · release/ 发布
└── .github/workflows/      桌面版发布 CI

更多文档

About

Spoor — 本地优先空间便签画布

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages