360 Secure SkillHub
360 安全技能中心

Notion Sync

notion-sync 提供 Node.js 命令行工具与编程接口,把本地目录树同步到 Notion:目录映射为页面、文件作为子页面写入内容,通过 MD5 校验和实现 --diff 增量同步,支持 --dry-run 预览、忽略规则管理与状态查看,配置保存在 .notion-sync.json 中。

kitakitsune0x
kitakitsune0x
热度 64.20
最近更新 2026-05-17 12:26:55
分类:知识依赖:代码执行 / 读写文件 / 第三方 API应用场景:工作流 / 笔记整理 / 自动化脚本

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add openclaw-notion-sync
Metadata
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.json in 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.json under checksums field. Used by --diff to 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 folderCache avoids 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/.