openclaw/notcrawl
GitHub: openclaw/notcrawl
将 Notion 工作区数据本地同步到 SQLite 并标准化为 Markdown,支持全文搜索、终端浏览和 Git 共享,实现不依赖 Notion UI 的离线知识管理。
Stars: 103 | Forks: 10
# 🗞️ notcrawl
`notcrawl` 将 Notion 工作区数据镜像到本地 SQLite 并标准化为
Markdown,这样你就可以搜索、查询、对比和分享你的 Notion 记忆,而无需
依赖 Notion UI。
它包含三种数据摄入路径:
- `desktop`:对本地 Notion 桌面端缓存的只读快照
- `api`:具备速率限制感知的官方 Notion API 同步
- `notion-mcp`:通过预配置的 Codex Notion connector 进行针对性修复
SQLite 是标准的归档存储。Markdown 是持久且面向人类/agent 的展现层。
Git 分享模式发布标准化的快照,其他机器可以订阅这些快照,
而无需持有 Notion 凭据。
## 当前范围
- 带有 FTS5 的本地 SQLite 存储
- 从 macOS Notion 读取本地桌面端缓存进行摄入
- 通过官方 API 摄入页面/block/用户/评论
- 通过官方 API 摄入 Notion database 元数据和行
- 支持当前的 Notion 数据源 API 以及旧版 database endpoint
- 通过 Unicode 安全的 workspace、teamspace 和页面路径组织标准化的 Markdown 导出
- 将抓取到的 Notion database 行导出为 CSV/TSV
- 压缩的 JSONL git-share 快照以及导入/更新工作流
- 用于快速检查本地页面/database 的终端归档浏览器
- 归档状态、活动报告和 SQLite 维护命令
- 支持临时检查的只读 SQL 访问
## 安装
```
brew install openclaw/tap/notcrawl
```
你也可以从
[最新发布版本](https://github.com/openclaw/notcrawl/releases/latest) 下载归档文件、`.deb` 或 `.rpm` 包。
手动检查更新的发布版本:
```
notcrawl check-update
```
交互式终端运行也会执行缓存的每日发布检查,并在有可用的
OpenClaw 新版本时打印 stderr 通知。设置
`NOTCRAWL_NO_UPDATE_CHECK=1` 或 `CRAWLKIT_NO_UPDATE_CHECK=1` 可禁用该
被动通知。
## 快速开始
使用本地 Notion Desktop 缓存:
```
notcrawl init
notcrawl doctor
notcrawl status
notcrawl report
notcrawl sync --source desktop
notcrawl export-md
notcrawl search "launch plan"
notcrawl tui
```
或者使用官方 Notion API:
```
export NOTION_TOKEN="secret_..."
notcrawl sync --source api
notcrawl databases
notcrawl export-db --database DATABASE_ID --format csv --output roadmap.csv
notcrawl export-db --all --dir exports/csv
```
或者通过 Codex 中连接的 Notion 应用修复不完整的 Desktop 页面:
```
notcrawl sync --source notion-mcp
notcrawl sync --source notion-mcp --page PAGE_ID
notcrawl sync --source notion-mcp --query "launch plan" --limit 25
```
如果没有 `--page` 或 `--query`,该数据源会获取已知的 Desktop 页面中
没有缓存主体或缺少引用 block 的部分,以及 block 同步
未完成的 API 页面。它不声称会枚举整个工作区。
传输过程复用 Codex 身份验证,并通过
实验性的 ChatGPT apps gateway 使用配置好的 Notion 应用。空的 connector 主体不会更改现有的
归档内容,并会在稍后保持重试资格。
默认路径:
- 配置: `~/.notcrawl/config.toml`
- 数据库: `~/.notcrawl/notcrawl.db`
- 缓存: `~/.notcrawl/cache`
- Markdown 归档: `~/.notcrawl/pages`
- git share repo: `~/.notcrawl/share`
## 命令
- `init` 写入一个初始配置
- `doctor` 检查配置、SQLite、桌面端缓存以及 token 是否存在
- `status` 打印归档计数、上次同步时间和数据库/WAL 大小
- `metadata --json`、`status --json` 和 `doctor --json` 为启动器、自动化和 CI 暴露 crawlkit 的
控制/状态 payload
- `report` 汇总最近的页面、database、space 和评论活动
- `maintain` 重建 FTS、优化 SQLite 索引,并可运行 `VACUUM`
- `sync` 从 `desktop`、`api`、`notion-mcp` 或 `all` 摄入数据
- `export-md` 从 SQLite 渲染标准化的 Markdown 文件
- `databases` 列出已抓取的 Notion database
- `export-db` 将一个已抓取的 Notion database,或使用 `--all --dir` 导出所有 database,格式为 CSV 或 TSV
- `search` 通过 FTS5 搜索页面和评论文本
- `tui` 打开用于页面和 database 的终端归档浏览器
- `sql` 对归档运行只读 SQL
- `publish` 将 SQLite 表和 Markdown 导出到 git share repo
- `subscribe` 克隆 share repo 并导入最新快照
- `update` 拉取并导入已订阅的 share repo
## 共享的 crawlkit 呈现层
`notcrawl` 使用 `crawlkit` 提供标准配置路径、SQLite 打开/读取辅助功能、
快照打包/导入、由 Git 支持的归档共享、输出格式化、状态
payload,以及共享的终端探索器。Notion API/Desktop 解析、
Markdown 渲染、页面/评论/database schema 和 Notion FTS 主体依然
由 `notcrawl` 拥有。
TUI 遵循 gitcrawl 风格的三窗格模型:左侧是 workspace/teamspace/page 或
database 组,中间是页面/database,右侧是可读的
文档预览以及评论和元数据。它支持窗格
聚焦、可排序的表头、鼠标选择、右键操作,以及一个
本地/远程页脚。
## 分发
发布打包由 GoReleaser 管理。带有标签的发布会构建 tarballs、
校验和、`.deb`、`.rpm`、GitHub 发布说明,并更新 Homebrew tap。
有关发布操作,请参见 [`docs/distribution.md`](docs/distribution.md)。
## 安全模型
Desktop 模式是只读的。它会在
读取之前对 Notion 的本地 SQLite 数据库进行快照,且永远不会写入 Notion 应用存储。Desktop 缓存
覆盖率是机会性的;Markdown 导出会标记出那些引用的 block 未在本地缓存的页面,API 同步可以补充与 integration 共享的内容。
在稍后的 Desktop 快照中缺失的行会被保留,因为缓存驱逐
并不是删除信号;明确的 Notion tombstone 依然会使记录退役。
API 模式使用官方 Notion API。它将原始的 API payload 与
标准化的行存储在一起,这样渲染程序就可以在不重新抓取的情况下进行改进。
Notion MCP 模式是只读且有针对性的。它在
发出请求时读取 Codex bearer 凭据,从不存储它,仅动态解析已连接的
Notion 搜索/获取工具,并在持久化
connector Markdown(包括页面属性)之前剔除已签名的 URL 凭据。凭据仅发送给确切的
HTTPS ChatGPT apps gateway。Gateway 和 Codex auth-file 格式是
实验性契约,可能会发生更改。
密钥永远不会被导出到 Markdown 或 git-share 快照中。标签:EVTX分析, Markdown, SQLite, 数据同步, 数据导出, 日志审计, 笔记备份