Story ops
Storytelling Operating System built on Claude Code — draft, rewrite, critique, and lint narrative voice across you + your brands. Ships with a Voice Fingerprint linter, an Audience Simulator (parallel persona subagents), and a Brand Guide PDF generator. File-based, no hidden state, hybrid protagonist model.
npx -y skills add shiva-hack/story-ops --skill story-opsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 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
Storytelling OS -- draft, rewrite, critique (Audience Simulator), lint voice (Voice Fingerprint), render brand guide PDFs, track pieces
SKILL.md
4.2 KB, as published. Nobody here has run it
story-ops -- Router
Mode Routing
Parse {{mode}} into a sub-command and optional flags. Flags the modes accept:
--brand=<key>-- protagonist key (default:personal)--structure=star|heros-journey|scqa|pixar-- draft/rewrite only--surface=linkedin|twitter|substack-- draft/rewrite only
| Input | Mode |
|---|---|
| (empty / no args) | discovery -- show command menu |
draft ... | draft |
rewrite ... | rewrite |
critique ... | critique (delegated to parallel subagents -- see below) |
voice-check ... | voice-check |
brand-guide ... | brand-guide |
tracker | tracker |
mine ... | mine |
If {{mode}} is not a known sub-command and does not look like a bare idea phrase, show discovery.
Discovery Mode (no arguments)
Show this menu:
story-ops -- Storytelling Command Center
Drafting
/story-ops draft <idea> → first draft in brand voice + structure
flags: --brand=<key> --structure=star|heros-journey|scqa|pixar --surface=linkedin|twitter|substack
/story-ops rewrite <file> → rewrite existing text in target brand voice
flags: --brand=<key>
Intelligence
/story-ops critique <file> → Audience Simulator: parallel persona subagents
flags: --brand=<key>
/story-ops voice-check <file> → Voice Fingerprint linter
flags: --brand=<key>
Brand
/story-ops brand-guide → render brand/<b>/* to PDF
flags: --brand=<key>
Pipeline
/story-ops tracker → status across all stories
/story-ops mine <file-or-paste> → extract story candidates from transcript/archive
flags: --brand=<key>
Tip: default --brand=personal. Set up additional brands with their own voice/messaging/audiences.
Onboarding check (first message of each session)
Silently verify before executing any mode:
config/profile.ymlexists (not just.example)modes/_profile.mdexists (not just.example)- At least one brand directory exists under
brands/(default:brands/personal/)
If any is missing, enter onboarding mode (see CLAUDE.md § First Run). Do not proceed with the user's requested mode until onboarding completes.
Context Loading by Mode
Modes that load _shared.md + their mode file:
Read modes/_shared.md + modes/{mode}.md + modes/_profile.md.
Applies to: draft, rewrite, voice-check, brand-guide, mine.
Standalone modes (only their mode file):
Read modes/{mode}.md.
Applies to: tracker.
Modes delegated to parallel subagents:
critique is special. It is the Audience Simulator. Load:
- Read
modes/_shared.md+modes/critique.md+modes/_profile.md. - Read the draft file passed as argument.
- Read
brands/{brand}/audiences.yml. - For each persona in
audiences.yml, launch an Agent in parallel (single message, multiple Agent tool calls):
Agent(
subagent_type="general-purpose",
description="critique as {persona.name}",
prompt="[content of modes/_shared.md]\n\n[content of modes/critique.md -- PERSONA SECTION]\n\nPERSONA CONTEXT:\n{persona yaml}\n\nBRAND CONTEXT:\n[content of brands/{brand}/voice.md]\n[content of brands/{brand}/messaging.md]\n\nDRAFT TO REVIEW:\n{draft content}\n\nReturn a structured critique from THIS persona's perspective only."
)
- Once all persona subagents return, synthesize into a single report in
reports/<NNN>-<slug>-<date>.mdusing the SYNTHESIS section ofmodes/critique.md.
Execute the instructions from the loaded mode file.
Brand resolution
--brand=<key> maps to brands/<key>/. Validate the directory exists before running. If the user requests a brand that doesn't exist, offer to seed it from brands/example/.
Default brand is personal if the flag is omitted. If only one brand exists, use that brand regardless of the flag (and note the assumption in the output).