Autonovel grade
Skill DukeTwoCan/autonovel-agent-skills/skills/creative/autonovel-grade
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-gradeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 22 days oldThe repository was created 22 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 manual grading — user-triggered quality report. Runs every mechanical detector (slop_detect, slop_ngrams) plus the sentence-grading pass over a scope ('chapter 7', 'chapters 3-9', 'manuscript') and writes critique/slop_report_<scope>.md: a self-contained report the user can fix by hand or paste into a stronger model. NOT part of the autopilot path — the pipeline never invokes or waits on this skill.
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
9.8 KB, as published. Nobody here has run it
Autonovel — Grade (user-triggered, manual quality report)
Run every mechanical slop detector plus the sentence-grading pass over a scope and write a self-contained report. This skill is user-triggered only — it is never part of the autopilot path, never invoked or waited on by the pipeline, and never invoked by any other skill.
When to use this skill
- User says "grade chapter N", "grade the manuscript", "how sloppy is chapter N", or "give me a slop report"
- User is reviewing the
needs_attentionqueue in state.json (populated by the drafting skill's surgical-rewrite stall rule — seeautonovel-drafting/references/retry-policy.md) and wants a detailed report on the flagged chapters before deciding whether to fix them by hand or hand them to a stronger model - Never invoked automatically — this skill only runs when the user asks for it directly
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: a chapter, a range, or "manuscript" for everything. Use autonovel-prose-review/references/scope-resolver.md (reference it, don't duplicate its logic) to map natural-language scopes to chapter ranges. If the scope is ambiguous, ask the user to clarify and show your interpretation before proceeding.
Step 2 — Check state.json for needs_attention
Read $AUTONOVEL_WORKSPACE/$NOVEL_SLUG/state.json. If needs_attention is non-empty:
- Any entry with a
chapternumber that falls inside the resolved scope must be covered in the report regardless of how it scores mechanically — call it out explicitly in the summary. - An entry with
"chapter": nullis a systemic pattern note (3+ consecutive chapters stalled during drafting). Surface itsnotetext verbatim at the top of the report's Summary section — it usually points at an outline or foundation problem, not chapter-level slop, and the user needs to see it before reading chapter-level findings. - If the user's scope doesn't include a flagged chapter but
needs_attentionhas entries, mention their existence and chapter numbers in passing so the user can re-run with a wider scope.
Also read genre_context/story-contract.md,
genre_context/compiled/evaluation-chapter.md, and
genre_context/resolved.json. The first two supply the story-specific and
selected-pack evaluation criteria for the report; resolved.json supplies the
generated pattern bundle and provenance.
Assemble a separate current PROFILE REQUIREMENTS block for each chapter in
scope. 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 <chapter-number>`
The assembler reads the outline's Content-Tag Coverage Map and includes only
the content tags assigned to that chapter. Use that chapter's block in its
grading call and report section. Keep blocks current if state, outline, or
resolution changes. For manuscript scope, separately audit every state
profile.content_tags entry against the complete coverage map and manuscript;
report undelivered coverage as a manuscript-wide finding rather than injecting
all tags into every chapter's block.
Step 3 — Run the mechanical detectors
Using this skill's own vendored libs (never the ones in a different skill's lib/), for each chapter file in scope, in order, run the slop scan:
!`python3 ${HERMES_SKILL_DIR}/lib/slop_detect.py "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/chapters/<chapter file>" --genre-context "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/genre_context/resolved.json"`
Then run the manuscript-wide repetition scan over ALL chapters (repetitions are manuscript-relative even when grading a single chapter — a phrase repeated in chapters outside the scope still matters if it also occurs inside it). Read slop.ngram_min_count from the novel's state.json and pass it explicitly rather than relying on the silent default:
!`python3 ${HERMES_SKILL_DIR}/lib/slop_ngrams.py "$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/chapters" --min-count <slop.ngram_min_count>`
Import both slop_report AND find_spans from the vendored
lib/slop_detect.py, load_patterns_from_resolved from the vendored
lib/genre_patterns.py, and
scan_manuscript(texts, min_count=<slop.ngram_min_count>) from
lib/slop_ngrams.py. Load the generated tuple once per Grade run, then pass
that same tuple to both detector functions for each chapter:
from genre_patterns import load_patterns_from_resolved
from slop_detect import find_spans, slop_report
genre_patterns = load_patterns_from_resolved(
"$AUTONOVEL_WORKSPACE/$NOVEL_SLUG/genre_context/resolved.json"
)
spans = find_spans(chapter_text, genre_patterns=genre_patterns)
report = slop_report(chapter_text, genre_patterns=genre_patterns)
find_spans gives the exact matched text, position, ±80-char context, and
selected-pattern provenance the report needs; slop_report gives the
bounded-metric numbers (opener monotony, suddenly count, adverbed tags, etc.).
Aggregate selected-pattern spans by (pack_id, pattern_id) and retain each
pattern's severity and allowed max_count in its report row. Evaluate the
chapter against the story contract and evaluation packet as a semantic section
of the report; Grade remains read-only.
Note: the chapter values in slop_ngrams occurrence records are 0-based indices into the sorted ch_*.md file list — convert them to the file's NN chapter number when writing the report.
Step 4 — Run the sentence-grading pass
Run the grading prompt from autonovel-drafting/references/sentence-grading.md on each in-scope chapter. This is the one step in this skill that calls the LLM — it happens at runtime, when the user runs this skill via the Hermes agent, not as part of building or testing this skill. Parse the output with lib/grading.py parse_grades() and compute grading_gate(grades, max_weak_ratio, max_cut, expected_count=N) per chapter — limits from state.json's slop config, N = the number of sentences you numbered so the gate fails loudly if the model skipped any — plus flagged_sentences() for the WEAK/CUT indices. For chapters over ~4k words use lib/chunk_text.py chunk_by_token_budget to split the grading prompt (sentence numbering continuous across chunks) (budget per sentence-grading.md's 50k rule).
Prepend the current chapter's dynamic genre inputs to every grading call in this order:
GRADE REVIEW INPUTS
PROFILE REQUIREMENTS:
{PROFILE_REQUIREMENTS}
STORY CONTRACT:
{STORY_CONTRACT}
GENRE EVALUATION:
{GENRE_EVALUATION_BLOCK}
Fill the last two placeholders from genre_context/story-contract.md and
genre_context/compiled/evaluation-chapter.md. The sentence-grading result and
the semantic grade report therefore evaluate the same current restrictions.
Step 5 — Assemble the report
Write critique/slop_report_<scope>.md per references/report-format.md. Scope slug follows the same convention as prose-review: ch07, ch07-10, manuscript.
Step 6 — Report to the user
Report the file path and a short summary (chapters graded, findings count, WEAK/CUT ratio, needs_attention count) to the user. Do NOT modify any chapter and do NOT touch state.json.
Explicit note — read-only, user-triggered only
This skill only READS the manuscript and state.json, and only WRITES the report file. It never edits chapters, never updates state.json (not even to clear needs_attention — that queue is cleared by the phase skill that actually fixes the flagged chapter, not by this one), never advances phase, and is never invoked by another skill. It is not part of the autopilot path — the pipeline never invokes or waits on this skill.
Library utilities
lib/slop_detect.py— mechanical slop detection:slop_reportfor the metric breakdown,find_spansfor exact finding locations with context (no LLM)lib/slop_ngrams.py— manuscript-wide repeated-phrase scan (no LLM)lib/grading.py— sentence-grading parse + deterministic acceptance gatelib/chunk_text.py— for scopes longer than the sentence-grading chunk budget
See also
references/report-format.md— the report structureautonovel-prose-review/references/scope-resolver.md— natural-language scope → chapter range mappingautonovel-drafting/references/sentence-grading.md— the sentence-grading prompt and processing rulesautonovel-drafting/references/surgical-rewrite.md— what generated any mechanical findings still presentautonovel-drafting/references/retry-policy.md— howneeds_attentionentries get written and what their fields mean