Scrivener: Create or Fork a Project
You help the writer start a new .scriv project from scratch, or fork an
existing one into a separate working copy they can experiment on without
risking the original. A .scriv is a structured package: it must stay valid
and openable in Scrivener 3, so scaffold it deliberately, not by guesswork.
When to Use
- "Create a new Scrivener project" / "start a new .scriv" / "scaffold a project"
- "Make a copy of this project so I can experiment" (fork / Save-As)
- The user wants a blank manuscript they can then import into or edit
Toolkit support
| Need | Command | Status |
|---|---|---|
| Scaffold a new project | new-project <path> [--template <name>] [--import <dir|file>] |
🔜 planned |
| Copy a project to a new working copy | fork <src> <dst> |
🔜 planned |
| Timestamped zip of the whole project | backup [--out <dir>] |
✅ available now |
| Validate a package | verify |
✅ available now |
| Add binder items after scaffolding | add, rename, move (see scrivener-edit) |
✅ available now |
Be honest with the user: new-project and fork are roadmap, not in the
CLI yet. Until they ship, use the two workarounds below.
Fork today (the supported workaround)
To make a working copy you can experiment on, do NOT edit the original. Two safe options, both available now:
backupthe source — produces a timestamped zip; unzip it to a new path and open that copy. This is the closest available equivalent tofork.python3 ${CLAUDE_PLUGIN_ROOT}/tools/scrivener/cli.py backup \ --project "/path/MyNovel.scriv" --out "/path/forks" # then unzip the resulting zip to "/path/MyNovel-experiment.scriv"Copy the package directory (
.scrivis a folder/bundle). After copying, always validate the copy before editing it:cp -R "/path/MyNovel.scriv" "/path/MyNovel-experiment.scriv" python3 ${CLAUDE_PLUGIN_ROOT}/tools/scrivener/cli.py verify \ --project "/path/MyNovel-experiment.scriv"
Then point all subsequent commands at the copy. Tell the user the original is untouched.
Create a blank project today (hand-built minimum)
new-project is planned, so when the user needs a new project now, hand-build
the minimum valid package. The full byte-level layout is in
references/new-project-structure.md; the essentials:
- A
<Name>.scrivxwhose<Binder>contains exactly three special root folders: aDraftFolder, aResearchFolder, and aTrashFolder(identified byType, not by title). Files/version.txtcontaining23(the format version for Scrivener 3).- A
Files/Data/directory (empty is fine — items only get aData/<UUID>/folder once they have content).
Special root folders have no Data/<UUID> directory, and that is normal,
not corruption. After building it, run verify and open it in Scrivener once
to let it regenerate UI/autosave files.
python3 ${CLAUDE_PLUGIN_ROOT}/tools/scrivener/cli.py verify \
--project "/path/NewProject.scriv"
Once the skeleton opens, switch to scrivener-import to bring text in, or scrivener-edit to add chapters and scenes.
Templates (planned)
When new-project --template <name> ships, templates resolve <$template_*>
placeholders (e.g. <$template_title>, <$template_author>) into project
metadata and starter binder items. There is no template engine in the CLI
today — note this to the user and offer the hand-built blank project plus
add instead. See references/new-project-structure.md for the placeholder
convention.
Safety
- Have the user close the project in Scrivener and let cloud sync
(Dropbox/iCloud) finish before you copy or edit any
.scriv. - When forking, operate on the copy; never mutate the original.
docs.checksummismatches in a copied project are advisory, never corruption — offerrepair --checksumsif the user cares, don't block on it.- Titles are not unique; once items exist, address mutating commands by UUID.
Related skills
- scrivener-format — canonical
.scrivpackage format; the structure this skill scaffolds against. - scrivener-import — bring files/research into the new project.
- scrivener-edit — add, move, rename, and restructure binder items after the skeleton exists.
- scrivener-integrity —
verify,backup,repairfor the copy you make.