scriveno 2.0.12 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +12 -6
  2. package/agents/voice-checker.md +10 -0
  3. package/bin/install.js +91 -2
  4. package/commands/scr/autopilot-publish.md +1 -1
  5. package/commands/scr/autopilot-translate.md +5 -6
  6. package/commands/scr/autopilot.md +3 -3
  7. package/commands/scr/beta-reader.md +6 -3
  8. package/commands/scr/build-ebook.md +1 -1
  9. package/commands/scr/build-print.md +2 -2
  10. package/commands/scr/continuity-check.md +1 -0
  11. package/commands/scr/copy-edit.md +1 -0
  12. package/commands/scr/demo.md +1 -0
  13. package/commands/scr/dialogue-audit.md +1 -0
  14. package/commands/scr/discussion-questions.md +1 -0
  15. package/commands/scr/draft.md +2 -2
  16. package/commands/scr/export.md +1 -1
  17. package/commands/scr/first-run.md +128 -0
  18. package/commands/scr/help.md +2 -1
  19. package/commands/scr/line-edit.md +1 -0
  20. package/commands/scr/map-manuscript.md +1 -0
  21. package/commands/scr/multi-publish.md +3 -2
  22. package/commands/scr/new-character.md +1 -0
  23. package/commands/scr/new-work.md +1 -1
  24. package/commands/scr/originality-check.md +1 -0
  25. package/commands/scr/pacing-analysis.md +1 -0
  26. package/commands/scr/polish.md +1 -0
  27. package/commands/scr/quick-write.md +4 -1
  28. package/commands/scr/sensitivity-review.md +1 -0
  29. package/commands/scr/synopsis.md +1 -0
  30. package/commands/scr/theme-tracker.md +1 -0
  31. package/commands/scr/timeline.md +1 -0
  32. package/commands/scr/track.md +2 -0
  33. package/commands/scr/translate.md +1 -1
  34. package/commands/scr/voice-check.md +1 -0
  35. package/data/CONSTRAINTS.json +11 -1
  36. package/data/export-templates/scriveno-book.typst +2 -2
  37. package/data/export-templates/scriveno-chapbook.typst +1 -1
  38. package/data/export-templates/scriveno-picturebook.typst +9 -0
  39. package/data/export-templates/scriveno-stageplay.typst +14 -4
  40. package/data/proof/first-run/README.md +96 -0
  41. package/data/proof/runtime-parity/README.md +48 -0
  42. package/docs/architecture.md +6 -3
  43. package/docs/command-reference.md +39 -23
  44. package/docs/configuration.md +28 -3
  45. package/docs/contributing.md +2 -2
  46. package/docs/drafter-quality.md +1 -1
  47. package/docs/getting-started.md +4 -1
  48. package/docs/proof-artifacts.md +11 -0
  49. package/docs/quick-proof.md +23 -2
  50. package/docs/release-notes.md +61 -0
  51. package/docs/route-graph.md +2 -2
  52. package/docs/runtime-support.md +4 -3
  53. package/docs/sacred-texts.md +1 -1
  54. package/docs/shipped-assets.md +2 -0
  55. package/docs/starter-sets.md +8 -0
  56. package/docs/translation.md +7 -11
  57. package/docs/voice-dna.md +4 -4
  58. package/docs/work-types.md +1 -1
  59. package/lib/track-safety.js +72 -0
  60. package/package.json +1 -1
  61. package/templates/config.json +1 -1
package/README.md CHANGED
@@ -2,13 +2,14 @@
2
2
 
