Install
openclaw skills install @ryubyss/short-fiction-manuscript-formattingA skill for formatting short fiction, essays or essays intended for publication according to modern manuscript style.
openclaw skills install @ryubyss/short-fiction-manuscript-formattingFormats one short story as a submission .docx in Courier New 12 pt. Spacing and emphasis stay with Shunn's modern short-fiction rules: one space between sentences, italics, curly quotes. A dash is two hyphens (--) with no spaces, because in Courier an em dash is easy to mistake for a hyphen. One title, one byline, scene breaks marked #. It does not format novels, and it does not add the second space used in Shunn Classic. It does not copy Shunn's guide. The definitive short-fiction article is format.ms/story (mirror: shunn.net/format/story), last updated 13 July 2026. If a market explicitly requires Times New Roman, stop and say so. Otherwise do not swap this font.
The guide's own text is CC BY-NC-ND 4.0 and must not be reproduced in a submission or in this skill's output. The emitter refuses a paragraph beginning with Copyright rather than silently reformatting it, and --self-test checks that refusal. Do not paste the guide's text or its license line into a manuscript.
.docx of one story.Don't use for:
references/classic-vs-modern.md.python3 ${HERMES_SKILL_DIR}/scripts/format_manuscript.py manuscript.md -o Story.docx
Install: copy this folder to ~/.hermes/skills/writing/short-fiction-manuscript/. It loads on the next Hermes session, not the current one.
--classic exits 2 and writes nothing. A chapter heading also exits 2 and writes nothing. --self-test checks both refusals. Input shape: templates/example-story.md.
| Job | Rule |
|---|---|
| Scope | One short story. Not a novel. |
| Page | Plain white, no decoration. 1 inch margins on all four sides. |
| Type | Courier New, 12 pt, black. Not Times New Roman. Not sans-serif. Not bold display type. |
| Story | Double-spaced, left aligned, ragged right. First line indent 0.5 inch. No blank line between paragraphs. |
| Sentences | One space. Italics for emphasis. Dash as -- with no spaces. Curly quotes. |
| Scene break | A centered # on its own line. Never a blank line, and never a chapter title. |
| Page 1 | Contact upper left. N words upper right, N rounded to the nearest 100. No header, no SSN, no copyright line. |
| Title | The story title only, centered, about 40% of the way down the text area of page 1 (a third to halfway down). Byline centered under it as by Name. |
| Later pages | Flush-right header Surname / Keyword / 2. Surname comes from the byline. Not on page 1. |
| End | Optional centered END. Do not add a copyright notice. |
Full checklist: references/modern-rules.md.
manuscript.md in the shape of templates/example-story.md. Mark scene breaks as a line containing only #. Mark emphasis with *asterisks*. Do not restyle the prose and do not insert chapter headings. Completion: the file has closing front matter and at least one story paragraph.VERIFY PASS, the rounded word-count line, and the header pattern.Format). Override with header_keyword when a clearer one or two words exist, then re-run. Completion: the header in stdout is the one that should be submitted..docx plus the rounded count and header string. Completion: the reply calls it a short-fiction manuscript, not a novel and not Classic, and does not tell them to add a copyright line.Hand-building the .docx is a fallback only when Python cannot run. Follow references/modern-rules.md item by item and say the verifier did not run.
Two older skills describe the same job and disagree with this one. They are superseded; do not follow them.
manuscript-formatting (top level). It claims "no running headers" and "round to the nearest thousand" — both wrong. Shunn wants a flush-right running header on page 2 onward, and the word count rounded to the nearest hundred. It also builds files with python-docx and textutil, which is a fallback path, not the preferred one.creative/manuscript-formatting-short. It defaults the word count to plain N words. Shunn's own specimen reads about 1,500 words.When either is loaded by name, use the rules here instead and say the difference. If the writer asks for a .doc rather than a .docx, build it with python-docx or convert the .docx with textutil, and say the emitter's verifier did not run on that conversion.
-- with no spaces around it. Do not insert a real em dash; it looks like a hyphen in a monospaced font.#. Extra blank lines are collapsed, not turned into #.header_surname overrides the guess.'em, 'tis, 'cause, or '90s are easy to get wrong. Don't "fix" ’em back to an opening quote.END is optional. The script adds it only when include_end: true or the source already has a lone END line..docx only. Do not also make a PDF unless that market asks.smarten. A straight apostrophe in the address (e.g., "Writer's Lane") will fail verification. Use curly quotes in front matter or avoid apostrophes in contact fields.w:jc is "left"; the word count appears at the right because of <w:tab/> before it. Do not "fix" the paragraph alignment to "right" — that would left-align the contact block.Run:
python3 ${HERMES_SKILL_DIR}/scripts/format_manuscript.py --self-test
Completion: stdout ends with SELF-TEST PASS.
On a real story, completion is all of:
VERIFY PASS.word_count_line matches N words with N rounded to the nearest 100.header is Surname / Keyword / # and was checked against the byline..docx is Courier New, one story: page 1 has contact and the story title and no running header; page 2's header is flush right; there are no chapter openings.If verification fails, fix the input and re-run. Do not hand the writer a file that failed.