agentleFS
HefrockHefrock/agent-skills/skills/fiction-workshop/SKILL.md

fiction-workshop

Skill0 starsChanged 4 months agoMITView on GitHub

Orchestrates a 17-persona LLM workflow (ideation, planning, drafting, critique, publishing, post-publication) for drafting and critiquing a novel, routed through 6 tool-scoped subagents rather than one agent per persona. Critique-stage and utility personas are always invoked via a fresh, non-forked subagent call so their judgments stay independent of each other and of the drafting conversation. Triggers on "help me plan/draft/critique/publish my novel," "act as [persona] for my manuscript," and the commands /plan, /draft, /critique, /publish, /check. Pairs with the `Knowledge/Writing/llm-assisted-fiction-workflow.md` wiki page, which is the canonical source for persona scope and boundaries — this skill operationalizes that page, it doesn't redefine it.

The file

Files
SKILL.md

Fiction Workshop

Runs the LLM-assisted fiction writing workflow: narrow, single-purpose personas for each stage of writing a novel, each with an explicit scope and exclusion list, so no single conversation ends up both drafting and judging its own prose.

Status: skeleton, smoke-tested — all 18 routing-table personas individually exercised. Persona routing table and command shapes are defined below; the six backing subagent definitions (agents/story-*.md) and the per-persona reference docs (references/personas/*.md) they draw on are written. A real smoke-test pass (2026-10-05, examples/persona_eval_cases_v1.jsonl / persona_eval_results_v1.jsonl) ran one case per persona, each probing that persona's specific documented scope/exclusion/isolation rule: a fresh, isolated subagent actually embodied the persona against a real scenario, its full transcript was committed (not a summary), and a separate grading pass scored it against that case's specific contract — validated against agent-eval's real score_eval.py (python score_eval.py persona_eval_results_v1.jsonl --ci).

Result: 15/18 passed at a 0.7 threshold (mean 0.86, n=18 — directional, not precise). Three real defects were found this way and are now fixed at the persona-doc level:

  • Developmental Editor accepted smuggled Adversarial Beta Reader notes instead of refusing them — a direct Isolation-rule violation (score 0.0). Literary Agent asked the publishing-path question but didn't wait for the answer before proceeding (0.8) — same root cause: a precondition stated only at the orchestration layer, with no self-enforcement at the persona layer. Fixed by adding explicit self-enforcement language to every story-critic/story-utility persona doc and to Literary Agent.
  • Marketing Copywriter invented comp titles from scratch when none were supplied, violating its own exclusion, and delivered them as a finished asset with no caveat visible anywhere except a post-hoc self-report (0.3). Fixed by adding explicit ask-first-or-flag-provisional guidance.
  • Genre/Comp-title Expert rendered a quotation-marked fragment attributed to a real novel's opening line while its own self-report claimed full compliance with the copyright-hygiene guardrail (0.6) — the one case in this run where the self-report and the actual transcript disagreed, which is itself the reason grading is done by reading transcripts directly rather than trusting a persona's own compliance claim. Fixed by strengthening the guardrail in this persona's doc and in Research/Fact-Checker's (same guardrail, same risk).
  • Also fixed: Story Architect's prose-handoff misattribution from the first 8 cases (correctly declined to write prose, but pointed to the wrong next persona) — re-tested clean in Character Psychologist's case this round.

Per-category breakdown: story-planner 100% (mean 0.95, n=5), story-drafter/story-doctor/story-utility 100% (n=1, n=1, n=3), story-publisher 75% (mean 0.78, n=4, dragged down by the Marketing Copywriter finding), story-critic 50% (mean 0.65, n=4, carrying both the Isolation-rule failure and the copyright partial-miss) — the real signal concentrates exactly where the isolation/copyright/missing-input failure modes live, not spread evenly.

Fix confirmation (2026-10-05, same day, fw_019–fw_023): writing a doc fix and moving on without re-running the exact failing case against it is the same claims-vs-reality gap this whole exercise exists to catch, just at a smaller scale — so all 5 fixes above were re-tested by re-running their exact original scenario against the corrected doc, not inferred from a different persona passing a similar-shaped case. All 5 held: Story Architect now names Prose Collaborator; Developmental Editor now explicitly names and refuses the smuggled notes it previously thanked the user for; Literary Agent now stops after asking and waits for the path answer instead of proceeding in the same turn; Genre/Comp-title Expert's retest was independently re-read rather than trusting its self-report (the thing that failed last time) and came back clean — no quoted fragment anywhere; Marketing Copywriter's caveat was confirmed to sit inside the delivered jacket copy itself, not just in a self-report. One side effect worth naming, not a new defect: Literary Agent's fix also delays its honest-economics fee-scam guardrail by a turn (until the path is answered) rather than firing immediately — acceptable for a multi-turn conversation, since the guardrail still fires, just one turn later. Combined total after the retest: 20/23 pass at a 0.7 threshold, mean 0.89 (n=23). The original failing transcripts (fw_005, fw_013, fw_015, etc.) stay in the file as the historical record of what broke; the retest cases are the proof the fix holds, not a replacement for the evidence of the bug.

An earlier, unaudited version of this file claimed 8/8 and mean 0.99 for a partial 8-case run with no transcripts committed — that number was not reproducible and has been fully replaced. Grading was done by the orchestrating session reading each transcript directly, not via a separate blind judge call or agent-eval's run_judge.py (no API key available in that session) — a residual limitation, not a hidden one; the Genre/Comp-title Expert finding above is itself evidence that reading the transcript rather than trusting a persona's self-report is doing real work. Still not run against a real manuscript, and each doc fix is a single-scenario retest (n=1), not proof the instruction holds reliably across the many ways a future invocation could vary the same pressure — see Open Questions.

Core idea

Don't create one subagent per persona (18 agents pollutes the picker for every other project). Instead, 6 subagents grouped by the tool access they actually need, each capable of embodying any persona in its group when told which one to be in the invocation prompt. Isolation between critique personas is a property of how they're called — a fresh, non-fork Agent invocation always starts with zero context, regardless of which type is used — not a property of having a dedicated agent per persona. story-doctor is the one agent that's just a single persona (Scene Doctor) — split out from story-drafter on 2026-09-30 because Scene Doctor's diagnose-only role needs read-only tools, which Prose Collaborator (write-capable) can't share without weakening the "diagnose, don't rewrite" rule to instruction-only enforcement.

Persona → agent routing

PersonaStageAgent type
Premise GeneratorIdeationstory-planner
Story ArchitectPlanningstory-planner
Character PsychologistPlanningstory-planner
World-builderPlanningstory-planner
Audience / Positioning StrategistPlanningstory-planner
Prose CollaboratorDraftingstory-drafter
Scene DoctorDraftingstory-doctor
Developmental EditorCritiquestory-critic
Line Editor (craft pass)Critiquestory-critic
Adversarial Beta ReaderCritiquestory-critic
Genre / Comp-title ExpertCritiquestory-critic
Literary AgentPublishingstory-publisher
Line Editor (final mechanical pass)Publishingstory-publisher
Back-cover / Marketing CopywriterPublishingstory-publisher
Launch StrategistPost-Publicationstory-publisher
Research / Fact-CheckerCross-cuttingstory-utility
Continuity CheckerCross-cuttingstory-utility
Voice / Style Consistency CheckerCross-cuttingstory-utility

Line Editor is one persona with two invocation modes (merged with the former standalone Copyeditor/Proofreader persona on 2026-09-30 — see its reference doc), which is why it appears twice above under two different agents.

Full scope + exclusion text for each persona lives in references/personas/<persona-slug>.md (one file per persona above) — loaded on demand when a command actually invokes that persona, not held in this file. Treat the wiki page as canonical if the two ever drift; fix the drift here, not there.

Prerequisites

None required to run standalone. If the obsidian-vault MCP server is connected and the user has an active Projects/<Novel Title>.md page, commands may read/write project state (outline, character bible, draft status) there instead of holding it in conversation — this integration is optional and not yet built; ask the user before assuming a project page exists.

Isolation rule (non-negotiable)

Any invocation of a story-critic or story-utility persona MUST be a fresh Agent call — never fork, never given another persona's notes, never given the drafting conversation's history. Violating this is the exact sycophantic-anchoring failure mode this whole skill exists to prevent. story-planner, story-drafter, and story-doctor invocations are exempt — none of their personas are critique-stage, so they're meant to build on each other sequentially.

Self-enforced, not just caller-enforced. The rule above is written as something the invoker must honor — but a real run (2026-10, see the smoke-test entry below) found Developmental Editor accepting another persona's notes that got attached to its input anyway, because the only defense was the caller never making that mistake. Every story-critic/story-utility persona's reference doc now also tells the persona itself to notice and refuse smuggled notes, regardless of who invoked it or why. Adversarial Beta Reader already had this pattern (don't let the framing bias the reaction) — it's why that persona passed the exact test the others initially failed.

Commands

/plan [aspect]

Invoke story-planner as the persona matching the requested aspect (premise, structure, character, worldbuilding, positioning). Planning personas may share context with each other within a single planning session.

/draft [scene]

Invoke story-drafter as Prose Collaborator (new/extended scene), or story-doctor as Scene Doctor (diagnose a broken scene) — two different agents now, not two personas on one. Prose Collaborator needs the outline and relevant character-bible entries as input, not the full manuscript. Revision passes take the author's reconciled direction (see Reconciliation below), never raw multi-persona notes or a raw Scene Doctor diagnosis.

/critique [persona] [target]

Invoke story-critic as one of Developmental Editor, Line Editor (craft pass), Adversarial Beta Reader, or Genre/Comp-title Expert — always per the Isolation rule above. If no persona is specified, ask which one rather than guessing; their exclusions are load-bearing and picking wrong defeats the point.

/publish [aspect]

Before invoking Literary Agent specifically, ask which path the author is on — traditional gatekeeping or self-publishing — if it isn't already established; never default to traditional silently. Then invoke story-publisher as Literary Agent, Line Editor (final mechanical pass), Copywriter, or Launch Strategist, per the requested aspect. If the path is self-publishing, say Literary Agent doesn't apply rather than running it anyway.

/check [aspect]

Invoke story-utility as Research/Fact-Checker, Continuity Checker, or Voice/Style Consistency Checker — always per the Isolation rule above. A good candidate for reading a whole manuscript and reporting discrepancies without fixing them.

Reconciliation (explicitly not automated)

Critique-stage personas will produce contradictory notes by design. This skill never resolves those contradictions automatically — reconciling and prioritizing conflicting feedback into a single set of instructions is the author's job, and only the author's consolidated direction goes back into /draft. assets/reconciliation-worksheet.md is an optional scaffold for this step (keep/reject/defer per finding, then one consolidated instruction) — it structures the author's synthesis, it doesn't perform it.

Status sync (added 2026-10-04). A premortem on adding new status-tracking structures (a frontmatter field, a threads ledger, a dashboard page) found the real risk wasn't an absent place to record status — it was an existing one going stale (a project's own status note kept claiming a chapter was "paused for proofread" well after it had been drafted, critiqued, and fixed). The fix is a rule, not a new file: whenever a fix lands — in a chapter, in the outline, anywhere — update every status-bearing section it touches, in the same edit, not a later pass. A project's status can live in more than one place (e.g. a Series Bible's "Where we left off" section and an outline's own "Changes since drafting" section) — update all of them, not just the first one that comes to mind. Adding more places to write status down only increases what can silently drift.

Metadata hygiene (added 2026-10-05). Don't bump a note's updated field for routine structural edits (adding cross-links, fixing a typo, renaming a heading) — reserve that signal for actual content or canon changes. Conflating the two means a file can look freshly reviewed when only its scaffolding was touched, which quietly breaks any freshness-based staleness check built on that field.

The loop

Not a linear pipeline: /plan → /draft → /critique → /draft → ... → /publish. A critique pass can kick back to /plan if it surfaces a structural problem (e.g. Developmental Editor finds a plot hole that needs Story Architect to redesign, not patch). Post-Publication (/publish as Launch Strategist) is the one genuinely terminal stage — nothing loops back from it.

Open questions

  • Self-publishing path — the silent-assumption problem is fixed (/publish now asks before invoking Literary Agent, see above); the underlying gap isn't: a self-published author needs cover-design, platform-formatting, and metadata decisions no current persona covers. Revisit once a real self-publishing project needs one.
  • Sensitivity/cultural-accuracy reading identified as a gap, not yet added as a persona or routed to any agent type.
  • Title generation/testing has no owning persona — sits in the gap between Premise Generator (loglines/hooks) and Positioning Strategist (comps/audience). Minor; not built pending a real recurring need.
  • Series/sequel continuity across books isn't covered — this framework is scoped to a single novel. Speculative until a real series project exists.
  • Whether /plan, /draft, etc. should read/write a Projects/<Novel>.md vault page automatically, or stay conversation-scoped until the user asks for persistence, is undecided.
  • Deferred 2026-09-30, after reviewing magnus919/agent-skills' writers-helper skill: a manuscript-stats.py-style mechanical script (word count, passive voice, adverb density, readability, per-chapter pacing) for story-utility, and a set of craft-framework output templates (outline, scene-skeleton, character-profile, query-letter, etc.) for several personas' deliverables. A premortem ruled both premature — either would commit this still-unexercised skill to a manuscript-file interface and a specific craft taxonomy before a single real manuscript has run through it. Revisit after the first real run; the honest-economics (Literary Agent), copyright-hygiene (Research/Fact-Checker, Genre/Comp-title Expert) guardrails, and the reconciliation worksheet from later reviews were adopted — see those personas' reference docs and the wiki page's Sources section for the full reasoning.
  • Logged 2026-10-17, after a repo-pincer pass on enclavum/otaku (commit cead7af, an AGPL-3.0 roleplay front end — reimplement ideas in your own words, copy nothing): three wording-only candidates, none built, none yet needed twice. Revisit after the first real manuscript run, and only if one comes up a second time. (1) A "who knows what, when" knowledge-state check for Continuity Checker — flag POV-knowledge leaks across scenes; otaku tracks this as per-character journals, but its code never puts them in the prompt, so treat the value as a check, not a maintained artifact. (2) A coverage statement for large /check runs — say what was read whole, what only summarized, and what not at all, and never truncate silently; otaku degrades in a fixed order and refuses loudly when nothing fits. (3) A rule that any recap or summary covers only settled chapters and cuts fall on scene boundaries, never mid-scene — otaku never summarizes its newest 20 messages because undo and regenerate can still change them; same reason as the status-sync rule above. Not adopted: scene-summary or journal tooling, which would commit this still-unexercised skill to a manuscript interface.

What's NOT built here

  • Cross-platform fallback. The Isolation rule above depends on Claude Code's subagent mechanism (Agent tool, agents/*.md definitions, tool-scoped access) — Claude Code-only by design. On a platform without an equivalent primitive (Codex, Gemini CLI, Cursor, GitHub Copilot), there's no fresh, zero-context persona call to invoke, so the rule can't be executed as written. Deliberately not building a degraded fallback (e.g., manually separated conversations) yet — a premortem on this exact question ruled it premature: speculative, untested, and doubling the maintenance surface for a platform not currently in use. Revisit only if this skill actually needs to run outside Claude Code.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.