The docs pages carried 36 attributed opinions — "Matt's own answer",
"his position is", quoted replies from the author. A page is a
technical document about a skill, so the substance of each finding
stays and the attribution goes: "the fix is a direct instruction: …",
"the split comes down to session count".
Quotes from *users* stay, anonymous as they already were — those are
evidence about the skill in the wild rather than the author's view.
Records the rule in .agents/writing-docs.md so new pages don't
reintroduce it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Mirrors how the personal wiki is referenced: read
~/repos/ai/ai-coding-dictionary/dictionary/ where it exists, and fall
back to GitHub where it doesn't.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
writing-docs.md now tells doc authors to prefer the dictionary's word
over an invented synonym, and to link each term's first use on the page.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Encode a new rule in writing-docs.md: a multi-way branch goes in a table
or a list, never a paragraph the reader has to read in full.
- to-spec: trigger becomes a table; stop implying the tracker must be
remote, since local markdown is supported out of the box.
- prototype: wayfinder is the largest consumer (prototype is one of its
four decision-ticket types); the ask-matt handoff round trip is
demoted to one line.
- handoff: trigger becomes a table; dead prose throughout.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
An observed question still beats an invented one and the hunt is still
mandatory, but a thin skill may carry a question a reader would plainly
ask. The count stays honest to the evidence rather than padding every
page out to match a richer one.
An audit of all 25 docs pages found the two sections that carry the most
weight are the two the standard treated as optional. Only grill-me has a
Common questions section. Twelve pages have no It's working if, and
several that do use it for compliance checks on the skill's internals
rather than for signals the reader can see.
writing-docs.md now names the four-section spine, gates Common questions
on evidence -- the personal wiki where it exists on the machine, this
repo's issues, and CHANGELOG.md -- and raises the It's working if bar to
"checkable without opening SKILL.md". CLAUDE.md names the four sections
in the pointer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every docs page opened with a [Source](github.com/...) link, and
.agents/writing-docs.md told agents to add one to each new page.
Remove the line from all 25 pages, rewrite the one inline use in
ask-matt.md, and drop the rule from the page template, the fixed
frame list, and the "Done when" list so the links do not come back.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
aihero.dev renders an install widget above every skill page. Each page
then repeated the same commands in its body, and the two copies had
drifted: the widget uses the current `npx skills@latest ...` wording
while the hand-written blocks mostly carried the older bare `npx skills
...`. Pages showed the right command and a stale one together.
Delete the block from all 25 pages and record the rule in
.agents/writing-docs.md: install wording belongs to the site, not the
page. The template no longer carries a Quickstart, and
.agents/install-block.md notes that docs pages are not one of its
consumers.
Delete the four skills in deprecated/ — design-an-interface, qa,
request-refactor-plan, ubiquitous-language — each already absorbed by a
promoted skill. The bucket itself stays, now empty: a retired skill is
deleted, and the changeset that removes it names its replacement.
Delete edit-article and obsidian-vault along with the personal/ bucket.
obsidian-vault hardcoded a path to Matt's own vault and was
model-invocable, so any skills.sh user could have had it fire on them.
None of the six was in the plugin, but skills.sh serves every SKILL.md in
the repo, so all six were installable — hence the changeset.
Reframe in-progress/ from scratchpad to beta channel: public on purpose,
feedback wanted, not in the plugin, and installable one skill at a time
through skills.sh. Nothing there is deleted or graduated.
Drop qa from the two live docs that cited it as an issue-tracker skill.
ADR 0002 is left untouched — it records reasoning that was true when
decided.
Resolvesmattpocock/personal-wiki#256
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- install-block.md: state the invariant as a requirement rather than
as already-true (docs/ is brought into line downstream); mark all
three canonical snippets, not just the Claude Code one; pin the
`skills@latest` spelling; restore the `setup-matt-pocock-skills`
instruction the whole-set form carries; cite the docs source for
the auto-update claim.
- writing-docs.md: say plainly that the template's Quickstart is the
older wording, so the file no longer contradicts itself.
- CLAUDE.md: split the paragraph, stop restating the fallback rationale.
- ADR 0002: record what was actually verified, on which version, and
the two things that were not — the pinned sha in the official
listing, and the in-session slash command.
Refs mattpocock/personal-wiki#250
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
mattpocock-skills is now listed in Claude Code's official marketplace,
so the own-marketplace route is superseded. The queued changeset still
documented it, and changeset bodies ship verbatim into CHANGELOG.md —
the release would have published a superseded install route as its
headline.
- Rewrite .changeset/ship-as-claude-plugin.md around
`claude plugins install mattpocock-skills`.
- Add .agents/install-block.md as the single source for install
wording, so the docs pass has one true thing to copy.
- Point .agents/writing-docs.md and CLAUDE.md at it.
- Note the official listing in ADR 0002, and record that it reads
plugin.json directly and does not depend on marketplace.json.
.claude-plugin/marketplace.json is kept as a fallback for direct-repo
installs; nothing in CI or scripts references it.
Refs mattpocock/personal-wiki#250
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adds an `agents/openai.yaml` beside each `SKILL.md` so the skills work in
Codex as well as Claude Code, without generated copies:
- `interface.display_name` + `interface.short_description` for the Codex
skill picker, hand-written for all 39 skills.
- `policy.allow_implicit_invocation: false` on the 22 user-invoked skills —
the Codex analog of `disable-model-invocation: true`, so Codex excludes
them from implicit invocation while explicit `$skill` still works.
- Document the dual-harness invocation model in `.agents/invocation.md`,
`CLAUDE.md`, and the promoted-bucket READMEs.
- Add `AGENTS.md` as a symlink to `CLAUDE.md` so Codex reads the same
instructions; note Codex as a `link-skills.sh` install target.
Slimmed-down rework of the approach prototyped in #522: keeps the essential
cross-harness metadata, drops the Ruby validator, the runtime-detector test,
per-skill `default_prompt`s, and the unrelated promotion changes.
Co-authored-by: gabimoncha <gabimoncha@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a Claude Code plugin marketplace so the promoted skills can be
installed as a managed, read-only bundle (subscribe rather than fork),
alongside the existing skills.sh installer.
- Enrich .claude-plugin/plugin.json with marketplace metadata (version,
description, author, license, keywords); keep the curated promoted-only
skills array.
- Add .claude-plugin/marketplace.json making the repo its own
single-plugin marketplace (mattpocock-skills@mattpocock).
- README: document /plugin install alongside skills.sh, and the
subscribe-vs-fork tradeoff.
- CLAUDE.md: extend the promoted-set invariant to cover marketplace.json
and plugin.json/package.json version sync.
- ADR 0002: record why Claude ships now and a native Codex plugin is
deferred (Codex skills field is single-path + drops symlinks, which
can't express a curated subset of a bucketed repo without a restructure).
Verified: 'claude plugin validate . --strict' passes, and marketplace
add -> install resolves all 21 promoted skills at v1.2.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Executes the `unify-to-tickets` decision (personal-wiki #23), reworking
this PR from "add /to-plan" into the full planning-skills unification.
- Rename /to-prd → /to-spec. "spec" is now the single through-line term
(the skill still opens with "you may know this document as a PRD" for
discoverability).
- Merge /to-plan + /to-issues into one /to-tickets skill; delete
/to-issues. /to-tickets emits a set of tickets, each declaring its
blocking edges — one medium-agnostic artifact that reads as a
sequential plan (local `tickets.md`, edges as text) or a parallelizable
DAG (real tracker, native blocking links). The edges live in the ticket
either way; the medium only decides whether anything acts on them in
parallel.
- ask-matt now routes idea → /to-spec → /to-tickets → /implement.
- Sweep every cross-reference (docs pages, chain diagrams, CONTEXT.md,
ADRs, .agents, setup templates) to the new names and vocabulary.
- Rewrite the changeset to describe the unification.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The build chain now ends at code-review. Update every flow doc that draws
the chain so it reads end-to-end:
grill-with-docs → to-prd → to-issues → implement → code-review
- grill-with-docs / to-prd / to-issues: extend the diagram; point the
downstream neighbour at implement (which drives tdd internally).
- tdd: reframe from "final step" to the engine inside implement's step.
- implement: extend the diagram to include the review pass.
- ask-matt: narrate the flow ending in review (docs) and note that
/implement closes out with /code-review (SKILL.md).
- writing-docs guide: refresh the example chain.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
misc/ skills are no longer installable via the plugin or listed in the
top-level README — they join personal/ as kept-but-unshipped. Only
engineering/ and productivity/ are promoted now.
- Drop the Misc section from the top-level README.
- Reclassify misc/ as non-promoted in CLAUDE.md (README/plugin rule,
bucket-README grouping rule, docs-page rule) and the writing-docs guide.
- Note the non-promoted status in the misc bucket README.
plugin.json already omitted misc, so no manifest change was needed.
No SKILL.md context pointer referenced a misc skill, so nothing else
had to move.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
misc/ skills are niche — they stay promoted (README + plugin manifest,
so they're installable) but no longer get a public aihero.dev docs
page. Remove the four misc pages and decouple the docs rule from the
promotion rule in CLAUDE.md and the writing-docs guide.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The repeated "The load-bearing constraint:" opener on every page read
as an agent tell. Strip the label across all skill pages and let the
constraint stand as a plain declarative sentence; update the
writing-docs template so it isn't regenerated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Replace the inline "watch for the leading words" line with an
optional `## It's working if` section — a short list of observable
signals the skill is doing its job. Keeps observability from being
hammered onto leading words specifically.
- Build out to-prd's "What the PRD includes" with proper casing and a
one-line explainer per section.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reframe docs pages around cognitive-load relief: most skills are
user-invoked, so the human is the index that must remember when to
reach for each one. Each page's job is to make one skill memorable
and situate it in the system.
Template changes (.agents/writing-docs.md):
- Quickstart block: install + `npx skills update`, install-first
- New `## When to reach for it` (invocation mode + trigger boundary)
- New optional `## Prerequisites` (workspace/state, prior setup, tooling)
- Free-form middle with one firm rule: surface the leading word
(also an observability signal in the agent's output)
- `## Where it fits`: role-based, absorbs "Pairs well with", links ask-matt
- No H1; every cross-link absolute
Nest docs under bucket folders (docs/<bucket>/<name>.md); the
published URL stays skills-<name> regardless. Re-sync to-prd as the
worked exemplar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Relocate this repo's ADRs and invocation.md from docs/ to .agents/,
and update the CLAUDE.md reference.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>