Obsidian CLI Sync and Publish
Use this skill for Obsidian Sync operations and capability-gated Obsidian Publish operations through official desktop obsidian CLI commands.
Routing contract
Use this skill when:
- the user asks for Sync state, Sync history, or Sync restore operations
- the user asks for Publish status, publish add/remove, or publish site checks and those commands are detected as available
- the task is a release/checkpoint flow that depends on Sync or Publish surfaces
Do not use this skill when:
- the request is regular note CRUD, task/property updates, or graph cleanup
- the request is Obsidian Headless automation without desktop app
- the request is explicitly a named one-command workflow ID (route to
obsidian-cli-workflows)
- the request is community tooling or non-official publish/sync surfaces
Preconditions
Assume these must be true before relying on this skill:
obsidian command is installed and registered
- Obsidian desktop app is available locally
- Sync is configured in the target vault
- Publish commands may be unavailable in some CLI builds and must be probed before use
- in Codex Desktop on macOS, direct launches can crash; prefer sanitized wrapper
Codex-safe launcher
In Codex Desktop on macOS, prefer this wrapper:
script -q /dev/null /usr/local/bin/zsh -ilc 'unset __CFBundleIdentifier LaunchInstanceID XPC_SERVICE_NAME CODEX_CI CODEX_SANDBOX CODEX_SHELL; export TERM=xterm-256color; obsidian ...'
Escalate the wrapped command only when required by sandbox boundaries.
Core operating policy
- Use only official desktop Sync and Publish CLI commands.
- Probe publish command availability before using any
publish:* command. Use a read-only check like obsidian help publish:status.
- If publish probe reports
No commands matching, treat Publish as unsupported in this environment and refuse publish actions plainly.
- For mixed read/write flows, run status checks first (
sync:status; and publish:status only when publish support is confirmed).
- Treat mutating commands as high-impact operations.
- Do not run mutating commands on implicit active-file targets unless the user explicitly requested active-file behavior.
- For restore operations (
sync:restore), require explicit version=<n> plus explicit file= or path= unless the user clearly specifies active-file restore.
- For publish operations (when supported), clearly state whether action targets one file, path, or all changed files.
- Summarize remote side effects before executing mutating operations.
- If Sync is not configured, report that blocker and stop.
- If publish is requested but unavailable in this CLI build, report that blocker and stop.
- If the request is actually headless/server Sync, say this skill does not cover Headless Sync and stop.
Risk levels
- low:
sync:status, sync:history, sync:read, sync:deleted; and publish:site, publish:list, publish:status only when supported
- medium:
sync, sync:open; and publish:open only when supported
- high:
sync:restore; and publish:add, publish:remove only when supported
Response contract
Always return:
- command capability used
- risk level (
low, medium, high)
- execution mode (
direct or escalated)
- exact command(s) run or proposed
- affected file/path scope
- remote side effects summary (if any)
- blocking reason, if any
Command families
Sync:
sync
sync:status
sync:history
sync:read
sync:restore
sync:open
sync:deleted
Publish:
publish:site (only when supported)
publish:list (only when supported)
publish:status (only when supported)
publish:add (only when supported)
publish:remove (only when supported)
publish:open (only when supported)
References
references/obsidian-cli-sync-publish-playbook.md
references/limitations-and-boundaries.md
references/validation.md
references/source-links.md
1---2name: obsidian-cli-sync-and-publish3description: Use this skill when the user needs official desktop Obsidian CLI Sync workflows and, when detected as available, Publish workflows. This skill is for remote-side-effect operations and must use explicit intent, capability probing, and conservative safety checks.4---56# Obsidian CLI Sync and Publish78Use this skill for Obsidian Sync operations and capability-gated Obsidian Publish operations through official desktop `obsidian` CLI commands.910## Routing contract1112Use this skill when:13- the user asks for Sync state, Sync history, or Sync restore operations14- the user asks for Publish status, publish add/remove, or publish site checks and those commands are detected as available15- the task is a release/checkpoint flow that depends on Sync or Publish surfaces1617Do not use this skill when:18- the request is regular note CRUD, task/property updates, or graph cleanup19- the request is Obsidian Headless automation without desktop app20- the request is explicitly a named one-command workflow ID (route to `obsidian-cli-workflows`)21- the request is community tooling or non-official publish/sync surfaces2223## Preconditions2425Assume these must be true before relying on this skill:26- `obsidian` command is installed and registered27- Obsidian desktop app is available locally28- Sync is configured in the target vault29- Publish commands may be unavailable in some CLI builds and must be probed before use30- in Codex Desktop on macOS, direct launches can crash; prefer sanitized wrapper3132## Codex-safe launcher3334In Codex Desktop on macOS, prefer this wrapper:3536```bash37script -q /dev/null /usr/local/bin/zsh -ilc 'unset __CFBundleIdentifier LaunchInstanceID XPC_SERVICE_NAME CODEX_CI CODEX_SANDBOX CODEX_SHELL; export TERM=xterm-256color; obsidian ...'38```3940Escalate the wrapped command only when required by sandbox boundaries.4142## Core operating policy43441. Use only official desktop Sync and Publish CLI commands.452. Probe publish command availability before using any `publish:*` command. Use a read-only check like `obsidian help publish:status`.463. If publish probe reports `No commands matching`, treat Publish as unsupported in this environment and refuse publish actions plainly.474. For mixed read/write flows, run status checks first (`sync:status`; and `publish:status` only when publish support is confirmed).485. Treat mutating commands as high-impact operations.496. Do not run mutating commands on implicit active-file targets unless the user explicitly requested active-file behavior.507. For restore operations (`sync:restore`), require explicit `version=<n>` plus explicit `file=` or `path=` unless the user clearly specifies active-file restore.518. For publish operations (when supported), clearly state whether action targets one file, path, or all changed files.529. Summarize remote side effects before executing mutating operations.5310. If Sync is not configured, report that blocker and stop.5411. If publish is requested but unavailable in this CLI build, report that blocker and stop.5512. If the request is actually headless/server Sync, say this skill does not cover Headless Sync and stop.5657## Risk levels5859- low: `sync:status`, `sync:history`, `sync:read`, `sync:deleted`; and `publish:site`, `publish:list`, `publish:status` only when supported60- medium: `sync`, `sync:open`; and `publish:open` only when supported61- high: `sync:restore`; and `publish:add`, `publish:remove` only when supported6263## Response contract6465Always return:66- command capability used67- risk level (`low`, `medium`, `high`)68- execution mode (`direct` or `escalated`)69- exact command(s) run or proposed70- affected file/path scope71- remote side effects summary (if any)72- blocking reason, if any7374## Command families7576Sync:77- `sync`78- `sync:status`79- `sync:history`80- `sync:read`81- `sync:restore`82- `sync:open`83- `sync:deleted`8485Publish:86- `publish:site` (only when supported)87- `publish:list` (only when supported)88- `publish:status` (only when supported)89- `publish:add` (only when supported)90- `publish:remove` (only when supported)91- `publish:open` (only when supported)9293## References9495- `references/obsidian-cli-sync-publish-playbook.md`96- `references/limitations-and-boundaries.md`97- `references/validation.md`98- `references/source-links.md`