← 返回 Skills 市场
jiangsier-xyz

Sync Notes

作者 jiangsier-xyz · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
101
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install sync-notes
功能描述
Sync the local Obsidian vault with a Cloudflare R2 bucket using rclone (S3 + crypt). Triggered by `/sync-notes`. Defaults to bidirectional sync; understands...
使用说明 (SKILL.md)

sync-notes Skill

Sync the local notes directory ($CLOUD_NOTES_PATH) with a Cloudflare R2 bucket through an end-to-end encrypted rclone crypt remote. The skill is a thin orchestrator over a single bash entry point at scripts/sync.sh; the LLM's job is to translate the user's natural-language intent into the right subcommand.

Trigger

Activate only when the user message starts with /sync-notes (with or without trailing arguments). Examples:

User message Intent Action
/sync-notes full bidirectional sync sync.sh bisync
/sync-notes setup run the configuration wizard sync.sh setup
/sync-notes init establish the bisync baseline (first run only) sync.sh init
/sync-notes status show config + last-sync info sync.sh status
/sync-notes 下载 welcome download files matching welcome sync.sh download '**welcome**'
/sync-notes upload daily/*.md upload glob sync.sh upload 'daily/*.md'
/sync-notes 把 ideas 目录拉下来 download a directory sync.sh download 'ideas/**'

How to interpret natural language

After stripping the /sync-notes prefix, classify the remainder:

  1. Empty → run bisync (default bidirectional sync).
  2. Contains a recognised keyword:
    • setup, 配置, wizardsetup
    • init, 初始化, baselineinit
    • status, 状态, 信息status
  3. Mentions download intent (下载, , pull, download, get, 取回):
    • Extract the target token(s) and convert to a glob (see "Glob rules" below).
    • Run sync.sh download '\x3Cglob>'.
  4. Mentions upload intent (上传, , push, upload, send):
    • Same as above with sync.sh upload '\x3Cglob>'.
  5. Otherwise: ask the user to clarify; do not guess.

Glob rules

Globs are passed verbatim to rclone as --include filters and apply to plain (decrypted) paths.

  • A bare keyword such as welcome becomes **welcome** (matches anywhere in path).
  • A directory name like ideas becomes ideas/**.
  • Paths already containing wildcards (*, ?, [) are passed through unchanged.
  • Filenames without extension default to matching \x3Cname> and \x3Cname>.md; combine with ** if unsure. When in doubt, run sync.sh download '\x3Cglob>' --dry-run first.

Workflow contract

  1. First run ever: the script refuses bisync until a baseline exists. Tell the user to run /sync-notes init after confirming both sides are in the desired starting state.
  2. Backups: before any write-side operation (bisync, download, init), the local notes directory is mirrored to backups/latest/ (single rolling copy, previous one is replaced).
  3. Conflicts: bisync runs with conflict markers. After every run the script scans for *.conflict* files; if any are found the script exits non-zero and lists them. Surface this list to the user verbatim and ask which side to keep—do not auto-resolve.
  4. Logs: every invocation appends to logs/sync.log and emits a per-run file logs/\x3CUTC-timestamp>.log for the rclone output.

Filesystem layout

skills/sync-notes/
├── SKILL.md                  # this file
├── README.md                 # short user-facing notes (optional)
├── config/
│   ├── rclone.conf           # active rclone config (created by setup, gitignored)
│   ├── rclone.conf.example   # template
│   ├── .env                  # non-rclone settings (created by setup, gitignored)
│   └── .env.example          # template
├── scripts/
│   ├── sync.sh               # main entry point (dispatcher)
│   └── setup.sh              # interactive configuration wizard
├── state/
│   └── bisync/               # rclone bisync workdir (listings + lockfiles)
├── logs/                     # rolling logs
├── backups/
│   └── latest/               # most recent local snapshot (single copy)
└── .gitignore

scripts/sync.sh derives every path from its own location ($(dirname "$0")/..); no absolute paths are hard-coded.

Required environment

Variable Purpose Required
CLOUD_NOTES_PATH absolute path of the local notes directory

The script aborts early with a clear message if CLOUD_NOTES_PATH is unset, missing, or not a directory.

Configuration files

config/rclone.conf

Native rclone format with two remotes:

[r2-raw]
type = s3
provider = Cloudflare
access_key_id = \x3CACCESS_KEY_ID>
secret_access_key = \x3CSECRET_ACCESS_KEY>
endpoint = https://\x3CACCOUNT_ID>.r2.cloudflarestorage.com
acl = private

[notes]
type = crypt
remote = r2-raw:\x3CBUCKET>/\x3COPTIONAL_PREFIX>
filename_encryption = standard
directory_name_encryption = true
password = \x3COBSCURED>
password2 = \x3COBSCURED>

config/.env

Non-rclone settings consumed by sync.sh:

# Name of the crypt remote in rclone.conf
RCLONE_REMOTE=notes
# Number of local backup snapshots to retain
BACKUP_KEEP=1
# Extra rclone flags (optional)
RCLONE_EXTRA_FLAGS="--transfers=4 --checkers=8"

.example versions ship with the skill; the wizard fills in the real values.

Subcommands implemented by sync.sh

Subcommand Behaviour
setup Run setup.sh; collects R2 creds + crypt password(s); writes rclone.conf and .env with chmod 600. Idempotent: confirms before overwriting.
init First-time baseline: rclone bisync --resync. Refuses to run if a baseline already exists unless --force is passed.
bisync (default) rclone bisync $LOCAL notes: with conflict reporting. Backs up first.
download \x3Cglob> rclone copy notes: $LOCAL --include '\x3Cglob>'. Backs up first. Defaults to --dry-run only when the user said "试" / "dry"; otherwise runs for real.
upload \x3Cglob> rclone copy $LOCAL notes: --include '\x3Cglob>'. No local backup needed; remote is authoritative.
status Prints config validity, last-sync timestamp, conflict files (if any), backup state.

Safety rules for the LLM

  • Never write secrets into chat. If the user pastes secrets, immediately move them into config/rclone.conf / config/.env and remove from any visible context.
  • Never invoke rclone with --config pointing somewhere outside this skill.
  • Never run bisync if status reports unresolved conflicts; ask first.
  • When download/upload glob match count is ambiguous, run with --dry-run first and show the list of matches.
  • Backups are single-copy; if you are about to do something risky (large delete, schema change), copy backups/latest/ to backups/manual-\x3CUTC>/ manually before proceeding and tell the user.

First-time onboarding (what to tell the user)

1. /sync-notes setup           # fill in R2 + crypt creds
2. export CLOUD_NOTES_PATH=...  # point at the local notes dir
3. /sync-notes init             # establish the bisync baseline
4. /sync-notes                  # routine bidirectional sync
安全使用建议
Install only if you are comfortable giving it access to your notes folder and an R2 bucket. Add your own .gitignore exclusions before running setup, use a narrowly scoped R2 token, verify the initial bisync baseline carefully, and keep an independent backup of important notes.
能力标签
cryptocan-make-purchases
能力评估
Purpose & Capability
The rclone/Cloudflare R2 functionality matches the stated purpose, but the default command is bidirectional sync and can propagate edits or deletions across local notes and the remote bucket.
Instruction Scope
The skill says it should only activate for messages starting with /sync-notes and asks for clarification on unknown requests, but a bare /sync-notes triggers a real write-capable bisync operation.
Install Mechanism
No installer or remote download flow is present; the included bash scripts rely on existing bash and rclone binaries.
Credentials
Access to CLOUD_NOTES_PATH and Cloudflare R2 credentials is proportionate for syncing an Obsidian vault, but those are sensitive local and account resources.
Persistence & Privilege
The skill persists R2 credentials, rclone crypt settings, logs, bisync state, and plaintext local backups; the documentation says these generated sensitive files are gitignored, but the provided file manifest does not include a .gitignore.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install sync-notes
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /sync-notes 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release of sync-notes skill: securely sync your Obsidian vault with Cloudflare R2 via rclone. - Triggered by `/sync-notes`, with support for setup, init, status, upload/download (via glob), and bidirectional sync. - Natural language commands (English/Chinese) are parsed for intuitive uploads and downloads. - Built-in safeguards: encrypted storage, pre-sync backups, explicit conflict handling. - Logs every sync; maintains single rolling backup. - Requires `rclone`, `bash`, and the `CLOUD_NOTES_PATH` environment variable. - Interactive setup wizard guides through first-time configuration.
元数据
Slug sync-notes
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Sync Notes 是什么?

Sync the local Obsidian vault with a Cloudflare R2 bucket using rclone (S3 + crypt). Triggered by `/sync-notes`. Defaults to bidirectional sync; understands... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 101 次。

如何安装 Sync Notes?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install sync-notes」即可一键安装,无需额外配置。

Sync Notes 是免费的吗?

是的,Sync Notes 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Sync Notes 支持哪些平台?

Sync Notes 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Sync Notes?

由 jiangsier-xyz(@jiangsier-xyz)开发并维护,当前版本 v1.0.0。

💬 留言讨论