🤖
Notion Sync
Sync local workspace directories and files to Notion pages using the notion-sync CLI or programmatic API. Use when the user wants to push files to Notion, mi...
安全通过
💬Prompt
技能说明
name: notion-sync description: Sync local workspace directories and files to Notion pages using the notion-sync CLI or programmatic API. Use when the user wants to push files to Notion, mirror a directory structure into Notion, initialize notion-sync config, manage ignore patterns, or check sync status.
notion-sync
CLI and library for syncing a local directory tree into Notion. Folders become Notion pages, files become sub-pages with content.
Quick Reference
Installation
npm install -g @kitakitsune/notion-sync
Requires Node.js >= 18.
Initialization
notion-sync init --token ntn_xxx --page <notion-page-id> [--dir <path>]
- Creates
.notion-sync.jsonin the target directory - The Notion integration must be shared with the target root page first
Sync Commands
notion-sync sync # sync everything
notion-sync sync --dry-run # preview changes
notion-sync sync --diff # only sync changed files
notion-sync sync --dir /some/path # sync a specific directory
notion-sync status # show sync state
notion-sync ignore list # list ignore patterns
notion-sync ignore add "*.env" # add ignore pattern
Default Ignore Patterns
node_modules, .git, dist, .notion-sync.json, *.lock, *.log
Programmatic Usage
import { syncWorkspace, initConfig, loadConfig, saveConfig } from '@kitakitsune/notion-sync';
import type { NotionSyncConfig } from '@kitakitsune/notion-sync';
const config = loadConfig(process.cwd());
const result = await syncWorkspace(config, { dryRun: false, diffOnly: true });
// result.pushed - files that were synced
// result.skipped - files unchanged (when diffOnly)
// result.errors - files that failed
Architecture
src/
cli.ts - Commander.js CLI (init, sync, ignore, status)
sync.ts - Core sync logic, Notion API calls, checksum diffing
config.ts - Load/save/init .notion-sync.json
types.ts - NotionSyncConfig interface
index.ts - Public API exports
bin/
notion-sync.js - CLI entry point
Key Implementation Details
- Checksums: MD5 hashes stored in
.notion-sync.jsonunderchecksumsfield. Used by--diffto skip unchanged files. - Content chunking: File content is split into 1800-character blocks for the Notion API.
- Page upsert: Existing pages are updated by deleting all blocks then re-appending. New pages are created with content inline.
- Folder hierarchy: Directories are created as Notion pages with folder icon. A
folderCacheavoids redundant API calls.
Config File Structure
.notion-sync.json:
{
"path": "/absolute/path",
"notion": {
"token": "ntn_...",
"rootPageId": "page-id"
},
"ignore": ["node_modules", ".git", "dist", ".notion-sync.json", "*.lock", "*.log"],
"checksums": { "src/index.ts": "md5hash" }
}
Development
npm run dev # watch mode (tsup)
npm run build # production build
Build uses tsup to bundle TypeScript to ESM format. Output goes to dist/.
如何使用「Notion Sync」?
- 打开小龙虾AI(Web 或 iOS App)
- 点击上方「立即使用」按钮,或在对话框中输入任务描述
- 小龙虾AI 会自动匹配并调用「Notion Sync」技能完成任务
- 结果即时呈现,支持继续对话优化