Skill Router
The library holds 191 skills across 15 categories. This skill answers which ones
apply to a task, and how to combine them.
Core Concepts
Route on the Task, Not the Technology
"Fix this slow query" is not a PostgreSQL question until you know the query is
in PostgreSQL. Start from what the user is trying to do, then narrow by the
technology actually in the repository.
Two Shapes of Skill
| Shape |
Naming |
Answers |
Examples |
| Domain expertise |
<domain>-expert |
"How does X work, and what is good practice?" |
postgresql-expert, react-expert |
| Procedure |
<activity>-workflow |
"What do I do, in what order?" |
tdd-workflow, debugging-workflow |
A task usually needs one of each: the workflow drives the sequence, the expert
supplies the judgement inside it.
Compose, Don't Concatenate
Loading five skills fills the context and dilutes attention. Load the workflow
plus the one or two experts whose material the task actually touches, and consult
a third only if the work reaches it.
Finding a Skill
The catalogue is machine-readable and is the fastest route:
# By keyword across names, descriptions and tags
jq -r '.skills[] | select(
(.name + " " + .description + " " + (.tags | join(" ")))
| ascii_downcase | contains("kafka")
) | "\(.category)/\(.name)"' stdlib/catalog/skill-catalog.json
# Everything in a category
jq -r '.skills[] | select(.category == "security") | .name' stdlib/catalog/skill-index.json
# What a skill covers, before loading it
jq -r '.skills[] | select(.name == "rag-expert") | .description' stdlib/catalog/skill-catalog.json
Or by filesystem, which is often quicker for a name you half-remember:
find stdlib -maxdepth 2 -type d -name '*postgres*'
grep -rl "watermark" stdlib --include=SKILL.md
Every description contains an explicit Use when … clause naming the keywords
and tasks that should select it. Read that clause rather than guessing from the
name.
The Category Map
| Category |
Holds |
Reach for it when |
workflows/ |
Procedures: TDD, refactoring, debugging, code review |
The question is "how do I proceed?" |
languages/ |
23 programming languages |
Idiom, tooling, or language-specific behaviour |
frameworks/ |
15 web, mobile and desktop frameworks |
Framework conventions and lifecycle |
api/ |
REST, GraphQL, gRPC, OpenAPI, microservices |
Designing or consuming an interface |
data/ |
Databases, warehouses, pipelines, BI |
Storage, queries, analytics, streaming |
devops/ |
Containers, orchestration, IaC, CI/CD, observability |
Build, deploy, run |
cloud/ |
AWS, Azure, GCP, Cloudflare |
Provider-specific services |
ai/ |
ML, LLM engineering, RAG, agents |
Anything model-based |
security/ |
AppSec, identity, secrets, supply chain, compliance |
A security question, at any stage |
qa/ |
Test frameworks, load, chaos |
Writing or running tests |
tools/ |
Git, documents, browsers, chat platforms, this skill |
Working with a tool rather than a domain |
domains/ |
Industry verticals and enterprise platforms |
Domain rules: healthcare, finance, SAP |
professional/ |
Accounting, legal, banking, FinOps, standards |
Non-engineering expertise |
scientific/ |
Research, quantum, biology |
Scientific computing |
design/ |
Architecture patterns, accessibility |
Structure or interface quality |
Note that design/design-expert covers software architecture, not visual
design — a legacy naming artefact. accessibility-expert is the interface skill.
Choosing Between Overlapping Skills
Several pairs look similar. The distinctions that matter:
| If the task is… |
Use |
Not |
| Driving a browser to test your own app |
playwright-expert |
browser-automation-expert |
| Driving a browser to get data from a site |
browser-automation-expert |
playwright-expert |
| The process of reviewing a change |
code-review-workflow |
code-review-expert |
| What good code looks like per dimension |
code-review-expert |
code-review-workflow |
| A security breach investigation |
incident-response-expert |
debugging-workflow |
| A production defect, no attacker |
debugging-workflow |
incident-response-expert |
| Transactional workload, rows |
postgresql-expert, mysql-expert |
analytical-databases-expert |
| Aggregates over huge tables |
analytical-databases-expert |
postgresql-expert |
| Moving events continuously |
stream-processing-expert |
airflow-expert |
| Scheduled batch orchestration |
airflow-expert |
stream-processing-expert |
| Prompt design and model output |
llm-engineering-expert |
agent-engineering-expert |
| A model that calls tools |
agent-engineering-expert |
llm-engineering-expert |
| Answering over your documents |
rag-expert |
elasticsearch-expert |
Composition Patterns
Common tasks and the skills that serve them:
"Add a feature to our API, test-first"
tdd-workflow (the loop) → api-design-expert (contract) → the language skill →
code-review-workflow (before merge)
"Our checkout is slow"
debugging-workflow (method) → performance-expert (measurement) → the database
or framework skill, once measurement says which
"Build an assistant over our documentation"
rag-expert (retrieval) → llm-engineering-expert (generation and evaluation) →
agent-engineering-expert (only if it calls tools) → identity-access-expert
(who may see which documents)
"Harden our release pipeline"
supply-chain-security-expert (provenance, SBOM) → cicd-expert (pipeline) →
secrets-management-expert (credentials)
"Make the dashboard accessible"
accessibility-expert (conformance) → the framework skill (implementation) →
qa-expert (regression coverage)
"Migrate a large table with no downtime"
refactoring-workflow (parallel change) → the database skill (mechanics) →
sre-expert (rollout and rollback)
When No Skill Fits
Before concluding a skill is missing:
- Search the catalogue by tag, not by the name you expected.
- Check
references/ — the topic may be a section inside a broader skill.
rails lives in ruby-expert, spark in databricks-expert and
analytical-databases-expert.
- Check whether a broader skill covers it.
vector-databases is inside
rag-expert by design, because the choice only matters in that context.
If it is genuinely absent, the test for adding one is whether it is a distinct
decision context rather than a distinct technology. Five vector stores share
one mental model and belong in one skill with per-store references; MySQL and
PostgreSQL differ enough in design consequences to warrant separate skills.
Use skill-creator-expert to author it, and scripts/validate-skills.py to
check conformance.
Best Practices
- Read the
Use when clause before loading a skill; it is written to be the
routing signal.
- Start with the workflow when the question is procedural — it will name the
expert skills it needs.
- Load two or three skills, not six. Add a fourth when the work reaches it.
- Prefer the specific skill.
mysql-expert over sql-expert when the
database is MySQL.
- Consult
security/ early, not as a final review — the cheapest security
fixes are design decisions.
- Follow the reference links rather than loading a second skill for a detail;
references/ is where the depth lives.
Anti-Patterns
- Routing on a keyword in isolation. "Java" in "JavaScript" is not
java-expert.
- Loading every plausibly related skill — dilutes attention and fills the
context budget.
- Picking the general skill when a specific one exists.
- Skipping the workflow skill and improvising the procedure.
- Assuming a topic is missing because the skill is not named after it.
Resources
stdlib/catalog/skill-index.json — name, category, path, tags
stdlib/catalog/skill-catalog.json — full descriptions, sizes, reference lists
stdlib/SKILLS_INVENTORY.md — human-readable listing by category
stdlib/CHANGELOG.md — versioning and migration notes
skill-creator-expert — authoring a new skill
1---2name: skill-router3description: Find the right skill in the PCL standard library and compose several when a task spans domains. Use when the user asks which skill applies, cannot find a capability, wants to know what the library covers, is starting a task that spans several domains, or when the task involves choosing between overlapping skills, discovering skills by keyword, or deciding whether a new skill is needed.4---5
6# Skill Router
7
8The library holds 191 skills across 15 categories. This skill answers which ones
9apply to a task, and how to combine them.
10
11## Core Concepts
12
13### Route on the Task, Not the Technology
14
15"Fix this slow query" is not a PostgreSQL question until you know the query is
16in PostgreSQL. Start from what the user is trying to do, then narrow by the
17technology actually in the repository.
18
19### Two Shapes of Skill
20
21| Shape | Naming | Answers | Examples |
22| -------------------- | --------------------- | --------------------------------------------- | ------------------------------------ |
23| **Domain expertise** | `<domain>-expert` | "How does X work, and what is good practice?" | `postgresql-expert`, `react-expert` |
24| **Procedure** | `<activity>-workflow` | "What do I do, in what order?" | `tdd-workflow`, `debugging-workflow` |
25
26A task usually needs one of each: the workflow drives the sequence, the expert
27supplies the judgement inside it.
28
29### Compose, Don't Concatenate
30
31Loading five skills fills the context and dilutes attention. Load the workflow
32plus the one or two experts whose material the task actually touches, and consult
33a third only if the work reaches it.
34
35## Finding a Skill
36
37The catalogue is machine-readable and is the fastest route:
38
39```bash
40# By keyword across names, descriptions and tags
41jq -r '.skills[] | select(
42 (.name + " " + .description + " " + (.tags | join(" ")))
43 | ascii_downcase | contains("kafka")
44 ) | "\(.category)/\(.name)"' stdlib/catalog/skill-catalog.json
45
46# Everything in a category
47jq -r '.skills[] | select(.category == "security") | .name' stdlib/catalog/skill-index.json
48
49# What a skill covers, before loading it
50jq -r '.skills[] | select(.name == "rag-expert") | .description' stdlib/catalog/skill-catalog.json
51```
52
53Or by filesystem, which is often quicker for a name you half-remember:
54
55```bash
56find stdlib -maxdepth 2 -type d -name '*postgres*'
57grep -rl "watermark" stdlib --include=SKILL.md
58```
59
60Every description contains an explicit `Use when …` clause naming the keywords
61and tasks that should select it. Read that clause rather than guessing from the
62name.
63
64## The Category Map
65
66| Category | Holds | Reach for it when |
67| --------------- | ---------------------------------------------------- | ---------------------------------------------- |
68| `workflows/` | Procedures: TDD, refactoring, debugging, code review | The question is "how do I proceed?" |
69| `languages/` | 23 programming languages | Idiom, tooling, or language-specific behaviour |
70| `frameworks/` | 15 web, mobile and desktop frameworks | Framework conventions and lifecycle |
71| `api/` | REST, GraphQL, gRPC, OpenAPI, microservices | Designing or consuming an interface |
72| `data/` | Databases, warehouses, pipelines, BI | Storage, queries, analytics, streaming |
73| `devops/` | Containers, orchestration, IaC, CI/CD, observability | Build, deploy, run |
74| `cloud/` | AWS, Azure, GCP, Cloudflare | Provider-specific services |
75| `ai/` | ML, LLM engineering, RAG, agents | Anything model-based |
76| `security/` | AppSec, identity, secrets, supply chain, compliance | A security question, at any stage |
77| `qa/` | Test frameworks, load, chaos | Writing or running tests |
78| `tools/` | Git, documents, browsers, chat platforms, this skill | Working with a tool rather than a domain |
79| `domains/` | Industry verticals and enterprise platforms | Domain rules: healthcare, finance, SAP |
80| `professional/` | Accounting, legal, banking, FinOps, standards | Non-engineering expertise |
81| `scientific/` | Research, quantum, biology | Scientific computing |
82| `design/` | Architecture patterns, accessibility | Structure or interface quality |
83
84Note that `design/design-expert` covers **software architecture**, not visual
85design — a legacy naming artefact. `accessibility-expert` is the interface skill.
86
87## Choosing Between Overlapping Skills
88
89Several pairs look similar. The distinctions that matter:
90
91| If the task is… | Use | Not |
92| ------------------------------------------- | ----------------------------------- | ----------------------------- |
93| Driving a browser to _test your own app_ | `playwright-expert` | `browser-automation-expert` |
94| Driving a browser to _get data from a site_ | `browser-automation-expert` | `playwright-expert` |
95| The _process_ of reviewing a change | `code-review-workflow` | `code-review-expert` |
96| _What good code looks like_ per dimension | `code-review-expert` | `code-review-workflow` |
97| A security breach investigation | `incident-response-expert` | `debugging-workflow` |
98| A production defect, no attacker | `debugging-workflow` | `incident-response-expert` |
99| Transactional workload, rows | `postgresql-expert`, `mysql-expert` | `analytical-databases-expert` |
100| Aggregates over huge tables | `analytical-databases-expert` | `postgresql-expert` |
101| Moving events continuously | `stream-processing-expert` | `airflow-expert` |
102| Scheduled batch orchestration | `airflow-expert` | `stream-processing-expert` |
103| Prompt design and model output | `llm-engineering-expert` | `agent-engineering-expert` |
104| A model that _calls tools_ | `agent-engineering-expert` | `llm-engineering-expert` |
105| Answering over your documents | `rag-expert` | `elasticsearch-expert` |
106
107## Composition Patterns
108
109Common tasks and the skills that serve them:
110
111**"Add a feature to our API, test-first"**
112`tdd-workflow` (the loop) → `api-design-expert` (contract) → the language skill →
113`code-review-workflow` (before merge)
114
115**"Our checkout is slow"**
116`debugging-workflow` (method) → `performance-expert` (measurement) → the database
117or framework skill, once measurement says which
118
119**"Build an assistant over our documentation"**
120`rag-expert` (retrieval) → `llm-engineering-expert` (generation and evaluation) →
121`agent-engineering-expert` (only if it calls tools) → `identity-access-expert`
122(who may see which documents)
123
124**"Harden our release pipeline"**
125`supply-chain-security-expert` (provenance, SBOM) → `cicd-expert` (pipeline) →
126`secrets-management-expert` (credentials)
127
128**"Make the dashboard accessible"**
129`accessibility-expert` (conformance) → the framework skill (implementation) →
130`qa-expert` (regression coverage)
131
132**"Migrate a large table with no downtime"**
133`refactoring-workflow` (parallel change) → the database skill (mechanics) →
134`sre-expert` (rollout and rollback)
135
136## When No Skill Fits
137
138Before concluding a skill is missing:
139
1401. **Search the catalogue by tag**, not by the name you expected.
1412. **Check `references/`** — the topic may be a section inside a broader skill.
142 `rails` lives in `ruby-expert`, `spark` in `databricks-expert` and
143 `analytical-databases-expert`.
1443. **Check whether a broader skill covers it.** `vector-databases` is inside
145 `rag-expert` by design, because the choice only matters in that context.
146
147If it is genuinely absent, the test for adding one is whether it is a distinct
148_decision context_ rather than a distinct technology. Five vector stores share
149one mental model and belong in one skill with per-store references; MySQL and
150PostgreSQL differ enough in design consequences to warrant separate skills.
151
152Use `skill-creator-expert` to author it, and `scripts/validate-skills.py` to
153check conformance.
154
155## Best Practices
156
157- **Read the `Use when` clause** before loading a skill; it is written to be the
158 routing signal.
159- **Start with the workflow** when the question is procedural — it will name the
160 expert skills it needs.
161- **Load two or three skills, not six.** Add a fourth when the work reaches it.
162- **Prefer the specific skill.** `mysql-expert` over `sql-expert` when the
163 database is MySQL.
164- **Consult `security/` early**, not as a final review — the cheapest security
165 fixes are design decisions.
166- **Follow the reference links** rather than loading a second skill for a detail;
167 `references/` is where the depth lives.
168
169## Anti-Patterns
170
171- **Routing on a keyword in isolation.** "Java" in "JavaScript" is not
172 `java-expert`.
173- **Loading every plausibly related skill** — dilutes attention and fills the
174 context budget.
175- **Picking the general skill** when a specific one exists.
176- **Skipping the workflow skill** and improvising the procedure.
177- **Assuming a topic is missing** because the skill is not named after it.
178
179## Resources
180
181- `stdlib/catalog/skill-index.json` — name, category, path, tags
182- `stdlib/catalog/skill-catalog.json` — full descriptions, sizes, reference lists
183- `stdlib/SKILLS_INVENTORY.md` — human-readable listing by category
184- `stdlib/CHANGELOG.md` — versioning and migration notes
185- `skill-creator-expert` — authoring a new skill