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
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "docs-editing",
"version": "0.3.0",
"description": "Human-facing documentation and content standards for AI assistants — technical writing, copy editing, marketing copy, SEO and AI citability, with claims grounded in cited evidence.",
"version": "0.4.0",
"description": "Human-facing documentation and content standards for AI assistants: technical writing, copy editing, AI-tell cleanup, marketing copy, SEO and AI citability, with claims grounded in cited evidence.",
"author": {
"name": "Cadasto B.V.",
"url": "https://github.com/Cadasto"
Expand Down
4 changes: 2 additions & 2 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "docs-editing",
"version": "0.3.0",
"description": "Human-facing documentation and content standards for AI assistants — technical writing, copy editing, marketing copy, SEO and AI citability, with claims grounded in cited evidence.",
"version": "0.4.0",
"description": "Human-facing documentation and content standards for AI assistants: technical writing, copy editing, AI-tell cleanup, marketing copy, SEO and AI citability, with claims grounded in cited evidence.",
"author": {
"name": "Cadasto B.V.",
"url": "https://github.com/Cadasto"
Expand Down
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Exclude from `git archive` (and similar export) bundles — maintainer / repo infra, not runtime plugin UX
# Exclude from `git archive` (and similar export) bundles: maintainer and repo infra, not runtime plugin UX
AGENTS.md export-ignore
.github/** export-ignore
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
- [ ] Cursor install tested locally when manifest, rule, or hook content changed (see [docs/install.md](../docs/install.md#cursor))
- [ ] Both manifests kept in sync when metadata changed: `.claude-plugin/plugin.json` and `.cursor-plugin/plugin.json`
- [ ] Rules cite `references/` rather than restating them; no rule duplicated across components
- [ ] **No unsourced claim added** — no invented statistics, testimonials, customer names, awards, urgency, or superlatives, in the components or in this repo's own docs (`references/claims-and-evidence.md`)
- [ ] **No unsourced claim added**: no invented statistics, testimonials, customer names, awards, urgency, or superlatives, in the components or in this repo's own docs (`references/claims-and-evidence.md`)
- [ ] Inventories and counts in README/AGENTS.md verified against the tree
- [ ] New or renamed component wired into the router **and** `hooks/session-start.sh` (the validator enforces this)
- [ ] Version bumped and [CHANGELOG.md](../CHANGELOG.md) updated (if component content changed) — see [docs/versioning.md](../docs/versioning.md)
- [ ] Version bumped and [CHANGELOG.md](../CHANGELOG.md) updated (if component content changed); see [docs/versioning.md](../docs/versioning.md)
104 changes: 53 additions & 51 deletions AGENTS.md

Large diffs are not rendered by default.

96 changes: 61 additions & 35 deletions CHANGELOG.md

Large diffs are not rendered by default.

53 changes: 27 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# Docs Editing Plugin

An AI plugin by **Cadasto B.V.** that teaches AI coding assistants **documentation, editing, and content standards** — technical writing, copy editing, marketing copy, SEO, and AI citability — through skills, two report-only review agents, session-start and prose-lint hooks, and a Cursor rule. It targets **both Claude Code and Cursor** from a single shared component set.
An AI plugin by **Cadasto B.V.** that teaches AI coding assistants **documentation, editing, and content standards** (technical writing, copy editing, marketing copy, SEO, and AI citability) through skills, two report-only review agents, session-start and prose-lint hooks, and a Cursor rule. It targets **both Claude Code and Cursor** from a single shared component set.

Pure Markdown + JSON. No build step and **no MCP server** to wire up.

## The rule that defines it

> **A claim that cannot be traced to a source does not ship.**

Generative copy tooling fails in one predictable way: asked to make a page more persuasive, it invents the persuasion — statistics, customer counts, testimonials, awards, urgency. Those are the conventional ingredients of landing-page copy, which is exactly why they get fabricated.
Generative copy tooling fails in one predictable way: asked to make a page more persuasive, it invents the persuasion: statistics, customer counts, testimonials, awards, urgency. Those are the conventional ingredients of landing-page copy, which is exactly why they get fabricated.

For a technical audience they also backfire. Developers, engineers, and clinicians read an unsourced number as evidence of unseriousness, so the growth-copy move that lifts conversion on a consumer page lowers trust here. Every skill in this plugin substitutes the same thing instead — the **observable mechanism**:
For a technical audience they also backfire. Developers, engineers, and clinicians read an unsourced number as evidence of unseriousness, so the growth-copy move that lifts conversion on a consumer page lowers trust here. Every skill in this plugin substitutes the same thing instead, the **observable mechanism**:

> ❌ "Cuts documentation review time by 40%."
> ✅ "Flags unsourced statistics, doc-kind bleed, and inventories that no longer match the tree."
Expand All @@ -19,7 +19,7 @@ Specific, checkable, and more convincing to this reader than a number they assum

## Install

**Claude Code** — from the Cadasto marketplace:
**Claude Code**, from the Cadasto marketplace:

```
/plugin marketplace add Cadasto/plugin-marketplace
Expand All @@ -30,45 +30,46 @@ Or load a local working copy for one session: `claude --plugin-dir /path/to/docs

**Cursor**: add this repository as a plugin (Settings → Plugins). See [`docs/install.md`](docs/install.md) for both hosts.

**Prerequisites** — none. The skills apply the standards by judgment with no tooling installed. To make the prose rules machine-enforced, install [Vale](https://vale.sh) and run `/docs-lint-setup` in your repo; see [Host toolchain](docs/install.md#host-toolchain-optional-but-recommended).
**Prerequisites**: none. The skills apply the standards by judgment with no tooling installed. To make the prose rules machine-enforced, install [Vale](https://vale.sh) and run `/docs-lint-setup` in your repo; see [Host toolchain](docs/install.md#host-toolchain-optional-but-recommended).

## Component surface

| Component | Status | Purpose |
|-----------|--------|---------|
| Skill `docs-editing` | shipped | Auto-invoked router: sends each prose task to the skill that owns it, and to the canonical rule in `references/`. |
| Skill `/technical-writing` | shipped | Author new documentation — picks exactly one document kind, reads the code before drafting, runs the commands it writes. |
| Skill `/technical-writing` | shipped | Author new documentation: picks exactly one document kind, reads the code before drafting, runs the commands it writes. |
| Skill `/copy-editing` | shipped | Tighten existing prose. Establishes the proofread / line-edit / structural contract first, then works large-to-small; claims pass runs first. |
| Skill `/humanize` | shipped | Remove AI tells from existing prose: signposting, staged contrasts, inflated significance, chatbot residue, decorative formatting. Restates without adding facts, keeps a human author's em dashes, and never judges authorship. |
| Skill `/marketing-copy` | shipped | Landing, feature, and announcement copy for technical audiences, with the anti-fabrication guardrails applied before drafting. |
| Skill `/seo-audit` | shipped | Technical and on-page audit of the **published** output — titles, descriptions, headings, canonicals, sitemap, redirects, orphans. |
| Skill `/ai-seo` | shipped | Citability by AI search — `llms.txt`, Markdown twins, validated JSON-LD, chunk-level self-containment. |
| Skill `/docs-lint-setup` | shipped | Scaffold `.vale.ini` and seed the vocabulary; never overwrites an existing config unprompted. |
| Skill `/seo-audit` | shipped | Technical and on-page audit of the **published** output: titles, descriptions, headings, canonicals, sitemap, redirects, orphans. |
| Skill `/ai-seo` | shipped | Citability by AI search: `llms.txt`, Markdown twins, validated JSON-LD, chunk-level self-containment. |
| Skill `/docs-lint-setup` | shipped | Scaffold `.vale.ini`, seed the vocabulary and add the `ai-tells` style; never overwrites an existing config unprompted. |
| Agent `prose-reviewer` | shipped | Report-only prose review for what linters cannot see: unsourced claims, doc-kind bleed, stale inventories, terminology drift. Ranked findings. |
| Agent `seo-auditor` | shipped | Report-only discoverability sweep over a docs tree or live site, with a mandatory coverage statement. |
| Session-start hook | shipped | Detects a docs/content workspace and prints one standards line plus the surface; dual-host. Silent in a repo with only a `README.md`. |
| Prose-lint hook | shipped | After each `.md` edit, reports `vale` alerts. Advisory — **never rewrites** — and opt-in: silent unless the repo carries its own `.vale.ini`. |
| References | shipped | The canonical rules, cited by every component: [claims and evidence](references/claims-and-evidence.md), [house style](references/style-guide.md), [document kinds](references/doc-types.md), [SEO checklist](references/seo-checklist.md), plus the reference `vale.ini` and its `vocab-accept.txt` seed. |
| Prose-lint hook | shipped | After each `.md` edit, reports `vale` alerts. Advisory (**never rewrites**) and opt-in: silent unless the repo carries its own `.vale.ini`. |
| References | shipped | The canonical rules, cited by every component: [claims and evidence](references/claims-and-evidence.md), [house style](references/style-guide.md), [document kinds](references/doc-types.md), [AI tells](references/ai-tells.md), [SEO checklist](references/seo-checklist.md), plus the reference `vale.ini`, its `vocab-accept.txt` seed and the `ai-tells` Vale style. |
| Cursor rule `docs-editing-context.mdc` | shipped | Markdown- and docs-scoped guidance mirroring the router for Cursor. |

## What it covers

**Prose written for people** — documentation, guides, references, page and marketing copy, changelogs, release notes, site metadata, `llms.txt`.
**Prose written for people**: documentation, guides, references, page and marketing copy, changelogs, release notes, site metadata, `llms.txt`.

**Not agent-instruction files.** `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, rule files, and skill or agent definitions are **read** for a repo's conventions and never authored or rewritten by these components. They address a model rather than a reader, which inverts three of the rules here — repetition becomes deliberate, hard constraints must stay hard, rigid parallel structure becomes a feature. A prose editor tuned for human readers quietly degrades them, so that genre belongs to tooling built for it. Also out of scope: source-code review, and specification/traceability authoring.
**Not agent-instruction files.** `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, rule files, and skill or agent definitions are **read** for a repo's conventions and never authored or rewritten by these components. They address a model rather than a reader, which inverts three of the rules here: repetition becomes deliberate, hard constraints must stay hard, rigid parallel structure becomes a feature. A prose editor tuned for human readers quietly degrades them, so that genre belongs to tooling built for it. Also out of scope: source-code review, and specification/traceability authoring.

## How it decides

Three principles, in priority order:

1. **Evidence before persuasion** — the rule above. It outranks every stylistic preference.
2. **One document kind per file** — most bad documentation is a tutorial and a reference merged into one page. Decide the kind first ([Diátaxis](https://diataxis.fr)-based; see [`references/doc-types.md`](references/doc-types.md)), then write only that kind.
3. **Deterministic beats prose** — whatever `vale` enforces, run the tool rather than reasoning it out by hand. Markdown *structure* has no shipped enforcer; those conventions are applied by judgment.
1. **Evidence before persuasion**: the rule above. It outranks every stylistic preference.
2. **One document kind per file**: most bad documentation is a tutorial and a reference merged into one page. Decide the kind first ([Diátaxis](https://diataxis.fr)-based; see [`references/doc-types.md`](references/doc-types.md)), then write only that kind.
3. **Deterministic beats prose**: whatever `vale` enforces, run the tool rather than reasoning it out by hand. Markdown *structure* has no shipped enforcer; those conventions are applied by judgment.

And one constraint above all three: **the repository being worked on outranks this plugin.** Every skill reads the target repo's `AGENTS.md`, style guide, and linter config first, and reports a conflict rather than silently overriding it — including any named ground-truth source for domain facts.
And one constraint above all three: **the repository being worked on outranks this plugin.** Every skill reads the target repo's `AGENTS.md`, style guide, and linter config first, and reports a conflict rather than silently overriding it, including any named ground-truth source for domain facts.

## Development

No build step — the plugin is pure Markdown + JSON. Validate locally:
No build step: the plugin is pure Markdown + JSON. Validate locally:

```bash
./scripts/validate.sh # manifests, parity, frontmatter, references, links, tool grants, doc sync
Expand All @@ -77,19 +78,19 @@ claude plugin validate . # manifest + component structure

Beyond the shared checks, the validator enforces four invariants specific to this plugin:

- **Reference resolution** — every `references/<file>` a component cites exists. The bundled references sit at the plugin root, so a stale path fails silently at load time instead of erroring.
- **Markdown links** — every relative link resolves, and every `#anchor` matches a heading in the file it points at.
- **Tool grants** — a component whose body prescribes a shell command declares `Bash`, and no agent declares `Write` or `Edit`. Advice a component cannot act on is a defect, not a nuance.
- **Doc sync** — every skill and agent is named in both the router body and the session-start surface.
- **Reference resolution**: every `references/<file>` a component cites exists. The bundled references sit at the plugin root, so a stale path fails silently at load time instead of erroring.
- **Markdown links**: every relative link resolves, and every `#anchor` matches a heading in the file it points at.
- **Tool grants**: a component whose body prescribes a shell command declares `Bash`, and no agent declares `Write` or `Edit`. Advice a component cannot act on is a defect, not a nuance.
- **Doc sync**: every skill and agent is named in both the router body and the session-start surface.

See [`docs/testing.md`](docs/testing.md) for the full validation story and [`AGENTS.md`](AGENTS.md) for contributor conventions.

## Documentation

- [docs/install.md](docs/install.md) — install on both hosts, and the optional linter toolchain
- [docs/testing.md](docs/testing.md) — validate and dogfood
- [docs/versioning.md](docs/versioning.md) — SemVer + release steps
- [docs/authoring.md](docs/authoring.md) — skill / agent / rule authoring conventions
- [docs/install.md](docs/install.md): install on both hosts, and the optional linter toolchain
- [docs/testing.md](docs/testing.md): validate and dogfood
- [docs/versioning.md](docs/versioning.md): SemVer + release steps
- [docs/authoring.md](docs/authoring.md): skill / agent / rule authoring conventions

## License

Expand Down
Loading
Loading