diff --git a/.agents/adr/0002-ship-as-a-claude-code-plugin.md b/.agents/adr/0002-ship-as-a-claude-code-plugin.md
index 8902f9d..1056836 100644
--- a/.agents/adr/0002-ship-as-a-claude-code-plugin.md
+++ b/.agents/adr/0002-ship-as-a-claude-code-plugin.md
@@ -26,3 +26,7 @@ The only robust ways to give Codex a single promoted-only path are (a) **restruc
- Every promoted skill has an entry in `.claude-plugin/plugin.json`'s `skills` array (this already stood as a `CLAUDE.md` rule; it now also gates the plugin's contents).
- `.claude-plugin/plugin.json`'s `version` tracks `package.json`'s version — bump both together on release. Claude uses the plugin `version` to decide when installed users see an update.
+
+## Update, 2026-08-05
+
+`mattpocock-skills` was accepted into **Claude Code's official marketplace** (`anthropics/claude-plugins-official`), which every Claude Code install has configured by default. `claude plugins install mattpocock-skills` is now the documented route, and the `marketplace add` → `install` path above is superseded. The official listing points at this repo's git URL and reads `.claude-plugin/plugin.json` directly, so it does not depend on `.claude-plugin/marketplace.json`; that file is retained only as a fallback for installing the repo directly (an unreleased commit, or a fork). The install wording lives in [.agents/install-block.md](../install-block.md).
diff --git a/.agents/install-block.md b/.agents/install-block.md
new file mode 100644
index 0000000..497b8b2
--- /dev/null
+++ b/.agents/install-block.md
@@ -0,0 +1,41 @@
+# The canonical install block
+
+One install story, one wording. `README.md`, `.changeset/*`, and every page under `docs/` say **this** and nothing else. If the install route changes, change it here first, then propagate.
+
+`mattpocock-skills` is listed in **Claude Code's official marketplace** (`claude-plugins-official`), which every Claude Code install has configured out of the box. There is no marketplace to add first, and official-marketplace plugins auto-update in the background.
+
+## Claude Code (the plugin)
+
+
+
+```bash
+claude plugins install mattpocock-skills
+```
+
+Or, from inside a session:
+
+```
+/plugin install mattpocock-skills
+```
+
+It's in Claude Code's official marketplace, so there's nothing to add first, and updates arrive automatically.
+
+
+
+## Codex, and other agents (skills.sh)
+
+The plugin is Claude Code only. Everywhere else, [skills.sh](https://skills.sh/mattpocock/skills) copies editable skill files into the project:
+
+```bash
+npx skills@latest add mattpocock/skills
+```
+
+For a single skill, `npx skills add mattpocock/skills --skill=`; to refresh it later, `npx skills update `.
+
+## The two routes are exclusive
+
+The plugin is a managed, read-only bundle you subscribe to. skills.sh writes files you own and edit. Installing both leaves the user with every skill twice — always say "pick one".
+
+## Not the install story
+
+`.claude-plugin/marketplace.json` makes the repo its own single-plugin marketplace (`/plugin marketplace add mattpocock/skills`, then `/plugin install mattpocock-skills@mattpocock`). The official listing supersedes it. It is kept as a fallback for installing the repo directly — an unreleased commit, or a fork — and is **not** documented to users.
diff --git a/.agents/writing-docs.md b/.agents/writing-docs.md
index c3bfc83..c071a55 100644
--- a/.agents/writing-docs.md
+++ b/.agents/writing-docs.md
@@ -14,6 +14,8 @@ There is no H1 — the published page takes its title from the slug.
Fill the template below. The **fixed frame** (Quickstart block, source link, `## What it does`, `## When to reach for it`, `## Where it fits`) appears on every page. The **adaptable middle** — `## Prerequisites` and the free-form substance sections — carries only what this particular skill earns; delete the rest.
+Install commands are not written per page. Copy them verbatim from [the canonical install block](./install-block.md) — it is the single source for how anyone installs these skills, and a page that words it differently is a page that tells a second story.
+
Quickstart:
diff --git a/.changeset/ship-as-claude-plugin.md b/.changeset/ship-as-claude-plugin.md
index b58c0d1..7452d37 100644
--- a/.changeset/ship-as-claude-plugin.md
+++ b/.changeset/ship-as-claude-plugin.md
@@ -2,11 +2,18 @@
"mattpocock-skills": minor
---
-Ship the skill set as a native **Claude Code plugin**. The repo is now its own single-plugin marketplace, so you can subscribe to the promoted skills as a managed, read-only bundle instead of copying editable files:
+Ship the skill set as a native **Claude Code plugin**, listed in Claude Code's official marketplace. You can now subscribe to the promoted skills as a managed, read-only bundle instead of copying editable files:
-```
-/plugin marketplace add mattpocock/skills
-/plugin install mattpocock-skills@mattpocock
+```bash
+claude plugins install mattpocock-skills
```
-`.claude-plugin/plugin.json` gains full marketplace metadata (version, description, author, license, keywords) and a sibling `.claude-plugin/marketplace.json` lists the plugin. `skills.sh` remains the universal installer (and the path for Codex and other harnesses today); a native Codex plugin is deferred — see `.agents/adr/0002-ship-as-a-claude-code-plugin.md` for why.
+Or, from inside a session:
+
+```
+/plugin install mattpocock-skills
+```
+
+There is no marketplace to add first — the official marketplace is configured by default.
+
+`.claude-plugin/plugin.json` carries the full plugin metadata (version, description, author, license, keywords) and the explicit list of promoted skills. `skills.sh` remains the universal installer (and the path for Codex and other harnesses today); a native Codex plugin is deferred — see `.agents/adr/0002-ship-as-a-claude-code-plugin.md` for why.
diff --git a/CLAUDE.md b/CLAUDE.md
index e2c7d0b..5ca428f 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -9,7 +9,7 @@ Skills are organized into bucket folders under `skills/`:
Every skill in `engineering/` or `productivity/` (the **promoted** buckets) must have a reference in the top-level `README.md` and an entry in `.claude-plugin/plugin.json`'s `skills` array (the Claude Code plugin ships exactly the promoted set). Skills in `misc/`, `personal/`, `in-progress/`, and `deprecated/` must not appear in either.
-The repo is also its own single-plugin Claude Code marketplace: `.claude-plugin/marketplace.json` lists the one `mattpocock-skills` plugin. When bumping the release version, keep `.claude-plugin/plugin.json`'s `version` in sync with `package.json`'s — Claude uses the plugin `version` to decide when installed users see an update. Run `claude plugin validate . --strict` after touching either manifest. Why a Claude plugin but not (yet) a Codex one lives in [.agents/adr/0002-ship-as-a-claude-code-plugin.md](./.agents/adr/0002-ship-as-a-claude-code-plugin.md).
+`mattpocock-skills` is listed in **Claude Code's official marketplace** (`claude-plugins-official`), which is the one install route we document — see [.agents/install-block.md](./.agents/install-block.md) for the exact wording, and use it verbatim rather than rewording it per page. The repo is *also* its own single-plugin marketplace (`.claude-plugin/marketplace.json` lists the one `mattpocock-skills` plugin), kept only as a fallback for installing the repo directly; the official listing does not depend on it. When bumping the release version, keep `.claude-plugin/plugin.json`'s `version` in sync with `package.json`'s — Claude uses the plugin `version` to decide when installed users see an update. Run `claude plugin validate . --strict` after touching either manifest. Why a Claude plugin but not (yet) a Codex one lives in [.agents/adr/0002-ship-as-a-claude-code-plugin.md](./.agents/adr/0002-ship-as-a-claude-code-plugin.md).
Each skill entry in the top-level `README.md` must link the skill name to its `SKILL.md`.