Skip to content
Back to skills

Ncp Author

ASecurity

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 mean...

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
businessgobashnodegitbackend

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill ncp-author --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ncp Author?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ncp Author
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-ncp-author/badge)](https://www.skillsdirectory.com/skills/aibot88-ncp-author)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ncp-author
description: >-
  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.
metadata:
  category: narrative-systems
  source: user
  status: active
  version: "0.4.0"
  date_added: "2026-05-03"
  upstream_pin: "0b9ab1223d3822a49eddc139bcdf2669aa067734"
  upstream_repo: "https://github.com/narrative-first/narrative-context-protocol"
  granularity: "Path A (single skill)"
  language: "EN primary, DE supplementary"
  triggers: >-
    NCP, narrative context protocol, ncp-schema, ncp-author, .ncp.json,
    storyform JSON, ideation JSON, complete-storyform-template, convert to NCP,
    validate NCP, NCP authoring, schema/ncp-schema.json, NCP storyform,
    Subtxt export, NCP file, Storyform anlegen, NCP-Datei validieren,
    NCP-Skelett, Storyform aus Outline
skill_bundles_tools:
  - tools/dramatica-nav
---

# ncp-author

**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.

## What this skill does

`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](https://github.com/narrative-first/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.

## Dramatica Integration 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 in [`AGENTS.md § Narrative Ontology`](../../AGENTS.md), 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.

## When to use this skill

Use when:

- The user mentions the Narrative Context Protocol or NCP by name
- The user wants to author, edit, validate, or audit a `.ncp.json` / `*.json` file conforming to `ncp-schema.json`
- The user wants to convert an existing outline, storyform, or pitch into NCP structure
- The user wants to know which `appreciation`, `narrative_function`, `dynamic`, or `vector` enum value is canonical for a given Storyform slot
- The user wants the schema-level required-fields map for any NCP entity
- The user is exporting from Subtxt / Dramatica software and wants the output validated against the spec

Do **not** use when:

- The user wants Dramatica theory explanation independent of NCP — defer to `dramatica-theory`
- The user is mid-flow in a German narrative session and needs Dynamic Pair reasoning — defer to `dramatica-vocabulary`
- The user wants prose drafting, scene writing, or chapter generation — NCP doesn't hold prose
- The user wants to update SPEC.md itself — defer to `spec-skill`
- The user wants to build a runnable agentic loop from this skill's SPEC — defer to `ralph-skill`

## Workflow

### Quick path (one-shot authoring)

1. Copy `assets/template-empty.json` (minimal valid skeleton) or `assets/template-storyform.json` (pre-filled with the canonical Storypoint slot list per throughline) as the starting point
2. Read `references/authoring-order.md` to orient on the 10-stage practical workflow
3. Open `references/schema-cheatsheet.md` for required-field maps for each entity touched
4. Use `references/canonical-vocabulary.md` whenever filling an `appreciation`, `narrative_function`, `dynamic`, `vector`, or `throughline` field — this gives the canonical enum string
   - **[→ dramatica-theory]** If the user asks *why* a particular Class, Type, or Variation is the right choice theoretically, delegate; ncp-author only knows the *name*, not the *reason*
   - **[→ dramatica-vocabulary]** If filling an Element-level slot and the Dynamic Pair or KTAD position matters, delegate before writing the value into the JSON
5. Run `node scripts/validate.js path/to/your.json` early and often
6. **[→ dramatica-vocabulary]** Run a Dynamic-Pair coherence check: confirm no throughline carries both halves of a dynamic pair at the Element level, and that KTAD positions are consistent
7. Cross-check with `references/validation-rules.md` §8 checklist before declaring complete

### Audit path (validate an existing document)

1. Run schema validation: `node scripts/validate.js path/to/doc.json` (PASS/FAIL with first error)
2. Walk `references/validation-rules.md` §1–§6 in order
3. **[→ dramatica-vocabulary]** Run meaning-layer audit: for each Element-level slot, check Dynamic Pair consistency and KTAD position. Schema validation cannot catch a value that is a valid enum string but is theoretically incoherent with the adjacent slots.
4. **[→ dramatica-theory]** If throughline-level choices (Class assignments, MC Resolve, Story Outcome/Judgment) look questionable, delegate for a structural diagnosis before marking the document clean.
5. Use the checklist at §8 as final gate
6. Report findings; do not silently fix

### Conversion path (existing outline → NCP)

1. Identify the source format (free-text outline, beat sheet, Subtxt export, etc.)
2. **[→ dramatica-theory]** If the source outline has no explicit Storyform, reconstruct one before mapping to NCP. Use `dramatica-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.
3. Map source structures to NCP entities using the table in `references/schema-cheatsheet.md` ("Mapping NCP entities to where novel-craft artifacts go")
4. Start from `assets/template-storyform.json` and fill slots in the order from `references/authoring-order.md`
5. **[→ dramatica-vocabulary]** At Element-level slots, confirm Dynamic Pair assignments before committing; use `dramatica-vocabulary`'s `element-quads.md` and `storyform-mechanics.md` as the authority
6. Preserve traceability: keep `id` references stable so source-to-NCP mappings are reproducible

## Setup

The validator depends on `ajv`. Run once per skill install:

```bash
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).

## Files in this skill

```
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.
```

## How to read this skill

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`.

## Project memory

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).

## Limits and caveats

1. **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.

2. **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.

3. **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.

4. **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.

5. **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.

Files in this skill

  • SKILL.md14 KB
  • source.json1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.