mirror of
https://github.com/mattpocock/skills.git
synced 2026-09-13 02:48:06 +07:00
Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0208cbc093 | ||
|
|
b0bae9921e | ||
|
|
3babdf52d1 | ||
|
|
6b46e5c474 | ||
|
|
f4dd5e4976 | ||
|
|
a3065f1b7b | ||
|
|
3314257466 | ||
|
|
c64fa7ecf6 | ||
|
|
248fd6935b | ||
|
|
50777fcc09 | ||
|
|
c66bdeeee0 | ||
|
|
006ca0546b | ||
|
|
355fa7420b | ||
|
|
f958fa17c1 | ||
|
|
3e18e04260 | ||
|
|
4f6e25d91e | ||
|
|
ad98b80dbd | ||
|
|
c474642895 |
@@ -26,3 +26,16 @@ 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).
|
- 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.
|
- `.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** — configured name `claude-plugins-official`, source repo `anthropics/claude-plugins-official` — which every Claude Code install has by default. `claude plugins install mattpocock-skills` is now the documented route, and the `marketplace add` → `install` path above is superseded. The install wording lives in [.agents/install-block.md](../install-block.md).
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
Verified 2026-08-05, on Claude Code 2.1.222, against the live listing:
|
||||||
|
|
||||||
|
- `claude plugins install mattpocock-skills` resolves with no marketplace added first, and reports `mattpocock-skills@claude-plugins-official`.
|
||||||
|
- `claude plugin details mattpocock-skills` then reports version 1.2.0 and loads the promoted skills.
|
||||||
|
- The listing's `source` is `{"source": "url", "url": "https://github.com/mattpocock/skills.git", "sha": …}` — the **sha is pinned**, so a release reaches installed users when that pin moves, not the moment we tag. At the time of writing the pin sits two commits behind `main`, which is why it lists 22 skills rather than the 24 in `plugin.json`.
|
||||||
|
- The in-session `/plugin install mattpocock-skills` was **not** exercised — `/plugin` is unavailable in headless (`claude -p`) sessions. It runs the same resolver as the CLI, and the documented example form is `/plugin install <name>@claude-plugins-official`.
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# The canonical install block
|
||||||
|
|
||||||
|
One install story, one wording. `README.md`, `.changeset/*`, and every page under `docs/` must say **this** and nothing else. Change it here first, then propagate.
|
||||||
|
|
||||||
|
`mattpocock-skills` is listed in **Claude Code's official marketplace** — configured name `claude-plugins-official`, source repo `anthropics/claude-plugins-official` — which every Claude Code install has out of the box. There is no marketplace to add first. Official Anthropic marketplaces have auto-update enabled by default ([discover-plugins](https://code.claude.com/docs/en/discover-plugins)), so "updates arrive automatically" is a true claim, not a hope.
|
||||||
|
|
||||||
|
## Claude Code — the plugin
|
||||||
|
|
||||||
|
<canonical-block name="claude-code">
|
||||||
|
|
||||||
|
```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.
|
||||||
|
|
||||||
|
</canonical-block>
|
||||||
|
|
||||||
|
## 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. Use the whole-set form on `README.md`:
|
||||||
|
|
||||||
|
<canonical-block name="skills-sh-whole-set">
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx skills@latest add mattpocock/skills
|
||||||
|
```
|
||||||
|
|
||||||
|
Pick the skills you want, and which coding agents to install them on. **The installer lets you choose which skills to take — make sure `setup-matt-pocock-skills` is one of them.**
|
||||||
|
|
||||||
|
</canonical-block>
|
||||||
|
|
||||||
|
…and the single-skill form wherever one skill is named on its own. Note that **`docs/` pages are not a consumer of this block**: ai-hero renders the install widget above the body, so a page that writes the commands out duplicates it. See [writing-docs.md](./writing-docs.md).
|
||||||
|
|
||||||
|
<canonical-block name="skills-sh-one-skill">
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx skills@latest add mattpocock/skills --skill=<name>
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx skills@latest update <name>
|
||||||
|
```
|
||||||
|
|
||||||
|
</canonical-block>
|
||||||
|
|
||||||
|
`skills@latest` is the pinned spelling in all three. The pages under `docs/` used to carry their own copy of these commands; those blocks are now deleted rather than corrected, because the site renders the install commands itself.
|
||||||
|
|
||||||
|
## 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.
|
||||||
+6
-14
@@ -1,10 +1,10 @@
|
|||||||
# Writing docs pages
|
# Writing docs pages
|
||||||
|
|
||||||
Every skill in `engineering/` and `productivity/` has a human-facing **docs page** at `docs/<bucket>/<skill-name>.md` — the docs tree mirrors those two bucket folders under `skills/`. It is published at `https://aihero.dev/skills-<skill-name>`; the URL is always `skills-<skill-name>` regardless of bucket, so the docs path is repo organisation only. The page is not the skill and not a copy of `SKILL.md`. Only these two buckets are promoted; the rest (`misc/`, `personal/`, `in-progress/`, `deprecated/`) ship no docs page.
|
Every skill in `engineering/` and `productivity/` has a human-facing **docs page** at `docs/<bucket>/<skill-name>.md` — the docs tree mirrors those two bucket folders under `skills/`. It is published at `https://aihero.dev/skills-<skill-name>`; the URL is always `skills-<skill-name>` regardless of bucket, so the docs path is repo organisation only. The page is not the skill and not a copy of `SKILL.md`. Only these two buckets are promoted; the rest (`misc/`, `in-progress/`, `deprecated/`) ship no docs page.
|
||||||
|
|
||||||
Most of these skills are **user-invoked**: the agent will never fire them for you, so *you* are the index that has to remember they exist and when to reach for them. That memory is **cognitive load**. The job of a docs page is to relieve it — to orient one reader around one skill so they can hold it in their head, know when to reach for it, and see where it sits in the system. The pages are collectively a distributed router; each is a node.
|
Most of these skills are **user-invoked**: the agent will never fire them for you, so *you* are the index that has to remember they exist and when to reach for them. That memory is **cognitive load**. The job of a docs page is to relieve it — to orient one reader around one skill so they can hold it in their head, know when to reach for it, and see where it sits in the system. The pages are collectively a distributed router; each is a node.
|
||||||
|
|
||||||
Act whenever a promoted skill is added, renamed, or has its behaviour changed: create or re-sync its docs page. A rename moves the file too (`docs/<bucket>/<old>.md` → `docs/<bucket>/<new>.md`), because the published URL tracks the name; a skill that moves between `engineering/` and `productivity/` moves its docs file to the matching folder. Skills in `misc/`, `personal/`, `in-progress/`, and `deprecated/` get no page — none of those buckets is promoted. A skill moving *out* of one of them into `engineering/` or `productivity/` gains a page; one moving the other way loses it.
|
Act whenever a promoted skill is added, renamed, or has its behaviour changed: create or re-sync its docs page. A rename moves the file too (`docs/<bucket>/<old>.md` → `docs/<bucket>/<new>.md`), because the published URL tracks the name; a skill that moves between `engineering/` and `productivity/` moves its docs file to the matching folder. Skills in `misc/`, `in-progress/`, and `deprecated/` get no page — none of those buckets is promoted. A skill moving *out* of one of them into `engineering/` or `productivity/` gains a page; one moving the other way loses it.
|
||||||
|
|
||||||
Because these pages are published on `aihero.dev`, **every link is absolute** — never a repo-relative path. A link to another skill points at `https://aihero.dev/skills-<name>`; a link into the repo points at its full `https://github.com/mattpocock/skills/...` URL. A relative link that works in the repo breaks once published.
|
Because these pages are published on `aihero.dev`, **every link is absolute** — never a repo-relative path. A link to another skill points at `https://aihero.dev/skills-<name>`; a link into the repo points at its full `https://github.com/mattpocock/skills/...` URL. A relative link that works in the repo breaks once published.
|
||||||
|
|
||||||
@@ -12,20 +12,12 @@ There is no H1 — the published page takes its title from the slug.
|
|||||||
|
|
||||||
## Page structure
|
## Page structure
|
||||||
|
|
||||||
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.
|
Fill the template below. The **fixed frame** (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.
|
||||||
|
|
||||||
|
**A page carries no install commands.** The ai-hero page template renders the install widget itself — a copy button, the single-skill command, the whole-set command, and the update line — above the body. A page that also writes them out shows the reader the same command twice, and the two copies drift: the hand-written pair on every page went stale against the widget beside it. Install wording is a property of the site, not of the page. If it needs changing, change it in ai-hero; the canonical wording lives in [the install block](./install-block.md).
|
||||||
|
|
||||||
<page-template>
|
<page-template>
|
||||||
|
|
||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=<name>
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update <name>
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/<bucket>/<name>)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/<bucket>/<name>)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
@@ -72,7 +64,7 @@ Always present. Situate the skill in the system in a sentence or two:
|
|||||||
## Done when
|
## Done when
|
||||||
|
|
||||||
- The page exists at `docs/<bucket>/<name>.md`, and no stale page survives a rename or bucket move.
|
- The page exists at `docs/<bucket>/<name>.md`, and no stale page survives a rename or bucket move.
|
||||||
- The Quickstart block and source link name the correct bucket and skill; the update line names the skill.
|
- The source link names the correct bucket and skill, and the page writes no install command of its own.
|
||||||
- `## What it does` states the defining constraint, as plain prose rather than a labelled aside.
|
- `## What it does` states the defining constraint, as plain prose rather than a labelled aside.
|
||||||
- `## When to reach for it` states invocation mode and the trigger boundary.
|
- `## When to reach for it` states invocation mode and the trigger boundary.
|
||||||
- `## Where it fits` names the role and links to `ask-matt`.
|
- `## Where it fits` names the role and links to `ask-matt`.
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
"mattpocock-skills": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Drop the hand-written Quickstart block from all 25 docs pages.
|
||||||
|
|
||||||
|
aihero.dev already renders an install widget above every skill page — a copy button, the single-skill command, the whole-set command, and the update line. Each page then wrote the same two commands out again immediately below it. The reader saw the install command twice.
|
||||||
|
|
||||||
|
The two copies had also drifted apart. The widget renders the current `npx skills@latest …` wording; the hand-written blocks still carried the older bare `npx skills …`, so most pages showed the correct command and a stale one, one after the other.
|
||||||
|
|
||||||
|
Deleting the block removes those stale copies and leaves the site's own. `.agents/writing-docs.md` now states the rule directly — install wording is a property of the site, not of the page — and its template no longer carries a Quickstart to copy.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
"mattpocock-skills": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Rewrite the `grill-me` docs page around what people actually get wrong.
|
||||||
|
|
||||||
|
The old page explained the mechanism — rounds, the frontier, the decision tree — and stopped there. Every recurring question from the last few months went unanswered on it: which of the three grilling skills to reach for, how many questions is normal, what to do when a question can't be answered by talking, and whether to start a fresh session before writing the spec.
|
||||||
|
|
||||||
|
The rewrite keeps the mechanism short and spends the page on the judgement calls instead:
|
||||||
|
|
||||||
|
- **Sibling routing** is now a three-way list keyed on what you have in front of you — no codebase, a codebase, or too big for one session — rather than a paragraph.
|
||||||
|
- **"It's a conversation, not an interview"** names passivity as the main failure mode. A session where you answer "agreed" forty times produces a plan you didn't write and can't defend.
|
||||||
|
- **"Grillable and ungrillable"** gives readers the move for a question that talking cannot settle: stop, prototype, come back. This is where long sessions come from.
|
||||||
|
- **A "Common questions" section** answers the six highest-volume ones directly, including how to restore one-question-at-a-time and why you should not clear context before `to-spec`.
|
||||||
|
- **"It's working if"** added, led by the sharpest signal: if you never disagreed, you didn't need the session.
|
||||||
|
|
||||||
|
Also drops the "plan mode" ambiguity by saying plainly to leave it off.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
"mattpocock-skills": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Rewrite the `writing-for-agents` docs page around what people actually get wrong.
|
||||||
|
|
||||||
|
The old page was a table of contents for the skill: the two loads, then a bullet per lever. It answered none of the questions the rename and the AMA threads have been generating for months — where `writing-great-skills` went, whether the agent or the human is doing the writing, why you shouldn't just ask Claude to write the skill for you, and how you know when a document is done.
|
||||||
|
|
||||||
|
The rewrite keeps the levers to one compact list and spends the page on the judgement calls instead:
|
||||||
|
|
||||||
|
- **The defining constraint is now stated up front** — the default move is deletion, not explanation, because the reader has already read everything. This is also the answer to "why not let the model write it", so it leads.
|
||||||
|
- **The scope is stated as a test**, not a list: does an agent read this document and act? Skills, `AGENTS.md`, specs, tickets and runtime prompts all pass it.
|
||||||
|
- **A "Common questions" section** answers the nine highest-volume ones directly, including the rename, the "streamline" failure where an agent trims for length and cuts behaviour, whether to rewrite documents per model, the skill that only works on the one task it was built from, and the leading-word question from non-native English speakers.
|
||||||
|
- **"It's working if"** added, led by the sharpest signal: the document gets shorter as it gets better, and duplication is the most reliable sign it was never tested.
|
||||||
|
- **`Where it fits`** says plainly that it has no chain neighbour: it sits underneath the set rather than beside one skill, and the documents the other skills leave behind are the text it governs.
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
"mattpocock-skills": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Remove six skills from the repo. None of them was in the Claude Code plugin, but all six were installable through [skills.sh](https://skills.sh/mattpocock/skills), which serves every skill in the repo — so this is what leaves that listing, and where each one went.
|
||||||
|
|
||||||
|
Four retired skills, each already absorbed by a skill that does the job better:
|
||||||
|
|
||||||
|
- **`ubiquitous-language`** → **`/domain-modeling`**, which builds and maintains the whole domain model rather than dumping a glossary from one conversation.
|
||||||
|
- **`design-an-interface`** → **`/codebase-design`**. Nothing is lost: the "design it twice" technique — parallel sub-agents generating radically different designs, from Ousterhout — ships inside that skill as `DESIGN-IT-TWICE.md`.
|
||||||
|
- **`qa`** → **`/triage`** and **`/to-tickets`**.
|
||||||
|
- **`request-refactor-plan`** → **`/to-spec`** and **`/improve-codebase-architecture`**.
|
||||||
|
|
||||||
|
And two that were only ever mine — tied to my own machine and never meant for anyone else. The `personal/` bucket goes with them:
|
||||||
|
|
||||||
|
- **`edit-article`**
|
||||||
|
- **`obsidian-vault`**, which hardcoded a path to my own Obsidian vault.
|
||||||
|
|
||||||
|
`skills/deprecated/` stays as a bucket, now empty. `skills/in-progress/` is unchanged and is now described for what it actually is: a beta channel, published on purpose, installable one skill at a time through skills.sh.
|
||||||
@@ -2,11 +2,18 @@
|
|||||||
"mattpocock-skills": minor
|
"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:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
/plugin marketplace add mattpocock/skills
|
claude plugins install mattpocock-skills
|
||||||
/plugin install mattpocock-skills@mattpocock
|
|
||||||
```
|
```
|
||||||
|
|
||||||
`.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.
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
"mattpocock-skills": minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Add **`wait-what`** — a fire extinguisher for model verbosity. Fire it the moment a message doesn't land, and the agent re-pitches it: a little context, ASD-STE100 Simplified Technical English, and the ubiquitous language from your `CONTEXT.md`. User-invoked, three lines long.
|
||||||
|
|
||||||
|
The mechanism is the name. Concision skills fail by growing — a 400-line skill still leaves the model verbose — so this one is a single precise leading word and nothing else. Names that describe the *output* (`/tldr`, `/no-fluff`) make the model clip words and lose you further; naming the *listener's* state asks for both halves at once, fewer words **and** the context you were missing. It also reuses the leading words already in your global `CLAUDE.md`, so the skill, `CLAUDE.md` and every `CONTEXT.md` reach for the same tokens.
|
||||||
|
|
||||||
|
It's the extinguisher, not the sprinkler. The cure for jargon is a shared language built upfront with `/grill-with-docs`; this is the in-the-moment corrective for when you don't have one yet.
|
||||||
@@ -42,6 +42,7 @@
|
|||||||
"./skills/productivity/handoff",
|
"./skills/productivity/handoff",
|
||||||
"./skills/productivity/teach",
|
"./skills/productivity/teach",
|
||||||
"./skills/productivity/to-questionnaire",
|
"./skills/productivity/to-questionnaire",
|
||||||
|
"./skills/productivity/wait-what",
|
||||||
"./skills/productivity/writing-for-agents"
|
"./skills/productivity/writing-for-agents"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,19 +3,18 @@ Skills are organized into bucket folders under `skills/`:
|
|||||||
- `engineering/` — daily code work
|
- `engineering/` — daily code work
|
||||||
- `productivity/` — daily non-code workflow tools
|
- `productivity/` — daily non-code workflow tools
|
||||||
- `misc/` — kept around but rarely used, not promoted
|
- `misc/` — kept around but rarely used, not promoted
|
||||||
- `personal/` — tied to my own setup, not promoted
|
- `in-progress/` — beta: public on purpose, feedback wanted, not shipped in the plugin
|
||||||
- `in-progress/` — drafts not yet ready to ship
|
|
||||||
- `deprecated/` — no longer used
|
- `deprecated/` — no longer used
|
||||||
|
|
||||||
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.
|
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/`, `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).
|
Install commands are copied verbatim from [.agents/install-block.md](./.agents/install-block.md). `.claude-plugin/marketplace.json` makes the repo its own single-plugin marketplace — a fallback the install block explains, not the documented route. 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`.
|
Each skill entry in the top-level `README.md` must link the skill name to its `SKILL.md`.
|
||||||
|
|
||||||
Each bucket folder has a `README.md` that lists every skill in the bucket with a one-line description, with the skill name linked to its `SKILL.md`. The promoted buckets' `README.md`s and the top-level `README.md` group entries into **User-invoked** and **Model-invoked**; non-promoted bucket `README.md`s (`misc/`, `personal/`) use a flat list.
|
Each bucket folder has a `README.md` that lists every skill in the bucket with a one-line description, with the skill name linked to its `SKILL.md`. The promoted buckets' `README.md`s and the top-level `README.md` group entries into **User-invoked** and **Model-invoked**; non-promoted bucket `README.md`s (`misc/`, `in-progress/`) use a flat list.
|
||||||
|
|
||||||
Skills in `engineering/` and `productivity/` also have a human-facing docs page at `docs/<bucket>/<skill-name>.md` (the docs tree mirrors those two bucket folders under `skills/`). The published URL is `https://aihero.dev/skills-<skill-name>` regardless of bucket — the docs path is repo organisation only. When you add, rename, or change the behaviour of a skill in `engineering/` or `productivity/`, create or re-sync its docs page following [.agents/writing-docs.md](./.agents/writing-docs.md). Skills in the non-promoted buckets (`misc/`, `personal/`, `in-progress/`, `deprecated/`) get **no** docs page.
|
Skills in `engineering/` and `productivity/` also have a human-facing docs page at `docs/<bucket>/<skill-name>.md` (the docs tree mirrors those two bucket folders under `skills/`). The published URL is `https://aihero.dev/skills-<skill-name>` regardless of bucket — the docs path is repo organisation only. When you add, rename, or change the behaviour of a skill in `engineering/` or `productivity/`, create or re-sync its docs page following [.agents/writing-docs.md](./.agents/writing-docs.md). Skills in the non-promoted buckets (`misc/`, `in-progress/`, `deprecated/`) get **no** docs page.
|
||||||
|
|
||||||
Every `SKILL.md` is either user-invoked (`disable-model-invocation: true` plus `policy.allow_implicit_invocation: false` in `agents/openai.yaml`, reachable only by the human) or model-invoked (model- or user-reachable). See [.agents/invocation.md](./.agents/invocation.md).
|
Every `SKILL.md` is either user-invoked (`disable-model-invocation: true` plus `policy.allow_implicit_invocation: false` in `agents/openai.yaml`, reachable only by the human) or model-invoked (model- or user-reachable). See [.agents/invocation.md](./.agents/invocation.md).
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ A collection of agent skills (slash commands and behaviors) loaded by Claude Cod
|
|||||||
## Language
|
## Language
|
||||||
|
|
||||||
**Issue tracker**:
|
**Issue tracker**:
|
||||||
The tool that hosts a repo's issues — GitHub Issues, Linear, a local `.scratch/` markdown convention, or similar. Skills like `to-tickets`, `to-spec`, `triage`, and `qa` read from and write to it.
|
The tool that hosts a repo's issues — GitHub Issues, Linear, a local `.scratch/` markdown convention, or similar. Skills like `to-tickets`, `to-spec`, and `triage` read from and write to it.
|
||||||
_Avoid_: backlog manager, backlog backend, issue host
|
_Avoid_: backlog manager, backlog backend, issue host
|
||||||
|
|
||||||
**Issue**:
|
**Issue**:
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ General workflow tools, not code-specific.
|
|||||||
- **[handoff](./skills/productivity/handoff/SKILL.md)** — Compact the current conversation into a handoff document so another agent can continue the work.
|
- **[handoff](./skills/productivity/handoff/SKILL.md)** — Compact the current conversation into a handoff document so another agent can continue the work.
|
||||||
- **[teach](./skills/productivity/teach/SKILL.md)** — Teach the user a new skill or concept over multiple sessions, using the current directory as a stateful teaching workspace.
|
- **[teach](./skills/productivity/teach/SKILL.md)** — Teach the user a new skill or concept over multiple sessions, using the current directory as a stateful teaching workspace.
|
||||||
- **[to-questionnaire](./skills/productivity/to-questionnaire/SKILL.md)** — Turn a decision you can't answer alone into a Markdown questionnaire for the one person who can — filled in async, or together over a meeting. It grills you about the send (who it's for, what you need back), not the subject.
|
- **[to-questionnaire](./skills/productivity/to-questionnaire/SKILL.md)** — Turn a decision you can't answer alone into a Markdown questionnaire for the one person who can — filled in async, or together over a meeting. It grills you about the send (who it's for, what you need back), not the subject.
|
||||||
|
- **[wait-what](./skills/productivity/wait-what/SKILL.md)** — Fire this the moment a message doesn't land. The agent re-pitches it with the context you're missing, in plain English, using your `CONTEXT.md` vocabulary.
|
||||||
- **[writing-for-agents](./skills/productivity/writing-for-agents/SKILL.md)** — Writing documents for agents: skills, AGENTS.md/CLAUDE.md, and any doc an agent reaches by a pointer.
|
- **[writing-for-agents](./skills/productivity/writing-for-agents/SKILL.md)** — Writing documents for agents: skills, AGENTS.md/CLAUDE.md, and any doc an agent reaches by a pointer.
|
||||||
|
|
||||||
**Model-invoked**
|
**Model-invoked**
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=ask-matt
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update ask-matt
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/ask-matt)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/ask-matt)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=code-review
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update code-review
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/code-review)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/code-review)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=codebase-design
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update codebase-design
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/codebase-design)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/codebase-design)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=diagnosing-bugs
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update diagnosing-bugs
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/diagnosing-bugs)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/diagnosing-bugs)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=domain-modeling
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update domain-modeling
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/domain-modeling)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/domain-modeling)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=grill-with-docs
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update grill-with-docs
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/grill-with-docs)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/grill-with-docs)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=implement
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update implement
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/implement)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/implement)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=improve-codebase-architecture
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update improve-codebase-architecture
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/improve-codebase-architecture)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/improve-codebase-architecture)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=prototype
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update prototype
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/prototype)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/prototype)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=research
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update research
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/research)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/research)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=resolving-merge-conflicts
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update resolving-merge-conflicts
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/resolving-merge-conflicts)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/resolving-merge-conflicts)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=setup-matt-pocock-skills
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update setup-matt-pocock-skills
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/setup-matt-pocock-skills)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/setup-matt-pocock-skills)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=tdd
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update tdd
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/tdd)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/tdd)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=to-spec
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update to-spec
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/to-spec)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/to-spec)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=to-tickets
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update to-tickets
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/to-tickets)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/to-tickets)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=triage
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update triage
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/triage)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/triage)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=wayfinder
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update wayfinder
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/wayfinder)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/wayfinder)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=wizard
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update wizard
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/wizard)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/engineering/wizard)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,33 +1,78 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=grill-me
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update grill-me
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|
||||||
`grill-me` runs a relentless interview about a plan or design, walking every branch of the decision tree until you and the agent reach a **shared understanding**.
|
`grill-me` takes a **loose idea** and interviews you until it has real decisions in it. You do not need a worked-out plan to start — producing one is what the session is for. It asks in **rounds**: each round is the whole **frontier** — every question whose prerequisites you have already settled — so you are never asked something that hinges on an answer it hasn't heard yet.
|
||||||
|
|
||||||
It asks in **rounds** and waits. A round is the whole **frontier** — every decision whose prerequisites are already settled — put to you as one numbered list, so you're never asked something that hinges on an answer the agent hasn't heard yet. Where a question can be answered by reading the codebase, it goes and reads rather than asking. Each question comes with the agent's own recommended answer, so you are reacting to a proposal, not staring at a blank prompt.
|
It is **stateless**. It writes no files and leaves no workspace behind. The only thing it leaves is a sharper version of the idea, in your own head.
|
||||||
|
|
||||||
## When to reach for it
|
## When to reach for it
|
||||||
|
|
||||||
You invoke this by typing `/grill-me` — the agent won't reach for it on its own.
|
You invoke this by typing `/grill-me` — the agent won't reach for it on its own. Start it in a **fresh conversation**, not on top of a plan you already had an agent write.
|
||||||
|
|
||||||
Reach for it before you build, when a plan feels roughly right but you can sense unresolved decisions hiding in it — the moment you want the soft spots found and forced into the open. If you want that same interrogation to also leave a paper trail of ADRs and a glossary behind, use [grill-with-docs](https://aihero.dev/skills-grill-with-docs) instead. And if the effort is too big to hold in one session and the route to the goal is still foggy — a greenfield project, a huge feature build — start further upstream with [wayfinder](https://aihero.dev/skills-wayfinder), which charts it as a map of decisions first and then merges back into this flow.
|
Reach for it as soon as you have an idea worth taking seriously — a feature, a product direction, a business call, a piece of writing — and long before you have worked out what it involves. Vagueness is not a reason to wait; it is the thing the session eats. If you can already specify the thing precisely, you don't need to grill it.
|
||||||
|
|
||||||
## The decision tree
|
Which of the three grilling skills you want depends on what is in front of you:
|
||||||
|
|
||||||
The session walks the plan as a tree of decisions, settling a parent decision before the choices that hang off it. Your answers reshape the tree and push the frontier outward, so the next round asks whatever they unblocked. The point is not to reach agreement quickly; it is to make every implicit call explicit, so nothing important is left silently assumed. You come out the other side with a plan whose branches have all been visited.
|
- **Anything, anywhere** — `grill-me`. It needs no repo and writes no files, and the subject doesn't have to be code.
|
||||||
|
- **A codebase to align against** — [grill-with-docs](https://aihero.dev/skills-grill-with-docs). The same interview, but stateful: it reads your code and keeps what it learns in `CONTEXT.md` and ADRs.
|
||||||
|
- **Too big for one session** — [wayfinder](https://aihero.dev/skills-wayfinder). It charts the effort as a map and runs grilling sessions inside it.
|
||||||
|
|
||||||
`grill-me` is **stateless**: it writes nothing and leaves no workspace behind. It runs anywhere, and the only artifact is the sharpened understanding in the conversation itself. That is the deliberate contrast with [grill-with-docs](https://aihero.dev/skills-grill-with-docs), which captures the same interview as durable ADRs and a glossary.
|
Leave plan mode off. Plan mode primes the agent to rush toward producing a plan, which is the opposite of staying in inquiry.
|
||||||
|
|
||||||
|
## It's a conversation, not an interview
|
||||||
|
|
||||||
|
The skill asks the questions, but **you** own the scope. That is the part people miss, and it separates a session that turns an idea into decisions from one that produces confident nonsense.
|
||||||
|
|
||||||
|
The failure mode is **passivity** — answering "agreed, agreed, agreed" for forty questions and coming out with a plan the agent wrote and you nodded at. It feels productive because it was long. Nothing was actually decided, and the result carries a certainty it hasn't earned.
|
||||||
|
|
||||||
|
Being active means steering. Push back on a question pitched beneath the fidelity you need. Say when the scope is drifting. Answer "I don't know" and mean it. This skill is built to aid an engineer, not to replace one: what comes out tracks the quality of your answers, not the number of questions asked.
|
||||||
|
|
||||||
|
The opposite error is real but rarer — staying in the interview so long you never reach code.
|
||||||
|
|
||||||
|
## Grillable and ungrillable
|
||||||
|
|
||||||
|
Some questions can be answered by talking. Others can't, and no amount of grilling will get you there.
|
||||||
|
|
||||||
|
"One long form or three pages?" and "how should this interaction feel?" are **ungrillable** — they need something to react to. When you hit one, stop grilling. Build the throwaway version with [prototype](https://aihero.dev/skills-prototype), look at it, then come back and answer in one line.
|
||||||
|
|
||||||
|
Talking your way through an ungrillable question is where sessions balloon. The agent keeps rephrasing, you keep guessing, and the scope grows to fill the uncertainty.
|
||||||
|
|
||||||
|
## It's working if
|
||||||
|
|
||||||
|
- You disagree with something. A session with no pushback from you is a session you didn't need.
|
||||||
|
- Questions arrive in a few rounds rather than one long drip, and later rounds clearly build on what you said earlier.
|
||||||
|
- You end up somewhere you didn't expect, because a question surfaced a decision you had been making implicitly.
|
||||||
|
- At the end you could defend each choice to someone who wasn't there.
|
||||||
|
|
||||||
|
## Common questions
|
||||||
|
|
||||||
|
**How many questions should I expect, and how do I know when it ends?**
|
||||||
|
Count rounds, not questions. Forty-six questions across four rounds is an ordinary session. It ends when the frontier is empty — every branch visited, nothing left silently assumed.
|
||||||
|
|
||||||
|
**It asked me two hundred questions. What went wrong?**
|
||||||
|
Usually the scope was too large. Ask the agent to break the work into smaller pieces first, then grill each one. Very long sessions also drift into the **dumb zone**, where the context window is full enough that the questions get worse.
|
||||||
|
|
||||||
|
**Can I go back to one question at a time?**
|
||||||
|
Yes. Add this to your global `CLAUDE.md`:
|
||||||
|
|
||||||
|
```
|
||||||
|
When grilling, ask one question at a time.
|
||||||
|
```
|
||||||
|
|
||||||
|
**What if I genuinely don't know the answer?**
|
||||||
|
Say so. "I don't know" is a real answer, and a question you can't answer is usually a sign to prototype rather than to guess.
|
||||||
|
|
||||||
|
**Do I start a fresh session before writing the spec?**
|
||||||
|
No. The value of the session is the context you just built. Hand the same conversation straight to [to-spec](https://aihero.dev/skills-to-spec).
|
||||||
|
|
||||||
|
**Does the model matter?**
|
||||||
|
More than for most skills. Grilling leans on the model's own sense of how systems break, so give it your best one. Implementation mostly follows context and tolerates a cheaper model.
|
||||||
|
|
||||||
## Where it fits
|
## Where it fits
|
||||||
|
|
||||||
`grill-me` is a reach-for-it-anytime standalone — the pre-build stress test you run whenever a plan needs hardening. It is the stateless, user-invoked front door to the [grilling](https://aihero.dev/skills-grilling) primitive; its closest neighbour is [grill-with-docs](https://aihero.dev/skills-grill-with-docs), the stateful sibling that runs the same interview but additionally records the decisions as ADRs and a glossary. If the outcome is a spec you want written down, hand off to [to-spec](https://aihero.dev/skills-to-spec), which synthesises the settled understanding into a spec without re-interviewing you. When you're unsure which flow fits, [ask-matt](https://aihero.dev/skills-ask-matt) routes you.
|
`grill-me` is a **standalone you can run anywhere, on anything**. Being stateless is what makes it portable: no repo, no workspace, no setup, and no assumption that the idea is even about software. People point it at business decisions, at writing, at what to do next — anything that won't sit still in their head.
|
||||||
|
|
||||||
|
That portability is the whole difference from [grill-with-docs](https://aihero.dev/skills-grill-with-docs), which runs the same interview but reads a codebase to align against and records what it learns as `CONTEXT.md` and ADRs. Both sit on the [grilling](https://aihero.dev/skills-grilling) primitive; `grill-me` is the user-invoked front door that carries nothing with it.
|
||||||
|
|
||||||
|
If what you grilled does turn out to be software, you can hand the same conversation to [to-spec](https://aihero.dev/skills-to-spec) and carry on into the build flow — an option, not the point of the skill. When you're unsure which flow fits, [ask-matt](https://aihero.dev/skills-ask-matt) routes you.
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=grilling
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update grilling
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/grilling)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/grilling)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=handoff
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update handoff
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/handoff)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/handoff)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=teach
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update teach
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/teach)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/teach)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=to-questionnaire
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update to-questionnaire
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/to-questionnaire)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/to-questionnaire)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/wait-what)
|
||||||
|
|
||||||
|
## What it does
|
||||||
|
|
||||||
|
`wait-what` is the fire extinguisher for a message that didn't land. You fire it the moment you lose the thread, and the agent re-pitches what it just said: a little of the context you were missing, plain English, and the vocabulary from your project's `CONTEXT.md`.
|
||||||
|
|
||||||
|
It is three lines long, and that is the design rather than an unfinished draft. Skills that fight verbosity fail by growing — a four-hundred-line concision skill still leaves the model verbose, because the model reads the volume, not the plea. This one carries a single precise leading word and nothing else.
|
||||||
|
|
||||||
|
## When to reach for it
|
||||||
|
|
||||||
|
You invoke this by typing `/wait-what` — the agent won't reach for it on its own, and it shouldn't: only you know when you stopped following.
|
||||||
|
|
||||||
|
Reach for it the second you notice you're skimming — the agent has drifted into jargon it invented, stacked five acronyms, or explained a decision whose premise you never saw. It's a one-shot corrective on the conversation you're already in. To stop the jargon arriving in the first place, use [grill-with-docs](https://aihero.dev/skills-grill-with-docs) instead, which builds the shared language upfront.
|
||||||
|
|
||||||
|
## The name is the mechanism
|
||||||
|
|
||||||
|
The leading word is **wait**. Not "be concise" — an instruction about the agent's output, which the model satisfies by clipping words and losing you further. **Wait** is about *your* state: it says comprehension failed here. An agent that hears "be brief" writes telegrams. An agent that hears "wait, you lost me" backs up and explains.
|
||||||
|
|
||||||
|
That distinction is the whole skill. Every popular fix for verbosity — `/tldr`, `/no-fluff`, `/talk-normal` — names the *output*, so the model over-corrects into a caveman register that's shorter and no clearer. Naming the *listener* asks for both halves at once: fewer words **and** the context you were missing.
|
||||||
|
|
||||||
|
The re-pitch is deliberately vague about its own scope. It says re-pitch **that**, not "that last message", because what lost you is usually bigger than one paragraph — the agent decides how far back to go.
|
||||||
|
|
||||||
|
## It plugs into the language you already have
|
||||||
|
|
||||||
|
The body reuses the leading words already sitting in your global `CLAUDE.md` and your project's `CONTEXT.md`: ASD-STE100 Simplified Technical English for the register, ubiquitous language for the nouns. Skill, `CLAUDE.md` and `CONTEXT.md` reach for the same tokens, so firing it isn't a new instruction — it's a reminder of one the agent already agreed to.
|
||||||
|
|
||||||
|
If you have no `CONTEXT.md`, it still works; you just lose the domain-vocabulary half.
|
||||||
|
|
||||||
|
## It's working if
|
||||||
|
|
||||||
|
- The re-pitch is **shorter and clearer**, not shorter and blunter.
|
||||||
|
- It adds the premise you were missing rather than just deleting words.
|
||||||
|
- Project nouns replace invented ones — the terms in your `CONTEXT.md` come back.
|
||||||
|
- You can fire it twice in a row without it degrading into terseness.
|
||||||
|
|
||||||
|
## Where it fits
|
||||||
|
|
||||||
|
`wait-what` is a reach-for-it-anytime standalone — it sits inside whatever conversation you're already having, in any skill, at any point. It's the extinguisher; [grill-with-docs](https://aihero.dev/skills-grill-with-docs) is the sprinkler system, because a shared language agreed upfront is the real cure for jargon, and [domain-modeling](https://aihero.dev/skills-domain-modeling) is what you reach for when the *words themselves* are the problem rather than one bad message. When you're unsure which skill fits the moment, [ask-matt](https://aihero.dev/skills-ask-matt) routes you.
|
||||||
@@ -1,42 +1,72 @@
|
|||||||
Quickstart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills add mattpocock/skills --skill=writing-for-agents
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx skills update writing-for-agents
|
|
||||||
```
|
|
||||||
|
|
||||||
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/writing-for-agents)
|
[Source](https://github.com/mattpocock/skills/tree/main/skills/productivity/writing-for-agents)
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|
||||||
`writing-for-agents` is the reference you write agent-facing documents against — skills, `AGENTS.md` / `CLAUDE.md`, and any doc an agent reaches by a pointer. The packaging differs; the writing does not: the same levers make each one predictable, so the agent takes the same *process* every run rather than producing the same output.
|
`writing-for-agents` is the reference you write agent-facing documents against — a skill, an `AGENTS.md` / `CLAUDE.md`, a spec, a runtime prompt, a README, any doc an agent reads. The packaging differs; the writing does not: the same levers make each one predictable, so the agent takes the same *process* every run rather than producing the same output.
|
||||||
|
|
||||||
Formerly `writing-great-skills`. The rename tracks what the reference always was underneath: almost none of it is skill-specific. The universal core — context pointers, the two loads, the information hierarchy, completion criteria, leading words, pruning — applies to any document an agent consumes; the genuinely skill-only mechanics (frontmatter, the model- vs user-invoked choice, router skills) are disclosed to a linked `SKILL-MECHANICS.md` you read only when the document you're writing is a skill.
|
Its default move is deletion, not explanation. Ask an agent to write instructions for another agent and it spends most of its words explaining what the model already knows — every one of those lines is a **no-op**, paying context and changing no behaviour. This reference is the lens that finds them, which is why it earns its keep at least as often on a document you already have as on a blank file.
|
||||||
|
|
||||||
|
It was called `writing-great-skills` until v1.1. The rename tracks what it always was underneath: almost none of it is skill-specific. The skill-only mechanics — frontmatter, the model- versus user-invoked choice, router skills — are disclosed to a linked `SKILL-MECHANICS.md` you read only when the document in front of you is a skill.
|
||||||
|
|
||||||
## When to reach for it
|
## When to reach for it
|
||||||
|
|
||||||
The agent reaches for it on its own whenever you're creating or editing a skill, or modifying `AGENTS.md` or `CLAUDE.md` — and you can still type `/writing-for-agents` to pull it up directly.
|
Type `/writing-for-agents`, or the agent reaches for it on its own when you're creating or editing a skill, or modifying `AGENTS.md` or `CLAUDE.md`.
|
||||||
|
|
||||||
|
Reach for it by hand for everything else an agent reads: your docs, specs and tickets, system and AFK prompts. The test is one question — does an agent read this? — and it does not matter how the document gets in front of it, whether a pointer names it, a human pastes it, or it simply sits in the repo. For working out what a codebase actually contains in the first place, use [grill-with-docs](https://aihero.dev/skills-grill-with-docs) — this reference governs how a document reads, not what it knows.
|
||||||
|
|
||||||
## The two loads
|
## The two loads
|
||||||
|
|
||||||
The concept the whole reference turns on is a pair of budgets every document and pointer spends:
|
The idea the whole reference turns on is a pair of budgets every document and pointer spends:
|
||||||
|
|
||||||
- **Context load** — the cost of always-loaded material on the agent's window: an `AGENTS.md` line, a skill description, anything sitting in context every turn whether or not it fires.
|
- **Context load** — the cost of always-loaded material on the agent's window: an `AGENTS.md` line, a skill description, anything sitting in context every turn whether or not it fires.
|
||||||
- **Cognitive load** — the cost on the human: which documents exist and when to reach for each. You are the index. Not a cost to minimise — it's the price of human agency.
|
- **Cognitive load** — the cost on you: which documents exist, and when to reach for each. You are the index. Not a cost to minimise — it is the price of human agency.
|
||||||
|
|
||||||
Once you're thinking in these two loads, most authoring decisions — split or don't, inline or disclose, point or push — become the same trade made in different places.
|
Once you think in these two loads, most authoring decisions — split or don't, inline or disclose, point or push — become the same trade made in different places.
|
||||||
|
|
||||||
## The other levers
|
## The levers
|
||||||
|
|
||||||
- **Context pointers** — the reference held in context that names out-of-context material and encodes when to reach it. A skill description and an `AGENTS.md` line pointing at a doc are the same object; the pointer's *wording*, not its target, decides when and how reliably the agent reaches through it.
|
- **Context pointers** — the reference held in context that names out-of-context material and encodes when to reach it. A skill description and an `AGENTS.md` line naming a doc are the same object; the pointer's *wording*, not its target, decides how reliably the agent reaches through it.
|
||||||
- **Information hierarchy** — the ladder from in-file step, to in-file reference, to disclosed reference behind a pointer. **Progressive disclosure** is the move down that ladder so the top stays legible; **co-location** decides what sits beside each piece once placed.
|
- **Information hierarchy** — the ladder from in-file step, to in-file reference, to disclosed reference behind a pointer. **Progressive disclosure** is the move down that ladder so the top stays legible.
|
||||||
- **Completion criteria** — the clarity and demand of each step's done-condition, and the **legwork** it drives; the defence against **premature completion**.
|
- **Completion criteria** — the clarity and demand of each step's done-condition, and the **legwork** that demand drives; the defence against **premature completion**.
|
||||||
- **Leading words** — a compact concept already in the model's pretraining (*tight*, *red*, *tracer bullet*) that the agent thinks with while running the document; hunt restatements a single word can retire.
|
- **Leading words** — a compact concept already in the model's pretraining (*tight*, *red*, *tracer bullet*) that the agent thinks with while running the document. It anchors twice: execution in the body, invocation in the pointer.
|
||||||
- **Pruning** — single source of truth, relevance, and the no-op test applied sentence by sentence, against **sediment** and **sprawl**. Single source of truth reaches past the document into the environment: a doc restating what's already in `package.json`, a config file, or `--help` output is a **cache** of a lookup that was never expensive, and it's the copy that goes stale. Cache what the agent can't find by looking — the unwritten convention, the reason behind a choice.
|
- **Pruning** — single source of truth, relevance, and the no-op test applied sentence by sentence, against **duplication**, **sediment** and **sprawl**.
|
||||||
|
|
||||||
|
## Common questions
|
||||||
|
|
||||||
|
**Where did `/writing-great-skills` go?**
|
||||||
|
It is this skill, renamed in v1.1. Practitioners were already pointing it at `AGENTS.md`, docs, specs, tickets and runtime prompts long before the name caught up; structure, leading words and pruning turn out to be the craft of any text an agent reads. There is no alias — reinstall under the new name.
|
||||||
|
|
||||||
|
**"Writing for agents" — so the agent does the writing?**
|
||||||
|
The other way round. You are the author; the agent is the reader. That is the whole difficulty of the genre: you are writing for a reader who has already read everything, so explanation is waste and precision is the entire job.
|
||||||
|
|
||||||
|
**Can't I just ask the agent to write it for me?**
|
||||||
|
You can, and it will produce something verbose. Left alone the model explains what it already knows, and it will not apply the no-op test or reach for a leading word on its own. Use the reference on the draft — a review pass is where most of its value lands.
|
||||||
|
|
||||||
|
**I asked an agent to trim a document and it cut the functionality.**
|
||||||
|
Agents told to "streamline" optimise for length, because length is the thing they can see. The no-op test is behavioural, not aesthetic: delete the line and ask whether the agent's behaviour changed. When a sentence fails, delete the whole sentence rather than trim words from it — and settle a disagreement about it by running the document, not by arguing.
|
||||||
|
|
||||||
|
**How do I know when it's done?**
|
||||||
|
When it works, and you can no longer find duplication, sediment or no-ops. There is no automated eval here; the check is a manual run plus the failure-mode vocabulary as a diagnostic. When a document misbehaves, that vocabulary is also the repair kit — name the failure mode first, then fix that.
|
||||||
|
|
||||||
|
**Should this live in `CLAUDE.md` or somewhere else?**
|
||||||
|
Ask which load you want to pay. `CLAUDE.md` loads into every session unconditionally; material behind a pointer costs only the pointer's own line until it fires. Anything that applies in one context out of ten is paying context load the nine other times.
|
||||||
|
|
||||||
|
**Do I need to rewrite my documents for each new model?**
|
||||||
|
Mostly no, and over-fitting to one model is its own trap. Updating for a new model is usually another no-op pass rather than a rewrite.
|
||||||
|
|
||||||
|
**My skill only works on the exact task I built it from.**
|
||||||
|
The common route — do the work once, then have the agent write it up as a skill — over-indexes on that one run, and the exemplars come out too specific. Keep the run as evidence, then abstract deliberately: strip what belonged to that repo and those files, and write for the class of task.
|
||||||
|
|
||||||
|
**English isn't my first language. Do I lose the leading-word advantage?**
|
||||||
|
No — finding the word that packs the most behaviour into the fewest tokens is work the reference does for you. It is one of the things it is for.
|
||||||
|
|
||||||
|
## It's working if
|
||||||
|
|
||||||
|
- The document gets shorter as it gets better, and you are surprised how little is left.
|
||||||
|
- You can point at a leading word and watch it doing work in more than one place.
|
||||||
|
- Nothing is stated twice, in any form. Duplication is the most reliable sign a document was never tested.
|
||||||
|
- Reference that only one branch needs sits behind a pointer rather than in the main file.
|
||||||
|
|
||||||
## Where it fits
|
## Where it fits
|
||||||
|
|
||||||
This is a reach-for-it-anytime standalone reference — the meta-skill you consult while building the rest of the set, not a step in a chain. When you're unsure which skill or flow fits a task, [ask-matt](https://aihero.dev/skills-ask-matt) routes you over the whole set.
|
This is a reach-for-it-anytime standalone reference. It has no neighbour in the chain because it sits underneath the whole set rather than beside any one skill: every skill here was written against it, and the documents the other skills leave behind — a `CONTEXT.md` and its ADRs, a spec, a ticket — are exactly the text it governs once an agent has to read them. When you're unsure which skill or flow fits a task, [ask-matt](https://aihero.dev/skills-ask-matt) routes you over the whole set.
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
# Deprecated
|
# Deprecated
|
||||||
|
|
||||||
Skills I no longer use.
|
Skills I no longer use. This bucket is currently empty — a retired skill is deleted, and the changeset that removes it names whatever replaced it.
|
||||||
|
|
||||||
- **[design-an-interface](./design-an-interface/SKILL.md)** — Generate multiple radically different interface designs for a module using parallel sub-agents.
|
|
||||||
- **[qa](./qa/SKILL.md)** — Interactive QA session where user reports bugs conversationally and the agent files GitHub issues.
|
|
||||||
- **[request-refactor-plan](./request-refactor-plan/SKILL.md)** — Create a detailed refactor plan with tiny commits via user interview, then file it as a GitHub issue.
|
|
||||||
- **[ubiquitous-language](./ubiquitous-language/SKILL.md)** — Extract a DDD-style ubiquitous language glossary from the current conversation.
|
|
||||||
|
|||||||
@@ -1,94 +0,0 @@
|
|||||||
---
|
|
||||||
name: design-an-interface
|
|
||||||
description: Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice".
|
|
||||||
---
|
|
||||||
|
|
||||||
# Design an Interface
|
|
||||||
|
|
||||||
Based on "Design It Twice" from "A Philosophy of Software Design": your first idea is unlikely to be the best. Generate multiple radically different designs, then compare.
|
|
||||||
|
|
||||||
## Workflow
|
|
||||||
|
|
||||||
### 1. Gather Requirements
|
|
||||||
|
|
||||||
Before designing, understand:
|
|
||||||
|
|
||||||
- [ ] What problem does this module solve?
|
|
||||||
- [ ] Who are the callers? (other modules, external users, tests)
|
|
||||||
- [ ] What are the key operations?
|
|
||||||
- [ ] Any constraints? (performance, compatibility, existing patterns)
|
|
||||||
- [ ] What should be hidden inside vs exposed?
|
|
||||||
|
|
||||||
Ask: "What does this module need to do? Who will use it?"
|
|
||||||
|
|
||||||
### 2. Generate Designs (Parallel Sub-Agents)
|
|
||||||
|
|
||||||
Spawn 3+ sub-agents simultaneously using Task tool. Each must produce a **radically different** approach.
|
|
||||||
|
|
||||||
```
|
|
||||||
Prompt template for each sub-agent:
|
|
||||||
|
|
||||||
Design an interface for: [module description]
|
|
||||||
|
|
||||||
Requirements: [gathered requirements]
|
|
||||||
|
|
||||||
Constraints for this design: [assign a different constraint to each agent]
|
|
||||||
- Agent 1: "Minimize method count - aim for 1-3 methods max"
|
|
||||||
- Agent 2: "Maximize flexibility - support many use cases"
|
|
||||||
- Agent 3: "Optimize for the most common case"
|
|
||||||
- Agent 4: "Take inspiration from [specific paradigm/library]"
|
|
||||||
|
|
||||||
Output format:
|
|
||||||
1. Interface signature (types/methods)
|
|
||||||
2. Usage example (how caller uses it)
|
|
||||||
3. What this design hides internally
|
|
||||||
4. Trade-offs of this approach
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Present Designs
|
|
||||||
|
|
||||||
Show each design with:
|
|
||||||
|
|
||||||
1. **Interface signature** - types, methods, params
|
|
||||||
2. **Usage examples** - how callers actually use it in practice
|
|
||||||
3. **What it hides** - complexity kept internal
|
|
||||||
|
|
||||||
Present designs sequentially so user can absorb each approach before comparison.
|
|
||||||
|
|
||||||
### 4. Compare Designs
|
|
||||||
|
|
||||||
After showing all designs, compare them on:
|
|
||||||
|
|
||||||
- **Interface simplicity**: fewer methods, simpler params
|
|
||||||
- **General-purpose vs specialized**: flexibility vs focus
|
|
||||||
- **Implementation efficiency**: does shape allow efficient internals?
|
|
||||||
- **Depth**: small interface hiding significant complexity (good) vs large interface with thin implementation (bad)
|
|
||||||
- **Ease of correct use** vs **ease of misuse**
|
|
||||||
|
|
||||||
Discuss trade-offs in prose, not tables. Highlight where designs diverge most.
|
|
||||||
|
|
||||||
### 5. Synthesize
|
|
||||||
|
|
||||||
Often the best design combines insights from multiple options. Ask:
|
|
||||||
|
|
||||||
- "Which design best fits your primary use case?"
|
|
||||||
- "Any elements from other designs worth incorporating?"
|
|
||||||
|
|
||||||
## Evaluation Criteria
|
|
||||||
|
|
||||||
From "A Philosophy of Software Design":
|
|
||||||
|
|
||||||
**Interface simplicity**: Fewer methods, simpler params = easier to learn and use correctly.
|
|
||||||
|
|
||||||
**General-purpose**: Can handle future use cases without changes. But beware over-generalization.
|
|
||||||
|
|
||||||
**Implementation efficiency**: Does interface shape allow efficient implementation? Or force awkward internals?
|
|
||||||
|
|
||||||
**Depth**: Small interface hiding significant complexity = deep module (good). Large interface with thin implementation = shallow module (avoid).
|
|
||||||
|
|
||||||
## Anti-Patterns
|
|
||||||
|
|
||||||
- Don't let sub-agents produce similar designs - enforce radical difference
|
|
||||||
- Don't skip comparison - the value is in contrast
|
|
||||||
- Don't implement - this is purely about interface shape
|
|
||||||
- Don't evaluate based on implementation effort
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "Design an Interface"
|
|
||||||
short_description: "Explore alternative module interfaces"
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
---
|
|
||||||
name: qa
|
|
||||||
description: Interactive QA session where user reports bugs or issues conversationally, and the agent files GitHub issues. Explores the codebase in the background for context and domain language. Use when user wants to report bugs, do QA, file issues conversationally, or mentions "QA session".
|
|
||||||
---
|
|
||||||
|
|
||||||
# QA Session
|
|
||||||
|
|
||||||
Run an interactive QA session. The user describes problems they're encountering. You clarify, explore the codebase for context, and file GitHub issues that are durable, user-focused, and use the project's domain language.
|
|
||||||
|
|
||||||
## For each issue the user raises
|
|
||||||
|
|
||||||
### 1. Listen and lightly clarify
|
|
||||||
|
|
||||||
Let the user describe the problem in their own words. Ask **at most 2-3 short clarifying questions** focused on:
|
|
||||||
|
|
||||||
- What they expected vs what actually happened
|
|
||||||
- Steps to reproduce (if not obvious)
|
|
||||||
- Whether it's consistent or intermittent
|
|
||||||
|
|
||||||
Do NOT over-interview. If the description is clear enough to file, move on.
|
|
||||||
|
|
||||||
### 2. Explore the codebase in the background
|
|
||||||
|
|
||||||
While talking to the user, kick off an Agent (subagent_type=Explore) in the background to understand the relevant area. The goal is NOT to find a fix — it's to:
|
|
||||||
|
|
||||||
- Learn the domain language used in that area (check UBIQUITOUS_LANGUAGE.md)
|
|
||||||
- Understand what the feature is supposed to do
|
|
||||||
- Identify the user-facing behavior boundary
|
|
||||||
|
|
||||||
This context helps you write a better issue — but the issue itself should NOT reference specific files, line numbers, or internal implementation details.
|
|
||||||
|
|
||||||
### 3. Assess scope: single issue or breakdown?
|
|
||||||
|
|
||||||
Before filing, decide whether this is a **single issue** or needs to be **broken down** into multiple issues.
|
|
||||||
|
|
||||||
Break down when:
|
|
||||||
|
|
||||||
- The fix spans multiple independent areas (e.g. "the form validation is wrong AND the success message is missing AND the redirect is broken")
|
|
||||||
- There are clearly separable concerns that different people could work on in parallel
|
|
||||||
- The user describes something that has multiple distinct failure modes or symptoms
|
|
||||||
|
|
||||||
Keep as a single issue when:
|
|
||||||
|
|
||||||
- It's one behavior that's wrong in one place
|
|
||||||
- The symptoms are all caused by the same root behavior
|
|
||||||
|
|
||||||
### 4. File the GitHub issue(s)
|
|
||||||
|
|
||||||
Create issues with `gh issue create`. Do NOT ask the user to review first — just file and share URLs.
|
|
||||||
|
|
||||||
Issues must be **durable** — they should still make sense after major refactors. Write from the user's perspective.
|
|
||||||
|
|
||||||
#### For a single issue
|
|
||||||
|
|
||||||
Use this template:
|
|
||||||
|
|
||||||
```
|
|
||||||
## What happened
|
|
||||||
|
|
||||||
[Describe the actual behavior the user experienced, in plain language]
|
|
||||||
|
|
||||||
## What I expected
|
|
||||||
|
|
||||||
[Describe the expected behavior]
|
|
||||||
|
|
||||||
## Steps to reproduce
|
|
||||||
|
|
||||||
1. [Concrete, numbered steps a developer can follow]
|
|
||||||
2. [Use domain terms from the codebase, not internal module names]
|
|
||||||
3. [Include relevant inputs, flags, or configuration]
|
|
||||||
|
|
||||||
## Additional context
|
|
||||||
|
|
||||||
[Any extra observations from the user or from codebase exploration that help frame the issue — e.g. "this only happens when using the Docker layer, not the filesystem layer" — use domain language but don't cite files]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### For a breakdown (multiple issues)
|
|
||||||
|
|
||||||
Create issues in dependency order (blockers first) so you can reference real issue numbers.
|
|
||||||
|
|
||||||
Use this template for each sub-issue:
|
|
||||||
|
|
||||||
```
|
|
||||||
## Parent issue
|
|
||||||
|
|
||||||
#<parent-issue-number> (if you created a tracking issue) or "Reported during QA session"
|
|
||||||
|
|
||||||
## What's wrong
|
|
||||||
|
|
||||||
[Describe this specific behavior problem — just this slice, not the whole report]
|
|
||||||
|
|
||||||
## What I expected
|
|
||||||
|
|
||||||
[Expected behavior for this specific slice]
|
|
||||||
|
|
||||||
## Steps to reproduce
|
|
||||||
|
|
||||||
1. [Steps specific to THIS issue]
|
|
||||||
|
|
||||||
## Blocked by
|
|
||||||
|
|
||||||
- #<issue-number> (if this issue can't be fixed until another is resolved)
|
|
||||||
|
|
||||||
Or "None — can start immediately" if no blockers.
|
|
||||||
|
|
||||||
## Additional context
|
|
||||||
|
|
||||||
[Any extra observations relevant to this slice]
|
|
||||||
```
|
|
||||||
|
|
||||||
When creating a breakdown:
|
|
||||||
|
|
||||||
- **Prefer many thin issues over few thick ones** — each should be independently fixable and verifiable
|
|
||||||
- **Mark blocking relationships honestly** — if issue B genuinely can't be tested until issue A is fixed, say so. If they're independent, mark both as "None — can start immediately"
|
|
||||||
- **Create issues in dependency order** so you can reference real issue numbers in "Blocked by"
|
|
||||||
- **Maximize parallelism** — the goal is that multiple people (or agents) can grab different issues simultaneously
|
|
||||||
|
|
||||||
#### Rules for all issue bodies
|
|
||||||
|
|
||||||
- **No file paths or line numbers** — these go stale
|
|
||||||
- **Use the project's domain language** (check UBIQUITOUS_LANGUAGE.md if it exists)
|
|
||||||
- **Describe behaviors, not code** — "the sync service fails to apply the patch" not "applyPatch() throws on line 42"
|
|
||||||
- **Reproduction steps are mandatory** — if you can't determine them, ask the user
|
|
||||||
- **Keep it concise** — a developer should be able to read the issue in 30 seconds
|
|
||||||
|
|
||||||
After filing, print all issue URLs (with blocking relationships summarized) and ask: "Next issue, or are we done?"
|
|
||||||
|
|
||||||
### 5. Continue the session
|
|
||||||
|
|
||||||
Keep going until the user says they're done. Each issue is independent — don't batch them.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "QA"
|
|
||||||
short_description: "Conversational QA that files issues"
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
---
|
|
||||||
name: request-refactor-plan
|
|
||||||
description: Create a detailed refactor plan with tiny commits via user interview, then file it as a GitHub issue. Use when user wants to plan a refactor, create a refactoring RFC, or break a refactor into safe incremental steps.
|
|
||||||
---
|
|
||||||
|
|
||||||
This skill will be invoked when the user wants to create a refactor request. You should go through the steps below. You may skip steps if you don't consider them necessary.
|
|
||||||
|
|
||||||
1. Ask the user for a long, detailed description of the problem they want to solve and any potential ideas for solutions.
|
|
||||||
|
|
||||||
2. Explore the repo to verify their assertions and understand the current state of the codebase.
|
|
||||||
|
|
||||||
3. Ask whether they have considered other options, and present other options to them.
|
|
||||||
|
|
||||||
4. Interview the user about the implementation. Be extremely detailed and thorough.
|
|
||||||
|
|
||||||
5. Hammer out the exact scope of the implementation. Work out what you plan to change and what you plan not to change.
|
|
||||||
|
|
||||||
6. Look in the codebase to check for test coverage of this area of the codebase. If there is insufficient test coverage, ask the user what their plans for testing are.
|
|
||||||
|
|
||||||
7. Break the implementation into a plan of tiny commits. Remember Martin Fowler's advice to "make each refactoring step as small as possible, so that you can always see the program working."
|
|
||||||
|
|
||||||
8. Create a GitHub issue with the refactor plan. Use the following template for the issue description:
|
|
||||||
|
|
||||||
<refactor-plan-template>
|
|
||||||
|
|
||||||
## Problem Statement
|
|
||||||
|
|
||||||
The problem that the developer is facing, from the developer's perspective.
|
|
||||||
|
|
||||||
## Solution
|
|
||||||
|
|
||||||
The solution to the problem, from the developer's perspective.
|
|
||||||
|
|
||||||
## Commits
|
|
||||||
|
|
||||||
A LONG, detailed implementation plan. Write the plan in plain English, breaking down the implementation into the tiniest commits possible. Each commit should leave the codebase in a working state.
|
|
||||||
|
|
||||||
## Decision Document
|
|
||||||
|
|
||||||
A list of implementation decisions that were made. This can include:
|
|
||||||
|
|
||||||
- The modules that will be built/modified
|
|
||||||
- The interfaces of those modules that will be modified
|
|
||||||
- Technical clarifications from the developer
|
|
||||||
- Architectural decisions
|
|
||||||
- Schema changes
|
|
||||||
- API contracts
|
|
||||||
- Specific interactions
|
|
||||||
|
|
||||||
Do NOT include specific file paths or code snippets. They may end up being outdated very quickly.
|
|
||||||
|
|
||||||
## Testing Decisions
|
|
||||||
|
|
||||||
A list of testing decisions that were made. Include:
|
|
||||||
|
|
||||||
- A description of what makes a good test (only test external behavior, not implementation details)
|
|
||||||
- Which modules will be tested
|
|
||||||
- Prior art for the tests (i.e. similar types of tests in the codebase)
|
|
||||||
|
|
||||||
## Out of Scope
|
|
||||||
|
|
||||||
A description of the things that are out of scope for this refactor.
|
|
||||||
|
|
||||||
## Further Notes (optional)
|
|
||||||
|
|
||||||
Any further notes about the refactor.
|
|
||||||
|
|
||||||
</refactor-plan-template>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "Request Refactor Plan"
|
|
||||||
short_description: "Plan a safe incremental refactor"
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
---
|
|
||||||
name: ubiquitous-language
|
|
||||||
description: Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
|
|
||||||
disable-model-invocation: true
|
|
||||||
---
|
|
||||||
|
|
||||||
# Ubiquitous Language
|
|
||||||
|
|
||||||
Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to a local file.
|
|
||||||
|
|
||||||
## Process
|
|
||||||
|
|
||||||
1. **Scan the conversation** for domain-relevant nouns, verbs, and concepts
|
|
||||||
2. **Identify problems**:
|
|
||||||
- Same word used for different concepts (ambiguity)
|
|
||||||
- Different words used for the same concept (synonyms)
|
|
||||||
- Vague or overloaded terms
|
|
||||||
3. **Propose a canonical glossary** with opinionated term choices
|
|
||||||
4. **Write to `UBIQUITOUS_LANGUAGE.md`** in the working directory using the format below
|
|
||||||
5. **Output a summary** inline in the conversation
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
|
|
||||||
Write a `UBIQUITOUS_LANGUAGE.md` file with this structure:
|
|
||||||
|
|
||||||
```md
|
|
||||||
# Ubiquitous Language
|
|
||||||
|
|
||||||
## Order lifecycle
|
|
||||||
|
|
||||||
| Term | Definition | Aliases to avoid |
|
|
||||||
| ----------- | ------------------------------------------------------- | --------------------- |
|
|
||||||
| **Order** | A customer's request to purchase one or more items | Purchase, transaction |
|
|
||||||
| **Invoice** | A request for payment sent to a customer after delivery | Bill, payment request |
|
|
||||||
|
|
||||||
## People
|
|
||||||
|
|
||||||
| Term | Definition | Aliases to avoid |
|
|
||||||
| ------------ | ------------------------------------------- | ---------------------- |
|
|
||||||
| **Customer** | A person or organization that places orders | Client, buyer, account |
|
|
||||||
| **User** | An authentication identity in the system | Login, account |
|
|
||||||
|
|
||||||
## Relationships
|
|
||||||
|
|
||||||
- An **Invoice** belongs to exactly one **Customer**
|
|
||||||
- An **Order** produces one or more **Invoices**
|
|
||||||
|
|
||||||
## Example dialogue
|
|
||||||
|
|
||||||
> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
|
|
||||||
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed. A single **Order** can produce multiple **Invoices** if items ship in separate **Shipments**."
|
|
||||||
> **Dev:** "So if a **Shipment** is cancelled before dispatch, no **Invoice** exists for it?"
|
|
||||||
> **Domain expert:** "Exactly. The **Invoice** lifecycle is tied to the **Fulfillment**, not the **Order**."
|
|
||||||
|
|
||||||
## Flagged ambiguities
|
|
||||||
|
|
||||||
- "account" was used to mean both **Customer** and **User** — these are distinct concepts: a **Customer** places orders, while a **User** is an authentication identity that may or may not represent a **Customer**.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others as aliases to avoid.
|
|
||||||
- **Flag conflicts explicitly.** If a term is used ambiguously in the conversation, call it out in the "Flagged ambiguities" section with a clear recommendation.
|
|
||||||
- **Only include terms relevant for domain experts.** Skip the names of modules or classes unless they have meaning in the domain language.
|
|
||||||
- **Keep definitions tight.** One sentence max. Define what it IS, not what it does.
|
|
||||||
- **Show relationships.** Use bold term names and express cardinality where obvious.
|
|
||||||
- **Only include domain terms.** Skip generic programming concepts (array, function, endpoint) unless they have domain-specific meaning.
|
|
||||||
- **Group terms into multiple tables** when natural clusters emerge (e.g. by subdomain, lifecycle, or actor). Each group gets its own heading and table. If all terms belong to a single cohesive domain, one table is fine — don't force groupings.
|
|
||||||
- **Write an example dialogue.** A short conversation (3-5 exchanges) between a dev and a domain expert that demonstrates how the terms interact naturally. The dialogue should clarify boundaries between related concepts and show terms being used precisely.
|
|
||||||
|
|
||||||
<example>
|
|
||||||
|
|
||||||
## Example dialogue
|
|
||||||
|
|
||||||
> **Dev:** "How do I test the **sync service** without Docker?"
|
|
||||||
|
|
||||||
> **Domain expert:** "Provide the **filesystem layer** instead of the **Docker layer**. It implements the same **Sandbox service** interface but uses a local directory as the **sandbox**."
|
|
||||||
|
|
||||||
> **Dev:** "So **sync-in** still creates a **bundle** and unpacks it?"
|
|
||||||
|
|
||||||
> **Domain expert:** "Exactly. The **sync service** doesn't know which layer it's talking to. It calls `exec` and `copyIn` — the **filesystem layer** just runs those as local shell commands."
|
|
||||||
|
|
||||||
</example>
|
|
||||||
|
|
||||||
## Re-running
|
|
||||||
|
|
||||||
When invoked again in the same conversation:
|
|
||||||
|
|
||||||
1. Read the existing `UBIQUITOUS_LANGUAGE.md`
|
|
||||||
2. Incorporate any new terms from subsequent discussion
|
|
||||||
3. Update definitions if understanding has evolved
|
|
||||||
4. Re-flag any new ambiguities
|
|
||||||
5. Rewrite the example dialogue to incorporate new terms
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "Ubiquitous Language"
|
|
||||||
short_description: "Build a shared domain glossary"
|
|
||||||
policy:
|
|
||||||
allow_implicit_invocation: false
|
|
||||||
@@ -79,6 +79,7 @@ Off the main flow entirely.
|
|||||||
- **`/research`** — delegate reading legwork to a **background agent**: it investigates a question against **primary sources**, then leaves a cited Markdown file in the repo. Keep working while it reads. The file it produces is something to take *into* the main flow at `/grill-with-docs` — research feeds the thinking, it doesn't replace it.
|
- **`/research`** — delegate reading legwork to a **background agent**: it investigates a question against **primary sources**, then leaves a cited Markdown file in the repo. Keep working while it reads. The file it produces is something to take *into* the main flow at `/grill-with-docs` — research feeds the thinking, it doesn't replace it.
|
||||||
- **`/to-questionnaire`** — when the thing blocking you isn't in your head or the codebase but in **someone else's**, this writes them a questionnaire to fill in. It's the inverse of `/grill-me`: instead of interviewing you about the subject, it interviews you about the **send** — who it's going to, what you need back — and aims the questions at the gap. What comes back is material for `/grill-with-docs` or `/to-spec`.
|
- **`/to-questionnaire`** — when the thing blocking you isn't in your head or the codebase but in **someone else's**, this writes them a questionnaire to fill in. It's the inverse of `/grill-me`: instead of interviewing you about the subject, it interviews you about the **send** — who it's going to, what you need back — and aims the questions at the gap. What comes back is material for `/grill-with-docs` or `/to-spec`.
|
||||||
- **`/wizard`** — for the steps only a **human** can take: clicking through a third-party dashboard, running a one-off migration, moving the project from state A to state B. It generates an interactive bash script that opens each URL, captures each value, and writes it into `.env` and GitHub secrets — so the procedure stops being something you re-explain to an agent every time. If the agent could just do it itself, it should; reach for this only where a human is genuinely in the loop.
|
- **`/wizard`** — for the steps only a **human** can take: clicking through a third-party dashboard, running a one-off migration, moving the project from state A to state B. It generates an interactive bash script that opens each URL, captures each value, and writes it into `.env` and GitHub secrets — so the procedure stops being something you re-explain to an agent every time. If the agent could just do it itself, it should; reach for this only where a human is genuinely in the loop.
|
||||||
|
- **`/wait-what`** — the fire extinguisher for a message that didn't land. Fire it mid-conversation, inside any other skill, and the agent re-pitches what it just said with the context you were missing, in plain English, using the `CONTEXT.md` vocabulary. It's the in-the-moment corrective; `/grill-with-docs` and `/domain-modeling` are the upfront cure, because a shared language agreed early is what stops the jargon arriving at all.
|
||||||
- **`/teach`** — learn a concept over multiple sessions, using the current directory as a stateful workspace.
|
- **`/teach`** — learn a concept over multiple sessions, using the current directory as a stateful workspace.
|
||||||
- **`/writing-for-agents`** — reference for writing documents agents consume: skills, AGENTS.md, pointed-at docs.
|
- **`/writing-for-agents`** — reference for writing documents agents consume: skills, AGENTS.md, pointed-at docs.
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ Lead each section with the recommended answer so the user can accept it in a wor
|
|||||||
|
|
||||||
**Section A — Issue tracker.**
|
**Section A — Issue tracker.**
|
||||||
|
|
||||||
> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe. Pick the place you actually track work for this repo.
|
> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, and `to-spec` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe. Pick the place you actually track work for this repo.
|
||||||
|
|
||||||
Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose that. If a `git remote` points at GitLab (`gitlab.com` or a self-hosted host), propose GitLab. Otherwise (or if the user prefers), offer:
|
Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose that. If a `git remote` points at GitLab (`gitlab.com` or a self-hosted host), propose GitLab. Otherwise (or if the user prefers), offer:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
# In Progress
|
# In Progress
|
||||||
|
|
||||||
Skills that are still being developed. They're not ready to ship — expect rough edges, breaking changes, and abandoned experiments. They're excluded from the plugin and the top-level README until they graduate to a stable bucket.
|
Beta. These skills are public on purpose — try them and tell me what breaks. They're excluded from the plugin and the top-level README until they graduate to a stable bucket, they get no docs pages, and they can change or disappear without warning.
|
||||||
|
|
||||||
|
The plugin won't give you these. Install one directly:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx skills@latest add mattpocock/skills --skill=<name>
|
||||||
|
```
|
||||||
|
|
||||||
- **[loop-me](./loop-me/SKILL.md)** — Grill yourself into implementable workflow specs over multiple sessions, using the current directory as a stateful workspace. User-invoked.
|
- **[loop-me](./loop-me/SKILL.md)** — Grill yourself into implementable workflow specs over multiple sessions, using the current directory as a stateful workspace. User-invoked.
|
||||||
- **[writing-beats](./writing-beats/SKILL.md)** — Shape an article as a journey of beats, choose-your-own-adventure style. Pick a starting beat, write only that beat, then pivot to the next, until the article reaches a natural end.
|
- **[writing-beats](./writing-beats/SKILL.md)** — Shape an article as a journey of beats, choose-your-own-adventure style. Pick a starting beat, write only that beat, then pivot to the next, until the article reaches a natural end.
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
# Personal
|
|
||||||
|
|
||||||
Skills tied to my own setup, not promoted in the plugin.
|
|
||||||
|
|
||||||
- **[edit-article](./edit-article/SKILL.md)** — Edit and improve articles by restructuring sections, improving clarity, and tightening prose.
|
|
||||||
- **[obsidian-vault](./obsidian-vault/SKILL.md)** — Search, create, and manage notes in an Obsidian vault with wikilinks and index notes.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
name: edit-article
|
|
||||||
description: Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
|
|
||||||
disable-model-invocation: true
|
|
||||||
---
|
|
||||||
|
|
||||||
1. First, divide the article into sections based on its headings. Think about the main points you want to make during those sections.
|
|
||||||
|
|
||||||
Consider that information is a directed acyclic graph, and that pieces of information can depend on other pieces of information. Make sure that the order of the sections and their contents respects these dependencies.
|
|
||||||
|
|
||||||
Confirm the sections with the user.
|
|
||||||
|
|
||||||
2. For each section:
|
|
||||||
|
|
||||||
2a. Rewrite the section to improve clarity, coherence, and flow. Use maximum 240 characters per paragraph.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "Edit Article"
|
|
||||||
short_description: "Restructure and tighten a draft"
|
|
||||||
policy:
|
|
||||||
allow_implicit_invocation: false
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
---
|
|
||||||
name: obsidian-vault
|
|
||||||
description: Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. Use when user wants to find, create, or organize notes in Obsidian.
|
|
||||||
---
|
|
||||||
|
|
||||||
# Obsidian Vault
|
|
||||||
|
|
||||||
## Vault location
|
|
||||||
|
|
||||||
`/mnt/d/Obsidian Vault/AI Research/`
|
|
||||||
|
|
||||||
Mostly flat at root level.
|
|
||||||
|
|
||||||
## Naming conventions
|
|
||||||
|
|
||||||
- **Index notes**: aggregate related topics (e.g., `Ralph Wiggum Index.md`, `Skills Index.md`, `RAG Index.md`)
|
|
||||||
- **Title case** for all note names
|
|
||||||
- No folders for organization - use links and index notes instead
|
|
||||||
|
|
||||||
## Linking
|
|
||||||
|
|
||||||
- Use Obsidian `[[wikilinks]]` syntax: `[[Note Title]]`
|
|
||||||
- Notes link to dependencies/related notes at the bottom
|
|
||||||
- Index notes are just lists of `[[wikilinks]]`
|
|
||||||
|
|
||||||
## Workflows
|
|
||||||
|
|
||||||
### Search for notes
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Search by filename
|
|
||||||
find "/mnt/d/Obsidian Vault/AI Research/" -name "*.md" | grep -i "keyword"
|
|
||||||
|
|
||||||
# Search by content
|
|
||||||
grep -rl "keyword" "/mnt/d/Obsidian Vault/AI Research/" --include="*.md"
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use Grep/Glob tools directly on the vault path.
|
|
||||||
|
|
||||||
### Create a new note
|
|
||||||
|
|
||||||
1. Use **Title Case** for filename
|
|
||||||
2. Write content as a unit of learning (per vault rules)
|
|
||||||
3. Add `[[wikilinks]]` to related notes at the bottom
|
|
||||||
4. If part of a numbered sequence, use the hierarchical numbering scheme
|
|
||||||
|
|
||||||
### Find related notes
|
|
||||||
|
|
||||||
Search for `[[Note Title]]` across the vault to find backlinks:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grep -rl "\\[\\[Note Title\\]\\]" "/mnt/d/Obsidian Vault/AI Research/"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Find index notes
|
|
||||||
|
|
||||||
```bash
|
|
||||||
find "/mnt/d/Obsidian Vault/AI Research/" -name "*Index*"
|
|
||||||
```
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
interface:
|
|
||||||
display_name: "Obsidian Vault"
|
|
||||||
short_description: "Manage linked notes in Obsidian"
|
|
||||||
@@ -10,6 +10,7 @@ Reachable only when you type them (Claude Code: `disable-model-invocation: true`
|
|||||||
- **[handoff](./handoff/SKILL.md)** — Compact the current conversation into a handoff document so another agent can continue the work.
|
- **[handoff](./handoff/SKILL.md)** — Compact the current conversation into a handoff document so another agent can continue the work.
|
||||||
- **[teach](./teach/SKILL.md)** — Teach the user a new skill or concept over multiple sessions, using the current directory as a stateful teaching workspace.
|
- **[teach](./teach/SKILL.md)** — Teach the user a new skill or concept over multiple sessions, using the current directory as a stateful teaching workspace.
|
||||||
- **[to-questionnaire](./to-questionnaire/SKILL.md)** — Turn a decision you can't answer alone into a Markdown questionnaire for the one person who can — filled in async, or together over a meeting.
|
- **[to-questionnaire](./to-questionnaire/SKILL.md)** — Turn a decision you can't answer alone into a Markdown questionnaire for the one person who can — filled in async, or together over a meeting.
|
||||||
|
- **[wait-what](./wait-what/SKILL.md)** — Fire this the moment a message doesn't land. The agent re-pitches it with the context you're missing, in plain English, using your `CONTEXT.md` vocabulary.
|
||||||
- **[writing-for-agents](./writing-for-agents/SKILL.md)** — Writing documents for agents: skills, AGENTS.md/CLAUDE.md, and any doc an agent reaches by a pointer.
|
- **[writing-for-agents](./writing-for-agents/SKILL.md)** — Writing documents for agents: skills, AGENTS.md/CLAUDE.md, and any doc an agent reaches by a pointer.
|
||||||
|
|
||||||
## Model-invoked
|
## Model-invoked
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
name: wait-what
|
||||||
|
description: Stop. That last message did not land — re-pitch it.
|
||||||
|
disable-model-invocation: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Wait — I don't understand where you've got to here. Re-pitch that: give me a little bit of context, talk in ASD-STE100 Simplified Technical English, and use the ubiquitous language from `CONTEXT.md`.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
interface:
|
||||||
|
display_name: "Wait What"
|
||||||
|
short_description: "Re-pitch that — simpler, with the context I'm missing"
|
||||||
|
policy:
|
||||||
|
allow_implicit_invocation: false
|
||||||
Reference in New Issue
Block a user