scriveno 2.0.7 → 2.0.9
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 +26 -5
- package/bin/install.js +76 -2
- package/commands/scr/health.md +6 -0
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/next.md +17 -0
- package/commands/scr/progress.md +17 -0
- package/commands/scr/save.md +6 -0
- package/commands/scr/scan.md +6 -0
- package/commands/scr/session-report.md +17 -0
- package/commands/scr/sync.md +11 -0
- package/data/CONSTRAINTS.json +3082 -701
- package/docs/architecture.md +19 -3
- package/docs/auto-invoke-policy.md +17 -0
- package/docs/configuration.md +1 -1
- package/docs/getting-started.md +12 -0
- package/docs/release-notes.md +68 -0
- package/docs/runtime-support.md +24 -1
- package/lib/auto-invoke-engine.js +906 -0
- package/package.json +1 -1
- package/templates/config.json +1 -10
package/README.md
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
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
|
+
[](docs/runtime-support.md#shared-auto-invoke-engine)
|
|
9
|
+
[](docs/auto-invoke-policy.md)
|
|
8
10
|
|
|
9
11
|
**[scriveno on npm](https://www.npmjs.com/package/scriveno)**
|
|
10
12
|
|
|
@@ -18,6 +20,9 @@ Scriveno is best understood as **AI-native longform writing software built aroun
|
|
|
18
20
|
|
|
19
21
|
```bash
|
|
20
22
|
npx scriveno@latest
|
|
23
|
+
|
|
24
|
+
# Optional project status check
|
|
25
|
+
scriveno status --project .
|
|
21
26
|
```
|
|
22
27
|
|
|
23
28
|
---
|
|
@@ -68,6 +73,21 @@ If you want the shortest proof-first route, read [Proof Artifacts](docs/proof-ar
|
|
|
68
73
|
|
|
69
74
|
---
|
|
70
75
|
|
|
76
|
+
## Proactive status
|
|
77
|
+
|
|
78
|
+
Scriveno ships a shared read-only status engine for every installer target. The public CLI is:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
scriveno status --project .
|
|
82
|
+
scriveno status . --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
It inspects disk evidence such as `.manuscript/`, `STATE.md`, `CONTEXT.md`, plan files, drafts, review coverage, notes, revision proposals, translation work, publishing prerequisites, exports, and history, then recommends the safest next command. The engine does not mutate files and does not spawn agents by itself. Command surfaces such as `/scr-next`, `/scr:next`, `/scr:progress`, `/scr:session-report`, and `/scr:sync` call it when local command execution is available, then fall back to embedded markdown logic when a host cannot run Node. See [Auto-Invoke Policy](docs/auto-invoke-policy.md) and [Runtime Support](docs/runtime-support.md#shared-auto-invoke-engine).
|
|
86
|
+
|
|
87
|
+
The status report separates `Candidate agents`, `Candidate local helpers`, and `Manual gates`. That means Scriveno can say when a route is ready for a drafter, voice-checker, translator, continuity-checker, or review worker, when a deterministic helper such as save or scan is enough, and when writer approval is required for publishing, export overwrites, track merges, or undo.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
71
91
|
## The Voice DNA system
|
|
72
92
|
|
|
73
93
|
Scriveno's core insight: drafted prose should sound like *you*, not like an AI. Before drafting begins, `/scr:profile-writer` builds a detailed voice profile across 15+ dimensions:
|
|
@@ -171,6 +191,7 @@ Scriveno is built on five principles:
|
|
|
171
191
|
- [Contributing](docs/contributing.md) -- How to add commands, agents, work types, and templates
|
|
172
192
|
- [Architecture](docs/architecture.md) -- How Scriveno works under the hood
|
|
173
193
|
- [Configuration](docs/configuration.md) -- Package, installer, constraints, and `.manuscript/config.json` surfaces
|
|
194
|
+
- [Auto-Invoke Policy](docs/auto-invoke-policy.md) -- Shared status engine, route intelligence lanes, visible automation status, and agent-spawn boundaries
|
|
174
195
|
- [Development](docs/development.md) -- Contributor workflow for changing commands, templates, installer logic, and docs
|
|
175
196
|
- [Testing](docs/testing.md) -- What the test suite covers and which checks to run before shipping
|
|
176
197
|
- [Release Notes](docs/release-notes.md) -- Public summary of what changed between package releases
|
|
@@ -195,7 +216,7 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
195
216
|
- **Perplexity Desktop** (guided local-MCP setup)
|
|
196
217
|
- **Generic (SKILL.md)** fallback
|
|
197
218
|
|
|
198
|
-
**Installer baseline:** `Node.js >=20.0.0` for `npx scriveno@latest
|
|
219
|
+
**Installer baseline:** `Node.js >=20.0.0` for `npx scriveno@latest`, `bin/install.js`, and `scriveno status --project .`. For new installs, use a currently supported LTS such as Node.js 24; Node.js 20 is now a compatibility floor, not the recommended fresh-install target.
|
|
199
220
|
|
|
200
221
|
**Support note:** Claude Code is the primary reference runtime and now installs a flat `/scr-*` command surface. The environments listed above are installer targets, not a claim that every host runtime has verified parity today. Codex currently installs a skill-native `$scr-*` surface, while Perplexity Desktop is a guided local-MCP target rather than a writable command runtime. See the [runtime compatibility matrix](docs/runtime-support.md) for install type, support level, and verification status.
|
|
201
222
|
|
|
@@ -203,11 +224,11 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
203
224
|
|
|
204
225
|
## Status
|
|
205
226
|
|
|
206
|
-
**Version:** 2.0.
|
|
227
|
+
**Version:** 2.0.9
|
|
207
228
|
|
|
208
|
-
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,
|
|
229
|
+
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, and route-intelligence lanes through `2.0.9`. See [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
|
|
209
230
|
|
|
210
|
-
Version `2.0.
|
|
231
|
+
Version `2.0.9` 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.
|
|
211
232
|
|
|
212
233
|
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).
|
|
213
234
|
|
package/bin/install.js
CHANGED
|
@@ -6,6 +6,7 @@ const os = require('os');
|
|
|
6
6
|
const readline = require('readline');
|
|
7
7
|
const crypto = require('crypto');
|
|
8
8
|
const architecturalProfiles = require('../lib/architectural-profiles.js');
|
|
9
|
+
const autoInvokeEngine = require('../lib/auto-invoke-engine.js');
|
|
9
10
|
|
|
10
11
|
const PKG_ROOT = path.join(__dirname, '..');
|
|
11
12
|
const PKG = require('../package.json');
|
|
@@ -820,6 +821,8 @@ function printHelp() {
|
|
|
820
821
|
console.log(BANNER);
|
|
821
822
|
console.log(`Usage:
|
|
822
823
|
scriveno
|
|
824
|
+
scriveno status --project .
|
|
825
|
+
scriveno status . --json
|
|
823
826
|
scriveno --runtimes codex,claude-code --global --writer --silent
|
|
824
827
|
|
|
825
828
|
Options:
|
|
@@ -834,6 +837,12 @@ Options:
|
|
|
834
837
|
--help Show this help text
|
|
835
838
|
--version Show the Scriveno package version
|
|
836
839
|
|
|
840
|
+
Status options:
|
|
841
|
+
status Inspect a project and recommend the next command
|
|
842
|
+
--project <path> Project root to inspect (default: current directory)
|
|
843
|
+
--trigger <name> Status trigger label (default: scriveno status)
|
|
844
|
+
--json Print machine-readable status JSON
|
|
845
|
+
|
|
837
846
|
Runtime keys:
|
|
838
847
|
${Object.keys(RUNTIMES).join(', ')}
|
|
839
848
|
`);
|
|
@@ -841,6 +850,7 @@ Runtime keys:
|
|
|
841
850
|
|
|
842
851
|
function parseArgs(argv) {
|
|
843
852
|
const options = {
|
|
853
|
+
command: 'install',
|
|
844
854
|
runtimeKeys: [],
|
|
845
855
|
installDetected: false,
|
|
846
856
|
isGlobal: null,
|
|
@@ -848,8 +858,44 @@ function parseArgs(argv) {
|
|
|
848
858
|
silent: false,
|
|
849
859
|
showHelp: false,
|
|
850
860
|
showVersion: false,
|
|
861
|
+
statusProjectRoot: process.cwd(),
|
|
862
|
+
statusTrigger: 'scriveno status',
|
|
863
|
+
statusJson: false,
|
|
851
864
|
};
|
|
852
865
|
|
|
866
|
+
if (argv[0] === 'status') {
|
|
867
|
+
options.command = 'status';
|
|
868
|
+
for (let i = 1; i < argv.length; i++) {
|
|
869
|
+
const arg = argv[i];
|
|
870
|
+
if (arg === '--help' || arg === '-h') {
|
|
871
|
+
options.showHelp = true;
|
|
872
|
+
} else if (arg === '--version' || arg === '-v') {
|
|
873
|
+
options.showVersion = true;
|
|
874
|
+
} else if (arg === '--json') {
|
|
875
|
+
options.statusJson = true;
|
|
876
|
+
} else if (arg === '--project') {
|
|
877
|
+
const value = argv[i + 1];
|
|
878
|
+
if (!value) throw new Error('--project requires a value for status');
|
|
879
|
+
options.statusProjectRoot = value;
|
|
880
|
+
i++;
|
|
881
|
+
} else if (arg.startsWith('--project=')) {
|
|
882
|
+
options.statusProjectRoot = arg.slice('--project='.length);
|
|
883
|
+
} else if (arg === '--trigger') {
|
|
884
|
+
const value = argv[i + 1];
|
|
885
|
+
if (!value) throw new Error('--trigger requires a value');
|
|
886
|
+
options.statusTrigger = value;
|
|
887
|
+
i++;
|
|
888
|
+
} else if (arg.startsWith('--trigger=')) {
|
|
889
|
+
options.statusTrigger = arg.slice('--trigger='.length);
|
|
890
|
+
} else if (arg.startsWith('-')) {
|
|
891
|
+
throw new Error(`Unknown status argument "${arg}"`);
|
|
892
|
+
} else {
|
|
893
|
+
options.statusProjectRoot = arg;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
return options;
|
|
897
|
+
}
|
|
898
|
+
|
|
853
899
|
function addRuntimeList(value) {
|
|
854
900
|
for (const key of String(value).split(',').map((item) => item.trim()).filter(Boolean)) {
|
|
855
901
|
if (!Object.prototype.hasOwnProperty.call(RUNTIMES, key)) {
|
|
@@ -901,6 +947,16 @@ function parseArgs(argv) {
|
|
|
901
947
|
return options;
|
|
902
948
|
}
|
|
903
949
|
|
|
950
|
+
function runStatus({ projectRoot, trigger, json }) {
|
|
951
|
+
const analysis = autoInvokeEngine.analyzeProject(projectRoot);
|
|
952
|
+
if (json) {
|
|
953
|
+
console.log(JSON.stringify(analysis, null, 2));
|
|
954
|
+
} else {
|
|
955
|
+
console.log(autoInvokeEngine.formatReport(analysis, { trigger }));
|
|
956
|
+
}
|
|
957
|
+
return analysis;
|
|
958
|
+
}
|
|
959
|
+
|
|
904
960
|
function resolveInstallRequest(parsed, detectedRuntimeKeys, { isTTY }) {
|
|
905
961
|
const hasRuntimeDirective = parsed.runtimeKeys.length > 0 || parsed.installDetected;
|
|
906
962
|
const hasModifierOverrides = parsed.isGlobal !== null || parsed.developerMode !== null;
|
|
@@ -1324,6 +1380,15 @@ async function main() {
|
|
|
1324
1380
|
return;
|
|
1325
1381
|
}
|
|
1326
1382
|
|
|
1383
|
+
if (parsed.command === 'status') {
|
|
1384
|
+
runStatus({
|
|
1385
|
+
projectRoot: parsed.statusProjectRoot,
|
|
1386
|
+
trigger: parsed.statusTrigger,
|
|
1387
|
+
json: parsed.statusJson,
|
|
1388
|
+
});
|
|
1389
|
+
return;
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1327
1392
|
const detectedRuntimeKeys = Object.entries(RUNTIMES).filter(([, runtime]) => runtime.detect()).map(([key]) => key);
|
|
1328
1393
|
const installRequest = resolveInstallRequest(parsed, detectedRuntimeKeys, { isTTY: Boolean(process.stdin.isTTY) });
|
|
1329
1394
|
|
|
@@ -1545,11 +1610,13 @@ function installGuidedRuntime(runtime, isGlobal, dataDir, log) {
|
|
|
1545
1610
|
function writeSharedAssets(dataDir, runtimeKeys, isGlobal, developerMode, installMode, log) {
|
|
1546
1611
|
fs.mkdirSync(path.join(dataDir, 'templates'), { recursive: true });
|
|
1547
1612
|
fs.mkdirSync(path.join(dataDir, 'data'), { recursive: true });
|
|
1613
|
+
fs.mkdirSync(path.join(dataDir, 'lib'), { recursive: true });
|
|
1548
1614
|
const templateResult = copyDirWithPreservation(path.join(PKG_ROOT, 'templates'), path.join(dataDir, 'templates'));
|
|
1549
1615
|
const dataResult = copyDirWithPreservation(path.join(PKG_ROOT, 'data'), path.join(dataDir, 'data'));
|
|
1616
|
+
const libResult = copyDirWithPreservation(path.join(PKG_ROOT, 'lib'), path.join(dataDir, 'lib'));
|
|
1550
1617
|
const sum = (r) => r.fresh + r.replaced + r.backedUp;
|
|
1551
|
-
log(` ${c('green', 'OK')} ${sum(templateResult)} templates + ${sum(dataResult)} data files -> ${c('dim', dataDir)}`);
|
|
1552
|
-
const totalBackedUp = templateResult.backedUp + dataResult.backedUp;
|
|
1618
|
+
log(` ${c('green', 'OK')} ${sum(templateResult)} templates + ${sum(dataResult)} data files + ${sum(libResult)} lib files -> ${c('dim', dataDir)}`);
|
|
1619
|
+
const totalBackedUp = templateResult.backedUp + dataResult.backedUp + libResult.backedUp;
|
|
1553
1620
|
if (totalBackedUp > 0) {
|
|
1554
1621
|
log(` ${c('yellow', 'i')} Preserved ${totalBackedUp} user-modified file(s) as .backup.<timestamp>`);
|
|
1555
1622
|
}
|
|
@@ -1706,6 +1773,7 @@ module.exports = {
|
|
|
1706
1773
|
RUNTIMES,
|
|
1707
1774
|
parseArgs,
|
|
1708
1775
|
resolveInstallRequest,
|
|
1776
|
+
runStatus,
|
|
1709
1777
|
collectCommandEntries,
|
|
1710
1778
|
collectAgentEntries,
|
|
1711
1779
|
assertNoSkillNameCollisions,
|
|
@@ -1754,4 +1822,10 @@ module.exports = {
|
|
|
1754
1822
|
// Per-work-type pitfall packs
|
|
1755
1823
|
listPitfallPacks: architecturalProfiles.listPitfallPacks,
|
|
1756
1824
|
getPitfallPackPath: architecturalProfiles.getPitfallPackPath,
|
|
1825
|
+
// Shared proactive status engine
|
|
1826
|
+
autoInvokeEngine,
|
|
1827
|
+
analyzeProject: autoInvokeEngine.analyzeProject,
|
|
1828
|
+
formatAutoInvokeReport: autoInvokeEngine.formatReport,
|
|
1829
|
+
getRuntimeAgentSupport: autoInvokeEngine.getRuntimeAgentSupport,
|
|
1830
|
+
listRuntimeAgentSupport: autoInvokeEngine.listRuntimeAgentSupport,
|
|
1757
1831
|
};
|
package/commands/scr/health.md
CHANGED
|
@@ -96,9 +96,15 @@ Automation status:
|
|
|
96
96
|
Trigger: /scr:health {flags}
|
|
97
97
|
Spawned agents:
|
|
98
98
|
- none
|
|
99
|
+
Candidate agents:
|
|
100
|
+
- none
|
|
99
101
|
Local operations:
|
|
100
102
|
- health checks run: {count}
|
|
101
103
|
- repairs applied: {count}
|
|
104
|
+
Candidate local helpers:
|
|
105
|
+
- /scr:scan or /scr:save when health detects repairable drift
|
|
106
|
+
Manual gates:
|
|
107
|
+
- repairs that require writer confirmation
|
|
102
108
|
Auto-invoked:
|
|
103
109
|
- none
|
|
104
110
|
Why: health uses deterministic local checks; non-deterministic repairs stay manual
|
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.0.9",
|
|
73
73
|
"work_type": "<chosen>",
|
|
74
74
|
"group": "<group>",
|
|
75
75
|
"command_unit": "<unit>",
|
package/commands/scr/next.md
CHANGED
|
@@ -8,6 +8,17 @@ You are routing the writer to the right next step in their workflow. This comman
|
|
|
8
8
|
|
|
9
9
|
Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:next` is Level 1 only by default: it may inspect disk state and suggest the safest next command, but it does not spawn agents or mutate files unless autopilot mode explicitly routes into another command.
|
|
10
10
|
|
|
11
|
+
Use the shared executable engine before falling back to manual inspection. Try the first available path:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
scriveno status --project "$PWD" --trigger /scr:next
|
|
15
|
+
node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:next
|
|
16
|
+
node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:next
|
|
17
|
+
node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:next
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
This engine is installed into Scriveno shared assets for every runtime, including Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic skill fallback. If the engine is not present, perform the read-only sweep below.
|
|
21
|
+
|
|
11
22
|
## What to do
|
|
12
23
|
|
|
13
24
|
1. **Check for `.manuscript/` directory.** If none, the writer has no project. Run `/scr:new-work` to start one (or tell them to).
|
|
@@ -123,9 +134,15 @@ Automation status:
|
|
|
123
134
|
Trigger: /scr:next
|
|
124
135
|
Spawned agents:
|
|
125
136
|
- none
|
|
137
|
+
Candidate agents:
|
|
138
|
+
- <recommended agent route or none>
|
|
126
139
|
Local operations:
|
|
127
140
|
- proactive sweep: read-only
|
|
128
141
|
- state route computed: yes/no
|
|
142
|
+
Candidate local helpers:
|
|
143
|
+
- <recommended helper or none>
|
|
144
|
+
Manual gates:
|
|
145
|
+
- <writer-owned route or none>
|
|
129
146
|
Auto-invoked:
|
|
130
147
|
- <recommended command>: yes/no
|
|
131
148
|
Why: /scr:next routes from disk state; it only runs follow-up commands under autopilot or explicit writer intent
|
package/commands/scr/progress.md
CHANGED
|
@@ -9,6 +9,17 @@ You are showing the writer their current project progress.
|
|
|
9
9
|
|
|
10
10
|
Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:progress` is read-only: it can count, compare, and recommend, but it must not spawn agents or write files.
|
|
11
11
|
|
|
12
|
+
Use the shared executable engine before falling back to manual counts. Try the first available path:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
scriveno status --project "$PWD" --trigger /scr:progress
|
|
16
|
+
node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:progress
|
|
17
|
+
node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:progress
|
|
18
|
+
node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:progress
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
This engine is installed into Scriveno shared assets for every runtime, including Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic skill fallback. If the engine is not present, perform the read-only progress logic below.
|
|
22
|
+
|
|
12
23
|
## Prerequisites
|
|
13
24
|
|
|
14
25
|
- `.manuscript/STATE.md` must exist
|
|
@@ -40,9 +51,15 @@ Automation status:
|
|
|
40
51
|
Trigger: /scr:progress
|
|
41
52
|
Spawned agents:
|
|
42
53
|
- none
|
|
54
|
+
Candidate agents:
|
|
55
|
+
- <recommended agent route or none>
|
|
43
56
|
Local operations:
|
|
44
57
|
- progress counts computed: yes/no
|
|
45
58
|
- proactive sweep: read-only
|
|
59
|
+
Candidate local helpers:
|
|
60
|
+
- <recommended helper or none>
|
|
61
|
+
Manual gates:
|
|
62
|
+
- <writer-owned route or none>
|
|
46
63
|
Auto-invoked:
|
|
47
64
|
- none
|
|
48
65
|
Why: progress is read-only; it recommends next commands without mutating files
|
package/commands/scr/save.md
CHANGED
|
@@ -80,11 +80,17 @@ Automation status:
|
|
|
80
80
|
Trigger: /scr:save
|
|
81
81
|
Spawned agents:
|
|
82
82
|
- none
|
|
83
|
+
Candidate agents:
|
|
84
|
+
- none
|
|
83
85
|
Local operations:
|
|
84
86
|
- STATE.md updated: yes/no
|
|
85
87
|
- CONTEXT.md regenerated: yes/no
|
|
86
88
|
- HISTORY.log appended: yes/no
|
|
87
89
|
- manuscript files saved: yes/no
|
|
90
|
+
Candidate local helpers:
|
|
91
|
+
- /scr:scan if saved state and disk still disagree
|
|
92
|
+
Manual gates:
|
|
93
|
+
- none
|
|
88
94
|
Auto-invoked:
|
|
89
95
|
- /scr:next route computed for CONTEXT.md: yes/no
|
|
90
96
|
Why: save uses deterministic local bookkeeping, not a spawned agent
|
package/commands/scr/scan.md
CHANGED
|
@@ -272,10 +272,16 @@ Automation status:
|
|
|
272
272
|
Trigger: /scr:scan {flags}
|
|
273
273
|
Spawned agents:
|
|
274
274
|
- none
|
|
275
|
+
Candidate agents:
|
|
276
|
+
- none
|
|
275
277
|
Local operations:
|
|
276
278
|
- drift checks run: {count}
|
|
277
279
|
- auto-fixes applied: {count}
|
|
278
280
|
- HISTORY.log appended: yes/no
|
|
281
|
+
Candidate local helpers:
|
|
282
|
+
- /scr:save if scan repairs changed state
|
|
283
|
+
Manual gates:
|
|
284
|
+
- fixes that require writer confirmation
|
|
279
285
|
Auto-invoked:
|
|
280
286
|
- none
|
|
281
287
|
Why: scan compares disk state locally; fixes require writer confirmation
|
|
@@ -9,6 +9,17 @@ You are summarizing the writer's current session. Your job is to compute actiona
|
|
|
9
9
|
|
|
10
10
|
Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:session-report` is read-only and does not spawn agents.
|
|
11
11
|
|
|
12
|
+
Use the shared executable engine for the read-only status portion before computing session-specific metrics. Try the first available path:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
scriveno status --project "$PWD" --trigger /scr:session-report
|
|
16
|
+
node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:session-report
|
|
17
|
+
node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:session-report
|
|
18
|
+
node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:session-report
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
This engine is installed into Scriveno shared assets for every runtime, including Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic skill fallback. If the engine is not present, continue with the read-only report logic below.
|
|
22
|
+
|
|
12
23
|
## What to do
|
|
13
24
|
|
|
14
25
|
1. **Read STATE.md "Last actions" table** to get the full history of actions.
|
|
@@ -55,9 +66,15 @@ Automation status:
|
|
|
55
66
|
Trigger: /scr:session-report
|
|
56
67
|
Spawned agents:
|
|
57
68
|
- none
|
|
69
|
+
Candidate agents:
|
|
70
|
+
- <recommended agent route or none>
|
|
58
71
|
Local operations:
|
|
59
72
|
- session metrics computed: yes/no
|
|
60
73
|
- quality pass summary computed: yes/no
|
|
74
|
+
Candidate local helpers:
|
|
75
|
+
- <recommended helper or none>
|
|
76
|
+
Manual gates:
|
|
77
|
+
- <writer-owned route or none>
|
|
61
78
|
Auto-invoked:
|
|
62
79
|
- none
|
|
63
80
|
Why: session-report summarizes disk state without mutating files
|
package/commands/scr/sync.md
CHANGED
|
@@ -11,6 +11,17 @@ This command is for local runtime drift: Codex skills, Codex command mirrors, Cl
|
|
|
11
11
|
|
|
12
12
|
This is not a package upgrade command. Do not fetch a newer Scriveno release, do not change npm dependencies, and do not modify manuscript content. If the writer wants a newer published package version, that belongs to a future `/scr:update` command.
|
|
13
13
|
|
|
14
|
+
The auto-invoke status engine is a shared runtime asset. It is copied for every install target and can be checked with one of these paths:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
scriveno status --project "$PWD" --trigger /scr:sync
|
|
18
|
+
node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:sync
|
|
19
|
+
node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:sync
|
|
20
|
+
node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:sync
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Use it for read-only project status and next-command reasoning. Use `bin/install.js` for runtime file synchronization.
|
|
24
|
+
|
|
14
25
|
## Prerequisites
|
|
15
26
|
|
|
16
27
|
- Node.js >=20.0.0
|