Repository navigation
Works Store and Privacy
editwright makes no network calls. ew.py uses only the Python standard library and reads and writes files on your machine; your text goes nowhere beyond the agent you already use. What it keeps about your work goes in one folder, the works store.
ew.py takes the first of these that is set:
-
--works PATHon the command line (before the command name) - the environment variable
EDITWRIGHT_WORKS -
worksin a.editwright.jsonin the current folder; a relative path there is taken from that folder -
worksin the user config file:~/.editwright.json, or the file named byEDITWRIGHT_CONFIG ~/editwright-works
The config file is JSON with one key, works. Each route finds the same store here, so author prints the same tallies:
$ EDITWRIGHT_WORKS=works python3 ew.py author "Test Author" | head -1
by category: typo 1/1 taken; repetition 1/1 taken; tense 1/1 taken; stakes 1/1 taken; rhythm 0/1 taken; punctuation 0/1 taken$ mkdir -p cfg && cd cfg && echo '{"works": "../works"}' > .editwright.json && python3 ../ew.py author "Test Author" | head -1
by category: typo 1/1 taken; repetition 1/1 taken; tense 1/1 taken; stakes 1/1 taken; rhythm 0/1 taken; punctuation 0/1 takenWith nothing set, the store is editwright-works in your home folder. For this run HOME was /tmp/demo/home:
$ python3 ew.py author "Test Author"
no preferences yet for Test Author (/tmp/demo/home/editwright-works/authors)The README names all five since 0.1.1 (the 0.1.0 README named only 2, 4 and 5). They come from the script's own lookup (works_root in ew.py). Point the store at a private folder that is backed up. Keep it out of any public repository: the editwright repository's own .gitignore lists works/, editwright-works/ and .editwright.json for that reason.
The store after the runs on Commands, with three works (a story, an essay and the essay's PDF stand-in) and one author:
$ find works | sort
works
works/authors
works/authors/test-author.json
works/authors/test-author.md
works/essay
works/essay-pdf
works/essay-pdf/jobs
works/essay-pdf/jobs/20261009-1-full
works/essay-pdf/jobs/20261009-1-full/clean.md
works/essay-pdf/jobs/20261009-1-full/cleanup-log.md
works/essay-pdf/jobs/20261009-1-full/job.json
works/essay-pdf/jobs/20261009-1-full/notes.md
works/essay-pdf/jobs/20261009-1-full/source-text.md
works/essay-pdf/jobs/20261009-1-full/source.pdf
works/essay-pdf/story-bible.md
works/essay-pdf/style-sheet.md
works/essay-pdf/work.json
works/essay/jobs
works/essay/jobs/20261009-1-line
works/essay/jobs/20261009-1-line/clean.md
works/essay/jobs/20261009-1-line/cleanup-log.md
works/essay/jobs/20261009-1-line/job.json
works/essay/jobs/20261009-1-line/notes.md
works/essay/jobs/20261009-1-line/provenance-ledger.md
works/essay/jobs/20261009-1-line/provenance.json
works/essay/jobs/20261009-1-line/review.md
works/essay/jobs/20261009-1-line/source-text.md
works/essay/jobs/20261009-1-line/source.md
works/essay/jobs/20261009-1-line/suggestions.json
works/essay/jobs/20261009-1-line/suggestions.md
works/essay/story-bible.md
works/essay/style-sheet.md
works/essay/work.json
works/last-check.txt
works/the-salt-road
works/the-salt-road/jobs
works/the-salt-road/jobs/20261009-1-full
works/the-salt-road/jobs/20261009-1-full/chunks
works/the-salt-road/jobs/20261009-1-full/chunks/001.md
works/the-salt-road/jobs/20261009-1-full/chunks/002.md
works/the-salt-road/jobs/20261009-1-full/chunks/003.md
works/the-salt-road/jobs/20261009-1-full/chunks/INDEX.md
works/the-salt-road/jobs/20261009-1-full/clean.md
works/the-salt-road/jobs/20261009-1-full/cleanup-log.md
works/the-salt-road/jobs/20261009-1-full/edited-2-changelog.md
works/the-salt-road/jobs/20261009-1-full/edited-2.md
works/the-salt-road/jobs/20261009-1-full/edited-3-changelog.md
works/the-salt-road/jobs/20261009-1-full/edited-3.docx
works/the-salt-road/jobs/20261009-1-full/edited-3.md
works/the-salt-road/jobs/20261009-1-full/edited-changelog.md
works/the-salt-road/jobs/20261009-1-full/edited.md
works/the-salt-road/jobs/20261009-1-full/job.json
works/the-salt-road/jobs/20261009-1-full/notes.md
works/the-salt-road/jobs/20261009-1-full/provenance-ledger.md
works/the-salt-road/jobs/20261009-1-full/provenance.json
works/the-salt-road/jobs/20261009-1-full/review.docx
works/the-salt-road/jobs/20261009-1-full/review.md
works/the-salt-road/jobs/20261009-1-full/source-text.md
works/the-salt-road/jobs/20261009-1-full/source.md
works/the-salt-road/jobs/20261009-1-full/stats.json
works/the-salt-road/jobs/20261009-1-full/suggestions.json
works/the-salt-road/jobs/20261009-1-full/suggestions.md
works/the-salt-road/story-bible.md
works/the-salt-road/style-sheet.md
works/the-salt-road/work.json| Path | Holds |
|---|---|
<work>/work.json |
the work's slug, title, author, genre and creation time |
<work>/story-bible.md, style-sheet.md
|
started empty at the first intake; the agent fills them during the passes. They belong to the work, not the job. |
<work>/jobs/<date>-<n>-<level>/ |
one folder per intake |
source.<ext> |
a byte-for-byte copy of your file, made read-only |
source-text.md, clean.md
|
the text as read, and after cleanup |
job.json |
the job's settings, the source's SHA-256, size and modification time, and the source's full path on your machine |
notes.md |
a timestamped log: intake, each apply, feedback notes, overrides with the user's words, each check |
authors/<name>.json, .md
|
an author's tallies of what they took and turned down, and their taste notes |
last-check.txt |
the result of the newest check in this store |
So the store holds full copies of your manuscripts, and the paths they came from. Treat it like the manuscripts themselves.
The refused PDF intake on How it works left nothing in the store. In 0.1.0 it left a works/book folder with a source.pdf and no job.json, because intake copied the snapshot before it found it could not read the file. Delete such a folder by hand.
Delete the folder. The snapshot is read-only, and some tools refuse to delete it. On Windows, Python's shutil.rmtree stopped with "Access is denied" at source.md (Python 3.14.6, 2026-10-08). rm -rf in Git Bash removed the same folder. Uninstalling the plugin leaves the store in place.
The skill's rules keep notes about a work private. Manuscripts, style sheets, story bibles and author preferences live in the store. They never go in a repository, an issue or a public file. The editwright repository follows the same rule for its own tests and evals, which use invented text written at test time. When you report a problem, describe it with invented text too.
This wiki describes editwright 0.1.1 (tag v0.1.1, commit 8d9a0d5) and was last updated on 2026-10-09. The plugin is MIT licensed. Report problems in the issues.