Agent skill

Story Scene Composer

by UfukNode in 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.

MITAuto-check passedWriting & Content

Install Story Scene Composer

skills CLI
$ npx skills add UfukNode/Noustiny --skill scene-composition -a claude-code

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

GitHub CLI
$ gh skill install UfukNode/Noustiny scene-composition --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/scene-composition .claude/skills/scene-composition && 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
scene-composition
GitHub stars
181
Token cost
~2.3k tokens
SKILL.md length
1,029 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Works in 5 steps: Read the payload. Note node count, depth… → Draw cluster boundaries. Walk the tree… → Merge singletons. If any cluster has… → …
  • Imposing a three-act skeleton on an existing branching story tree
  • 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

This skill reveals a scene and act structure that is already latent in a branching story tree, rather than writing anything new. Every node is placed in exactly one scene, a cluster of beats sharing setting, pressure or motif, and each scene gets a story-specific title, a one-word motif and one of the three classical acts.

The agent first calls the narrative_scene_clustering tool for deterministic cluster boundaries, coherence scores and dominant moods, then labels each cluster in a follow-up turn. If the tool is missing it falls back to clustering by reasoning. Input is one JSON object with an optional seed logline and a nodes array, where each node has an id, parentId, depth, title, body, mood and tone.

It is read-only and never adds, removes or rewrites beats, and it suits trees of roughly 6 to 40 beats that have already settled. For extending a beat, fleshing out an intent, writing prose or checking continuity, it points to the sibling skills narrative-brainstorm, narrative-writer-assist, narrative-writer and narrative-continuity-critic.

When your agent uses it

  • Imposing a three-act skeleton on an existing branching story tree
  • Grouping story beats into titled scenes
  • Annotating a tree with acts and motifs after it has stabilised

Example prompts

  • “Compose scenes for this branching story tree and give each scene an act and a motif.”
  • “Group these beats into scenes and show me the scene skeleton.”
  • “Organise the tree into three acts and name each scene the way the story would.”

Requirements

  • The story tree as a JSON object with a nodes array

Workflow steps

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

  1. Read the payload. Note node count, depth range, mood variety, parent-child graph.
  2. Draw cluster boundaries. Walk the tree in depth order; start a new scene when you hit any of
  3. Merge singletons. If any cluster has only one node, fold it into the adjacent cluster with the closest mood.
  4. Label, motif, act. For each cluster, read the beats, name the scene, pick the motif, assign the act.
  5. Emit the JSON object. Scenes in left-to-right reading order.

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

Story Scene Composer loads about 2.3k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,029 words of instructions outside code blocks.

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

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,029 words, ~2,297 tokens.

