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: Sync Notes Owner: jiangsier-xyz Summary: Sync the local Obsidian vault with a Cloudflare R2 bucket using rclone (S3 + crypt). Triggered by /sync-notes. Defaults to bidirectional sync; understands... Tags: latest:1.0.1 Version history: v1.0.1 | 2026-05-23T02:11:38.242Z | auto - Removed LICENSE file for streamlined distribution. - Updated setup and sync scripts (setup.sh, sync.sh)—maintenance, internal improveme
Rank
62
Safety
84
Downloads
968
Updated
Oct 12, 2026
Version
1.0.1
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 968 downloads reported by the source. Last updated 10/12/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 12, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 12, 2026
- Adoption signal
- 968 downloadsadoption · observed Oct 12, 2026
- Latest release
- 1.0.1release · observed May 23, 2026
- Handshake status
- UNKNOWNsecurity
What changed
Newest first. Only changes that point at a source are listed.
Release 1.0.1release
- Removed LICENSE file for streamlined distribution. - Updated setup and sync scripts (`setup.sh`, `sync.sh`)—maintenance, internal improvements, or bug fixes. - SKILL.md updated for accuracy and alignment with latest implementation. - No changes to user-facing behavior or commands.
Observed May 23, 2026 · source
Install and run
Setup complexity: low.
clawhub skill install s173nsfjwe1yqehavmtjgmxnjs86xwmn:sync-notes- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-jiangsier-xyz-sync-notes/snapshot"
Run-check
$0.02 USD1 measured facts are behind this paywall: success rate and latency, uptime and estimated cost, when not to use it, how to call it, benchmark scores.
Agents pay $0.02 in USDC. A card payment is $0.50, the smallest a card allows.
Documentation
CLAWHUB
44,829 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: sync-notes
description: Sync the local Obsidian vault with a Cloudflare R2 bucket using rclone (S3 + crypt). Triggered by `/sync-notes`. Defaults to bidirectional sync; understands natural-language flags for partial download/upload by glob.
version: 1.0.1
metadata:
{"openclaw":{"emoji":"☁️","requires":{"bins":["rclone","bash"],"env":["CLOUD_NOTES_PATH"]}}}
---
# 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`, `配置`, `wizard` → `setup`
- `init`, `初始化`, `baseline` → `init`
- `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 '<glob>'`.
4. Mentions **upload** intent (`上传`, `推`, `push`, `upload`, `send`):
- Same as above with `sync.sh upload '<glob>'`.
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 `<name>` and `<name>.md`; combine with `**` if
unsure. When in doubt, run `sync.sh download '<glob>' --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/`README.md
# sync-notes > End-to-end encrypted, bidirectional sync between a local notes vault (Obsidian, plain Markdown, anything really) and a **Cloudflare R2** bucket — powered by [`rclone`](https://rclone.org/) `bisync` over an `rclone crypt` remote. This is an [OpenClaw](https://openclaw.ai) skill, but the heavy lifting is just a pair of bash scripts. You can use them outside of OpenClaw without modification. [简体中文](./README.zh-CN.md) --- ## Why? - 🔒 **Zero-trust storage.** Your notes are encrypted client-side via `rclone crypt`. Cloudflare only ever sees ciphertext blobs with encrypted filenames. - 🔁 **Real bidirectional sync.** `rclone bisync` propagates additions, modifications and deletions in both directions, with conflict markers when both sides changed. - 📱 **Mobile-friendly.** The crypt format is compatible with the [Remotely Save](https://github.com/remotely-save/remotely-save) Obsidian plugin, so your phone can sync the same bucket without holding the rclone config. - 🧰 **Self-contained.** All paths derive from the script location. No daemons, no extra services — just `bash` + `rclone`. - 🛟 **Backups before writes.** Every write-side run mirrors the local vault to `backups/latest/` first. --- ## Layout ``` sync-notes/ ├── SKILL.md # OpenClaw skill manifest (also the design doc) ├── README.md / README.zh-CN.md # this file ├── config/ │ ├── rclone.conf.example # template for the rclone remotes │ ├── rclone.conf # your real config (gitignored, chmod 600) │ ├── .env.example # template for non-rclone settings │ ├── .env # your real settings (gitignored, chmod 600) │ └── filter.txt # rclone filter rules (excludes .obsidian/, .DS_Store, etc.) ├── scripts/ │ ├── setup.sh # interactive configuration wizard │ └── sync.sh # main entry point / dispatcher ├── state/ # rclone bisync workdir (gitignored) ├── logs/ # per-run + master logs (gitignored) └── backups/ # rolling local snapshots (gitignored) ``` --- ## Requirements - `bash` 4+ - [`rclone`](https://rclone.org/install/) **v1.65+** (older builds lack some `bisync` flags used here) - A [Cloudflare R2](https://developers.cloudflare.com/r2/) bucket and an S3-compatible API token scoped to it - A passphrase (and optional salt) for the `crypt` remote — **lose this and the data is unrecoverable** --- ## Quick start ```bash # 1. Clone the repo somewhere git clone https://github.com/jiangsier-xyz/jiangsier-skill-sync-notes.git cd jiangsier-skill-sync-notes # 2. Tell the script where your notes live export CLOUD_NOTES_PATH=/absolute/path/to/your/vault # 3. Run the wizard — fills in rclone.conf and .env (chmod 600) ./scripts/setup.sh # 4. Sanity check ./scripts/sync.sh status # 5. First-time baseline (must do this once before bisync will run) ./scripts/sync.sh init # 6. Routine
_meta.json
{
"ownerId": "kn73sdyhq2p2h53qne8t5nvacs86x2bc",
"slug": "sync-notes",
"version": "1.0.1",
"publishedAt": 1779502298242
}README.zh-CN.md
# sync-notes > 在本地笔记目录(Obsidian / 纯 Markdown / 任意文件夹)与 **Cloudflare R2** 之间做端到端加密的双向同步,底层用 [`rclone`](https://rclone.org/) 的 `bisync` + `crypt` 远端实现。 这是一个 [OpenClaw](https://openclaw.ai) 技能(skill),但核心其实是两个 bash 脚本,可以脱离 OpenClaw 独立使用。 [English](./README.md) --- ## 为什么用它? - 🔒 **零信任存储**: 笔记在客户端用 `rclone crypt` 加密,Cloudflare 只看得到密文 blob 和加密过的文件名。 - 🔁 **真双向同步**: `rclone bisync` 会双向传播新增、修改、删除,两边都改了的话会留下冲突标记,不会静默覆盖。 - 📱 **手机可用**: crypt 格式与 Obsidian 插件 [Remotely Save](https://github.com/remotely-save/remotely-save) 兼容,手机端不用塞 rclone 配置就能同步同一个 bucket。 - 🧰 **零依赖、零守护进程**: 所有路径都从脚本位置推导,只需要 `bash` + `rclone`。 - 🛟 **写入前先备份**: 任何写本地的命令都会先把当前 vault 镜像到 `backups/latest/`。 --- ## 目录结构 ``` sync-notes/ ├── SKILL.md # OpenClaw 技能清单 + 设计文档 ├── README.md / README.zh-CN.md # 本文件 ├── config/ │ ├── rclone.conf.example # rclone 远端模板 │ ├── rclone.conf # 真实配置 (gitignored, chmod 600) │ ├── .env.example # 非 rclone 设置模板 │ ├── .env # 真实设置 (gitignored, chmod 600) │ └── filter.txt # rclone 过滤规则(默认排除 .obsidian/、.DS_Store 等) ├── scripts/ │ ├── setup.sh # 交互式配置向导 │ └── sync.sh # 主入口 / 调度器 ├── state/ # rclone bisync 工作目录 (gitignored) ├── logs/ # 每次运行和总日志 (gitignored) └── backups/ # 滚动本地快照 (gitignored) ``` --- ## 依赖 - `bash` 4+ - [`rclone`](https://rclone.org/install/) **v1.65+**(更早版本不支持脚本里用到的部分 `bisync` 选项) - 一个 [Cloudflare R2](https://developers.cloudflare.com/r2/) bucket 以及一个限定权限的 S3 兼容 token - crypt 远端的密码(以及可选的 salt)—— **丢了就不可恢复**,务必离线备份一份 --- ## 快速开始 ```bash # 1. 克隆仓库 git clone https://github.com/jiangsier-xyz/jiangsier-skill-sync-notes.git cd jiangsier-skill-sync-notes # 2. 告诉脚本你的笔记目录在哪里 export CLOUD_NOTES_PATH=/absolute/path/to/your/vault # 3. 跑配置向导,自动写好 rclone.conf 和 .env(权限 600) ./scripts/setup.sh # 4. 健康检查 ./scripts/sync.sh status # 5. 第一次必须先建立基线 ./scripts/sync.sh init # 6. 之后日常双向同步 ./scripts/sync.sh ``` > 💡 **建议把 `CLOUD_NOTES_PATH` 写进你的 shell rc(`.zshrc` / `.bashrc`),省心。** --- ## 子命令 | 命令 | 行为 | |---|---| | `sync.sh setup` | 跑配置向导。幂等,覆盖前会问一次。 | | `sync.sh init [--force]` | 首次建立 bisync 基线(`rclone bisync --resync`)。已有基线时拒绝运行,除非加 `--force`。 | | `sync.sh bisync`(默认) | 双向同步,带冲突检测;运行前先做本地备份。 | | `sync.sh download <glob> [--dry-run]` | 从远端把匹配 `<glob>` 的文件拉下来;运行前先做本地备份。 | | `sync.sh upload <glob> [--dry-run]` | 把本地匹配 `<glob>` 的文件推上远端。 | | `sync.sh status` | 打印配置状态、上次同步信息、冲突文件、备份状态。 | `<glob>` 会传给 `rclone --include`,作用在**解密后的明文路径**上。光秃秃的关键词(如 `welcome`)会自动展开成 `**welcome**`;已经带通配符的(`ideas/**`、`*.md`)原样透传。 --- ## 冲突处理 `bisync` 运行时使用 `--conflict-suffix conflict1,conflict2`。每次运行结束脚本会扫描 vault,如果发现 `*.conflict1*` / `*.conflict2*` 文件,**会以非零退出码报错并列出冲突清单 —— 由人(或上层 LLM)手动决定保留哪一边再继续同步**,脚本不会静默自动合并。 --- ## 配置文件 ### `config/rclone.conf` 两个远端: ```ini [r2-raw] type = s3 provider = Cloudflare access_key_id = <ACCESS_KEY_ID> secret_access
skill-card.md
## Description: Sync the local Obsidian vault with a Cloudflare R2 bucket using rclone (S3 + crypt). Triggered by `/sync-notes`. Defaults to bidirectional sync; understands natural-language flags for partial download/upload by glob. This skill is ready for commercial/non-commercial use. ## Publisher: [jiangsier-xyz](https://clawhub.ai/user/jiangsier-xyz) ### License/Terms of Use: MIT-0 ## Use Case: Developers and note-taking users use Sync Notes to configure and run encrypted bidirectional sync between a local Obsidian or Markdown vault and a Cloudflare R2 bucket. The agent translates `/sync-notes` requests into setup, status, baseline, full sync, upload, or download commands. ### Deployment Geography for Use: Global ## Known Risks and Mitigations: Risk: Bidirectional sync can change or delete notes on both local and remote storage. Mitigation: Run status and dry-run checks before first or broad syncs, resolve conflicts manually, and keep an independent backup of the vault. Risk: R2 credentials and rclone crypt secrets are stored locally in configuration files. Mitigation: Keep configuration files private with restrictive permissions, never expose secrets in chat, and back up the crypt passphrase offline. Risk: Crafted shell configuration values or unrestricted extra rclone flags could cause unintended command execution or unsafe sync behavior. Mitigation: Review generated configuration before syncing, validate setup inputs, and remove or allowlist extra rclone flags before deployment. ## Reference(s): - [Sync Notes ClawHub Page](https://clawhub.ai/jiangsier-xyz/skills/sync-notes) - [rclone Documentation](https://rclone.org/) - [rclone Install Documentation](https://rclone.org/install/) - [rclone Filtering Documentation](https://rclone.org/filtering/) - [Cloudflare R2 Documentation](https://developers.cloudflare.com/r2/) - [Remotely Save Obsidian Plugin](https://github.com/remotely-save/remotely-save) - [Default rclone Filter Rules](config/filter.txt) ## Skill Output: **Output Type(s):** [shell commands, configuration, guidance] **Output Format:** [Markdown with inline shell commands and concise status or conflict summaries] **Output Parameters:** [1D] **Other Properties Related to Output:** [May create local rclone configuration, logs, state, and backup files when its shell scripts are executed.] ## Skill Version(s): 1.0.1 (source: frontmatter and server release metadata) ## Ethical Considerations: Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
- Card JSON
- Facts JSON
- Snapshot JSON
- Contract JSON
- Trust JSON
- Changes JSON
- Warnings JSON
- Seen by JSON
- Disagreements JSON
- Proof JSON
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/jiangsier-xyz/skills/sync-notes",
"sourceUrl": "https://clawhub.ai/jiangsier-xyz/skills/sync-notes",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:42.787Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-jiangsier-xyz-sync-notes/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-jiangsier-xyz-sync-notes/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:42.787Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "968 downloads",
"href": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceUrl": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:42.787Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.0.1",
"href": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceUrl": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-23T02:11:38.242Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-jiangsier-xyz-sync-notes/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-jiangsier-xyz-sync-notes/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.0.1",
"description": "- Removed LICENSE file for streamlined distribution. - Updated setup and sync scripts (`setup.sh`, `sync.sh`)—maintenance, internal improvements, or bug fixes. - SKILL.md updated for accuracy and alignment with latest implementation. - No changes to user-facing behavior or commands.",
"href": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceUrl": "https://clawhub.ai/jiangsier-xyz/sync-notes",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-23T02:11:38.242Z",
"isPublic": true
}
]
}Record generated Oct 13, 2026.
For crawlers
This page is free to read. The run-check above is the only paid part, and it answers HTTP 402 until it is paid. Everything else here is public.
- One record, as JSON: card, facts, snapshot, contract, trust, changes, warnings, seen by, disagreements, proof.
- Every agent, one feed: /.well-known/ai-catalog.json
- What this site sells, and the price: /.well-known/x402
- Paid run-check: /api/v1/agents/clawhub-jiangsier-xyz-sync-notes/run-check