3
3
  [![CI](https://github.com/aihxp/scriveno/actions/workflows/ci.yml/badge.svg)](https://github.com/aihxp/scriveno/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-2.0.12-blue)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-2.6.0-blue)](CHANGELOG.md)
6
6
  [![npm](https://img.shields.io/npm/v/scriveno.svg)](https://www.npmjs.com/package/scriveno)
7
7
  [![Downloads](https://img.shields.io/npm/dm/scriveno.svg)](https://www.npmjs.com/package/scriveno)
8
8
  [![Status CLI](https://img.shields.io/badge/status%20CLI-scriveno%20status-blue)](docs/runtime-support.md#shared-auto-invoke-engine)
9
9
  [![Route Intelligence](https://img.shields.io/badge/route%20intelligence-agent%20lanes-blue)](docs/auto-invoke-policy.md)
10
10
  [![Runtime Smoke](https://img.shields.io/badge/runtime%20smoke-install%20checks-blue)](docs/runtime-support.md#runtime-smoke-and-agent-checks)
11
11
  [![Safe Apply](https://img.shields.io/badge/safe%20apply-visible%20gates-blue)](docs/auto-invoke-policy.md#safe-apply-and-audit-commands)
12
+ [![First Run](https://img.shields.io/badge/first%20run-executable%20proof-blue)](docs/quick-proof.md)
12
13
  [![Quick Proof](https://img.shields.io/badge/quick%20proof-10%20minute%20path-blue)](docs/quick-proof.md)
13
14
  [![Starter Sets](https://img.shields.io/badge/starter%20sets-goal%20paths-blue)](docs/starter-sets.md)
14
15
 
@@ -36,7 +37,7 @@ scriveno sync --check
36
37
 
37
38
  Scriveno is a command system that turns your AI coding agent into a voice-preserving writing studio. It supports 50 work types -- novels, screenplays, research papers, technical guides, runbooks, scripture commentaries, comics, memoirs -- each with its own adaptive vocabulary and toolset.
38
39
 
39
- The wedge comes first: Scriveno profiles the writer, loads that voice into every drafting step, and keeps each unit on fresh context so the prose stays specific to the project. From there, it expands into 112 writing commands covering the rest of the pipeline:
40
+ The wedge comes first: Scriveno profiles the writer, loads that voice into every drafting step, and keeps each unit on fresh context so the prose stays specific to the project. From there, it expands into 113 writing commands covering the rest of the pipeline:
40
41
 
41
42
  - **Create** -- Set up a project with tailored context files. Progressive onboarding, never overwhelming.
42
43
  - **Write** -- Discuss, plan, draft, and revise one unit at a time. The drafter agent loads your Voice DNA and writes in *your* voice, not generic AI prose.
@@ -56,16 +57,19 @@ Everything adapts to your work type. A novel uses `/scr:draft` for chapters. A s
56
57
  npx scriveno@latest
57
58
 
58
59
  # In Claude Code:
60
+ /scr-first-run # Run the guided proof path first
59
61
  /scr-new-work # Start a fresh project
60
62
  /scr-demo # Explore a pre-built sample first
61
63
  /scr-next # The universal "what should I do now" command
62
64
  /scr-help # See what's available for your work type
63
65
 
64
66
  # Other slash-command runtimes currently keep /scr:*:
67
+ /scr:first-run
65
68
  /scr:new-work
66
69
  /scr:next
67
70
 
68
71
  # In Codex, use the generated $scr-* skills:
72
+ $scr-first-run
69
73
  $scr-new-work
70
74
  $scr-demo
71
75
  $scr-next
@@ -137,6 +141,8 @@ For sacred and historical texts, Voice DNA is supplemented by 10 sacred voice re
137
141
 
138
142
  **Interactive:** interactive fiction, game narrative
139
143
 
144
+ **Speech:** speech
145
+
140
146
  **Sacred & historical:** scripture (Biblical, Quranic, Torah, Vedic, Buddhist, generic), commentary/exegesis, devotional, liturgical text, historical chronicle, historical account, mythological collection, religious epic, sermon, homiletic collection
141
147
 
142
148
  Each work type has its own structural hierarchy and **industry-standard word count and page range guidance** -- a novel targets 70,000-100,000 words across 20-35 chapters, a screenplay targets 90-120 pages across 3-5 acts. These ranges guide outlining, progress tracking, and drafter pacing. The runnable command ids stay stable, while Scriveno adapts the wording around them -- a Torah commentary still runs `/scr:plan 3`, but frames that work as planning Parashah 3.
@@ -195,7 +201,7 @@ Scriveno is built on five principles:
195
201
  - [Quick Proof](docs/quick-proof.md) -- 10-minute proof-first route through install checks, the demo, and the next draft
196
202
  - [Starter Sets](docs/starter-sets.md) -- Small command paths for drafting, polishing, publishing, translation, sacred commentary, and repair
197
203
  - [Getting Started](docs/getting-started.md) -- Install to first draft in 10 minutes
198
- - [Command Reference](docs/command-reference.md) -- All 112 commands with usage, flags, and examples
204
+ - [Command Reference](docs/command-reference.md) -- All 113 commands with usage, flags, and examples
199
205
  - [Work Types Guide](docs/work-types.md) -- How 50 work types adapt Scriveno's vocabulary
200
206
  - [Voice DNA Guide](docs/voice-dna.md) -- The 15+ dimension voice profiling system
201
207
  - [Creative Context](docs/creative-context.md) -- Writer-native context routing, craft notes, and core-loop memory
@@ -240,11 +246,11 @@ Scriveno currently ships installer targets for these AI tooling environments:
240
246
 
241
247
  ## Status
242
248
 
243
- **Version:** 2.0.12
249
+ **Version:** 2.6.0
244
250
 
245
- Scriveno's core command surface is stable across 112 commands, 50 work types, and 11 installer targets. The current repo baseline includes shipped planning milestones through `v2.0 Publishing Cover Packaging`, plus the creative-context, record-store, branching-next, runtime-sync, adaptive concierge, human-first writing-safeguard, authenticity-diagnostic, domain-grilling, installer-marker cleanup, cross-runtime agent metadata, visible automation status, the shared `scriveno status --project .` auto-invoke engine, route-intelligence lanes, safe apply reporting, runtime smoke checks, agent availability checks, route graph audits, the full audit repair pass through `2.0.11`, and the first-run proof surface in `2.0.12`. See [Quick Proof](docs/quick-proof.md) for the fastest proof path, [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory, and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
251
+ Scriveno's core command surface is stable across 113 commands, 50 work types, and 11 installer targets. The current repo baseline includes shipped planning milestones through `v2.0 Publishing Cover Packaging`, plus the creative-context, record-store, branching-next, runtime-sync, adaptive concierge, human-first writing-safeguard, authenticity-diagnostic, domain-grilling, installer-marker cleanup, cross-runtime agent metadata, visible automation status, the shared `scriveno status --project .` auto-invoke engine, route-intelligence lanes, safe apply reporting, runtime smoke checks, agent availability checks, route graph audits, the full audit repair pass through `2.0.11`, the first-run proof surface in `2.5.0`, and the executable `/scr:first-run` path. See [Quick Proof](docs/quick-proof.md) for the fastest proof path, [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory, and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
246
252
 
247
- Version `2.0.12` publishes Scriveno under the package name `scriveno`, so the current install command is `npx scriveno@latest`. The older `scriveno-cli` package name is historical and was unpublished during the rename, so npm cannot attach a deprecation notice to it while it has no active registry record. The older `scriven-cli` package remains on npm only as a deprecated legacy name that points users to `scriveno`. Do not treat either legacy package name as active unless a deliberate compatibility shim is republished. See [CHANGELOG](CHANGELOG.md) for the full list and [docs/release-notes.md](docs/release-notes.md) for the public-facing summary.
253
+ Version `2.6.0` publishes Scriveno under the package name `scriveno`, so the current install command is `npx scriveno@latest`. The older `scriveno-cli` package name is historical and was unpublished during the rename, so npm cannot attach a deprecation notice to it while it has no active registry record. The older `scriven-cli` package remains on npm only as a deprecated legacy name that points users to `scriveno`. Do not treat either legacy package name as active unless a deliberate compatibility shim is republished. See [CHANGELOG](CHANGELOG.md) for the full list and [docs/release-notes.md](docs/release-notes.md) for the public-facing summary.
248
254
 
249
255
  Package history is tracked in [CHANGELOG.md](CHANGELOG.md), and the public-facing summary for this release is in [docs/release-notes.md](docs/release-notes.md).
250
256
 
@@ -147,6 +147,16 @@ Map the band to the existing tiers:
147
147
  - **60-74, Mixed signals (notable) / leaning AI:** Fail. Noticeable drift. Offer to re-draft problem sections.
148
148
  - **Below 60, Reads AI-generated:** Severe. Clustered dead-giveaways, uniform rhythm, or chat-artifact contamination. Do not proceed. Recommend re-drafting with an updated STYLE-GUIDE.md or running `/scr:voice-test` to recalibrate.
149
149
 
150
+ ### Normalized drift (for callers that need a 0-1 figure)
151
+
152
+ Some callers -- `/scr:draft`, `/scr:autopilot`, and the `voice.drift_threshold` config knob -- need drift on a 0-1 scale rather than this 0-100 score. Convert with:
153
+
154
+ ```
155
+ drift = (100 - score) / 100
156
+ ```
157
+
158
+ So a score of 100 is 0.00 drift, 90 is 0.10, 70 is 0.30, 60 is 0.40. The default `drift_threshold` of 0.3 therefore means "pause or offer a re-draft when the voice score falls below 70" -- the FAIL band and worse. This is the single definition of drift; callers reference it rather than inventing their own scale.
159
+
150
160
  Before finalizing a low score, re-read the strongest human markers you found and ask whether the band is honestly supported. Scoring genuine careful human prose low because it is formal or clean is this check's worst failure.
151
161
 
152
162
  ## Tone
package/bin/install.js CHANGED
@@ -821,6 +821,7 @@ function printHelp() {
821
821
  console.log(BANNER);
822
822
  console.log(`Usage:
823
823
  scriveno
824
+ scriveno first-run --project .
824
825
  scriveno status --project .
825
826
  scriveno status . --json
826
827
  scriveno status --project . --apply-safe
@@ -843,6 +844,7 @@ Options:
843
844
  --version Show the Scriveno package version
844
845
 
845
846
  Status options:
847
+ first-run Print the guided first-run path and proof checklist
846
848
  status Inspect a project and recommend the next command
847
849
  --project <path> Project root to inspect (default: current directory)
848
850
  --trigger <name> Status trigger label (default: scriveno status)
@@ -878,8 +880,11 @@ function parseArgs(argv) {
878
880
  syncCheck: false,
879
881
  };
880
882
 
881
- if (argv[0] === 'status') {
882
- options.command = 'status';
883
+ if (argv[0] === 'status' || argv[0] === 'first-run') {
884
+ options.command = argv[0];
885
+ if (argv[0] === 'first-run') {
886
+ options.statusTrigger = 'scriveno first-run';
887
+ }
883
888
  for (let i = 1; i < argv.length; i++) {
884
889
  const arg = argv[i];
885
890
  if (arg === '--help' || arg === '-h') {
@@ -1011,6 +1016,82 @@ function runStatus({ projectRoot, trigger, json, applySafe }) {
1011
1016
  return safeApply ? { analysis, safeApply } : analysis;
1012
1017
  }
1013
1018
 
1019
+ function buildFirstRunGuide({ projectRoot }) {
1020
+ const analysis = autoInvokeEngine.analyzeProject(projectRoot);
1021
+ const smoke = autoInvokeEngine.inspectRuntimeSmoke();
1022
+ const routes = autoInvokeEngine.buildRouteGraph();
1023
+ return {
1024
+ projectRoot,
1025
+ recommendation: analysis.recommendation,
1026
+ commandShapes: {
1027
+ claudeCode: ['/scr-first-run', '/scr-demo', '/scr-next'],
1028
+ standardSlash: ['/scr:first-run', '/scr:demo', '/scr:next'],
1029
+ codex: ['$scr-first-run', '$scr-demo', '$scr-next'],
1030
+ guided: ['Follow the generated local-MCP setup notes'],
1031
+ },
1032
+ firstPath: [
1033
+ '/scr:demo',
1034
+ 'cd scriveno-demo',
1035
+ '/scr:next',
1036
+ '/scr:draft 5',
1037
+ '/scr:editor-review 5',
1038
+ ],
1039
+ proofArtifacts: [
1040
+ 'docs/quick-proof.md',
1041
+ 'docs/starter-sets.md',
1042
+ 'data/proof/first-run/README.md',
1043
+ 'data/proof/runtime-parity/README.md',
1044
+ 'data/proof/watchmaker-flow/README.md',
1045
+ 'data/proof/voice-dna/README.md',
1046
+ ],
1047
+ checks: {
1048
+ smokeOk: smoke.ok,
1049
+ commandCount: routes.commandCount,
1050
+ expectedAgents: smoke.expectedAgents,
1051
+ },
1052
+ };
1053
+ }
1054
+
1055
+ function formatFirstRunGuide(guide) {
1056
+ return [
1057
+ 'Scriveno first-run guide',
1058
+ `Project: ${guide.projectRoot}`,
1059
+ `Current recommendation: ${guide.recommendation.command}`,
1060
+ '',
1061
+ 'Runtime command shapes:',
1062
+ `- Claude Code: ${guide.commandShapes.claudeCode.join(', ')}`,
1063
+ `- Standard slash-command runtimes: ${guide.commandShapes.standardSlash.join(', ')}`,
1064
+ `- Codex: ${guide.commandShapes.codex.join(', ')}`,
1065
+ `- Guided targets: ${guide.commandShapes.guided.join(', ')}`,
1066
+ '',
1067
+ 'Recommended first path:',
1068
+ ...guide.firstPath.map((step, index) => `${index + 1}. ${step}`),
1069
+ '',
1070
+ 'Proof artifacts:',
1071
+ ...guide.proofArtifacts.map((artifact) => `- ${artifact}`),
1072
+ '',
1073
+ 'Checks:',
1074
+ `- runtime smoke: ${guide.checks.smokeOk ? 'ok' : 'needs install refresh'}`,
1075
+ `- command count: ${guide.checks.commandCount}`,
1076
+ `- expected agents: ${guide.checks.expectedAgents.join(', ')}`,
1077
+ '',
1078
+ 'Next commands:',
1079
+ '- /scr:demo: Create the isolated watchmaker demo project.',
1080
+ '- /scr:next: Let Scriveno inspect the current project state.',
1081
+ '- /scr:new-work: Start a real project instead of using the demo.',
1082
+ ].join('\n');
1083
+ }
1084
+
1085
+ function runFirstRun({ projectRoot, json }) {
1086
+ const guide = buildFirstRunGuide({ projectRoot });
1087
+ if (json) {
1088
+ console.log(JSON.stringify(guide, null, 2));
1089
+ } else {
1090
+ console.log(formatFirstRunGuide(guide));
1091
+ }
1092
+ return guide;
1093
+ }
1094
+
1014
1095
  function runSyncCheck({ projectRoot, json }) {
1015
1096
  const analysis = autoInvokeEngine.analyzeProject(projectRoot);
1016
1097
  const safeApply = autoInvokeEngine.collectSafeApplyActions(projectRoot, { analysis, trigger: 'scriveno sync --check' });
@@ -1496,6 +1577,14 @@ async function main() {
1496
1577
  return;
1497
1578
  }
1498
1579
 
1580
+ if (parsed.command === 'first-run') {
1581
+ runFirstRun({
1582
+ projectRoot: parsed.statusProjectRoot,
1583
+ json: parsed.statusJson,
1584
+ });
1585
+ return;
1586
+ }
1587
+
1499
1588
  if (parsed.command === 'sync') {
1500
1589
  runSyncCheck({
1501
1590
  projectRoot: parsed.statusProjectRoot,
@@ -78,7 +78,7 @@ Continuity check: 1 warning
78
78
  Proceeding with export. Review full reports after completion.
79
79
  ```
80
80
 
81
- **Quality gate policy (D-09):** Always proceed to the export pipeline regardless of quality gate results. The quality gate is advisory -- it gives the writer information, not a veto. Even if voice check scores FAIL (below 60) or continuity check finds major contradictions, log the warnings and continue.
81
+ **Quality gate policy (D-09):** The quality gate is advisory and never blocks. Always proceed to the export pipeline, including when the voice check or continuity check finds problems. autopilot-publish is the unattended path: it does not stop to ask the writer and it does not abort the run. The gate exists to make problems visible, not to veto. One case gets extra visibility: when the voice score is below 60 (the voice-checker's "Reads AI-generated / do not proceed" band), flag it prominently in the quality-gate summary, write the full voice-check report to the output directory, and list it as the top issue in the final completion report with an explicit recommendation to re-draft the flagged units before publishing. Still finish the export so the run stays unattended; the writer decides whether to publish the package or re-draft after reading the report.
82
82
 
83
83
  ---
84
84
 
@@ -56,8 +56,8 @@ RTL_LANGUAGES = ["ar", "he", "ur", "fa", "yi", "ps", "sd"]
56
56
  CJK_LANGUAGES = ["zh", "ja", "ko"]
57
57
  ```
58
58
 
59
- - RTL languages receive `--text-direction rtl` when passed to export commands
60
- - CJK languages receive appropriate font and spacing flags
59
+ - RTL languages: `/scr:multi-publish` derives text direction from the language code, so no extra flag is needed
60
+ - CJK languages: `/scr:multi-publish` applies CJK font and spacing handling from the language code
61
61
  - All other languages default to LTR
62
62
 
63
63
  Log the detection:
@@ -123,9 +123,8 @@ Log drift annotation counts:
123
123
 
124
124
  If `--skip-publish` is NOT set:
125
125
  - Determine text direction for this language (RTL/LTR/CJK from Step 2)
126
- - Run `/scr:multi-publish --language {lang}` for all available export formats
127
- - For RTL languages, pass `--text-direction rtl` to ensure correct PDF and EPUB output
128
- - For CJK languages, pass `--cjk-mode` to enable CJK-specific line breaking and font handling
126
+ - Run `/scr:multi-publish --languages {lang}` for all available export formats
127
+ - RTL and CJK output is handled automatically: `/scr:multi-publish` sets text direction and CJK line breaking from the language code, so no extra flags are required
129
128
 
130
129
  If `--skip-publish` IS set:
131
130
  - Log: `"[fr] Phase 6/6: Multi-publish skipped (--skip-publish)."`
@@ -209,7 +208,7 @@ Next Steps:
209
208
 
210
209
  - **NEVER** skip the glossary phase -- term consistency across the manuscript depends on it
211
210
  - **NEVER** run cultural adaptation before translation is complete for that language
212
- - **NEVER** export RTL languages without setting `--text-direction rtl` -- the PDF and EPUB will be unreadable
211
+ - **ALWAYS** confirm the language code is correct before export; `/scr:multi-publish` uses it to set RTL direction and CJK handling, and a wrong code yields unreadable PDF and EPUB
213
212
  - **NEVER** continue past a blocking error without logging it -- all errors must appear in the completion summary
214
213
  - **NEVER** modify the source manuscript -- translation works on copies in `.manuscript/translation/{lang}/`
215
214
 
@@ -88,7 +88,7 @@ The writer trusts the pipeline. Autopilot runs until the entire manuscript is co
88
88
  **Pause behavior:** Run until ALL units are complete. Pause ONLY on these conditions:
89
89
 
90
90
  1. **Continuity contradiction** the agent cannot resolve (e.g., a character is in two places at once, a previously established fact is contradicted)
91
- 2. **Voice drift** exceeding `config.voice.drift_threshold` (default 0.3). After each unit, compare the drafted prose against STYLE-GUIDE.md. If drift exceeds threshold, pause.
91
+ 2. **Voice drift** exceeding `config.voice.drift_threshold` (default 0.3). After each unit, run the voice-checker agent against STYLE-GUIDE.md to get an Overall score (0-100). Compute normalized drift as `drift = (100 - score) / 100` (see the "Normalized drift" section of `voice-checker.md`) and pause when `drift` exceeds the threshold -- at the default 0.3 that means a voice score below 70, the voice-checker's FAIL band.
92
92
  3. **Plot hole** with no clear resolution path (e.g., a setup with no payoff, a character motivation gap)
93
93
  4. **Missing critical information** that prevents drafting (character motivation gap, setting inconsistency, unresolved plot dependency)
94
94
  5. **Record drift** against `.manuscript/RECORD.md` that the agent cannot resolve safely (e.g., a promised payoff is contradicted, an open thread is closed without being recorded, or a next-unit obligation is skipped)
@@ -108,7 +108,7 @@ The writer trusts the pipeline. Autopilot runs until the entire manuscript is co
108
108
  **On completion:** Show a comprehensive summary:
109
109
  - Total units drafted
110
110
  - Total word count
111
- - Voice consistency score across the manuscript
111
+ - Voice consistency: the voice-checker Overall score (0-100), averaged across the units that were voice-checked during the run
112
112
  - Open record threads, reader promises, and unresolved next-unit obligations from RECORD.md
113
113
  - Any flags or issues encountered during the run
114
114
  - List of any quality gate pauses that occurred and how they were resolved
@@ -223,7 +223,7 @@ If the command stops because a prerequisite is missing, suggest the command that
223
223
 
224
224
  - **NEVER** run without updating STATE.md -- resume depends on accurate state
225
225
  - **NEVER** show raw git output in writer mode (when `developer_mode` is `false`)
226
- - **NEVER** skip the voice comparison after drafting -- even if the voice-check command from Phase 4 is not yet available, use the drafter's built-in self-check (Step 4 in drafter.md)
226
+ - **NEVER** skip the voice comparison after drafting -- run the voice-checker agent against STYLE-GUIDE.md; if the host runtime cannot spawn it, fall back to the drafter's built-in self-check (Step 4 in drafter.md)
227
227
  - **NEVER** re-draft a unit that STATE.md shows as already submitted -- submitted means the writer approved it
228
228
  - **NEVER** skip stages in the chain (discuss-plan-draft-review-submit) unless the writer explicitly says "skip"
229
229
  - **NEVER** continue past a quality gate pause in full-auto without writer input -- the whole point is that these are conditions the pipeline cannot resolve alone
@@ -1,10 +1,13 @@
1
1
  ---
2
- description: Simulate a beta reader's experience of the manuscript with cross-AI peer review.
2
+ description: Simulate a beta reader's experience of the manuscript using a fresh-context reader persona.
3
+ argument-hint: "[N] [--focus <area>]"
3
4
  ---
4
5
 
5
- # /scr:beta-reader -- Cross-AI Peer Review
6
+ # /scr:beta-reader -- Reader-Perspective Review
6
7
 
7
- Simulate a beta reader's experience of the manuscript.
8
+ Simulate a beta reader's experience of the manuscript using a fresh-context reader persona.
9
+
10
+ This command simulates an independent reader in a fresh context using the same model, not a second or external AI. Genuine cross-AI review would require an external CLI call that Scriveno does not currently wire.
8
11
 
9
12
  ## Usage
10
13
  ```
@@ -153,7 +153,7 @@ Apply tradition data to `.manuscript/output/metadata.yaml` (before STEP 3f write
153
153
  - `tibetan` script -> `bo`
154
154
  - `devanagari` script -> `sa` (Sanskrit)
155
155
  - `latin` script -> use the project language from config.json (default `en`)
156
- - Set `font-family:` to the first entry in the manifest's `font_stack`.
156
+ - Set `mainfont:` to the first entry in the manifest's `font_stack`. (For the EPUB itself the non-Latin font is applied through `scriveno-epub.css`; `mainfont` keeps the metadata key aligned with the print build.)
157
157
 
158
158
  If `rtl: true` in the manifest, add `--metadata dir=rtl` to the Pandoc invocation in STEP 4.
159
159
 
@@ -156,7 +156,7 @@ Apply tradition data to `.manuscript/output/metadata.yaml` (before STEP 3f write
156
156
  - `tibetan` script -> `bo`
157
157
  - `devanagari` script -> `sa` (Sanskrit)
158
158
  - `latin` script -> use the project language from config.json (default `en`)
159
- - Set `font-family:` to the first entry in the manifest's `font_stack`.
159
+ - Set `mainfont:` to the first entry in the manifest's `font_stack`. (`mainfont` is the Pandoc variable the Typst book/chapbook templates read for the body font; `font-family` is not.)
160
160
 
161
161
  If `rtl: true` in the manifest, add `--metadata dir=rtl` to the Pandoc invocation in STEP 4.
162
162
 
@@ -415,7 +415,7 @@ estimated_pages = Math.round(word_count / manifest.trim_sizes[trim].wpp)
415
415
 
416
416
  Compare against `manifest.max_pages`:
417
417
  - For paperback: compare against `manifest.max_pages.paperback`
418
- - For hardcover: only KDP hardcover applies -- compare against `manifest.max_pages.hardcover` only if `--hardcover` flag is passed (otherwise use paperback limit)
418
+ - For hardcover: the hardcover page limit applies to KDP only. Compare against `manifest.max_pages.hardcover` only if `--hardcover` was passed AND the platform is `kdp` AND the manifest defines `max_pages.hardcover`. For any other platform (for example `ingram`, which defines only `max_pages.paperback`), ignore `--hardcover` for the page-limit check and use `manifest.max_pages.paperback`.
419
419
 
420
420
  If `estimated_pages` exceeds the limit:
421
421
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Automated continuity verification to scan for narrative contradictions across the manuscript.
3
+ argument-hint: "[N]"
3
4
  ---
4
5
 
5
6
  # /scr:continuity-check -- Scan for Narrative Contradictions
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Perform a correctness pass for grammar, spelling, punctuation, and consistency.
3
+ argument-hint: "[N]"
3
4
  ---
4
5
 
5
6
  # /scr:copy-edit -- Grammar and Correctness Pass
@@ -31,6 +31,7 @@ Demo project created at ./scriveno-demo/
31
31
 
32
32
  Try any of these to see Scriveno in action:
33
33
  cd scriveno-demo
34
+ /scr:first-run See the guided proof path and runtime-specific command shapes
34
35
  /scr:progress See where the project is
35
36
  /scr:next Let Scriveno pick your next move
36
37
  /scr:draft 5 Watch the drafter produce scene 5 in the established voice
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Audit dialogue for character voice differentiation, attribution clarity, and talking-head detection.
3
+ argument-hint: "[N]"
3
4
  ---
4
5
 
5
6
  # /scr:dialogue-audit -- Character Dialogue Quality Audit
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Generate reading group discussion questions exploring themes, characters, and craft.
3
+ argument-hint: "[--count <N>]"
3
4
  ---
4
5
 
5
6
  # /scr:discussion-questions -- Reading Group Discussion Questions
@@ -35,7 +35,7 @@ Require `.manuscript/plans/{N}-*-PLAN.md` files to exist. If none exist, also ch
35
35
 
36
36
  3. **Save drafted output** to `.manuscript/drafts/body/{N}-{A}-DRAFT.md`.
37
37
 
38
- 4. **After all atomic units in the unit are drafted, do a voice-check pass.** Load the full drafted unit, compare against STYLE-GUIDE.md, flag any scenes that drift from the voice profile by more than the configured threshold. If drift is detected, offer to re-draft the problem scenes.
38
+ 4. **After all atomic units in the unit are drafted, run a voice-check pass.** Invoke the installed `voice-checker.md` agent in a fresh context on the drafted unit -- the same agent `/scr:voice-check` uses. It loads the unit and STYLE-GUIDE.md and returns an Overall score (0-100). Convert to normalized drift (`drift = (100 - score) / 100`; see the "Normalized drift" section of `voice-checker.md`) and, if drift exceeds `config.voice.drift_threshold` (default 0.3, i.e. a voice score below 70), flag the scenes that drove the score down and offer to re-draft them. If the host runtime cannot spawn the voice-checker, fall back to the drafter's built-in self-check (Step 4 in `drafter.md`) and say so in the status block.
39
39
 
40
40
  5. **Update RECORD.md.** After drafting, extract what the new draft establishes on page. Update `.manuscript/RECORD.md` with only durable, reader-visible changes:
41
41
  - established facts, claims, events, definitions, procedures, objects, relationships, or constraints
@@ -51,7 +51,7 @@ Require `.manuscript/plans/{N}-*-PLAN.md` files to exist. If none exist, also ch
51
51
 
52
52
  7. **Update STATE.md:** mark unit as drafted, note word count, flag any voice-check issues.
53
53
 
54
- 8. **Tell the writer:** "Drafted {unit} {N}: X words across Y {atomic_units}. Voice consistency: Z%. Updated RECORD.md with what the draft established. Ready for editor review? Run `/scr:editor-review N` or `/scr:next`."
54
+ 8. **Tell the writer:** "Drafted {unit} {N}: X words across Y {atomic_units}. Voice consistency: Z% (the voice-checker Overall score for this unit; omit this figure if the voice-check could not run). Updated RECORD.md with what the draft established. Ready for editor review? Run `/scr:editor-review N` or `/scr:next`."
55
55
 
56
56
  ## Agent and Automation Status
57
57
 
@@ -341,7 +341,7 @@ title: "[title from config.json]"
341
341
  subtitle: "[subtitle if available]"
342
342
  author:
343
343
  - name: "[author from config.json]"
344
- language: "[language from config.json, default en-US]"
344
+ lang: "[language from config.json, default en-US]"
345
345
  rights: "Copyright [year] [author]. All rights reserved."
346
346
  date: "[current year]"
347
347
  description: "[description if available]"
@@ -0,0 +1,128 @@
1
+ ---
2
+ description: Run the guided first-run path through install checks, demo proof, starter choices, and next commands.
3
+ argument-hint: "[--proof] [--runtime <runtime>]"
4
+ ---
5
+
6
+ # First Run
7
+
8
+ You are guiding a writer through Scriveno's first 10 minutes. This command is the executable version of Quick Proof: it should orient the writer, check what can be checked, point at the demo, and keep the next choice small.
9
+
10
+ Use the shared CLI guide first when local command execution is available:
11
+
12
+ ```bash
13
+ scriveno first-run --project "$PWD"
14
+ node bin/install.js first-run --project "$PWD"
15
+ ```
16
+
17
+ If the CLI is unavailable, follow the same steps manually from this command file.
18
+
19
+ ## What to do
20
+
21
+ 1. **Run the first-run guide.** Prefer `scriveno first-run --project "$PWD"`. It reports project status, runtime command shapes, demo steps, proof artifacts, and installed-surface checks.
22
+ 2. **Show the runtime-specific command shape.**
23
+ - Claude Code: `/scr-first-run`, `/scr-demo`, `/scr-next`
24
+ - Standard slash-command runtimes: `/scr:first-run`, `/scr:demo`, `/scr:next`
25
+ - Codex: `$scr-first-run`, `$scr-demo`, `$scr-next`
26
+ - Guided targets: use the generated local-MCP setup notes
27
+ 3. **If no project exists, recommend the demo first.** The safest first action is `/scr:demo`, because it creates `./scriveno-demo/` instead of touching the writer's actual project.
28
+ 4. **Point at proof artifacts.** Name these files:
29
+ - `docs/quick-proof.md`
30
+ - `docs/starter-sets.md`
31
+ - `data/proof/first-run/README.md`
32
+ - `data/proof/runtime-parity/README.md`
33
+ - `data/proof/watchmaker-flow/README.md`
34
+ - `data/proof/voice-dna/README.md`
35
+ 5. **Keep the first action small.** Do not list the full command catalog. Offer one recommended command and at most three alternatives.
36
+
37
+ ## Recommended first-run path
38
+
39
+ Use this sequence when the writer wants to try Scriveno immediately:
40
+
41
+ ```text
42
+ /scr:demo
43
+ cd scriveno-demo
44
+ /scr:next
45
+ /scr:draft 5
46
+ /scr:editor-review 5
47
+ ```
48
+
49
+ Translate those command shapes for the active host when needed:
50
+
51
+ - Claude Code: `/scr-demo`, `/scr-next`, `/scr-draft 5`, `/scr-editor-review 5`
52
+ - Codex: `$scr-demo`, `$scr-next`, `$scr-draft 5`, `$scr-editor-review 5`
53
+
54
+ ## Output shape
55
+
56
+ Use this structure:
57
+
58
+ ```markdown
59
+ First-run path:
60
+ 1. Check the installed surface.
61
+ 2. Open the demo.
62
+ 3. Inspect the proof bundle.
63
+ 4. Draft the planned fifth unit.
64
+ 5. Review the result.
65
+
66
+ Recommended now:
67
+ - `/scr:demo`: Create the isolated watchmaker demo project.
68
+
69
+ Proof artifacts:
70
+ - `data/proof/first-run/README.md`
71
+ - `data/proof/runtime-parity/README.md`
72
+ - `data/proof/voice-dna/README.md`
73
+
74
+ Next commands:
75
+ - `/scr:demo`: Create the isolated demo project.
76
+ - `/scr:next`: Let Scriveno inspect the current project state.
77
+ - `/scr:new-work`: Start a real project instead of using the demo.
78
+ ```
79
+
80
+ ## Agent and automation status
81
+
82
+ `/scr:first-run` is read-only unless the writer explicitly chooses a follow-up command such as `/scr:demo`.
83
+
84
+ ```text
85
+ Automation status:
86
+ Trigger: /scr:first-run
87
+ Spawned agents:
88
+ - none
89
+ Candidate agents:
90
+ - drafter after /scr:draft 5 in the demo
91
+ - voice-checker after drafting
92
+ Local operations:
93
+ - first-run guide: read-only
94
+ - status sweep: read-only when the CLI is available
95
+ Candidate local helpers:
96
+ - scriveno smoke --json
97
+ - scriveno routes --json
98
+ Manual gates:
99
+ - writer chooses whether to create the demo or start a real project
100
+ Auto-invoked:
101
+ - none
102
+ Why: first-run orients and recommends; it does not mutate files until the writer picks a follow-up command
103
+ ```
104
+
105
+ ## Response Contract
106
+
107
+ Every writer-facing response must end with one to four next-command suggestions. Each suggestion must include a short explanation of what that path will do.
108
+
109
+ Use this format:
110
+
111
+ ```markdown
112
+ Next commands:
113
+ - `/scr:...`: One short sentence explaining what this path will do.
114
+ - `/scr:...`: One short sentence explaining what this alternate path will do.
115
+ ```
116
+
117
+ If exactly one path is clearly best, provide one suggestion. If two, three, or four useful paths exist, show them as alternatives. Do not force a linear path when the writer has a real choice.
118
+
119
+ If the writer seems unsure or no specific next command is obvious, include this default option:
120
+
121
+ ```markdown
122
+ Next commands:
123
+ - `/scr:next`: Inspect the project state and choose the right next step.
124
+ ```
125
+
126
+ ## Tone
127
+
128
+ Calm, direct, and proof-first. The writer is trying to decide whether Scriveno is worth trusting, so show concrete paths and files instead of broad claims.
@@ -34,12 +34,13 @@ You are helping the user navigate Scriveno commands. Load Scriveno's installed/s
34
34
 
35
35
  ## The "getting started" view (no project yet)
36
36
 
37
- Ask the user what they want to do. Don't list 170 commands -- show them this:
37
+ Ask the user what they want to do. Don't list all 113 commands -- show them this:
38
38
 
39
39
  ```
40
40
  Scriveno -- ready to start.
41
41
 
42
42
  What do you want to do?
43
+ /scr:first-run Run the guided first-run proof path
43
44
  /scr:new-work Start a new project (novel, runbook, screenplay, paper, etc.)
44
45
  /scr:demo Explore a pre-built sample project first
45
46
  /scr:import <file> Bring in an existing manuscript
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Perform a line-level prose quality pass with inline annotations.
3
+ argument-hint: "[N]"
3
4
  ---
4
5
 
5
6
  # /scr:line-edit -- Line-Level Prose Quality Pass
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Spawn parallel analysis agents to understand an existing manuscript's voice, structure, characters, and themes.
3
+ argument-hint: "[area]"
3
4
  ---
4
5
 
5
6
  # /scr:map-manuscript -- Analyze Existing Manuscript
@@ -199,7 +199,7 @@ Determine text direction from language code:
199
199
 
200
200
  Set the appropriate direction for Pandoc and Typst output:
201
201
  - Pandoc: `--variable dir=rtl` or `--variable dir=ltr`
202
- - Typst: Uses `text-dir` parameter (already prepared in Phase 5 template)
202
+ - Typst: the book interior template reads the Pandoc `dir` variable set above to orient text
203
203
 
204
204
  #### 5d. Number Formatting
205
205
 
@@ -238,7 +238,7 @@ title: "[translated title]"
238
238
  subtitle: "[translated subtitle]"
239
239
  author:
240
240
  - name: "[author name]"
241
- language: "[lang code]"
241
+ lang: "[lang code]"
242
242
  dir: "[ltr or rtl]"
243
243
  rights: "Copyright [year] [author]. [Translated rights statement]."
244
244
  date: "[current year]"
@@ -274,6 +274,7 @@ pandoc .manuscript/translation/{lang}/assembled-manuscript.md \
274
274
  pandoc .manuscript/translation/{lang}/assembled-manuscript.md \
275
275
  -o .manuscript/output/translations/{lang}/manuscript-{lang}.pdf \
276
276
  --pdf-engine=typst \
277
+ --template=data/export-templates/scriveno-book.typst \
277
278
  --metadata-file=.manuscript/translation/{lang}/metadata.yaml \
278
279
  --toc --toc-depth=1 \
279
280
  -V dir={ltr|rtl}
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Build a complete character profile through guided interactive interview.
3
+ argument-hint: "<name>"
3
4
  ---
4
5
 
5
6
  # /scr:new-character -- Interactive Character Creation
@@ -69,7 +69,7 @@ Always create `RECORD.md` from `templates/RECORD.md` without renaming it. It is
69
69
  Write `.manuscript/config.json` by starting from `templates/config.json` and filling the project-specific values. The generated config must include the shared settings blocks that later commands read:
70
70
  ```json
71
71
  {
72
- "scriveno_version": "2.0.12",
72
+ "scriveno_version": "2.6.0",
73
73
  "work_type": "<chosen>",
74
74
  "group": "<group>",
75
75
  "command_unit": "<unit>",
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: Scan drafted prose for AI-generated patterns and unintentional similarity to published works.
3
+ argument-hint: "[N]"
3
4
  ---
4
5
 
5
6
  # /scr:originality-check -- AI Pattern & Similarity Scan