Help us improve
Share bugs, ideas, or general feedback.
From agency
Schema cheatsheet, canonical vocabulary (463 appreciations + 144 narrative_functions), validation rules, 10-stage authoring workflow, and runnable schema validator for NCP (ncp-schema.json v1.3.0). Actively co-invokes dramatica-theory (storyform decisions, why a Class/Type/Variation is correct) and dramatica-vocabulary (Dynamic-Pair validation, KTAD coherence, Element-Quad checks) at explicit workflow checkpoints — this skill owns JSON-IO and enum-compliance; the two Dramatica skills own meaning. Use when the user mentions NCP, narrative-context-protocol, ncp-schema, .ncp.json, 'convert to NCP', 'validate NCP', 'storyform JSON', or Subtxt export. Trigger auch auf Deutsch — Storyform anlegen, NCP-Datei validieren, NCP-Skelett, Storyform aus Outline. Do NOT use for general Dramatica theory (defer to dramatica-theory or dramatica-vocabulary) or prose drafting. Path A per TODO T-1.
npx claudepluginhub netzkontrast/agency-backupsHow this skill is triggered — by the user, by Claude, or both
Slash command
/agency:ncp-authorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Status:** MVP, version 0.4.0. Single-skill scope committed (Path A per TODO T-1). The full target architecture — eight phase routers and ~14 sub-skills in a hexagonal pattern — is described in `SPEC.md` and remains an optional later refactor; not currently planned. See `TODO.md` for the open queue.
SPEC.mdTODO.mdassets/template-empty.jsonassets/template-storyform.jsonpackage-lock.jsonpackage.jsonreadme.mdreferences/authoring-order.mdreferences/canonical-vocabulary.mdreferences/related-skills.mdreferences/schema-cheatsheet.mdreferences/validation-rules.mdscripts/validate.jsupstream/CONTRIBUTING.mdupstream/COPYRIGHT.mdupstream/HISTORY.mdupstream/LICENSE.mdupstream/README.mdupstream/SPECIFICATION.mdupstream/UPSTREAM_AGENTS.mdCreates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
Status: MVP, version 0.4.0. Single-skill scope committed (Path A per TODO T-1). The full target architecture — eight phase routers and ~14 sub-skills in a hexagonal pattern — is described in SPEC.md and remains an optional later refactor; not currently planned. See TODO.md for the open queue.
ncp-author helps an agent (or a human collaborating with an agent) produce, validate, and iterate JSON documents conforming to the open-source Narrative Context Protocol — the JSON-Schema-based interchange format for Dramatica-style storyform data.
The skill is the JSON-IO and schema-compliance layer. It deliberately does NOT duplicate Dramatica theory reasoning or Dynamic-Pair logic — those live in dramatica-theory and dramatica-vocabulary respectively, and this skill actively delegates to them at explicit checkpoints in each workflow path. See references/related-skills.md for the full delegation map.
Call these skills at the checkpoints marked [→ dramatica-theory] or [→ dramatica-vocabulary] below. Don't improvise reasoning that belongs to them. For mechanical lookups (dynamic-pair partner, Quad membership, alias resolution, NCP enum closure), prefer
tools/dramatica-nav/nav.py— it answers in JSON without loading the source chapters. The cross-skill load contract is documented inAGENTS.md § Narrative Ontology, with rule NO.2 binding NCP authoring directly: every Dramatica-flavored slot MUST resolve through the canonical ontology ID before the value is written into the JSON.
| NCP entity / question | Skill to invoke | Navigator shortcut |
|---|---|---|
| Why is this Class / Type / Variation correct? (theory reasoning) | dramatica-theory | (prose; conceptual) |
| Storyform diagnosis — flat draft, unmotivated characters, act structure | dramatica-theory | (prose; conceptual) |
| Story Mind, Grand Argument Story, four throughlines — conceptual | dramatica-theory | (prose; conceptual) |
| Archetype definitions (Protagonist, Antagonist, Guardian …) | dramatica-theory | nav.py by-id arc.<slug> |
| Dynamic Pair check on any Element or Variation | dramatica-vocabulary | nav.py by-id <id> --include-pairs |
| KTAD coherence — Knowledge/Thought/Ability/Desire matrix | dramatica-vocabulary | nav.py by-ktad K|T|A|D |
| Element-Quad lookup (which 4 Elements share a Quad?) | dramatica-vocabulary | nav.py by-quad quad.<name>-el |
| Encoding-Vorschlag: abstract Element → concrete scene / lyric | dramatica-vocabulary | (prose; conceptual) |
| Konsistenz-Check gegen die 75 Dynamic Pairs | dramatica-vocabulary | nav.py by-pair <member-id> |
NCP enum value for an appreciation or narrative_function field | this skill (canonical-vocabulary.md) | nav.py by-ncp '<enum-string>' |
| Schema required-fields map, JSON validation, template population | this skill | tools/dramatica-nav/validate.py |
DE-Notiz — Schema-Felder bleiben Englisch (kanonisch). Die Skill-Anleitung ist EN-primär; deutschsprachige Sessions können trotzdem alle Workflows nutzen. Trigger und kanonische Slot-Namen werden bei Bedarf zweisprachig in den Reference-Dateien notiert.
Use when:
.ncp.json / *.json file conforming to ncp-schema.jsonappreciation, narrative_function, dynamic, or vector enum value is canonical for a given Storyform slotDo not use when:
dramatica-theorydramatica-vocabularyspec-skillralph-skillassets/template-empty.json (minimal valid skeleton) or assets/template-storyform.json (pre-filled with the canonical Storypoint slot list per throughline) as the starting pointreferences/authoring-order.md to orient on the 10-stage practical workflowreferences/schema-cheatsheet.md for required-field maps for each entity touchedreferences/canonical-vocabulary.md whenever filling an appreciation, narrative_function, dynamic, vector, or throughline field — this gives the canonical enum string
node scripts/validate.js path/to/your.json early and oftenreferences/validation-rules.md §8 checklist before declaring completenode scripts/validate.js path/to/doc.json (PASS/FAIL with first error)references/validation-rules.md §1–§6 in orderdramatica-theory's storyforming workflow (essential questions, Class assignments, eight dynamics) to produce a defensible storyform first — then use ncp-author to encode it into JSON.references/schema-cheatsheet.md ("Mapping NCP entities to where novel-craft artifacts go")assets/template-storyform.json and fill slots in the order from references/authoring-order.mddramatica-vocabulary's element-quads.md and storyform-mechanics.md as the authorityid references stable so source-to-NCP mappings are reproducibleThe validator depends on ajv. Run once per skill install:
cd <path-to-this-skill>
npm install
This creates node_modules/ next to package.json. The validator then works against any path (absolute or relative to your CWD).
ncp-author/
├── SKILL.md ← this file
├── SPEC.md ← target hexagonal architecture (not currently planned)
├── TODO.md ← open items, blocking decisions, build queue
├── package.json ← npm dependency stub (ajv) for validate.js
├── references/
│ ├── schema-cheatsheet.md ← required fields, common pitfalls
│ ├── canonical-vocabulary.md ← all enum lists (appreciations, narrative_functions, etc.)
│ ├── validation-rules.md ← semantic rules beyond JSON-Schema
│ ├── authoring-order.md ← 10-stage practical workflow
│ └── related-skills.md ← delegation map to dramatica-*, spec-skill, ralph-skill, novel-architect
├── scripts/
│ └── validate.js ← ajv wrapper, runs against pinned upstream schema
├── assets/
│ ├── template-empty.json ← minimal valid NCP skeleton (Stage 0 starting point)
│ └── template-storyform.json ← canonical Storypoint slot scaffold per throughline
└── upstream/ ← pinned snapshot of the NCP repo at 0b9ab12
├── _PINNED_AT.md
├── schema/ ← ncp-schema.json + .yaml (source of truth)
├── docs/ ← terminology references (perspectives, appreciations, narrative-functions, dynamics, vectors, dramatica-translation)
├── examples/ ← canonical valid + invalid examples
├── tests/ ← upstream's own validate-*.js
├── SPECIFICATION.md ← upstream NCP spec (~509 lines)
└── README.md, HISTORY.md, etc.
For a one-shot NCP authoring task: load SKILL.md (this file) + references/schema-cheatsheet.md + references/canonical-vocabulary.md. Other references load on demand.
For conceptual / design / architecture questions about NCP itself: also load references/related-skills.md and skim upstream/SPECIFICATION.md.
For "what's next" / iteration planning: load SPEC.md + TODO.md.
This skill is a co-authored artifact between Michael (sabbatical, GSD/spec-driven, Köln/Bonn) and Claude. Decisions made during co-authoring sessions land in Claude's memory at session end — see references/related-skills.md → memory-sync section.
The granularity question (T-1) is settled: Path A — single skill. Splitting into ncp-io + ncp-storyform + ncp-storyweaver (Path B) or the full hexagonal suite from SPEC §8 (Path C) remain available as later refactors but are not on the roadmap.
The language question (T-12) is settled: EN-primary with DE supplementary callouts for terminology and triggers. Schema fields stay English (canonical).
Quad / KTAD integrity is not validated here. NCP encodes appreciations and narrative_functions but not the Knowledge/Thought/Ability/Desire matrix Dramatica uses to constrain Element selection. Always delegate KTAD coherence to dramatica-vocabulary — use its element-quads.md and storyform-mechanics.md files. This is a required step in the Quick and Audit paths, not an optional one.
Validator is a thin wrapper. scripts/validate.js adds nothing the upstream tests/validate-file.js doesn't already do; it just relocates the entry point to a stable, skill-internal path. Same Ajv settings (strict: false, allErrors: true), same PASS/FAIL parity. If upstream's validator changes meaningfully, re-pin.
Upstream drift exists. At the pinned SHA, NCP's own example fixtures fail validation against the schema in this same SHA (legacy signpost field on Storybeats; narrative.title missing in some). The schema and SPEC are slightly desynchronized. references/validation-rules.md documents the tested rules; defer to schema when conflicts arise. The assets/template-storyform.json shipped with this skill has been cleaned of the legacy fields and validates clean against the pinned schema — use it rather than the upstream complete-storyform-template.json as a starting point.
Multi-narrative authoring (multiple Storyforms per Story) is supported by NCP but not exercised by this skill's references. Default to a single narrative until the multi-narrative case is needed.
Prose lives outside NCP. This skill scaffolds the structural intent only. Actual chapter/scene prose belongs in separate files with cross-references to moment.id. For Kohärenz-Protokoll-style novel work, novel-architect is the orchestrator; ncp-author is the structured-intent backend.