Autonovel prose review
Skill DukeTwoCan/autonovel-agent-skills/skills/creative/autonovel-prose-review
Collaboration-first Agent Skills pipeline for planning, drafting, revising, reviewing, and exporting long-form fiction.
npx -y skills add DukeTwoCan/autonovel-agent-skills --skill autonovel-prose-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 21 days oldThe repository was created 21 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Autonovel Phase 3b.2 — user-triggered targeted prose review. Takes a scope (e.g. 'ch 7', 'ch 7-10', 'act 2', 'the heist arc') and emits line-level critique for that scope only. NOT auto-invoked by the pipeline. Designed for the user to sit with the agent and iterate on prose quality chapter-by-chapter or arc-by-arc. Conversational: the agent presents notes and asks the user which to apply rather than auto-fixing.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
6.5 KB, as published. Nobody here has run it
Autonovel — Prose review (user-triggered, targeted)
Polish prose at the line level for a specific scope. Conversational — the agent suggests, the user decides.
When to use this skill
- User asks to "review chapter N", "polish the prose in ch X-Y", "look at the heist arc", "do a prose pass"
- User wants to iterate on prose quality with the agent rather than autopilot
- Never auto-invoked by the pipeline — user-driven only
Prerequisites
!`test -d "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/chapters" && ls "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/chapters" | head`
The novel needs at least one drafted chapter.
Workflow
Step 1 — Resolve scope
The user supplies a scope. Use references/scope-resolver.md to map natural-language scopes to chapter ranges:
"ch 7"→[7]"ch 7-10"→[7, 8, 9, 10]"chapters 7 through 10"→[7, 8, 9, 10]"act 2"→ look up act-to-chapter mapping inoutline.md"the heist arc"/"the romance subplot"→ searchoutline.mdheadings and arc summaries"all of part 1"→ look up part mapping inoutline.md"the last 3 chapters"→[N-2, N-1, N]fromstate.jsonchapters_drafted
If the scope is ambiguous, ask the user to clarify. Show your interpretation before proceeding.
Step 2 — Load context
Read:
- The chapter files in scope (full prose)
voice.md(target voice signature)references/anti-slop.md(from umbrella autonovel skill)references/prose-rubric.md(this skill)genre_context/story-contract.md(story-specific promises and required payoffs that line edits must preserve)genre_context/compiled/evaluation-chapter.md(selected-pack semantic guidance and guardrails)genre_context/resolved.json(selected pattern bundle for the mechanical rescore)
Budget check: ≤4 chapters at a time. If scope > 4 chapters, use lib/chunk_text.py to split into 4-chapter windows and process sequentially (with a fresh prose-review per window).
Assemble a current PROFILE REQUIREMENTS block for each review window using
the exact resolved chapter numbers in that window. The assembler reads
profile.rating and profile.content_tags from state.json, normalized tags
and literal exclusions from genre_context/resolved.json, the coverage map
from outline.md, and the matching rating definition from
../autonovel/references/ratings.md:
!`python ${HERMES_SKILL_DIR}/../autonovel/lib/profile_requirements.py --state "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/state.json" --resolved "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/genre_context/resolved.json" --outline "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/outline.md" --ratings "${HERMES_SKILL_DIR}/../autonovel/references/ratings.md" --chapters <comma-separated-chapter-numbers>`
The assembler reads the outline's Content-Tag Coverage Map and includes only tags assigned to at least one chapter in the current window. Rating, literal exclusions, and scoped content-tag coverage come from the dynamic profile block; the static evaluation packet does not supply those current values. Pass the block immediately before the story contract and evaluation packet in the line-edit prompt. Rebuild it if state, outline, resolution, or scope changes.
Step 3 — Line-level critique pass
Using references/line-edit-prompt.md, the agent emits per-paragraph notes for the in-scope chapters. Notes land in critique/prose/<scope_slug>.md. Slug: ch07, ch07-10, act2, heist-arc, etc.
The output structure (per scope):
# Prose review — <scope description>
## Chapter N
### Paragraph 3 (line 14-19)
> "Quote of the paragraph..."
- Issue 1: <e.g. "sentence-length monotony — five consecutive 8-12 word sentences">
- Issue 2: <e.g. "abstract verb 'felt' — could ground in a physical detail">
- Suggestion: <concrete revision proposal>
### Paragraph 7 (line 38-44)
...
Step 4 — Conversation mode
After emitting the critique file, present a SUMMARY to the user — count of issues per category, top 3 most actionable suggestions. Then ASK:
"Critique saved to
critique/prose/<slug>.md. Want me to: (a) apply specific fixes — name which paragraphs (b) rewrite a section — name which (c) defer all to your manual review (d) discuss any of these notes before deciding"
Do NOT auto-apply. Wait for the user.
Step 5 — Optional fix application
When the user accepts a fix:
- Read the chapter file.
- Apply the proposed change to a staged candidate at
critique/prose/candidates/<slug>_ch_{NN:02d}.md; do not edit the persistent chapter yet. - Re-score that candidate with the selected genre patterns:
!python3 ${HERMES_SKILL_DIR}/../autonovel/lib/slop_detect.py "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/critique/prose/candidates/<slug>_ch_{NN:02d}.md" --genre-context "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/genre_context/resolved.json"
4. Check the staged passage against the story contract and compiled evaluation
packet. Reject a line edit that violates either even if its mechanical score
improves. On rejection, the original chapter remains unchanged and the
candidate is retained beside the critique as review evidence.
5. Only when both checks pass, replace the original chapter with the candidate.
6. Append to state.json `prose_review_log`:
```json
{"chapter": 7, "applied_at": "<iso-date>", "fixes_applied": 3, "score_before": 6.4, "score_after": 6.7}
- Commit in the novel-directory's git:
git commit -m "prose review: ch 7 — N fixes"
Step 6 — Resume scoping
Ask the user if they want to scope another range, or stop.
Library utilities
lib/chunk_text.py— for scopes longer than 4 chapters
See also
references/prose-rubric.md— what to look for at the line levelreferences/line-edit-prompt.md— the prompt template for the critique passreferences/scope-resolver.md— natural-language scope → chapter range mapping