Prose CLI Commands
GENERATED — do not hand-edit. Produced by
CommandDocGeneratorfrom the dispatch chain insrc/Prose.Cli/Program.cs, which is the single source of truth for what the CLI actually does. To refresh:dotnet run --project src/Prose.Cli -- --export-commands docs/CLI_COMMANDS.mdEvery command executes inside Prose.Hub —
Prose.Cliforwards to it and never touches the database itself. A command marked cost-gated spends LLM money and routes through the cost gate; everything else is deterministic or read-only. Most commands require a--universe <slug>scope.A command marked DEACTIVATED still has its handler, but the gate at the top of
Program.csrefuses it — seesrc/Prose.Cli/DeactivatedInstruments.csfor why and how to restore it. Reading that list from the same place the gate reads it is deliberate: RFC 0014 §2.4 is about a gate documented as seven checks, coded as six and advertised as five, and this reference is not going to repeat that.
291 commands. 30 deactivated. 10 cost-gated. 18 have no description in their dispatch comment (12 have neither a description nor a usage line); they are listed anyway with whatever could be recovered, because a reference that silently omits what it could not parse is worse than one that admits the hole.
--add-alias
prose --add-alias --value "<alias>" --entity <id-or-name> [--apply] [--force]
add one alias row to one entity (dry-run unless --apply). The other half of --delete-alias — re-binding a name the prose actually uses to the entity that owns it, which until now had no path outside create_character's aliases parameter.
handler AddAliasCli
--add-apparel
prose --add-apparel --file path.json
insert an Apparel item from an ApparelData JSON file.
handler AddApparelCli
--add-character
prose --add-character --file path.json
insert a Character from a CharacterData JSON file.
handler AddCharacterCli
--add-corponation
prose --add-corponation --file path.json
insert a CorpoNation from a CorponationData JSON file.
handler AddCorponationCli
--add-doc
prose --add-doc --title "…" --body-file path.md [--category essay] [--tags "a,b,c"] [--filename slug.md]
insert a worldbuilding Document directly into canon.
handler AddDocCli
--add-faction
prose --add-faction --file path.json
insert OR update a Faction from a FactionData JSON file. Upsert: include "id" to update, omit to create. Safe service-layer path (FactionRepository.Save) — no hand-SQL, collision-safe slugs.
handler AddFactionCli
--add-news
prose --add-news --file path.json
insert a News article from a NewsData JSON file.
handler AddNewsCli
--add-place
prose --add-place --file path.json [--print]
insert OR update a Place/District from a DistrictData JSON file. Upsert: include "id" to update, omit to create. Safe service-layer path (DistrictRepository.Save) — no hand-SQL, collision-safe slugs.
handler AddPlaceCli
--add-weapon
prose --add-weapon --file path.json
insert a Weapon from a WeaponryData JSON file.
handler AddWeaponryCli
--ambient-palette
prose --ambient-palette --character
handler AmbientPaletteCli
--architecture-scan
prose --architecture-scan [--json] [--out <file>] [--top <n>] [--force]
automated inventory of every service/DI-registration/CLI-verb/MCP-tool/script in the tree, plus name-overlap clusters worth a second look. See ArchitectureScanCli class doc.
handler ArchitectureScanCli
--archive-book
prose --archive-book (--id ... | --slug ...) [--reason "..."] --universe <u>
snapshot a book's entire current live prose into ArchivedBooks — a pre-edit backup, read-only against the live content. See ArchiveBookCli class doc.
handler ArchiveBookCli
--ask
prose --ask "Question" [--k 8] [--type character]
cloud RAG over the canon corpus. Replaces the retired Ollama path.
handler AskCli
--assemble-scene
prose --assemble-scene (--beat <guid> | --text "<prose>") [--budget N]
X-Ray scene assembly (RFC 0002): print the entity roster + voice context block for a beat or raw prose. CLI twin of the MCP tool assemble_scene_context.
handler AssembleSceneCli
--audit-consistency
prose --audit-consistency [--json]
DataConsistencyService SSOT-drift audit (SQL-only, no LLM calls).
handler DataConsistencyCli
--audit-denorm
prose --audit-denorm Entities.TagsJson
prose --audit-denorm Characters.Affiliation
report flat-vs-bridge drift for a denormalised column.
handler AuditDenormCli
--audit-drift
prose --audit-drift pretty-printed report
prose --audit-drift --json JSON dump
report Character columns that disagree with their latest matching EntityStateEvents row. Lights up the static-vs-dynamic recipe only for columns that actually drifted.
handler AuditDriftCli
--auto-correct-nightly — DEACTIVATED
prose --auto-correct-nightly [--universe <slug>] [--dry-run] [--json]
the nightly AutoCorrect pass — pure ML/deterministic, zero LLM calls. Invoked by the Windows Task Scheduler task registered by scripts/register-autocorrect-task.ps1 at 2:00 AM Central every night. See AutoCorrectOrchestratorService for the pipeline.
handler AutoCorrectNightlyCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--auto-correct-status
prose --auto-correct-status [--list-runs]
list recent AutoCorrect runs and their undo state.
handler AutoCorrectUndoCli
--auto-correct-undo
prose --auto-correct-undo (--run-id <guid> | --last-n <N>)
rewind a nightly AutoCorrect run (or the last N logged actions) via the undo ledger.
handler AutoCorrectUndoCli
--auto-run — DEACTIVATED
prose --auto-run (--slug <slug> | --id <guid>) [--effort draft|standard] [--dry-run] [--force]
(no description in the dispatch comment — add one above the guard in Program.cs)
handler AutoRunCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--backfill-character-relationships
prose --backfill-character-relationships [--dry-run] [--json] One-time repair for CharacterRelationships.TargetEntityId never being resolved at save time.
handler BackfillCharacterRelationshipsCli
--backfill-character-state
backfill EntityStateEvents from the dynamic columns currently sitting on Characters (Location, LifeStatus, Role, Affiliation, Belongings*, Territory*, DailyLife). One-shot, idempotent.
handler StateBackfillCli
--backfill-coverage
prose --backfill-coverage --slug
handler BackfillCoverageCli
--backfill-entity-docs
prose --backfill-entity-docs --slug <slug> [--text]
backfill entity-doc MarkdownFiles rows for a book's characters. Replays EntityDocService.InferFromTextAsync over every beat goal (+ prose text with --text) so future prose generation and the DCM viz see per-character entity docs.
handler BackfillEntityDocsCli
--backfill-entity-presence
prose --backfill-entity-presence [--slug
handler BackfillEntityPresenceCli
--backfill-meaning
prose --backfill-meaning --slug
handler BackfillMeaningCli
--backfill-missing-characters
prose --backfill-missing-characters
materialize relational rows for active characters that are blob-only (no Characters row) — the no-data-loss gate before dropping the Character blob. (RFC 0007)
handler BackfillMissingCharactersCli
--backfill-missing-subtype-rows
prose --backfill-missing-subtype-rows [--dry-run] [--exclude-name "
handler BackfillMissingSubtypeRowsCli
--backfill-pov
prose --backfill-pov [--slug
handler BackfillPovCli
--backfill-short-name-alias
prose --backfill-short-name-alias [--universe glmz|scry|...] [--dry-run] Registers each multi-word-named character's first name as a CharacterAlias when missing — the root cause behind --backfill-entity-presence's low yield (prose refers to characters by first name; ScanNames only matches full Name or a registered alias). No LLM call.
handler BackfillShortNameAliasCli
--backfill-stubs
prose --backfill-stubs
backfill Entities.Status = 'stub' / 'canon' based on BeatEntityMentions. Entities with no BeatEntityMentions row → Status='stub' (excluded from universe graph). Entities that ARE mentioned → Status='canon'. Re-run after --scan-entity-mentions.
handler BackfillStubsCli
--backfill-synopses / --backfill-structure-roles
prose --backfill-synopses --slug [--model [--force] Fill missing beat metadata without touching prose. Synopses via LLM (BeatGoal proxy for mode detection); StructureRole deterministically by book-global Save-the-Cat arc.
handler BackfillBeatMetaCli
--banned-names
prose --banned-names --list
prose --banned-names --add --name <name> [--notes <notes>]
prose --banned-names --remove --id <id>
CRUD for BannedNames — Prose-wide hard name ban, enforced at write time.
handler BannedNameCli
--barks-export
Portable-writing-service plan, Phase 4: narrow dialog-beat filter/export — see BarksExportCli's own doc comment.
handler BarksExportCli
--beat
prose --beat
handler BeatCli
--beat-archive
prose --beat-archive --beat-id
handler BeatArchiveCli
--beat-granularity
prose --beat-granularity [--slug | --all] [--beats] Analyses beat-size distribution against the 4,000–7,500 char optimal range. Labels each beat as OK / SPLIT / MERGE and prints per-story stats. CPU-only — no LLM calls. Exit 0 = success.
handler BeatGranularityCli
--beat-index
prose --beat-index --slug
handler BeatIndexCli
--beat-positions
prose --beat-positions [--slug <slug-or-code-or-id>] [--all] [--dry] [--json]
stamp Beat.StoryPosition — a book's reading order as a number, which is the engine's authoritative story clock (author ruling 2026-09-04: track time in beats; the wall clock is an overlay for day/night alignment and short timers that have to add up). Deterministic and FREE: reads the order GetOrderedBeatsAsync already defines, writes an integer, touches no prose and marks no beat dirty. Re-run after anything that changes reading order.
handler BeatPositionsCli
--beat-write-trace
prose --beat-write-trace (--beat-id
handler BeatWriteTraceCli
--book / --ask
book operations — list / new / show / chapters / absorb / review / apply / export / delete. Run prose --book (no subcommand) to see full usage. --ask documents --book as its --node alias, so it is excluded here too.
handler BookCli
--book-report
prose --book-report --slug ] [--complete] [--no-export] Deterministic findings/convergence/decision-log pull for one book, written to Downloads\GLMZ_Book_Reports\drafts{CODE}[_complete].md, plus a BookReports DB row and the latest {CODE}_BookReport.md in the book's export directory (see BookReportService/BookReportStore/BookReportCli).
handler BookReportCli
--booktok
prose --booktok --slug <slug> --provider kling|runway|sora [--duration 8] [--dry-run] [--yes]
prose --booktok --standalone --cover-path <path> --title "<title>" --provider kling|runway|sora
composite a book's cover onto a 3D mockup template, generate a short AI image-to-video clip (hand shows the cover, opens it, flips pages) via a chosen video provider (kling/runway/sora), and assemble a vertical 1080x1920 #booktok MP4. Costs real money per call unless --dry-run, which stops after the local ImageMagick mockup.
--browse-repository
prose --browse-repository [--type
handler BrowseRepositoryCli
--burst-beats
prose --burst-beats [--min-chars 800] [--node slug] [--kind book] [--dry-run]
burst oversized beats (e.g. chapter-as-one-beat from old book imports) into paragraph-sized pieces. Idempotent — already-small beats are skipped on rerun.
handler BurstBeatsCli
--calibrate-obligations
(no description in the dispatch comment — add one above the guard in Program.cs)
handler ObligationCalibrationCli · cost-gated (spends LLM money)
--canon-retrieve
prose --canon-retrieve "<query>" [--k N] [--types t1,t2]
show what the universal canon reach pulls for a query, across ALL entity types — verifies the full-interconnect retrieval path.
handler CanonRetrieveCli
--causality-check / --affect-check / --interpersonal-check — DEACTIVATED
prose --causality-check / --affect-check / --interpersonal-check --slug
handler BeatLensCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--chapters
prose --chapters --slug <slug-or-code-or-id> [--json]
list a book's chapter units in reading order — the 100 ft rung of the Three Altitudes, previously unreachable from the CLI (every read path was a flat beat list, which is why a full-book read fell back to the one-line Description spine). Story Ledger Phase 1. Reuses SynopsisExportService's segmentation, so the listing matches story-synopsis.txt.
handler ChaptersCli
--character-depth-audit — DEACTIVATED
prose --character-depth-audit --universe <slug> [--json]
read-only survey — which characters have zero rows across every relational depth bridge (PsychologyTraits/StatScalars/ArchetypeScores/StoryHooks/SpeechPhrases), cross-referenced against BeatEntityMentions to separate "actually used in prose" from inert stub rows. Built to size the blast radius of a 2026-09-05 incident where --rebuild-readmodel overwrote a character's cached read-model (which held rich content) with an empty relational projection. Writes nothing.
handler CharacterDepthAuditCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--character-gear
prose --character-gear --character <name-or-id> [--bucket <b>] [--json]
prose --character-gear --character <name-or-id> --remove --id <rowId>
prose --character-gear --search "<text>" [--json]
surgical CRUD over a character's signature-gear / pharmaceuticals list. Added 2026-09-03 — there was no sanctioned way to remove ONE gear entry; create_character round-trips the whole record through the delete-all-and-reinsert mapper, so correcting a single invented item risked every other field. Logic lives in CharacterGearService, shared with the *_character_gear MCP tools. Universe-scoped (--character resolves through db.Characters), so it stays out of UniverseAgnosticCommands.
handler CharacterGearCli
--character-history / --story-edges
prose --character-history --entity <id|slug> [--in-book <CODE>]
prose --story-edges --entity <id|slug> [--relation <r>]
the story's own answers, from beat contributions (WO:01a13278).
handler StoryCli
--check-duplicate-beats — DEACTIVATED
prose --check-duplicate-beats --slug
handler CheckDuplicateBeatsCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--check-temporal-hygiene
prose --check-temporal-hygiene [--json] Enforces (not just documents) the two rules that make re-enabling SYSTEM_VERSIONING on Nodes/Beats/BeatNodes safe: no IsEnabled/IsActive-style status-flag column on any versioned table, and no application query joins a live table to its own _History shadow. Run after any schema change touching a versioned table, not just once.
handler TemporalHygieneCli
--check-text-integrity
prose --check-text-integrity [--fix] [--json]
handler TextIntegrityCli
--clone-book
prose --clone-book (--id
handler CloneNodeCli
--close-all-sessions
prose --close-all-sessions Called by the /commit skill before every commit to close open edit sessions.
handler CloseAllSessionsCli
--close-session
prose --close-session (--slug
handler CloseSessionCli
--combat
prose --combat --file scene.json [--out prose.txt]
prose --combat --location "Hegewisch" --objective "..." --exchanges 6 --tone Cinematic
generate a resource-tracked combat sequence via CombatSceneWriter.
handler CombatCli
--command-log
prose --command-log [--since
handler CommandLogCli
--composition
prose --composition
handler CompositionCli
--compute-metrics
prose --compute-metrics [--slug
handler BeatProseMetricsCli
--context
prose --doc-context --slug <node> [--goal "<text>"] [--budget <tokens>]
prose --context add --doc <path|guid> [--node <slug>] Pin doc into prompts
prose --context exclude --doc <path|guid> [--node <slug>] Exclude doc
prose --context remove --doc <path|guid> [--node <slug>] Remove override
prose --context clear [--node <slug>] Clear all overrides
prose --context status Show active overrides
Doc Context Stack dry-run — print the rotating cast of .md docs that WOULD load for a node + optional scene text (tier, reason, score, budget). Read-only. CLI mode: manage user context overrides for the DocContextStack.
handler ContextCli
--continuity — DEACTIVATED
unified continuity store — migrate / stats / contradictions / resolve / entity. Run prose --continuity (no subcommand) to see full usage.
handler ContinuityCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--cost / --history
prose --cost print session cost table
prose --cost --json emit summary as JSON
prose --cost --reset clear the ledger
prose --cost --history [--command <name>] [--take N] [--json]
show running token cost tally for the current process, or the durable per-command calibration data the cost gate estimates from. print CommandCostHistories — what each cost gate calibrates from When appended to another command (e.g. prose --expand-beat --slug foo --cost), the cost of that command's LLM calls is printed after the command finishes.
handler CostCli
--coverage
prose --coverage
per-entity-type reachability matrix (how much canon is embedded and thus pullable into prose). The standing gap-finder.
handler CoverageCli
--create-archetype
prose --create-archetype --name "<name>" [--category …] [--description …] [--behavioral-signature …]
[--under-stress …] [--at-rest …] [--will-always a;b] [--will-never a;b] [--unless a;b] [--tags a,b] Create or update an archetype — the CLI twin of MCP create_archetype. Same gap again: ArchetypeRepository.Save existed with nothing exposing it.
handler CreateArchetypeCli
--create-book
prose --create-book --title "..." [--code SRZR] [--kind book] [--description "..."] [--logline "..."] [--previous <slug|id>] [--parent <slug|id>]
create a new, EMPTY book — no outline, no beats. Plan it with planned beats (a title and a description, no text: prose --beat insert / MCP insert_beat), then write them.
handler CreateNodeCli
--create-material
prose --create-material --name "<name>" [--category …] [--description …] [--properties a,b,c]
[--applications a,b,c] [--tier …] [--cost …] [--tags a,b,c] [--append-lists] Create or update a material — the CLI twin of MCP create_material. Material was the one canon entity type with a relational table, a repository that could write it (MaterialRepository.Save), read surfaces on both CLI and MCP — and no write path at all.
handler CreateMaterialCli
--create-repository
prose --create-repository --name "Artifacts" [--category World] [--icon bi-box] [--description "..."]
create a runtime-defined repository (custom entity type).
handler CreateRepositoryCli
--create-universe
prose --create-universe --slug <slug> --name <name> [--theme <theme>] [--description <text>]
create a new Universe row. See CreateUniverseCli.
handler CreateUniverseCli
--create-vocabulary
prose --create-vocabulary --term "<term>" [--definition …] [--origin …] [--usage …]
[--category …] [--example …] [--tier …] [--tags a,b,c] [--append-tags] Create or update a vocabulary entry — the CLI twin of MCP create_vocabulary. Same gap as material: VocabularyRepository.Save existed with nothing exposing it.
handler CreateVocabularyCli
--cross-book-consistency-audit — DEACTIVATED
prose --cross-book-consistency-audit [--since
handler CrossBookConsistencyAuditCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--data-scan
prose --data-scan --tool <name> [--apply] [--overwrite] --universe <slug>
DataScanUtility family (fix-phi/fix-identity/tag-lethality/tag-normalize/ assign-tiers/cross-reference) -- mass canon-entity maintenance tools. Defaults to a dry-run preview; pass --apply to actually write.
handler DataScanCli
--dcm-backfill
prose --dcm-backfill --slug
handler DcmBackfillCli
--dcm-viz
prose --dcm-viz --slug <slug> [--out <dir>]
DCM lifecycle visualization — dry-run context pass + Gantt .htm export.
handler DcmVizCli
--decision-log
prose --decision-log [--since
handler DecisionLogCli
--delete-alias
prose --delete-alias --value "<alias>" [--type <character|place|…>] [--apply]
remove a bad entity alias row (dry-run unless --apply). The sanctioned fix for alias pollution — an ordinary phrase registered as an alias, which makes EntityMentionScanner tag that phrase as the entity corpus-wide.
handler DeleteAliasCli
--delete-canon-document
prose --delete-canon-document --type <DocumentType> --confirm <sectionCount> [--universe <slug>]
(no description in the dispatch comment — add one above the guard in Program.cs)
handler DeleteCanonDocumentCli
--delete-entity-cluster
prose --delete-entity-cluster --root
handler DeleteEntityClusterCli
--delete-node
prose --delete-node --id
handler DeleteNodeCli
--deprecated-names
prose --deprecated-names --list [--universe <slug>]
prose --deprecated-names --add --universe <slug> --name <deprecatedName> --canonical <canonicalName> [--notes <notes>]
prose --deprecated-names --remove --id <id>
CRUD for DeprecatedEntityNames (list/add/remove).
handler DeprecatedNameCli
--derive-scenes
prose --derive-scenes --slug <slug|id> [--apply] [--gap-minutes N] Free and deterministic: group a chapter's existing beats into scenes by place change and time gap. Derives structure only — no beat is split, merged, reworded or reordered. Dry run unless --apply is passed.
handler DeriveScenesCli
--description-drift — DEACTIVATED
prose --description-drift --slug <slug-or-code-or-id> [--json]
prose --description-drift --all --universe <slug>
report beats whose Beat.Description was verified against prose that has since changed (DescriptionHash != TextHash). Deterministic — no LLM, no embeddings, no cost. Report-only per docs/LOGIC.md §4. Story Ledger Phase 1.
handler DescriptionDriftCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--detect-mojibake
prose --detect-mojibake --slug <slug|code|id> [--json]
read-only report of UTF-8-read-as-Windows-1252 corruption in a node's beats. Exits 1 when anything is found, so a runbook can loop prose --repair --fix-mojibake until 0.
handler DetectMojibakeCli
--dictionary
prose --dictionary list|add
handler SpellingCli
--doc-context
(no description in the dispatch comment — add one above the guard in Program.cs)
handler DocContextCli
--doc-context-hook
(no description in the dispatch comment — add one above the guard in Program.cs)
handler DocContextHookCli
--dry-run
(no description in the dispatch comment — add one above the guard in Program.cs)
handler BookTokCli
--dual-read — DEACTIVATED
prose --dual-read --old <slug|id> --new <slug|id> [--panel <name>] [--readers N]
dual-read comparative review — the SAME pinned panel grades both versions of a story; pairs scores per reader (within-reader delta cancels taste bias) → keep/revert/merge verdict.
handler DualReadCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--duel — DEACTIVATED
prose --duel --beat-id
handler BeatDuelCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--duplicate-book
prose --duplicate-book (--id <guid|prefix> | --slug <slug>) --title "New Title"
deep-duplicate a node (and its sub-node tree) into a fresh, independent copy — every beat cloned to a new row (prose + metadata kept; audio/score/stale reset). Editing the copy never touches the original.
handler DuplicateNodeCli
--duplicate-entity-scan — DEACTIVATED
prose --duplicate-entity-scan --universe
handler DuplicateEntityScanCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--duplicate-entity-scan-broad — DEACTIVATED
prose --duplicate-entity-scan-broad --universe
handler DuplicateEntityScanBroadCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--edit-beat
prose --edit-beat --slug <slug> (--beat-number N | --insert-after N) --file <path>
overwrite one beat's prose from a file, or insert a new beat after a position.
handler EditBeatCli
--edit-book
prose --edit-book (--id <guid|prefix> | --slug <slug>) [--top N]
review-driven auto-editor. Weight the latest reviews, target the lowest / most-flagged beats (raise the floor), and emit conservative before/after rewrite PROPOSALS (JSON) for an approval survey. Nothing is written.
handler EditNodeCli
--edit-distribution
prose --edit-distribution [--slug
handler EditDistributionCli
--ensure-chapter
prose --ensure-chapter --slug
handler EnsureChapterCli
--entity-history
prose --entity-history (--id <guid> | --type <t> --slug <s>) [--as-of <utc>] [--diff <utc>]
an entity's version history, read from the system-versioned _History tables.
handler EntityHistoryCli
--entity-mentions
prose --entity-mentions --entity <id|slug> [--limit <n>]
list every beat that mentions a given entity (node, beat number, excerpt).
handler EntityMentionsCli
--entity-relationships
prose --entity-relationships --character <name-or-id> [--json] [--orphans]
prose --entity-relationships --character <name-or-id> --remove --id <rowId>
prose --entity-relationships --character <name-or-id> --add --target <name> --type <type>
surgical CRUD over a character's CharacterRelationships rows. Added 2026-09-02 — there was previously NO sanctioned way to remove a single relationship row (see EntityRelationshipCli's doc comment and the Seo Jisun cross-book contamination). Deliberately universe-scoped: --character resolves through db.Characters, which the Entity query filter scopes, so this stays out of UniverseAgnosticCommands.
handler EntityRelationshipCli
--entity-tags
prose --entity-tags --entity <guid-or-name> [--json]
prose --entity-tags --entity <guid-or-name> --remove "tag1,tag2"
prose --entity-tags --entity <guid-or-name> --add "tag1,tag2"
an entity's tags — list / add / REMOVE. Added 2026-09-03: tags could be added and never taken away (create_character's tags MERGES, like aliases), so a wrong tag was permanent, and a stale book tag can pull a character into that book's context loads. NOT the same as --tag-entities, which rewrites inline
handler EntityTagsCli
--entity-tree
prose --entity-tree (--id
handler EntityTreeCli
--estimate-cost
prose --estimate-cost [--beats
--exclusion-rules
prose --exclusion-rules [--all] [--json]
prose --exclusion-rules --propose --predicate-a <p> --predicate-b <p> --why "..." [--universal]
prose --exclusion-rules --approve|--reject --id <n>
prose --exclusion-rules --test --predicate-a <p> --object-a "..." --predicate-b <p> --object-b "..."
manage the PredicateExclusion ontology the Tuned Read runs on — list, propose, approve/reject, and --test a rule against a hypothetical claim pair before approving it. Deterministic and free; no LLM call anywhere in this command.
handler ExclusionRulesCli
--expand-beat
prose --expand-beat (--slug <slug> | --id <guid>) [--beat <beatId>] [--force]
(no description in the dispatch comment — add one above the guard in Program.cs)
handler ExpandBeatCli
--export
prose --export global every repo, zipped + timestamped
prose --export <repoName> one repo, zipped (e.g. "people", "weaponry")
prose --export <entityId> one entity, plain .json
dump canon JSON to the user's Downloads folder.
handler ExportCli
--export-book-report
prose --export-book-report --slug
handler ExportBookReportCli
--export-commands
prose --export-commands [<output-path>] [--source <path-to-Program.cs>]
Documentation generator, deliberately ABOVE the Hub gate: it reads this file's own dispatch chain and writes a markdown reference. It touches no database and needs no running Hub, and requiring one would make the CLI reference unbuildable in exactly the situation where you most want to read it. Mirrors Prose.Mcp -- --export-tools, which closes the asymmetry docs/ARCHITECTURE.md §8 recorded as an open gap.
--export-entity-cluster
prose --export-entity-cluster --root
handler ExportEntityClusterCli
--export-node
prose --export-node (--id <guid|prefix> | --slug <slug>) [--author "Name"]
render a node to .docx + .epub + .pdf + .txt + metadata artifacts (description.txt, story-synopsis.txt, -dcm-viz.htm). Local file rendering only — no KDP API integration, hence "export" not "publish".
handler ExportNodeCli
--export-personas-json
prose --export-personas-json [--out
--extract-beat-locations
prose --extract-beat-locations --slug
handler ExtractBeatLocationsCli
--fact-ledger-refresh — DEACTIVATED
prose --fact-ledger-refresh --slug
handler FactLedgerRefreshCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--factory / --order / --session / --ruling
The Novel Factory (RFC 0015): prose --factory status|next|capture|context|journal|usage · prose --order add|list|show|close|abandon|seed (show --id
handler FactoryCli
--family
prose --family parent --parent <id|slug> --child <id|slug>
prose --family sibling --a <id|slug> --b <id|slug>
prose --family spouse --a <id|slug> --b <id|slug>
prose --family show --of <id|slug>
family ties — hand-seed parent/sibling/spouse links between characters.
handler FamilyCli
--family-gen
prose --family-gen propose --of <id|slug> dry run
prose --family-gen propose --of <id|slug> --commit write characters + edges + propagate genetics
propose a plausible immediate family for one character. --seed N for reproducible RNG
handler FamilyGenCli
--find-entity
prose --find-entity --name "<text>" [--type character] [--universe <slug>] [--limit N]
search seeded entities by name or alias — the read-side counterpart to --add-character, so authoring can check for an existing entity before creating a duplicate.
handler FindEntityCli
--findings
findings inbox — list / show / apply / dismiss / scan.
handler FindingsCli
--findings-staleness
prose --findings-staleness [--json] RFC 0011 Brick 2: generic staleness report across every Findings category that stamps SourceRuleVersion on write (currently CraftChecklist + StructuralFailure).
handler FindingsStalenessCli
--fix-bad-name-matches
prose --fix-bad-name-matches [--dry-run] Deletes BeatEntities rows where MatchSource='name' but the entity's Name no longer appears in the beat's current Text (a checkable, unambiguous staleness signal name-matches carry that embedding/graph matches don't). See FixBadNameMatchesCli for root-cause detail.
handler FixBadNameMatchesCli
--fix-cross-universe-contamination
prose --fix-cross-universe-contamination [--dry-run] Deletes BeatEntities/BeatEntityPresence rows whose entity belongs to a different universe than the beat's own book (a hard "Universe division absolute" violation) — historical bad data, not a live matching-pipeline bug (see FixCrossUniverseContaminationCli for root-cause detail).
handler FixCrossUniverseContaminationCli
--fix-location-aspect
prose --fix-location-aspect --character
handler FixLocationAspectCli
--fix-self-aliases
Corpus-wide repair: remove CharacterAlias/PlaceAlias/FactionAlias/WeaponAlias rows whose Value matches their own owning entity's Name — a redundant self-alias, usually a leftover from an entity merge that relinked a loser's alias onto the winner it now duplicates.
handler FixSelfAliasesCli
--gate-check
prose --gate-check --beat-id
handler GateCheckCli
--gear-check — DEACTIVATED
prose --gear-check --slug
handler GearCheckCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--generate-book-glossary
prose --generate-book-glossary --slug <slug>
prose --generate-book-glossary --all
regenerate a book's Glossary (docs/nodes/{CODE}-Glossary.htm/.json/.txt) — the subset of its universe's Master Glossary whose terms appear in the book's live prose.
handler GlossaryCli
--generate-canon-md
prose --generate-canon-md --type <WorldBible|WorldMaster|Franchise|UniverseCanon>
prose --generate-canon-md --all
regenerate canon document .md files from DB (CanonDocuments + CanonDocumentSections). The disk files are generated read-only mirrors; source of truth is the DB.
handler CanonDocumentCli
--generate-glossary
prose --generate-glossary --universe <slug> (omit --universe for all)
regenerate a universe's Master Glossary (Glossary.htm/.json/.txt under docs/universes/{SLUG}/) from the GlossaryTerms table.
handler GlossaryCli
--generate-scene
Portable-writing-service plan, Phase 2: write a scene/line of dialog without a pre-existing Book/Chapter/Beat row — see OneShotGenerateCli's own doc comment.
handler OneShotGenerateCli
--genetics
prose --genetics propagate full graph
prose --genetics propagate --id <id|slug> single character
prose --genetics propagate --seed 42 reproducible RNG
propagate genetic_ancestry from parents to children via the family graph (with ±5% recombination noise). Currently a no-op until family ties are seeded.
handler GeneticsCli
--get
prose --get
handler GetEntityCli
--get-canon-section
(no description in the dispatch comment — add one above the guard in Program.cs)
handler GetCanonSectionCli
--get-entity-fields / --set-character-fields / --set-entity-fields / --verify-entity
prose --universe glmz --get-entity-fields --id <id> (read only; never writes)
prose --universe glmz --set-character-fields | --set-entity-fields --id <id> --file fields.json [--confirm-unread]
prose --universe glmz --verify-entity begin --entity <id> --node <book> | commit --nonce <nonce>
the world's read and write path and station F1 (RFC 0015 §3.3–3.4). (the key "summary" writes the entity's one-paragraph summary, Entities.Description)
handler WorldCli
--get-place
prose --get-place --name "<exact name>" [--print-raw]
read a Place/District's full DistrictData record by exact name — the read-side counterpart to --add-place, so a rename/edit can round-trip the existing record instead of upserting blind and clobbering fields the caller didn't know about.
handler GetPlaceCli
--gpu
prose --gpu <status|stop|start|destroy> [--instance <id>]
manage the rented vast.ai review box (key from the MindAttic vault, provider 'vast').
handler VastGpuCli
--graph-health
prose --graph-health --universe <slug> [--json]
GraphHealthService — orphaned/weakly-connected/malformed world-graph node audit.
handler GraphHealthCli
--graph-query
prose --universe --graph-query co-occurrence|shared-neighbors|path --a <id|slug> --b <id|slug> [--in-book
handler GraphQueryCli
--grep-beats
prose --grep-beats --pattern "<text>" [--case-sensitive]
plain substring search over every Beat.Text corpus-wide (all universes) — read-only, no LLM cost. Built to check whether a defect found in one book (e.g. leaked LLM repair-pass scaffolding) also hit others.
handler GrepBeatsCli
--ground-entity-records — DEACTIVATED
(no description in the dispatch comment — add one above the guard in Program.cs)
handler GroundEntityRecordsCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--harvest-entities
prose --harvest-entities --file <path> [--universe glmz] [--dry-run]
harvest entities + edges from open text (design notes, canon briefs). Routed BEFORE the bare --universe command: --universe here is the scope flag, not a subcommand.
handler HarvestEntitiesCli · cost-gated (spends LLM money)
--harvest-voice
prose --harvest-voice (--slug <s> | --id <id> | --all-80 | --pending | --apply <guid> | --reject <guid>) [--force]
distill voice rules from winning (≥80%) nodes into the codified DB-backed rules the generator reads. Propose-then-approve.
handler HarvestVoiceCli · cost-gated (spends LLM money)
--help
Nothing above matched. Falling off the end used to exit 0 with no output, so a mistyped flag read as a command that ran and found nothing, and --help (allowlisted above) printed nothing.
--history
prose --history
handler TemporalHistoryCli
--hub-narration
prose --hub-narration on|off|status Runtime toggle for CommandNarrator's Haiku command gloss. Default OFF.
handler HubNarrationCli
--image-prompts
prose --image-prompts regen --id <id|slug> [--force]
prose --image-prompts regen --all-changed
rewrite ethnicity-keyed visual descriptors in image prompts to match a character's current genetic_ancestry. Cost-aware via stored hash.
handler ImagePromptsCli
--import-book
prose --import-book --file path.node [--title ...] [--kind ...] [--slug ...] [--parent ...] [--dry-run]
import a hand-authored .node file (beat + gap + beat …) into a fresh node — for drafts written elsewhere (chat exports, transcripts, paper notes typed up), as opposed to LLM-generated via --auto-run (AutoRunCli; --write-story/--refine-story, the predecessor this once complemented, was removed 2026-08-13 — see this file's own note near StoryDirectorService). See ImportNodeCli class doc for the file format.
handler ImportNodeCli
--import-cover
prose --import-cover --file PATH [--book-code CODE] [--type TYPE] [--notes TEXT] [--dry-run]
import a local image file (png, jpg, webp) into the Media table. Optionally links to a node by --book-code and sets the media type.
handler ImportCoverImageCli
--import-md
prose --import-md --file path.md [--dry-run]
reimport an edited --publish-md Markdown file back into the DB. Each marker identifies the beat; prose between markers updates Beat.Text.
handler ImportMarkdownCli
--inject-calibration-defects / --revert-calibration-defects
(no description in the dispatch comment — add one above the guard in Program.cs)
handler ObligationCalibrationCli
--interpret
prose --interpret --text "..." | --file path.txt
prose → entities + edges. LLM-driven. add --commit to apply, --auto-create to stub missing entities, --tag
handler InterpretCli
--kdp-export
prose --kdp-export [--to <dir>] [--markers-in-place]
Writes the KDP store back out as JSON in the original shapes (default: a new folder under %LocalAppData%\MindAttic\Prose\kdp-export). --markers-in-place also rewrites book-folder markers.
handler KdpExportCli
--kdp-import
prose --kdp-import [--from <dir>] [--legacy-markers]
Loads the KDP store from JSON (title-ids.json, category-tree-*.json, logs/, publish-markers/) in --from (default tools/kdp). --legacy-markers also reads each book folder's .publish marker.
handler KdpImportCli
--kdp-manifest
prose --kdp-manifest [--out <path>] [--userscript]
Reconciles DB + disk + the KDP store (title ids, sign-offs, publish records) into tools/kdp/manifest.json (a generated view of what needs to go up on KDP). --userscript also regenerates tools/kdp/kdp-panel.user.js from tools/kdp/kdp-panel.template.js.
handler KdpManifestCli
--kdp-mark-published
prose --kdp-mark-published --slug <slug> [--url <amazonUrl>] [--title-id <id>]
Closes the loop after a republish actually completes on KDP.
handler KdpMarkPublishedCli
--kdp-signoff
prose --kdp-signoff --code <CODE>[,<CODE>...] [--off]
Signs books off for KDP publishing (the gate a .publish marker file used to be); --off holds them.
handler KdpSignOffCli
--kdp-status
prose --kdp-status
Show KDP publication status: Published / Outdated / WorkInProgress for all tracked nodes. Outdated = published but beats edited since last KDP push.
handler KdpStatusCli
--kdp-store
prose --kdp-store [--code <CODE>]
Shows the KDP store's location, contents and import history; --code shows one book's sign-off, title id and publish history.
handler KdpStoreCli
--ledger-adjudicate
prose --ledger-adjudicate --slug <slug> [--dry] [--max N] [--entity <t>] [--predicate <t>] [--json]
judges the fact ledger's SAME-PREDICATE contradiction groups against the prose they came from. The deterministic exemptions (volatile / set-valued / paraphrase) already removed everything that was never a contradiction; what reaches here is dominated by complementary facets and temporal states, which need the prose to tell apart from a real conflict. Writes claim STATUS only, never prose (docs/LOGIC.md §4). Cost-gated: one Sonnet call per uncached group, cached on the claim uids plus every anchor beat's current TextHash.
--legion
prose --legion ask "Q" --options "A,B,C" → forced-choice Quorum decision (JSON on stdout)
prose --legion vote "Q" [--context "…"] → open-ended vote with synthesized narrative
query the Legion / LLMVoting cloud-LLM panel directly.
handler LegionCli
--lesson-add
prose --lesson-add --scope <scope> --kind <kind> --text "<text>"
add an author ruling to the prose-lessons memory store. Lessons are injected into review ballot prompts so reviewers don't penalise beats the author has already ruled are doing their job. Scope: global | node:
handler ProseLessonCli
--lessons-list
prose --lessons-list [--scope <scope>]
list prose lessons (all scopes or filtered).
handler ProseLessonCli
--liberty-report — DEACTIVATED
prose --liberty-report [--beat
handler LibertyReportCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--link-weapon-ammo
prose --link-weapon-ammo [--local-url URL] [--local-key KEY] [--local-model TAG] [--dry-run]
(no description in the dispatch comment — add one above the guard in Program.cs)
handler LinkWeaponAmmoCli
--lint-prose
prose --lint-prose --slug
handler LintProseCli
--list-archives
prose --list-archives (--id ... | --slug ...) --universe <u>
list every ArchivedBook snapshot for a node, newest first — read-only, use to find the archive-id for --restore-node-field. See ListArchivesCli class doc.
handler ListArchivesCli
--list-books
prose --list-books [--archived | --all-archived] [--kind <k>] [--search <text>] [--limit <n>] [--scores] [--json]
list every node as a table (or JSON). Headless twin of /nodes.
handler ListNodesCli
--list-canon-sections
prose --list-canon-sections --type <DocumentType> [--universe <slug>]
prose --set-canon-section --type <DocumentType> --key <sectionKey> --file <path.md> [--title <t>] [--universe <slug>]
read/edit CanonDocumentSections directly — the CLI equivalent of the MCP tools list_canon_sections / set_canon_section, built 2026-08-23 to close the gap where canon editing was MCP-only and unreachable from a CLI-only session.
handler ListCanonSectionsCli
--list-plants / --add-plant / --update-plant
prose --plant-audit --slug
handler PlantPayoffCli
--list-sessions
prose --list-sessions --slug
handler ListSessionsCli
--list-species
prose --list-species — print the species taxonomy (canonical name, label, sentience).
handler ListSpeciesCli
--list-surveys / --get-survey
prose --list-surveys [--status Open|Completed]
prose --get-survey --slug <slug>
survey management.
handler SurveyCli
--location-scan — DEACTIVATED
prose --location-scan [--min-travel-minutes N] Character-in-two-places-at-once contradiction scan; conflicts land in Findings.
handler LocationScanCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--log-decision
prose --log-decision --summary "..." [--rationale "..."] [--category ...] [--related id,id] Durable "why" record — the Decision Ledger half of the Command/Decision Ledger pair (CommandLedgerEntries is written automatically by every dispatch; this is explicit).
handler LogDecisionCli
--log-search
prose --log-search [--since
] [--take N] [--json] Durable, searchable log history (Serilog daily files) — not the live in-memory tail.
handler LogSearchCli
--logic-sweep
prose --logic-sweep --slug
handler LogicSweepCli
--logs
prose --logs [--since 2h] [--level Error] [--search <text>] [--detail <sig>] [--raw]
prose --logs --track <sig> [--note "..."] | --issues [--all] | --resolve|--ignore|--reopen <id>
engine-error triage — group Serilog errors into distinct faults, queue them, and re-check "fixed" against the logs rather than trusting the flag.
handler LogsCli
--make-group
prose --make-group --name "Group B" [--size 128]
create a fixed, named reviewer panel of N personas, disjoint from every existing focus group (no persona on two panels). No LLM calls.
handler MakeGroupCli
--mark-canon
prose --mark-canon (--slug <s> | --id <guid>) [--off]
author-only Canon trust gate — mark a node strong enough to draw conclusions about its characters/events (the voice-harvest learns from canon).
handler MarkCanonCli
--merge-beats
prose --merge-beats --slug
handler MergeBeatsCli
--merge-edge
prose --merge-edge --keep
handler MergeEdgeCli
--merge-entity
prose --merge-entity --winner
handler MergeEntityCli
--merge-entity-into-vocabulary
prose --merge-entity-into-vocabulary --from vocabulary entity and deletes --from. See MergeEntityIntoVocabularyCli.
handler MergeEntityIntoVocabularyCli
--migrate-canon-docs
prose --migrate-canon-docs [--dry-run]
Truth-First Architecture — Step A2: migrate hand-editable canon .md files (BIBLE.md, WORLD.md, FRANCHISE.md, universes/CAUL.md) into CanonDocument + CanonDocumentSection DB rows. Idempotent; skips already-migrated documents.
handler MigrateCanonDocsCli
--migrate-legacy-book-chapter
prose --migrate-legacy-book-chapter
delete the 44 legacy book/chapter Entity+Records blobs whose content already lives in the Nodes/Beats model. Classifies each as JUNK, REDUNDANT, or ORPHAN (converts orphans to Nodes before deleting).
handler MigrateLegacyBookChapterCli
--migrate-nodes
prose --migrate-nodes
migrate legacy Books/Chapters/ChapterBeats/Episodes/EpisodeBeats data into the unified Beat/Node schema. Idempotent — safe to re-run.
handler MigrateNodesCli
--migrate-sql
prose --migrate-sql --schema apply EF migrations
prose --migrate-sql --import people import character JSON files
prose --migrate-sql --all schema + import all supported types
prose --migrate-sql --import-continuity-sqlite [--apply] one-shot copy of legacy continuity.db rows into SQL Server
SQL Server migration — apply EF migrations and import JSON entities.
handler MigrateSqlCli
--morning-report
prose --morning-report [--since
handler MorningReportCli
--move-beat
prose --move-beat --slug <slug> --beat-number N --after M (M=0 moves to the top)
re-slot a beat within its node's reading order (wraps NodeWorkbenchService .MoveBeatAsync, previously reachable only from the Blazor drag-and-drop UI).
handler MoveBeatCli
--move-beat-to-node
prose --move-beat-to-node --slug <from-slug> --beat-number N --to-slug <to-slug> --after M
relocate a beat OUT of one chapter and INTO another (--move-beat only re-slots within a single node's existing siblings). Wraps NodeWorkbenchService.MoveBeatToNodeAsync.
handler MoveBeatToNodeCli
--move-node-universe
prose --move-node-universe (--slug <slug> | --id <id>) --to-universe <universeSlug>
relocate a book node (and its full descendant chapter subtree) into a different universe. See MoveNodeUniverseCli.
handler MoveNodeUniverseCli
--narrate-book
prose --narrate-book (--id <guid|prefix> | --slug <slug>)
(re)narrate an EXISTING node by id (full or prefix) or slug. Runs the same NarrateAsync path the Record button uses. Use to re-record a node whose beats failed (e.g. a TTS 400) without regenerating prose.
handler NarrateNodeCli
--narrative-health — DEACTIVATED
(no description in the dispatch comment — add one above the guard in Program.cs)
handler NarrativeHealthCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--obligations
prose --obligations list|trial-balance|history|open|close|drop|defer|reopen|due|accept|rescan …
Narrative Obligation Ledger (RFC 0013) — what the story owes the reader.
handler ObligationCli
--orphan-beats
prose --orphan-beats [--min-number N] [--max-number N] [--limit N] [--contains "text"] — read-only diagnostic: Beats rows with no BeatNodes membership. See OrphanBeatsCli's own doc comment for why this exists (VIGL fact-ledger investigation, 2026-09-01).
handler OrphanBeatsCli
--populate-queue
prose --populate-queue --entity-review|--story-review|--beat-write|--status [options]
(no description in the dispatch comment — add one above the guard in Program.cs)
handler PopulateQueueCli
--prepare-audible
prose --prepare-audible (--slug <slug> | --id <guid|prefix>) [--no-phonetics]
build an Audible AI-narration hand-off package for a node. Produces a narration-clean manuscript, pronunciation guide, and README.
handler PrepareAudibleCli
--print-book
prose --print-book (--id <guid|prefix> | --slug <slug>)
(no description in the dispatch comment — add one above the guard in Program.cs)
handler PrintNodeCli
--print-voice
prose --print-voice
print the voice context the generator/re-beater receive — the verification that the canon-trained voice is wired into prompts.
handler PrintVoiceCli
--progress
Strand Progress Dashboard: every non-archived book, code/title/kind/status/score/pages, sorted by score descending. Cross-universe by design. See .claude/commands/progress.md.
handler ProgressCli
--prose-health — DEACTIVATED
prose --prose-health [--slug
handler ProseHealthCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--provenance-audit / --provenance
prose --provenance-audit [--slug <slug-or-code-or-id>] [--samples N] [--json]
prose --provenance --grade <grade> --entity <id> | --relationship <rowId> | --claim <uid>
prose --provenance --grades
the Story Ledger's provenance surface (Phase 3) — "what is in canon that no human ever approved?", plus the explicit human act that promotes one candidate row to authored. Deterministic and free; report-only for the audit (docs/LOGIC.md §4). Universe-scoped deliberately: the entity/relationship counts come through the ambient query filter.
handler ProvenanceCli
--provider-status
prose --provider-status [--live] [--json] RFC 0011 Brick 3: degraded-services status on demand. See docs/PROVIDERS.md.
handler ProviderStatusCli
--publish-audiobook / --record / --export-audio / --export-mp3
prose --record | --export-audio | --export-mp3 | --publish-audiobook
render the WHOLE node as one continuous audiobook (one TTS pass, tiered to ElevenLabs limits — one request, else per-chapter, else split) and drop the MP3 in Downloads. The headless twin of the "Export Audio" button. (--id <guid|prefix> | --slug
handler PublishAudiobookCli
--publish-book
prose --publish-book (--id <guid|prefix> | --slug <slug>)
stitch an existing node's beats into one combined file (WAV → MP3), copy it to the publish output dir (Downloads by default), and record the publication run + process-event ledger. Headless Publish button.
handler PublishNodeCli
--publish-md / --publish-pdf
render a node to Markdown or PDF in Downloads. Markdown output embeds markers for prose --import-md round-trip. ss (--publish-md | --publish-pdf) (--id <guid|prefix> | --slug
handler PublishManuscriptCli
--publish-readiness
prose --publish-readiness --slug
handler PublishReadinessCli
--read-beats
prose --read-beats (--slug <slug> | --id <guid>) [--from N] [--to N] [--numbers <csv>]
print beat text WITH its authoritative POV character attached (sourced fresh from BeatEntityPresence every call, never inferred from prose content). Use this instead of raw sqlcmd/SELECT Text reads whenever a conclusion about character voice, attribution, or continuity will be drawn from what's read — see ReadBeatsCli's own doc comment for the live mistake (2026-08-10, VIGL multi-POV misattribution) this exists to make structurally harder to repeat. Reads in true reading order, so it is also the sanctioned bulk-read for audit/logic-sweep work — no --publish-md export round-trip required. [--format text|json]
handler ReadBeatsCli
--read-status / --read-note
prose --read-status --node <slug|code|guid> [--list]
prose --read-note add|list|resolve --node <x> [--beat N --kind defect|question|note --text "…" --read-by <name>]
which beats are unread (never read / text changed / moved / entity changed), and the notes a read filed. Export refuses while any beat is unread; there is no override.
handler ReadStatusCli
--reader-qa — DEACTIVATED
prose --reader-qa (--slug
handler ReaderQaCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--rebeat-book
prose --rebeat-book (--slug <s> | --id <guid> | --all) [--apply]
rebuild a node's beats to the codified beat doctrine via LLM re-segmentation (story beats + dialogue/'?' mechanics + gaps). Dry-run by default; --apply backs up to markdown then replaces beats if the word-retention guard passes. --all targets every doctrine-violating node.
handler RebeatNodeCli
--rebuild-graph
dotnet run --project ... -- --rebuild-graph [--universe
handler RebuildGraphCli
--rebuild-readmodel
prose --rebuild-readmodel [--archived] [--force]
(re)build the materialized character read-model projection from the relational source of truth. Run after a bulk import / relational migration, or whenever ReadModelVersion is bumped. Backfills missing/stale rows, prunes orphans. The steady-state path self-heals, so this is a one-time / maintenance op. Any character whose relational read is poorer than its current cache is SKIPPED and named in the output, not silently overwritten — pass --force only once you've reviewed that list (see the 2026-09-05 incident note on RebuildReadModelCli).
handler RebuildReadModelCli
--recall
prose --recall <keyword> [--content] [--to-disk] [--as-of <datetime-utc>]
keyword recall — call up (print) or create (--to-disk) the select few tracked .md files relevant to a topic, straight from the DB.
handler RecallMarkdownCli
--reconcile-obligations — DEACTIVATED
RFC 0013 instruments. The free trial-balance rules forward plainly; --deep adds the paid resurfacing judge and is cost-gated under its own command name (the gate keys estimates on the name alone, so a cheap and an expensive mode must not share one — BIBLE ADR-10).
handler ReconcileObligationsCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore
--reconcile-trinity
prose --reconcile-trinity --extract|--survey --slug
handler ReconcileTrinityCli
--reembed
prose --reembed drift-skipped corpus pass (only changed entities re-embed)
prose --reembed --force clear the table first, re-embed everything
rebuild the entity-embedding cache via cloud OpenAI.
handler ReembedCli
--reflow-book
prose --reflow-book (--id <guid|prefix> | --slug <slug>) [--apply]
bounded copy-edit of a node — proper paragraph/dialogue spacing, a "?" on questions that lack one, and "asks"/"asked" (not "says") on question dialogue. Dry-run by default; --apply commits. Beats edited beyond those bounds are rejected (word-token guard) and left untouched.
handler ReflowNodeCli
--reimport-node
prose --reimport-node (--id ... | --slug ...) --file path.node [--dry-run] [--force]
replace an EXISTING node's beats wholesale from a .node file. The other half of the export/edit/reimport loop for edits that no longer line up with the old beat boundaries (import-md patches beats in place by ID; this swaps the whole set). Old beats are disabled, never deleted. See ReimportNodeCli class doc for details and the safety checks.
handler ReimportNodeCli
--relation-aliases
prose --relation-aliases --list
prose --relation-aliases --add --alias <wording> --canonical <standardizedRelationType> [--notes <notes>]
prose --relation-aliases --remove --id <id>
CRUD for RelationTypeAliases — normalizes link_entities free-text RelationType wording (e.g. "has" -> "owns") so the same relationship doesn't fork into multiple Edge rows.
handler RelationAliasCli
--rename-entity
prose --rename-entity --entity <guid|slug> --node <book-guid|slug|code> --new-name "..." [--apply --yes] Preview is the default; the apply form replaces exact full-name references in this book's descendant beats, then relabels linked ledger claims.
handler RenameEntityCli
--rename-node
prose --rename-node --node <id|slug|code> --title "…" [--slug
handler RenameNodeCli
--rename-universe
prose --rename-universe --slug <oldSlug> --new-slug <newSlug> --new-name <newName> [--new-theme <newTheme>]
rename a Universe row in place (Slug/Name/Theme only) — a seamless cutover, every Node/Entity/Book already scoped to its Id keeps working unmodified. See RenameUniverseCli.
handler RenameUniverseCli
--renumber-chapters
prose --renumber-chapters --slug <slug|id> [--apply] Titles only, no prose: close the gaps a reader sees when unnumbered units consumed chapter numbers ("Chapter 3", an interlude, then "Chapter 5"). Dry run unless --apply.
handler RenumberChaptersCli
--repair
prose --repair # cheap timeline-only pass
prose --repair --continuity # also run continuity extraction (LLM-heavy)
dossier-driven story repair — walks every chapter, augments character records with timeline entries and (optionally) LLM-extracted continuity claims.
handler RepairCli
--repair-entity-docs
prose --repair-entity-docs [--dry-run]
re-materialize the entity-doc row for EVERY active entity, in every universe. Unlike --backfill-entity-docs (per-book, inference-driven, so it only reaches entities a given book mentions) this iterates the entity table itself — which is what stamping MarkdownFiles.UniverseId on all of them requires.
handler RepairEntityDocsCli
--repair-slugs
prose --repair-slugs [--apply] [--family entities|nodes|books|series|episodes] [--json] Regenerate every slug from its Name/Title metadata and update slug-carrying references (beat audio paths, publication paths, on-disk dirs, alt_slug). DRY-RUN by default; --apply writes. Slugs are loose keys — guid is the key.
handler SlugRepairCli
--reparent-node
prose --reparent-node (--slug <slug> | --id <id>) (--parent-slug <slug> | --parent-id <id>)
prose --reparent-node --slug <slug> --clear — detach from parent
set the ParentNodeId on an existing node (move it into a collection).
handler ReparentNodeCli
--reset-password
prose --reset-password --email [--require-change] Operator password reset over the MindAttic.Authentication store, no web server. handler recover Beats.Text from Beats_History (system-versioned temporal table) after a bad overwrite — see RestoreBeatTextCli class doc. handler restore a hard-deleted Entities row from Entities_History (system-versioned temporal table) — see RestoreEntityCli class doc. handler restore .md files from DB back to disk. Supports point-in-time recovery from the MarkdownFiles_History temporal table. handler restore a Node content field (Description/Summary/Seed/Subtitle) from a named ArchivedBook snapshot back onto the live node. Explicit archive-id, never "latest" — see RestoreNodeFieldCli class doc. --field description|summary|seed|subtitle|all --universe handler RFC 0007 unified blob-retirement gate — backfill all 29 relational types from Records.Json, validate, and delete the blobs in a single pass. (RFC 0007) handler prose --retype-document-to-vocabulary --id handler run Legion persona quality voting across canon entity repos. Replaces the old LlmVoting (10 GLMZ residents) with the full 1000-persona library, 1-100 scale, and append-only EntityReview rows (same process as node reviews). handler have N Legion personas each read an EXISTING node and write an honest, scored reader review (saved to NodeReviews), then synthesize the Amazon-style aggregate summary. Round-robins reviewers across the trusted-4. --review-book/--run-panel literal aliases retired 2026-08-30 — one canonical name only. handler (re)generate the portable per-voter report (JSON + filterable HTM) from a node's most recent stored review batch, without re-running the panel. handler prose --review-settings [--set handler manage the rented RunPod review pod (key from the MindAttic vault, provider 'runpod'). handler print all beats of a node as continuous prose to stdout. No headers, no beat numbers, no metadata — just the prose, beats separated by blank lines. handler prose --sanity-scan (--slug <slug|code> | --all) [--json] Deterministic prose checks — no LLM. Catches leaked internal node codes, undefined all-caps acronyms, encoding corruption, and heft-floor violations. Exit 0 = clean, 1 = warnings only, 2 = any blocks. handler prose --scan-edge-duplicates --universe handler backfill BeatEntityMentions — index which entity names appear in each beat so entity-update staleness propagation works. handler (no description in the dispatch comment — add one above the guard in handler per-table schema operations (snapshot + safe column-reorder rebuild). handler apply canonical SQL seeds via C# (replaces sqlcmd-by-hand workflow). NOTE: --seed is also a flag of --create-book — that command must win the dispatch or its calls get hijacked by the SQL seeder. handler set Amazon KDP backend keywords for one node (no generic default). handler prose --seed-sensory-hints [--list] [--weapon "Name" --hints "hint1; hint2"] [--force] handler codify the GLMZ house voice + world rules from the memory rubric into the DB stores the generator reads (literary_rules / tone_bible). De-fragilizes the rules so they no longer depend on an .md file being parsed. Idempotent. handler prose --session-beats --session-id handler enable/disable a beat's membership in a node's reading order without touching the Beat row itself (wraps NodeWorkbenchService.SetBeatMembershipEnabledAsync). handler (--key handler (no description in the dispatch comment — add one above the guard in handler prose --set-edge-validity --edge handler prose --set-entity-slug --id handler explicit, by-id correction of Entities.Status — the one lifecycle column neither --set-entity-fields nor --backfill-stubs can reach (see SetEntityStatusCli's doc comment). handler prose --set-narrative-mode --slug handler set Node.Author — the pen name exports fall through to instead of "MindAttic". See SetNodeAuthorCli class doc. handler prose --set-node-layout --slug handler prose --set-node-slug --slug handler Directly sets Node.Version — the counter DocxExportService reads as nextVersion = Version + 1. For continuing a book's real version lineage after its local export folder was reset (e.g. a rename/regen) while the live KDP listing's history continues from an earlier number. handler Unblocks deleting/renaming a book another book's PreviousNodeId points at (FK_Nodes_PreviousNode is a DB-level Restrict, not just a C# guard — --delete-node --force cannot bypass it). handler Book chronology within its universe (Node.Timeline, PRS-T320). No mode flag = print it. prose --set-timeline --slug handler /show lookup: resolve a subject (name/slug/alias) to one Entity or Node and return a structured profile. See .claude/commands/show.md. handler Scene Collision engine manual test harness (2026-08-10): runs SceneCollisionService against one real beat without a full ProseWriterRouter pass. See SimulateCollisionCli for details. handler a docket of exact-text replacements across a book, guarded all-or-nothing, dry-run unless --apply, verified by read-back. Replaces the 2026-09-22 scratchpad splice.py. handler split a monolithic node into a Collection (parent + chapter child nodes) at IsChapterStart boundaries. Backs up to markdown first. handler dump the entire Prose DB to a re-runnable .sql script. handler ── Edit Sessions ───────────────────────────────────────────────────────────── prose --start-session --slug handler one-off cleanup of a generation-artifact heading/marker leaking into Beats.Text — see StripBeatArtifactsCli class doc. handler reconcile audio bytes between local disk and Azure Blob storage. Companion to DualWriteAudioStore — repairs drift from offline recordings and failed background uploads: one full bidirectional newest-wins pass. See SyncAudioCli class doc. handler sync project-rule, Codex, and Claude Code memory .md files to DB. Upserts by RelativePath; only changed files (hash diff) produce a history row. handler retroactive inline entity-GUID tagging backfill (corpus-trust-recovery Phase 1a/1b). handler extract a time / elapsed-duration timeline from all beats in a node. Flags clock anchors, infers story-relative timestamps, and surfaces conflicts. handler deterministic timeline-consistency check (RFC 0009 §5). Detects dead-character-acting and wound-regression violations. No LLM calls. handler the Story Ledger's Tuned Read (Phase 2) — walks a book in reading order, keeps its fact ledger fresh, pairs claims an exclusion axiom says cannot both be true, adjudicates only those pairs, and files a finding for each contradiction whose quote survives the mechanical grounding gate. Report-only (docs/LOGIC.md §4). Cost-gated: a real run spends one Sonnet call per uncached candidate. --dry runs the whole deterministic half for free. deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from (no description in the dispatch comment — add one above the guard in handler RFC 0007 "Universe Interchange" — import/export between an app's handler (no description in the dispatch comment — add one above the guard in handler prose --unresolved-nouns (--slug handler prose --validate-chapters (--slug handler scan beats for deprecated/renamed noun references. handler QuoteGrounding checks: confirm a logic-sweep audit agent's claimed quote actually appears in the beat it's attributed to, before that finding is trusted for triage/fix (SS-LOGIC-4a). --verification-staleness: which books have BeatVerification rows computed under an older CurrentRuleVersion and need a re-run (2026-08-10 — added after the same "book never re-run after a check-logic fix" gap was found and manually re-diffed twice in one session; see BeatVerification.RuleVersion's doc comment). handler prose --weapon-network (--id handler Fail-closed Hub dependency (Phase 2, explicit user decision): "the hub is running, Prose is working; hub goes down, Prose is down." Every command gates on the Hub being reachable and healthy before anything else runs — no silent fallback to the old direct-in-process behavior. The one exception: --worker-mode runs on a rented remote GPU pod talking to a separate Azure-hosted coordinator and its own local LLM endpoint — it has no access to this machine's loopback-only Hub by construction, not by choice, and gets its own equivalent fail-closed check against ITS hard dependency (see WorkerModeCli) instead of this one. prose --workflow-status [--slug handler prose --world-state --beat handler prose --wound handler prose --write-synopsis --slug handler ResetPasswordCli--restore-beat-textprose --restore-beat-text --id <beatGuid> --as-of <datetime-utc> [--dry-run]
RestoreBeatTextCli--restore-entityprose --restore-entity --id <guid> --as-of <datetime-utc> [--dry-run]
RestoreEntityCli--restore-markdownprose --restore-markdown [--file <relativePath>] [--as-of <datetime-utc>] [--dry-run] [--list]
RestoreMarkdownCli--restore-node-fieldprose --restore-node-field (--id ... | --slug ...) --archive-id <guid>
RestoreNodeFieldCli--retire-records-blobsprose --retire-records-blobs [--rebuild] [--validate] [--apply]
RetireRecordsBlobsCli--retype-document-to-vocabularydocument-type entity whose Name is a generic in-world common noun (e.g. "CorpoNation") — moves it to vocabulary type without touching its existing Edge relationships. See RetypeDocumentToVocabularyCli.RetypeDocumentToVocabularyCli--review-entity — DEACTIVATEDprose --review-entity [--type <type>] [--ballots N] [--prose N] [--unrated]
ReviewEntityCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--review-node — DEACTIVATEDprose --review-node (--id <guid|prefix> | --slug <slug>) [--readers N]
ReviewNodeCli · cost-gated (spends LLM money) · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--review-report — DEACTIVATEDprose --review-report (--slug <slug> | --id <guid> | --code <CODE>) [--provider local|cloud|all]
ReviewReportCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--review-settingsReviewSettingsCli--runpodprose --runpod <status|stop|start|terminate> [--pod <id>]
RunPodGpuCli--sanitize-beatsprose --sanitize-beats [--slug <slug> | --all] [--dry-run]
SanitizeBeatsCli--sanity-scan — DEACTIVATEDSanityScanCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--scan-edge-duplicatesScanEdgeDuplicatesCli--scan-entity-mentionsprose --scan-entity-mentions
ScanEntityMentionsCli--scan-unnamed-referents — DEACTIVATEDProgram.cs)UnnamedReferentsCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--schemaprose --schema snapshot --table NAME [--out path.sql]
prose --schema rebuild --table NAME --order "col1,col2,col3,…"
SchemaCli--seed / --create-bookprose --seed list known seeds
prose --seed <name> apply one
prose --seed --all [--force] apply every known seed in order
SeedCli--seed-keywordsprose --seed-keywords --slug <slug> --keywords "phrase one|phrase two|..."
SeedKeywordsCli--seed-sensory-hintsSeedSensoryHintsCli--seed-voice-rulesprose --seed-voice-rules
SeedVoiceRulesCli--session-beatsSessionBeatsCli--set-beat-enabledprose --set-beat-enabled --slug <slug> (--beat-number N | --beat-id <guid>) [--enable]
SetBeatEnabledCli--set-byo-keyprose --set-byo-key --provider claude|openai
SetByoKeyCli--set-canon-sectionProgram.cs)SetCanonSectionCli--set-edge-validitySetEdgeValidityCli--set-entity-slug / --set-entity-name / --edit-edge / --prune-orphan-tag / --delete-obligationCanonMaintenanceCli--set-entity-statusprose --set-entity-status --id <entity guid> --status canon|archived|stub
SetEntityStatusCli--set-narrative-modeSetNarrativeModeCli--set-node-authorprose --set-node-author --slug <slug|code|guid> --author "<Name>"
SetNodeAuthorCli--set-node-layoutSetNodeLayoutCli--set-node-slugSetNodeSlugCli--set-node-versionprose --set-node-version (--slug <slug> | --id <id>) --version <N>
SetNodeVersionCli--set-previous-nodeprose --set-previous-node (--slug <slug> | --id <id>) (--previous-slug <slug> | --previous-id <id>)
prose --set-previous-node --slug <slug> --clear — detach sequel link
SetPreviousNodeCli--set-timelineBookTimelineCli--showShowCli--simulate-collisionSimulateCollisionCli · cost-gated (spends LLM money)--splice-beatsprose --splice-beats --node <slug|code|guid> --file <docket.json> [--apply] [--analyze]
SpliceBeatsCli--split-collectionprose --split-collection (--slug <s> | --id <guid>)
SplitCollectionCli--sql-exportprose --sql-export --schema schema-only DDL
prose --sql-export --data schema + INSERT data
prose --sql-export --schema --out path override output path
SqlExportCli--start-sessionStartSessionCli--strip-beat-artifactsprose --strip-beat-artifacts --slug <slug> [--dry-run]
StripBeatArtifactsCli--sync-audioprose --sync-audio (no flags: one bidirectional newest-wins pass; --dry-run/--push/--pull/--node are refused)
SyncAudioCli--sync-markdownprose --sync-markdown [--dry-run]
SyncMarkdownCli--tag-entitiesprose --tag-entities (--id <guid> | --slug <slug> | --all) [--dry-run]
TagEntitiesCli--timelineprose --timeline (--slug <slug> | --id <id>)
TimelineCli--timeline-check — DEACTIVATEDprose --timeline-check (--slug <slug> | --id <guid>)
TimelineCheckCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--tuned-read — DEACTIVATEDprose --tuned-read --slug <slug> [--dry] [--no-extract] [--max-candidates N] [--json]
DeactivatedInstruments.cs to restore--universe-exportProgram.cs)UniverseInterchangeCli--universe-importUniverseInterchangeCli--universe-syncProgram.cs)UniverseInterchangeCli--unresolved-nouns — DEACTIVATED | --all) [--min N] [--limit N] [--json] Report-only: capitalized phrases in a book's LIVE BEAT PROSE that resolve to no Entity row. Deterministic, no LLM, writes nothing. The residue detector already existed but ran against outline text only, so "is every named thing an entity?" had no measurable answer for prose.UnresolvedNounsCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--validate-chaptersValidateChaptersCli--validate-nouns — DEACTIVATEDprose --validate-nouns --slug <slug>
ValidateNounsCli · deactivated 2026-09-22 (RFC 0014) — handler intact; remove its line from DeactivatedInstruments.cs to restore--verify-quote / --verify-quotes-batchprose --verify-quote --id <beatId> --quote "<claimed text>" [--claimed-by <name>] [--json]
prose --verify-quotes-batch --json-file <path> [--json]
prose --verification-staleness [--json]
VerifyBeatCli--weapon-networkWeaponNetworkCli--worker-mode--workflow-statusWorkflowMonitorCli--world-stateWorldStateCli--woundWoundCli--write-synopsisWriteSynopsisCli