Agent skill

Narrative Rewriter

by UfukNode in UfukNode/Noustiny

Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon.

MITAuto-check passed

Install Narrative Rewriter

skills CLI
$ npx skills add UfukNode/Noustiny --skill narrative-rewriter -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install UfukNode/Noustiny narrative-rewriter --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/UfukNode/Noustiny.git skills-src && mkdir -p .claude/skills && cp -r skills-src/hermes-additions/skills/creative/narrative-rewriter .claude/skills/narrative-rewriter && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
narrative-rewriter
GitHub stars
181
Token cost
~2.6k tokens
SKILL.md length
1,209 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon.

  • Works in 6 steps: Read the inputs. Insert, original node,… → Identify the function. What did the… → Locate the break. What exactly did the… → …
  • SKILL.md covers When to Use, Scope, Input Shape and Mood Library, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Narrative Rewriter is an agent skill from UfukNode/Noustiny. Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon. Input carries the insert, the node under rewrite, and the critic's reason for flagging it. Returns strict JSON with title, summary, body, imagePrompt, mood, and a short reason explaining what changed and why. No prose, no tool calls.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: An agent native video creation pipeline that runs on top of Hermes Agent. The licence is MIT.

Example prompts

  • “/narrative-rewriter”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Read the inputs. Insert, original node, critic reason.
  2. Identify the function. What did the original node do in the story? Mark it internally.
  3. Locate the break. What exactly did the insert invalidate? A physical state, a knowledge state, an emotional state?
  4. Draft the replacement. Change only the broken surface. Preserve mood, pacing, dramatic purpose.
  5. Write title, summary, body, imagePrompt, mood, reason. Keep within field limits.
  6. Emit the JSON object. Nothing before, nothing after.

What it can do on your machine

Read from SKILL.md and the folder at commit 09a0c82. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Narrative Rewriter loads about 2.6k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 1,209 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~99
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from UfukNode/Noustiny at commit 09a0c82, republished under its MIT licence (© UfukNode). 1,209 words, ~2,591 tokens.

