Skip to content
Back to skills

Se Write Story

ASecurity

Create a new story end-to-end via the CLI — structure first, prose last. World → plot → cast → arcs → beats → prose, in that order. Use when the user asks "write me a story", "build a new story about X", "let's create a novella".

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
ai-agentsgobashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add Ugbot/ai-grind --skill se-write-story --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Se Write Story?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Se Write Story
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ugbot-se-write-story/badge)](https://www.skillsdirectory.com/skills/ugbot-se-write-story)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: se-write-story
description: Create a new story end-to-end via the CLI — structure first, prose last. World → plot → cast → arcs → beats → prose, in that order. Use when the user asks "write me a story", "build a new story about X", "let's create a novella".
user_invocable: true
---

# Write a story via CLI

Drive the full create-story flow from concept through first prose. The
user can do the same thing in the `/stories/new` wizard — this is the
CLI-native equivalent.

## The rule

**Structure first. Prose last.** Build the world, the plot, the cast,
and the arcs *before* writing any narrative text. The scaffolding is
what keeps the prose honest — without it you'll drift, rename things,
forget which scene Lady Catherine is in, and end up with six
inconsistent paragraphs instead of a short story.

The order, in every case, is:

1. **Concept** — genre, tone, length, themes, setting, conflict, title.
2. **Story** entity — `story create`, record the `id` and `storyId`.
3. **World** — `place create` for every location a scene could happen
   in, plus any off-screen place the story references. Build hierarchy
   via `--parent`. Don't skimp; descriptions cost nothing and pay off
   when you're writing a scene six days later and can't remember what
   the tavern looked like.
4. **Cast** — `character create` for every named character, including
   the ones who only appear in one scene. Fill in `--personality`,
   `--backstory`, `--motivations`. A character with one line in scene
   4 gets two sentences of backstory now so that when you write the
   scene you know what colour their gloves are.
5. **Items** — `item create` for props the plot turns on. A letter, a
   weapon, a locket. Attach owner/location so the graph stays tight.
6. **Plots** — `plot create` for the main plot and each subplot.
   Fill in `--central-conflict`, `--stakes`, `--objective`. Link a
   `--protagonist` and `--antagonist` character id to each.
7. **Arcs** — `arc create` per character that has an internal change.
   Pick an `--type` from the ArcType enum. State the starting and
   desired-ending states.
8. **Chapters + scenes** — create each scene with title, summary,
   `--order`, `--place`, `--viewpoint`, `--characters`. Leave
   `--narrative-text` **unset** for now, or set it to a one-paragraph
   placeholder. This is the scene list — the outline, not the prose.
9. **Beats** — `beat create` per scene. Beat types describe the scene's
   job (HOOK, SETUP, ESCALATION, REVEAL, DECISION, TURNING_POINT,
   CLIMAX, RESOLUTION). Link beats to plots via `--advances-plot` and
   to arcs via `--advances-arc` with `--plot-delta` / `--arc-delta`
   so progress auto-rolls up.
10. **Prose, finally** — go back through each scene and fill in
    `--narrative-text`, `--dialogue-text`, `--action-text`.
    **Before writing each scene's prose**, invoke the
    `se-scene-context` skill for that scene. It pulls the story voice
    spec, the target scene's beats, the characters' profiles, the
    place description, and the neighbouring scenes into one working
    brief. Only then write. `./story-cli scene update <sceneId>
    --narrative-text="..."`.
11. **Refresh word counts**:
    `curl -s -X POST http://localhost:9876/api/stories/<id>/update-word-count`
12. **Hand off** to the UI: tell the user to open
    `http://localhost:3002/stories/<jpaId>` to review.

## Concept questions (phase 1)

Ask (or decide with the user), in this order:

- Genre + any subgenres
- Tone (a sentence, not a word; "sardonic, gallows humour" not "dark")
- Length — short story / novella / novel
- Themes (2–3)
- Setting — where, when, at what social scale
- Central conflict
- Title — derive from the setting if the user doesn't care

Write these down in a comment block before you invoke the CLI. They
are the spec the whole rest of the flow has to obey.

## Command cheat-sheet

```bash
# story
./story-cli story create --json --title="..." --genre="..." \
  --description="..." --premise="..." --synopsis="..."

# place (repeat per location)
./story-cli place create --story $SID --name="..." --type=<PlaceType> \
  --description="..." [--parent=<placeId>]

# character (repeat per named character)
./story-cli character create --story $SID --name="..." --role=<CharacterRole> \
  --physical-description="..." --personality="..." \
  --backstory="..." --motivations="..." [--is-main-character]

# item
./story-cli item create --story $SID --name="..." --type="..." \
  --description="..." [--owner=<charId>] [--location=<placeId>]

# plot (one main + subplots)
./story-cli plot create --story $SID --title="..." --type=<PlotType> \
  --description="..." --central-conflict="..." --stakes="..." \
  --objective="..." [--is-main-plot] \
  [--protagonist=<charId>] [--antagonist=<charId>]

# arc (per character who grows)
./story-cli arc create --story $SID --character=<charId> \
  --title="..." --type=<ArcType> --description="..."

# scene (SUMMARY ONLY, no prose yet)
./story-cli scene create --story $SID --title="..." --order=<n> \
  --summary="..." --place=<placeId> --viewpoint=<charId> \
  --characters=<c1>,<c2>

# beat (per scene, 2-4 beats typical)
./story-cli beat create --story $SID --scene=<sceneId> \
  --type=<BeatType> --importance=HIGH \
  --title="..." --description="..." \
  [--advances-plot=<plotId> --plot-delta=0.15] \
  [--advances-arc=<arcId>  --arc-delta=0.10]

# prose (LAST)
./story-cli scene update <sceneId> --narrative-text="..." \
  --dialogue-text="..." --action-text="..."
```

Flag names to remember (bitten by these): `--central-conflict` not
`--conflict`; `--narrative-text` not `--narrative`; `--is-main-plot`
not `--main`.

## Ordering discipline — the "why"

- **World before people**: places are where characters do things. If
  you create characters first, their backstories will reference places
  that don't exist yet and you'll end up retrofitting.
- **People before plots**: plots reference characters as protagonist
  and antagonist. The plot is empty without them.
- **Plots before arcs**: an arc is a character's transformation across
  a plot. The plot's beats are the arc's turning points.
- **Arcs before scenes**: scenes land beats, beats land arcs, arcs
  land plots. A scene written before you know what arc it's advancing
  is a scene that will get cut.
- **Scenes before beats**: beats live inside scenes. This one is
  mechanical.
- **Beats before prose**: beats are the scene's job. Prose is the
  scene's *execution* of that job. Write the prose last so the prose
  actually executes the beat instead of drifting into a different
  one.

## Rules

- Never use placeholder prose like "Lorem ipsum" or "TBD". If you're
  writing, write real prose. If the user is writing, leave narrative
  fields unset and tell them what scene needs filling.
- Capture every id the CLI returns. `tee`/jq into a scratch file is
  fine; just don't lose them.
- For novellas and novels, do not try to write every scene in one
  session. Scaffold everything through step 9 (beats) in one pass,
  then fill in prose a scene at a time over multiple sessions.
- If you're tempted to skip world-building "because there's only one
  location", you're wrong. Create at least three places: the main
  setting, the place the protagonist is from, and somewhere off-stage
  the antagonist operates from. The graph tells you things later.

## After creation

End with `se-explore-story <id>` or
`./story-cli story structure <id> --json` so the user can see the
finished shape. Then tell them to open
`http://localhost:3002/stories/<jpaId>` in the editor.

## Related skills

- `se-explore-story` — verify after creation
- `se-play-story` — read it back when the prose lands
- `se-progress-report` — check pacing guidance as you go

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…