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.
- package/README.md +12 -6
- package/agents/voice-checker.md +10 -0
- package/bin/install.js +91 -2
- package/commands/scr/autopilot-publish.md +1 -1
- package/commands/scr/autopilot-translate.md +5 -6
- package/commands/scr/autopilot.md +3 -3
- package/commands/scr/beta-reader.md +6 -3
- package/commands/scr/build-ebook.md +1 -1
- package/commands/scr/build-print.md +2 -2
- package/commands/scr/continuity-check.md +1 -0
- package/commands/scr/copy-edit.md +1 -0
- package/commands/scr/demo.md +1 -0
- package/commands/scr/dialogue-audit.md +1 -0
- package/commands/scr/discussion-questions.md +1 -0
- package/commands/scr/draft.md +2 -2
- package/commands/scr/export.md +1 -1
- package/commands/scr/first-run.md +128 -0
- package/commands/scr/help.md +2 -1
- package/commands/scr/line-edit.md +1 -0
- package/commands/scr/map-manuscript.md +1 -0
- package/commands/scr/multi-publish.md +3 -2
- package/commands/scr/new-character.md +1 -0
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/originality-check.md +1 -0
- package/commands/scr/pacing-analysis.md +1 -0
- package/commands/scr/polish.md +1 -0
- package/commands/scr/quick-write.md +4 -1
- package/commands/scr/sensitivity-review.md +1 -0
- package/commands/scr/synopsis.md +1 -0
- package/commands/scr/theme-tracker.md +1 -0
- package/commands/scr/timeline.md +1 -0
- package/commands/scr/track.md +2 -0
- package/commands/scr/translate.md +1 -1
- package/commands/scr/voice-check.md +1 -0
- package/data/CONSTRAINTS.json +11 -1
- package/data/export-templates/scriveno-book.typst +2 -2
- package/data/export-templates/scriveno-chapbook.typst +1 -1
- package/data/export-templates/scriveno-picturebook.typst +9 -0
- package/data/export-templates/scriveno-stageplay.typst +14 -4
- package/data/proof/first-run/README.md +96 -0
- package/data/proof/runtime-parity/README.md +48 -0
- package/docs/architecture.md +6 -3
- package/docs/command-reference.md +39 -23
- package/docs/configuration.md +28 -3
- package/docs/contributing.md +2 -2
- package/docs/drafter-quality.md +1 -1
- package/docs/getting-started.md +4 -1
- package/docs/proof-artifacts.md +11 -0
- package/docs/quick-proof.md +23 -2
- package/docs/release-notes.md +61 -0
- package/docs/route-graph.md +2 -2
- package/docs/runtime-support.md +4 -3
- package/docs/sacred-texts.md +1 -1
- package/docs/shipped-assets.md +2 -0
- package/docs/starter-sets.md +8 -0
- package/docs/translation.md +7 -11
- package/docs/voice-dna.md +4 -4
- package/docs/work-types.md +1 -1
- package/lib/track-safety.js +72 -0
- package/package.json +1 -1
- package/templates/config.json +1 -1
package/README.md
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/aihxp/scriveno/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](https://www.npmjs.com/package/scriveno)
|
|
7
7
|
[](https://www.npmjs.com/package/scriveno)
|
|
8
8
|
[](docs/runtime-support.md#shared-auto-invoke-engine)
|
|
9
9
|
[](docs/auto-invoke-policy.md)
|
|
10
10
|
[](docs/runtime-support.md#runtime-smoke-and-agent-checks)
|
|
11
11
|
[](docs/auto-invoke-policy.md#safe-apply-and-audit-commands)
|
|
12
|
+
[](docs/quick-proof.md)
|
|
12
13
|
[](docs/quick-proof.md)
|
|
13
14
|
[](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
|
|
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
|
|
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
|
|
249
|
+
**Version:** 2.6.0
|
|
244
250
|
|
|
245
|
-
Scriveno's core command surface is stable across
|
|
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
|
|
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
|
|
package/agents/voice-checker.md
CHANGED
|
@@ -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 =
|
|
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
|
|
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
|
|
60
|
-
- CJK languages
|
|
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 --
|
|
127
|
-
-
|
|
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
|
-
- **
|
|
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,
|
|
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
|
|
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 --
|
|
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
|
|
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 --
|
|
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 `
|
|
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 `
|
|
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:
|
|
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
|
|
package/commands/scr/demo.md
CHANGED
|
@@ -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
|
package/commands/scr/draft.md
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
package/commands/scr/export.md
CHANGED
|
@@ -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
|
-
|
|
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.
|
package/commands/scr/help.md
CHANGED
|
@@ -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
|
|
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
|
|
@@ -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:
|
|
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
|
-
|
|
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}
|
package/commands/scr/new-work.md
CHANGED
|
@@ -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
|
|
72
|
+
"scriveno_version": "2.6.0",
|
|
73
73
|
"work_type": "<chosen>",
|
|
74
74
|
"group": "<group>",
|
|
75
75
|
"command_unit": "<unit>",
|