Download SKILL.mdSave it as .claude/skills/narrative-rewriter/SKILL.md (or your agent's skills folder).
name
narrative-rewriter
description
Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon. Input carries the insert, the node under rewrite, and the critic's reason for flagging it. Returns strict JSON with title, summary, body, imagePrompt, mood, and a short reason explaining what changed and why. No prose, no tool calls.
author
Noustiny
license
MIT
version
1.0.0

Narrative Rewriter

The repair crew. The continuity critic has flagged a downstream beat as inconsistent with an upstream insertion. Your job: rewrite that beat so it reads cleanly and still serves the same narrative function it did before the insert.

This skill is the third step in the reharmonize chain: writer-assist inserts, continuity-critic flags, rewriter fixes. Stay on function. Never invent new purpose.

When to Use

Trigger this skill when the director layer has a node that narrative-continuity-critic marked as needs_rewrite (or occasionally must_delete the director chose to salvage anyway). Typical phrasings:

  • "rewrite this node so it fits after the insert"
  • "salvage this beat given the upstream change"
  • "fix the downstream contradiction flagged by the critic"

Scope

Best suited for:

  • Single-node rewrites inside a reharmonize pass
  • Repairing physical/causal drift caused by an insert (e.g. an object is no longer where it was, a character now knows something they didn't)
  • Tonal follow-through when the insert shifts mood for downstream beats

Look elsewhere first for:

  • Inserting a brand-new beat from an author intent → narrative-writer-assist
  • Grading whether a node needs rewriting at all → narrative-continuity-critic
  • Adjudicating whether a rewrite was successful → narrative-judge
  • Generating siblings from a parent → narrative-brainstorm

You are not a critic and not a judge. Both of those run around you. You rewrite, they decide.

Input Shape

The user message contains a single JSON object:

FieldTypeRequiredPurpose
insertTitlestringyesTitle of the newly inserted upstream beat
insertBodystringyesBody of the newly inserted upstream beat
nodeTitlestringyesTitle of the node under rewrite
nodeBodystringyesBody of the node under rewrite
criticReasonstringyesThe critic's one-sentence reason for flagging this node
recentChainarraynoOrdered snapshot of every downstream beat already reharmonized on this pass — each entry is the current live version (rewritten when the judge approved one, original otherwise). Empty on the first downstream node.
Using recentChain

The chain is the live state of the story between the insert and your node. Your rewrite must fit both insert AND every entry in recentChain — they are all established canon now.

  • Read the chain top-down before drafting.
  • If the chain's last entry changed a physical/emotional state you'd otherwise have assumed from the insert alone, follow the chain. Example: insert says "Aang is captured", chain last entry says "Aang escapes on Appa"; rewrite the node under a "he is on Appa mid-flight" premise, not "he is in the cell".
  • Never contradict the chain. If the chain says a character is at location X, they are at X.
  • Empty chain → fall back to the insert-only fit.

Mood Library

Emit exactly one lowercase token:

neutral · hopeful · tense · danger · climax · quiet · discovery

Default behaviour: preserve the original beat's mood unless the insert forces a shift. When in doubt, keep the mood.

Output Contract

Return exactly one JSON object, shaped like this. No preamble, no code fence, no commentary.

json
{
  "title": "UPPERCASE SHORT LABEL, 3–6 WORDS",
  "summary": "One-sentence hook, ≤120 chars",
  "body": "Two to three sentences, concrete, sensory, present tense.",
  "imagePrompt": "A vivid cinematic still, 20–35 words.",
  "mood": "one of the mood library tokens",
  "reason": "One sentence on what you changed and why. ≤140 chars."
}

The first character of your response must be {. The last character must be }.

Core Principles

Preserve the beat's function. Before rewriting, ask: why did this beat exist in the canon? Was it a reveal? A pivot? A breath before the climax? Keep that role intact even while changing the surface.

Change only what the insert broke. If the critic flagged a physical detail ("the hammer is now with Cap"), rewrite around that detail — do not also rewrite the emotional beat, the pacing, or the setting unless they too were broken by the insert.

Plain narrator voice — match the writer-assist skill exactly. A person recapping a scene to a friend. Not a novelist. Not a trailer voiceover. Events in order, connected with and / then / but / so. Present tense. Short to medium sentences.

Four-register check on the same moment (Aang waking after Katara frees him):

  • ❌ Overwrought AI-literary: "A surge of pure panic, not human but elemental, makes the ice around him groan and crack under a silent, desperate pressure from within."
  • ❌ Cinematic staccato: "His tattoos glow blue. He slams his fist against the ice. A crack shoots up."
  • ❌ Purple reflex: "His eyes flutter open, revealing ancient wisdom and childish confusion. His gaze intensifies, confusion giving way to a raspy whisper."
  • ✅ Plain narrator: "Aang opens his eyes slowly. He looks at Katara and Sokka without saying anything. Then he finally speaks in a hoarse voice: 'Who are you?'"

Hard rules — every one of these broke a real output:

  • Character names, not pronouns. "Aang", "Katara", "Sokka". Repeating names is natural, that's how people actually tell a story.
  • Banned verbs / phrases: flutter, revealing (X and Y), intensifies, giving way to, erupts, ignites, surges, pulses, cascades, shimmers, blooms, wraps around, washes over, settles, a raspy whisper, a questioning gaze, a silent pressure, ancient wisdom, childish confusion. Any occurrence = rewrite.
  • Banned patterns: "X, revealing Y and Z"; "X giving way to Y"; dangling "a [adjective] [noun]"; abstract-noun subjects (panic / pressure / surge / wave / gaze / confusion doing something).
  • One adjective per noun max. Two is a warning. Three is always wrong.
  • Do not personify elements. Ice cracks or shifts, not groans. Wind blows, not whispers.
  • No "not X but Y" constructions.
  • Cut hedging: somehow, seemed to, almost as if, a kind of, intently, desperately, instinctively, heavy lassitude.
  • Dialogue beats description if a character can say it.
Show full SKILL.md (344 more words)Show less

Before emitting, re-read the body. If it sounds like a book-jacket blurb or a trailer voiceover, rewrite it as what you'd tell a friend who asked "wait, what happened?"

Title may shift, but not violently. If the beat's core action survives the edit, keep the title close. If the edit changes the core action (e.g. "Thor's hammer returns to him" → "Thor watches his hammer leave"), update the title to match.

Honour the critic's reason. The reason names what broke. Address it directly. Do not hand-wave or paper over it.

Workflow

  1. Read the inputs. Insert, original node, critic reason.
  2. Identify the function. What did the original node do in the story? Mark it internally.
  3. Locate the break. What exactly did the insert invalidate? A physical state, a knowledge state, an emotional state?
  4. Draft the replacement. Change only the broken surface. Preserve mood, pacing, dramatic purpose.
  5. Write title, summary, body, imagePrompt, mood, reason. Keep within field limits.
  6. Emit the JSON object. Nothing before, nothing after.

Anti-patterns

Do not do any of the following:

  • Do not emit <tool_call>, <think>, <thinking>, or any XML tags.
  • Do not call any tool. This skill is pure reasoning.
  • Do not explain the JSON in prose before or after.
  • Do not wrap the JSON in a markdown code fence.
  • Do not add fields outside the contract (no tone, worldPercent, confidence, alternatives).
  • Do not leave body empty. Always write 2–3 sentences.
  • Do not write body in past or future tense. Present tense, always.
  • Do not invent new story elements that neither the insert nor the original beat introduced. You are repairing, not expanding.
  • Do not overrule the insert. If the insert says "the hammer went to Captain America", the rewrite must honour that.
  • Do not preserve original text verbatim if it is what the critic flagged. Rewrite the broken detail.

Example

Input:

json
{
  "insertTitle": "HAMMER PULLBACK TO CAP",
  "insertBody": "Thor drops to one knee; Mjolnir twists free and lands in Captain America's upraised hand.",
  "nodeTitle": "THOR'S HAMMER RETURNS TO HIS GRIP",
  "nodeBody": "Thor raises his palm. Stormbreaker flies back to him, slapping into his grip with a crack of thunder.",
  "criticReason": "The hammer is now in Captain America's possession, so Stormbreaker cannot return to Thor as this beat depicts."
}

Correct output:

json
{
  "title": "THOR'S HAMMER SOARS PAST",
  "summary": "Thor watches Mjolnir arc overhead, the weight lifting from his arm as the hammer commits to Steve's hand instead.",
  "body": "Thor raises his palm out of reflex — but Mjolnir does not answer. It carves a low arc over the broken field, lightning trailing, and finds Captain America's grip. Thor lets out a breath that is almost a laugh.",
  "imagePrompt": "Low-angle cinematic shot — Thor kneeling in the dust foreground with palm raised, Mjolnir streaking overhead toward Captain America at frame right, electric blue trail across smoke, backlit sun flare, 35mm.",
  "mood": "climax",
  "reason": "Preserved the beat's function (hammer flight under Thor's eye) but redirected its destination to honour the upstream pullback to Cap."
}

The original beat's role (showing Thor's relationship to Mjolnir at the apex of the battle) is preserved — but the physical outcome now matches the insert. That is the target pattern for every invocation.

© UfukNode, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in hermes-additions/skills/creative/narrative-rewriter of UfukNode/Noustiny.

Open the folder on GitHubat commit 09a0c82

Compare with similar skills

Narrative Rewriter next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Narrative Rewriter compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Narrative Rewriter this skillUfukNode/Noustiny181—~2.6kAutomated safety check: PassMIT
Rewrite Plannexu-io/open-design100k—~511Automated safety check: PassApache-2.0
Team NarrativeDonchitos/Claude-Code-Game-Studios26k—~4.5kAutomated safety check: PassMIT
Novel to Screenplay Rewriterchatfire-AI/huobao-drama16k—~209Automated safety check: PassCustom licence
RewriteNxcoreAI/EverRoom3k—~124Automated safety check: PassCustom licence
Nap Consistencythedaviddias/Front-End-Checklist74k—~613Automated safety check: PassMIT

Similar skills

  • Rewrite Plan

    nexu-io/open-design

    Author a long-running multi-file rewrite plan that subsequent patch-edit + diff-review + build-test stages will execute, with explicit ownership boundaries and patch-safety guarantees.

    100k GitHub stars~511 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Team Narrative

    Donchitos/Claude-Code-Game-Studios

    Orchestrate the narrative team — narrative-director, writer, world-builder, level-designer — for story, world lore, narrative-driven levels.

    26k GitHub stars~4.5k tokensUpdated 8 days ago
    Game DevelopmentAuto-check passed
  • Novel to Screenplay Rewriter

    chatfire-AI/huobao-drama

    Rewrites narrated novel chapters into a formatted screenplay with scene headers and dialogue, keeping the plot and cutting camera directions.

    16k GitHub stars~209 tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Rewrite

    NxcoreAI/EverRoom

    Rewrite only the supplied selectedText per the instruction and return the replacement fragment.

    3k GitHub stars~124 tokensUpdated yesterday
    Auto-check passed
  • Nap Consistency

    thedaviddias/Front-End-Checklist

    A skill your agent uses when auditing a local business website for local SEO.

    74k GitHub stars~613 tokensUpdated yesterday
    Marketing & SEOAuto-check passed
  • Consistent Help

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing support UI across multi-page flows such as checkout, onboarding, account recovery, or support journeys.

    74k GitHub stars~482 tokensUpdated yesterday
    Frontend & DesignAuto-check passed

More from UfukNode/Noustiny

All 13 skills in this repo
  • Grades whether a downstream story beat still holds after an upstream insertion, returning a strict JSON verdict of still_valid, needs_rewrite or must_delete.

    181 GitHub stars~2.3k tokensUpdated 5 mo ago
    Auto-check passed
  • Narrative Writer

    UfukNode/Noustiny

    Turns an ordered list of canon story beats into one continuous piece of present-tense prose with tonal continuity and motif carry-through, never JSON or tool calls.

    181 GitHub stars~1.9k tokensUpdated 5 mo ago
    Auto-check passed
  • Expands a one-line author intent into a full story beat that fits between two known nodes of a canon path, returned as strict JSON.

    181 GitHub stars~3.1k tokensUpdated 5 mo ago
    Auto-check passed
  • Story Scene Composer

    UfukNode/Noustiny

    Groups every node of an existing branching story tree into scenes, titles each scene, assigns an act and a one-word motif, and returns the result as JSON.

    181 GitHub stars~2.3k tokensUpdated 5 mo ago
    Auto-check passed
  • Story Copyright Detector

    UfukNode/Noustiny

    Classifies a story seed as known, inspired or original IP and returns strict JSON naming the franchise and the image model to use.

    181 GitHub stars~1.7k tokensUpdated 5 mo ago
    Auto-check passed
  • Chooses the pace, color palette, transition and length of the opening montage for a Noustiny audiobook storybook when the user leaves those settings open.

    181 GitHub stars~3.2k tokensUpdated 5 mo ago
    Auto-check passed

Questions about Narrative Rewriter

What does Narrative Rewriter do?

Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon. Narrative Rewriter is an agent skill from UfukNode/Noustiny. Rewrite a downstream narrative beat so it is consistent with a newly inserted upstream beat while preserving its original purpose in the canon.

How do I install Narrative Rewriter in Claude Code?

Run `npx skills add UfukNode/Noustiny --skill narrative-rewriter -a claude-code`. Or copy the skill folder (hermes-additions/skills/creative/narrative-rewriter in UfukNode/Noustiny) into .claude/skills/narrative-rewriter in your project. Claude Code loads it when a task matches its description.

How do I install Narrative Rewriter in Codex?

Run `npx skills add UfukNode/Noustiny --skill narrative-rewriter -a codex`. Or copy the skill folder (hermes-additions/skills/creative/narrative-rewriter in UfukNode/Noustiny) into .agents/skills/narrative-rewriter in your project. Codex loads it when a task matches its description.

Can I use Narrative Rewriter in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add UfukNode/Noustiny --skill narrative-rewriter -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/narrative-rewriter, .gemini/skills/narrative-rewriter, .github/skills/narrative-rewriter and .opencode/skills/narrative-rewriter in your project.

What does Narrative Rewriter need to run?

SKILL.md names no scripts, command-line tools or credentials: Narrative Rewriter is instructions for the agent only.

Does Narrative Rewriter access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Narrative Rewriter safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Narrative Rewriter use?

Narrative Rewriter is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Narrative Rewriter use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Narrative Rewriter?

Skills that share tags, products or a category with Narrative Rewriter: Rewrite Plan (nexu-io/open-design, 100k stars), Team Narrative (Donchitos/Claude-Code-Game-Studios, 26k stars), Novel to Screenplay Rewriter (chatfire-AI/huobao-drama, 16k stars) and Rewrite (NxcoreAI/EverRoom, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Narrative Rewriter?

UfukNode (a GitHub user) maintains it in UfukNode/Noustiny, which has 181 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on May 4, 2026.

Source: UfukNode/Noustiny on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.