Scrivener Sync
You help the writer (or an agent) edit a Scrivener Draft as plain text in an
ordinary folder and bring the edits back into the .scriv — Scrivener's
Sync with External Folder round-trip. This is the agent-native edit loop:
plain .txt/.rtf/Fountain files an agent can read and rewrite directly,
with no RTF byte surgery.
Heads up: the dedicated
sync-foldercommand is not in the CLI yet. It is on the v0.1.0 roadmap (see Toolkit support). Today you reproduce the round-trip withextract/compileto get text out andset-textto bring edits back. Be honest with the user about which path you are taking.
When to use this skill
- "Export my draft to a folder so I can edit it in another app, then sync it back."
- "Set up an external sync folder for this project."
- "I edited the text files in the sync folder — pull my changes in."
- "Edit chapter 4 as plain text and sync the result back."
- "Is this project in a sync conflict?" → route to scrivener-integrity for detection; this skill explains how conflicts arise and how to avoid them.
What the round-trip is (and is not)
Sync with External Folder mirrors binder documents to flat files on disk so you can edit them anywhere, then reconciles changes in both directions:
- Export — write each Draft document to a file in a sync folder, named with
a
[number]prefix that links the file back to its binder item. - Edit externally — open the files in any plain-text/RTF/Fountain editor (or have an agent rewrite them). Add a new file and it becomes a new binder item on import; the prefix number is how the linkage survives a round-trip.
- Import — read the files back, diff each against the binder by modified date, and update only the documents that actually changed.
It is not a live sync daemon and it is not a full document round-trip. It moves content text only.
Constraints (tell the user up front)
External-folder sync deliberately moves a reduced form of each document:
- Content only. Synopsis, notes, labels, status, keywords, custom metadata, and snapshots are not in the synced files — they stay in the project.
- Strips embedded images. Inline
\pictimages are dropped from the synced text; they remain in the project'scontent.rtf. - Wraps inline notes. Inline annotations and footnotes are wrapped in plain markers in the file so they survive editing and re-import.
- Plain formatting.
.txtand Fountain carry no rich formatting;.rtfpreserves basic character/paragraph formatting only.
Because of this, sync is ideal for prose editing (rewrite the words) and a poor fit for documents that are mostly tables, heavy styling, or images.
The round-trip today (available now)
Until sync-folder ships, do the round-trip with the existing commands:
SCRIV="<path.scriv>"
CLI="python3 ${CLAUDE_PLUGIN_ROOT}/tools/scrivener/cli.py"
# 1. EXPORT — get the text out. Per-document:
$CLI extract <uuid> --to txt --project "$SCRIV"
# …or the whole Draft as one assembled, structured file:
$CLI compile --to md --project "$SCRIV"
# 2. EDIT the text (you, or the user, in any editor).
# 3. IMPORT — bring an edited document back in.
# Prefer --append for rich docs; only overwrite a known-plain doc.
$CLI set-text <uuid> --text-file edited.txt --project "$SCRIV"
$CLI set-text <uuid> --text-file addition.txt --append --project "$SCRIV"
Key differences from real sync, which you must surface:
- There is no
[number]↔binder linking yet — you track which file maps to which UUID (resolve titles viafind/outlinein scrivener-inspect). - There is no automatic mod-date diff — decide yourself which documents changed.
set-textis token-preserving and refuses to regenerate a rich document (comments, footnotes, styles, links, tables, images) unless you pass--allow-destructive. For a rich document, append the new text or take a snapshot first — do not blow away its constructs. Inspect a doc'sconstructswithread(scrivener-inspect) before overwriting.
Cloud-sync HAZARD (read before touching the file)
Sync with External Folder is unrelated to cloud sync — but the two collide dangerously:
- Editing a
.scrivwhile Dropbox or iCloud is mid-sync can corrupt or conflict the project — even when Scrivener is closed. A half-uploaded package is an inconsistent package. - Before any export or import: close the project in Scrivener and wait for cloud sync to fully finish (no spinning sync badge / "uploading…" indicator).
- Put the external sync folder somewhere stable. If both the
.scrivand the sync folder live inside the same cloud-synced directory, you can get duplicate conflicted copies on either side.
Conflict detection. A conflict shows up as a "(Conflicted Copy)" file, a
Conflicts folder, or Synced/Updated collections in the project. If the user asks
"is this in a conflict?", route to scrivener-integrity (conflicts, planned)
to detect it, and refuse risky bulk writes until it is resolved.
Safety
Restate before any write:
- Close the project in Scrivener AND let cloud sync finish first.
- Writes auto-backup (zip) and auto-snapshot a document before overwriting
its text;
--no-backup/--no-snapshotskip these (don't, unless asked). docs.checksummismatches are advisory — Scrivener uses them to flag externally edited files; they are never corruption and never block a write.- Titles are not unique — address mutating commands by UUID when a title is ambiguous.
- Never regenerate a rich document from plain text. Append, or snapshot and
pass
--allow-destructive.
Toolkit support
| Capability | Status |
|---|---|
extract <id|all|draft> [--to md|txt] (export text out) |
✅ available now |
compile [--to md|txt] (assembled Draft out) |
✅ available now |
set-text <id> (--text|--text-file) [--append] [--allow-destructive] (bring edits back) |
✅ available now |
read <id> → constructs (check if a doc is rich before overwriting) |
✅ available now |
sync-folder export --folder <dir> [--format rtf|txt|fountain] |
🔜 planned |
sync-folder status --folder <dir> (mod-date diff vs binder) |
🔜 planned |
sync-folder import --folder <dir> ([number]↔binder linking, new files → new items) |
🔜 planned |
Draft/Notes/Trashed subdir layout + .fdx/Fountain formats |
🔜 planned |
When asked for a planned capability, say sync-folder isn't in the CLI yet and
offer the manual round-trip above (extract/compile out, set-text back),
plus this honest caveat: you lose the automatic [number] linking and mod-date
diffing, so you must track file↔UUID mapping and which files changed yourself.
See references/external-folder-sync.md for the folder layout, linking and
mod-date diffing rules, the full constraint list, the planned sync-folder
command shapes, and the cloud-sync hazard in depth.
Related skills
- scrivener-integrity —
conflicts(detect sync/cloud conflicts),verify,backup/restore; the place to check before and after a risky round-trip. - scrivener-extract — convert
content.rtfto Markdown/plain text; the "export" half of the round-trip today. - scrivener-edit —
set-text(token-preserving append/overwrite), the write model and--allow-destructiveguard; the "import" half today. - scrivener-compile — assembled, structured Draft output (titles → headings, binder order) when you want one file instead of per-document text.
- scrivener-format — how content, inline notes, and images are stored on disk, which explains what sync keeps and what it strips.