Download SKILL.mdSave it as .claude/skills/scene-composition/SKILL.md (or your agent's skills folder).
name
scene-composition
description
Reveal the scene-and-act structure already present in a branching story tree. Groups every node into a scene, labels each scene with a story-specific title, assigns an act number, and names a one-word motif. Returns strict JSON. Use when the user asks to compose scenes, group beats into scenes, organise into acts, or build the three-act skeleton over an existing tree.
author
Noustiny
license
MIT
version
1.0.0

Scene Composition

The dramaturge. You are not writing any new beats — you are revealing the scene/act structure that is already latent in an existing story tree.

Partition every node into scenes (each a coherent cluster of beats that share setting, pressure, or motif), assign each scene one of the three classical acts, and name it the way the story would name it.

Call the narrative_scene_clustering tool first to get deterministic cluster boundaries (machine-verifiable partition, coherence scores, dominant moods), then label each cluster with a story-specific title, motif, and act number in your follow-up turn. If the tool is not available in the active toolset, fall back to in-reasoning clustering — but prefer the tool when it exists.

When to Use

Trigger this skill when the user wants scene/act structure imposed on an existing tree. Typical phrasings:

  • "compose scenes"
  • "group these beats into scenes"
  • "organise into acts"
  • "build the three-act structure over this tree"
  • "show me the scene skeleton"

Scope

Best suited for:

  • An existing branching tree that the user wants structurally annotated
  • Exposing the classical three-act skeleton over 6-40 beats
  • Second-pass annotation after the tree has stabilised

Look elsewhere first for:

  • Extending a single beat with three forks → narrative-brainstorm
  • Fleshing an intent into a single beat → narrative-writer-assist
  • Writing prose from the canon spine → narrative-writer
  • Checking a downstream node for contradictions → narrative-continuity-critic

This skill is read-only. It never adds, removes, or rewrites beats.

Input Shape

The user message contains a single JSON object with the full node set:

FieldTypeRequiredPurpose
seedstringnoThe story's logline — grounds tone for label choice
nodesarrayyesEvery node to be organised

Each node has:

FieldTypePurpose
idstringStable identifier (echoed back in output)
parentIdstring | nullTree edge — null for root
depthinteger0 = root, grows downward
titlestringShort label for the beat
bodystringOne-to-three-sentence prose
moodstringOne of the mood library tokens
tonestringcanon, divergent, or what-if

Mood Library

Nodes will carry one of these tokens in their mood field:

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

Use mood continuity as one signal when drawing scene boundaries — scenes typically share a dominant mood.

Output Contract

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

json
{
  "scenes": [
    {
      "label": "UPPERCASE 2–4 WORDS, STORY-SPECIFIC",
      "motif": "single lowercase noun",
      "actNumber": 1,
      "nodeIds": ["n0", "n1", "n2"]
    }
  ]
}
Per-scene rules
  • label is 2–4 words, ALL CAPS, specific to this story. "THE FATHER'S DOUBT" is right; "SCENE TWO" or "SETUP" is wrong.
  • motif is one lowercase noun. Examples: sacrifice, betrayal, reunion, awakening, doubt, farewell, passage, reckoning, inheritance, escape, threshold, burden.
  • actNumber is exactly 1, 2, or 3.
  • nodeIds is the list of node ids belonging to this scene, in input order.
Partition rules
  • Every node id from the input must appear in exactly one scene. No duplicates, no omissions.
  • Each scene must contain at least 2 nodes. Never emit a singleton scene — fold lone beats into the nearest thematically adjacent scene.
  • Target scene count: roughly 2-3 scenes for ≤8 nodes, 3-5 scenes for 9-16 nodes, 4-7 scenes for 17+ nodes. Prefer fewer, denser scenes over many sparse ones.
Act assignment

Roughly: shallow depth → act 1 (setup), middle depth → act 2 (confrontation), deep → act 3 (resolution). Bend this when a scene's dramatic weight (mood, motif) clearly belongs earlier or later than its depth would suggest. Across the full scene list you should typically cover all three acts unless the tree is genuinely short.

Scene order

Output scenes left-to-right by the shallowest node depth inside each scene — matches the UI's reading order.

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

Show full SKILL.md (440 more words)Show less

Core Principles

Group by continuity, not by position. Two nodes are in the same scene when they share a continuous moment of pressure, a setting, or a motif — not merely because they are adjacent on the tree. Sibling what-if branches often belong to the same scene as their parent (the scene is the decision point, the siblings are the forks within it).

Labels are the story's name for its own scene. Read the beats inside a cluster and name the scene the way that story would name it. "THE HAMMER CHOOSES STEVE" beats "ACT 3 TURNING POINT".

Motif is a single noun, not a phrase. If no single noun fits, pick the strongest symbol: an object, an emotion, a relationship.

Acts are dramatic, not mathematical. A short tree can be all act 1. A climax-heavy tree can jump from act 1 to act 3. Let the beats tell you.

Workflow

  1. Read the payload. Note node count, depth range, mood variety, parent-child graph.
  2. Draw cluster boundaries. Walk the tree in depth order; start a new scene when you hit any of:
    • a sharp mood shift (e.g. quiet → danger)
    • a setting change implied by the bodies
    • a depth gap greater than 1 without a shared parent
    • a motif that unifies 2+ nodes under one banner
  3. Merge singletons. If any cluster has only one node, fold it into the adjacent cluster with the closest mood.
  4. Label, motif, act. For each cluster, read the beats, name the scene, pick the motif, assign the act.
  5. Emit the JSON object. Scenes in left-to-right reading order.

Anti-patterns

Do not do any of the following:

  • Do not omit any node. Every input id appears in exactly one nodeIds list.
  • Do not duplicate a node across scenes.
  • Do not emit a singleton scene. Fold lone beats into their thematic neighbour.
  • Do not emit label in mixed case or with non-word punctuation.
  • Do not emit motif as a phrase ("the father's doubt" is wrong; "doubt" is right).
  • Do not emit actNumber as a string or outside [1, 2, 3].
  • Do not wrap the JSON in a markdown code fence.
  • Do not explain your choices. Let the labels speak.
  • Do not emit <think> or <thinking> tags.
  • Call narrative_scene_clustering when it is available — it produces a deterministic partition that is verifiable. Use in-reasoning clustering only when the tool is absent from the toolset.
  • Do not re-cluster after the tool returns. Use its clusters field verbatim.

Example

Input:

json
{
  "seed": "A woman discovers an envelope addressed to her late father.",
  "nodes": [
    {"id":"n0","parentId":null,"depth":0,"title":"Hannah arrives home","body":"Wind chimes play in the breeze.","mood":"neutral","tone":"canon"},
    {"id":"n1","parentId":"n0","depth":1,"title":"Hannah unpacks groceries","body":"Milk, bread, eggs. The weekly ritual.","mood":"neutral","tone":"canon"},
    {"id":"n2","parentId":"n1","depth":2,"title":"Hannah finds the envelope","body":"Addressed only to Dad.","mood":"tense","tone":"canon"},
    {"id":"n3","parentId":"n2","depth":3,"title":"Hannah opens the letter","body":"Two words: Meet me.","mood":"tense","tone":"canon"},
    {"id":"n4","parentId":"n3","depth":4,"title":"Hannah calls the number","body":"A voice she remembers.","mood":"discovery","tone":"canon"},
    {"id":"n5","parentId":"n4","depth":5,"title":"Hannah meets the stranger","body":"He shows her a photograph of her brother.","mood":"climax","tone":"canon"}
  ]
}

Correct output:

json
{
  "scenes": [
    {
      "label": "THE QUIET RITUAL",
      "motif": "routine",
      "actNumber": 1,
      "nodeIds": ["n0", "n1"]
    },
    {
      "label": "THE ENVELOPE BREAKS IN",
      "motif": "intrusion",
      "actNumber": 2,
      "nodeIds": ["n2", "n3"]
    },
    {
      "label": "THE VOICE ON THE OTHER SIDE",
      "motif": "reunion",
      "actNumber": 3,
      "nodeIds": ["n4", "n5"]
    }
  ]
}

Three clusters → three scenes, each labelled with a story-specific title, a motif, and an act. Six nodes covered exactly once. 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/scene-composition of UfukNode/Noustiny.

Open the folder on GitHubat commit 09a0c82

Compare with similar skills

Story Scene Composer 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.

Story Scene Composer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Story Scene Composer this skillUfukNode/Noustiny181—~2.3kAutomated safety check: PassMIT
Chinese Novel Writing Systemleenbj/novel-creator-skill667—~3.9kAutomated safety check: PassNone
Chinese Novelist Chapter WriterPenglongHuang/chinese-novelist-skill3.3k—~491Automated safety check: WarnMIT
Sun-Style Restrained Narrative WritingKKKKhazix/sun-style-writing403—~1.7kAutomated safety check: PassMIT
Long Story AnalysisNarcooo/inkos10k—~364Automated safety check: PassAGPL-3.0
Short Web Fiction Writeruu201/character-arc579—~3.7kAutomated safety check: PassMIT

Similar skills

  • Chinese Novel Writing System

    leenbj/novel-creator-skill

    Guides long-form Chinese novel writing from a rough idea through outlines, chapter drafts and quality gates, with file-based memory for a story meant to reach 300万字.

    667 GitHub stars~3.9k tokensUpdated 7 mo ago
    Writing & ContentAuto-check passed
  • Chinese Novelist Chapter Writer

    PenglongHuang/chinese-novelist-skill

    Writes long Chinese novels chapter by chapter through guided questions, outlining, drafting with cliffhangers and automatic validation, with resumable projects.

    3.3k GitHub stars~491 tokensUpdated 2 days ago
    Writing & ContentAuto-check: warnings
  • Sun-Style Restrained Narrative Writing

    KKKKhazix/sun-style-writing

    Writes Chinese first-person nonfiction in a restrained plain-description style: short sentences, exact numbers, objects that carry feeling and silence at the peak.

    403 GitHub stars~1.7k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Long Story Analysis

    Narcooo/inkos

    Breaks down a full novel or long sample into story mechanisms and style traits the agent can reuse as craft, without copying names or wording.

    10k GitHub stars~364 tokensUpdated 11 days ago
    Writing & ContentAuto-check passed
  • Short Web Fiction Writer

    uu201/character-arc

    Walks an agent through writing a complete short web novel in Chinese, starting from the emotion the reader should feel and building around one twist.

    579 GitHub stars~3.7k tokensUpdated 5 days ago
    Writing & ContentAuto-check passed
  • Short Web Novel Deconstruction

    zenstory-ai/oh-story-claudecode

    Breaks down a popular Chinese short story into story core, structure, emotional line, twists and techniques, and saves the analysis as files for a follow-up writing skill.

    7.4k GitHub starsUsed in 1 repo~2k tokens
    Writing & ContentAuto-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 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
  • Character Sheet Builder

    UfukNode/Noustiny

    Produce a cast sheet of 1–4 named characters from a story seed.

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

Questions about Story Scene Composer

What does Story Scene Composer do?

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. This skill reveals a scene and act structure that is already latent in a branching story tree, rather than writing anything new. Every node is placed in exactly one scene, a cluster of beats sharing setting, pressure or motif, and each scene gets a story-specific title, a one-word motif and one of the three classical acts.

When should I use Story Scene Composer?

Story Scene Composer fits situations like: imposing a three-act skeleton on an existing branching story tree; grouping story beats into titled scenes; annotating a tree with acts and motifs after it has stabilised.

How do I install Story Scene Composer in Claude Code?

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

How do I install Story Scene Composer in Codex?

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

Can I use Story Scene Composer 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 scene-composition -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scene-composition, .gemini/skills/scene-composition, .github/skills/scene-composition and .opencode/skills/scene-composition in your project.

What does Story Scene Composer need to run?

SKILL.md names no scripts, command-line tools or credentials: Story Scene Composer is instructions for the agent only. Our summary lists: The story tree as a JSON object with a nodes array.

Does Story Scene Composer 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 Story Scene Composer 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 Story Scene Composer use?

Story Scene Composer 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 Story Scene Composer use?

About 2.3k tokens (SKILL.md is roughly 9.2k 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 Story Scene Composer?

Skills that share tags, products or a category with Story Scene Composer: Chinese Novel Writing System (leenbj/novel-creator-skill, 667 stars), Chinese Novelist Chapter Writer (PenglongHuang/chinese-novelist-skill, 3.3k stars), Sun-Style Restrained Narrative Writing (KKKKhazix/sun-style-writing, 403 stars) and Long Story Analysis (Narcooo/inkos, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Story Scene Composer?

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.