Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "writing-method",
"metadata": {
"description": "Reader-oriented writing and documentation workflows."
"description": "Reader-oriented writing and documentation workflows, plus an experimental story-writing family."
},
"owner": {
"name": "Peter Hense"
Expand Down
8 changes: 5 additions & 3 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "writing-method",
"version": "0.3.0",
"description": "Reader-oriented writing, documentation workflows, local PDF delivery and narrated tutorial videos.",
"version": "0.4.0",
"description": "Reader-oriented writing, documentation workflows, local PDF delivery and narrated tutorial videos, plus an experimental story-writing family kept separate from them.",
"author": {
"name": "Peter Hense"
},
Expand All @@ -13,7 +13,9 @@
"review",
"pdf",
"video",
"tutorial"
"tutorial",
"story",
"fiction"
],
"displayName": "Peter's Writing Method",
"homepage": "https://github.com/phense/writing-method",
Expand Down
12 changes: 7 additions & 5 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "writing-method",
"version": "0.3.0",
"description": "Reader-oriented writing, documentation workflows, local PDF delivery and narrated tutorial videos.",
"version": "0.4.0",
"description": "Reader-oriented writing, documentation workflows, local PDF delivery and narrated tutorial videos, plus an experimental story-writing family kept separate from them.",
"author": {
"name": "Peter Hense"
},
Expand All @@ -12,13 +12,15 @@
"review",
"pdf",
"video",
"tutorial"
"tutorial",
"story",
"fiction"
],
"skills": "./skills/",
"interface": {
"displayName": "Peter's Writing Method",
"shortDescription": "Writing, documentation and local PDF workflows",
"longDescription": "Reader-oriented planning, authoring, review and PDF delivery with shared method support.",
"shortDescription": "Documentation, PDF and tutorial video workflows; story writing (experimental)",
"longDescription": "Reader-oriented planning, authoring, review, PDF delivery and narrated tutorial videos with shared method support. A separate, experimental story family covers fiction in a story vault; its manuscripts follow the story's voice sheet, not the documentation rules.",
"developerName": "Peter Hense",
"category": "Developer Tools",
"capabilities": [
Expand Down
65 changes: 61 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
type: reference
audience: Authors and maintainers familiar with their coding assistant and Git
version: 0.3.0
version: 0.4.0
---
# Writing Method

Writing Method provides reader-oriented writing, documentation planning, review, local PDF delivery and narrated tutorial videos for Claude, Codex and OpenCode. Install it on its own or alongside [Engineering Method](https://github.com/phense/engineering-method). Both bundle shared support from [Method Core](https://github.com/phense/method-core); no sibling checkout is needed at runtime.
Writing Method provides reader-oriented writing, documentation planning, review, local PDF delivery and narrated tutorial videos for Claude, Codex and OpenCode. A separate, experimental family of skills supports story writing; see [Story writing (experimental)](#story-writing-experimental). Install it on its own or alongside [Engineering Method](https://github.com/phense/engineering-method). Both bundle shared support from [Method Core](https://github.com/phense/method-core); no sibling checkout is needed at runtime.

The three repositories remain under `phense`, share the `agent-methods` topic and have independent Issues and pull requests. Report a writing behavior here, an engineering behavior in Engineering Method, and shared adapter/state/playbook behavior in Method Core.

Expand All @@ -18,6 +18,7 @@ The three repositories remain under `phense`, share the `agent-methods` topic an
| Explain and instruct | explaining-concepts, writing-procedures, empathic-troubleshooting |
| Keep prose and documents consistent | human-prose-drafting, terminology-guard, visual-placeholders |
| Script, produce and review narrated tutorial videos | tutorial-video-scripting, presentation-video-production, presentation-video-review |
| Write stories (experimental, separate family) | story-bootstrap, story-worldbuilding, story-characters, story-architecture, story-drafting, story-canon-review, story-voice-review, story-craft-research, story-video-scripting |
| Shared support from Core | project-backlog, verification-before-completion, requesting-code-review, receiving-code-review, using-git-worktrees, dispatching-parallel-agents, playbook-authoring, playbook-review |

Describe the outcome to your assistant. A small wording edit needs focused editing; a standalone document uses authoring and self-review; a coherent document set uses planning, authoring and review. PDF generation follows content review and offers two layouts: a single-sided one for short documents and a book layout with parts, mirrored pages and a running head for long manuals. A tutorial video is scripted, produced and reviewed in that order; see [Narrated tutorial videos](#narrated-tutorial-videos). Playbooks support concrete publication/export operations when their decisions or recovery needs warrant one; ordinary writing does not automatically create one.
Expand Down Expand Up @@ -50,6 +51,62 @@ What the method enforces, from measurements of earlier videos:

The video tools need Node with npm, `ffmpeg` and `ffprobe` in addition to Python. They are checked and named when missing, not installed.

## Story writing (experimental)

The **story family** is a second set of skills, for fiction: long serials, light novels and short pieces. Think of two workbenches in one workshop. Documentation is built at one and stories at the other, and the tools of one bench are not carried to the other. The reason is that the two kinds of text want opposite things. A how-to guide should be plain, complete and predictable. A chapter may use fragments, repetition and withheld information on purpose.

Each story lives in its own directory with its own Git repository, called a **story vault**. The vault holds the brief, the **voice sheet** (how this story's prose sounds: viewpoint, tense, distance, tone), the world and character notes, the plans and the manuscript.

| Purpose | Skill |
|---|---|
| Start or resume a story vault | story-bootstrap |
| Build the world, its history and institutions | story-worldbuilding |
| Design characters and their voice cards | story-characters |
| Plan the whole story, arcs, volumes and chapters | story-architecture |
| Draft chapters, in-world documents and paratext | story-drafting |
| Check a chapter against the accepted canon | story-canon-review |
| Judge chapters against the voice sheet | story-voice-review |
| Study craft sources and existing works | story-craft-research |
| Script a narrated video from an accepted chapter | story-video-scripting |

### Which rules apply to which text

The rule set is chosen for each piece of text, not for the session or the subject. Talking about a story is still an ordinary reply.

| Text | Mode | Governed by |
|---|---|---|
| Story prose, in-world text such as a letter or manual inside the story, afterword and blurb, a listening edition, the narration of a story video | manuscript | The story's voice sheet, then the story rules. Nothing from the documentation skills. |
| Any other note in a story vault or study vault: brief, world entry, chapter card, review, study note | working note | The story skills. Plain notes without the story's voice and without didactic structure. |
| Everything else: every reply to you, a vault's `README.md`, documentation, tutorial videos | reader-oriented | The rules of the sections above, unchanged |

The full rule, including how a vault is recognized and when drafting is permitted, is in [writing mode](shared/policies/writing-mode.md).

### Start a story

1. Copy the vault starter `templates/story-vault/` from this plugin to a new directory outside the plugin.
2. Run `git init` in the new directory.
3. Open your assistant in that directory and ask it to start a story with your premise.

The assistant marks the vault as a story, gives it a story ID and asks for the form (long or short) and the publication profile, which may stay unset. Check: the frontmatter of `00-project/brief.md` now reads `kind: story`. Drafting starts only after viewpoint, tense and distance are set in `00-project/voice.md`; until then the assistant leads you to a voice trial instead of writing a chapter.

### Narrated story videos

An accepted chapter, a range of chapters or a short piece can become a narrated video: an audiobook with pictures. The work is split by who owns what. The story family owns the text: `story-video-scripting` turns the accepted manuscript into the script of a video project. `presentation-video-production` and `presentation-video-review` voice, render and check that script and never restyle it.

The narration comes in one of two **editions**. A `verbatim` edition reads the accepted manuscript word for word, only cut into scenes and lines at sentence boundaries. A `listening` edition contains additions or changes for the ear; each one is your decision, and it is stored beside the manuscript, which stays unchanged. A video that explains a story's world to its readers is a tutorial video and stays with `tutorial-video-scripting`.

No video has been produced with this path. How invented names are pronounced and where the pictures come from are not designed yet: the existing pronunciation list is used as it is, and a scene's picture is a plain description in the script.

### Limits

- **Routing is statistical.** The tests prove that names, exclusion sentences and links are in place. Whether an assistant then picks the right family for a request is a probability, not a guarantee.
- **Produced text is not measured.** No check reads a chapter for documentation habits, or a reply for a story's voice.
- **No story pilot exists.** The skills are structurally checked and have not been proven on a real story. Light-novel figures such as volume length are left unset, not asserted.
- **No story video exists.** The script check and the routing expectations for story videos are tested; nothing has been voiced or rendered from a story script.
- **Host routing is checked once, not measured as a rate.** In the last full run each of the 24 routing cases under `evals/shared/triggers/` ran once per host: Claude passed 24 of 24, Codex 22 of 24. The two Codex failures, repeated twice, are a marketing clip correctly sent to focused editing with the video production skill reported as supporting (1 of 3 passed), and a draft request in a study vault where Codex names `story-drafting` and not `story-craft-research` as primary (0 of 3 passed); the harness cannot see that the draft is declined. Eleven unscripted German requests without any skill name loaded the expected skill in 9 of 11 cases on Claude and 11 of 11 on Codex, once each. The record, including three expectations or prompts changed after seeing a result, is in `docs/specs/WM-003-story-family/rehearsal.md`. OpenCode was not exercised.

The family originated in a private research workspace. That workspace's research notes and its studies of existing works are not part of this plugin.

## Installation

Prerequisites: a supported Claude or Codex CLI, Git, and Python 3.11 or newer for state tools. Clone this repository to a retained directory. These commands register the local checkout as a marketplace; run the pair for your host:
Expand All @@ -66,7 +123,7 @@ claude plugin install writing-method@writing-method

For a session-scoped Claude test use `claude --plugin-dir /absolute/path/to/writing-method`. For OpenCode, run `python3 scripts/install-opencode --check` from this checkout, inspect the proposed path, then repeat without `--check`. It installs an owned `writing-method.js` loader pointing to this retained directory. Gemini support is deferred until its adapter is verified.

Restart the assistant session after installation and inspect its plugin inventory for `writing-method` 0.3.0. An installed listing proves discovery; a live authoring request is separate behavior evidence. With both methods installed, use the invoking method's namespace for shared support, such as `writing-method:playbook-authoring`, and run one copy.
Restart the assistant session after installation and inspect its plugin inventory for `writing-method` 0.4.0. An installed listing proves discovery; a live authoring request is separate behavior evidence. With both methods installed, use the invoking method's namespace for shared support, such as `writing-method:playbook-authoring`, and run one copy.

## Project state and updates

Expand All @@ -84,6 +141,6 @@ python3 scripts/validate-plugin
python3 -m unittest discover -s tests -t . -v
```

These checks cover installed-relative resources, source integrity, state behavior, isolated package use and OpenCode coexistence. PDF generation additionally needs the tools/fonts described by `documentation-pdf`; this plugin does not install them automatically. Video tests that need `ffmpeg` are skipped where it is absent; the timing, script-check and pronunciation logic is tested without it. A rendered sample video and a provider run are separate evidence, recorded in `docs/specs/WM-001-presentation-video/rehearsal.md`. Source tests and native plugin installation do not prove model routing, content quality or provider availability. No live Claude result is claimed during an outage.
These checks cover installed-relative resources, source integrity, state behavior, isolated package use and OpenCode coexistence. PDF generation additionally needs the tools/fonts described by `documentation-pdf`; this plugin does not install them automatically. Video tests that need `ffmpeg` are skipped where it is absent; the timing, script-check and pronunciation logic is tested without it. A rendered sample video and a provider run are separate evidence, recorded in `docs/specs/WM-001-presentation-video/rehearsal.md`. Source tests and native plugin installation do not prove model routing, content quality or provider availability. The story family is experimental; its limits are listed under [Story writing (experimental)](#limits). No live Claude result is claimed during an outage.

Original code uses the [MIT License](LICENSE). Adapted Humanizer material is listed in [third-party notices](THIRD_PARTY_NOTICES.md); shared adaptations retain [Core notices](CORE_NOTICES.md). The project is independent of the named assistant providers.
14 changes: 14 additions & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@ Copyright (c) 2026 Peter Hense. Original code is MIT licensed. Shared adapted fi

`templates/openspec/escalation.md`: original when distributed.

## Story family

The story family is original writing under the same MIT licence: the skills
under `skills/story-*/`, the files under `shared/story/`, the vault starter
under `templates/story-vault/` and `shared/policies/writing-mode.md`.

Its craft guidance is informed by published sources on fiction craft and by
the maintainer's own analysis of existing works. `shared/story/sources.md`
indexes every cited source with its title, author or speaker, address and the
kind of evidence it gives. No third-party text is vendored: the sources are
attributed as influences, their wording is not reproduced, and the private
study notes are not distributed. The family therefore has no entry under
`sources` in `third-party/sources.lock.json`.

## Humanizer

Source ID: `humanizer`
Expand Down
Loading
Loading