Skip to content

MANUSCRIPT_STATE.yaml schema

Every project that uses scriptorium maintains a MANUSCRIPT_STATE.yaml file at its root. Every skill reads it. The file is the gravity well that keeps the workflow coherent across sessions and across skills.

MANUSCRIPT_STATE.yaml is a local file in your repository. It is not uploaded to scriptorium, is not synced to any service, and is not shared with anyone unless you commit it to a shared branch. Whether you commit it at all is your call — a private fork, a private git remote, or .gitignore-ing the file are all reasonable choices.

The file exists so every skill can read the same declared state without you re-typing it each time. Skills like reviewer-simulation use the calibration fields (known_weaknesses, core_claims) to refrain from flagging items you have already chosen to acknowledge — the fields are inputs to the skill’s calibration, not disclosure targets for anyone else.

The canonical schema is schemas/manuscript-state.schema.json in the repo. Validate any file against it with:

Terminal window
scriptorium validate MANUSCRIPT_STATE.yaml
KeyRequiredPurpose
metanoScriptorium-side preferences, not properties of the manuscript: guidance_level (see Guidance level) and overrides (see below).
projectyesTitle, target type (manuscript / grant / review / …), target venue.
document_phaseyesWhere the document is in its lifecycle: outline → draft → review → revision → submission → post-submission → accepted.
core_claimsnoWhat the document is arguing. Critique skills test whether the prose supports each claim; transformation skills preserve them.
known_weaknessesnoLimitations the authors have already chosen to acknowledge. Reviewer-simulation will not flag these as fatal. Naming under review — see note below.
terminologynopreferred / forbidden lists and synonyms for normalization passes.
stylenotone[], voice (active / passive / mixed), audience.
constraintsnopreserve_citations, preserve_statistics, avoid_hype, max_word_count.
bibliographynoPaths to .bib / .json / .yaml bibliography files and primary format.
sectionsnoOptional explicit section manifest for multi-file projects (e.g. Quarto includes).
Terminal window
scriptorium init my-manuscript/

Writes a starter MANUSCRIPT_STATE.yaml with all top-level keys present and commented. Edit it to match your project, then scriptorium validate it.

Guards the author has chosen to override for this project. Each skill declares its guards in manifest.yaml; only policy and scope guards can be overridden. Author authority explains the guard kinds, the precedence and the “Overrides applied” line.

meta:
overrides:
- guard: citation-recommendations
skills: [citation-audit, gap-finder]
note: "Name verified papers for unsupported claims; I decide what to cite."
- guard: outline-phase
skills: ["*"]

overrides is an array. Each entry is an object with these keys and no others:

KeyRequiredTypeMeaning
guardyesstring, kebab-caseA guard id declared under guards: in a skill’s manifest.yaml.
skillsyesnon-empty array of unique stringsSkill names the override applies to, each kebab-case, or "*" for every skill that declares the guard.
notenostringFree text for the author’s own record. Skills don’t interpret it.

A per-run answer from the author takes precedence over these entries, and the skill still states the guard’s concern in one line.

Beyond the schema, scriptorium validate checks each entry against the guards the bundled skills declare. It rejects:

  • a guard id no bundled skill declares;
  • a guard of kind accuracy;
  • a skill listed in skills that does not declare the guard.

The field’s name is under review. Its function is calibration: it records limitations the author has already chosen to acknowledge so that downstream skills (most importantly reviewer-simulation and desk-rejection-risk) do not surface them as fresh fatal critiques the author would have to defend against. The field is a way of saying “I know about these; don’t make me re-litigate them.”

The current name reads to some authors as adversarial — particularly to first authors who reasonably feel that documenting “weaknesses” of their own paper in a file is the wrong default. The proposed replacement is acknowledged_limitations, which keeps the calibration semantics and removes the adversarial framing. The rename is tracked in issue #62 and is scheduled for a dedicated schema-migration PR (it touches the schema, all templates, ~15 skill files, and a test fixture, so it lands as its own change rather than buried in a documentation PR).

Until the rename ships, both names refer to the same field; the migration PR will add a transitional alias rather than a breaking change.

See Design — the shared-state contract for why this file exists and what skills are required to do with it.