Recommend skills for a role — ranked by four explained classes (most-useful-for-role, related-to-current-task, recently-adopted, popular-in-role). Local-only; every result carries a why.
Scanned 6/5/2026
Install via CLI
openskills install event4u-app/agent-config---
model_tier: medium
name: skills:discover
pack: meta
tier: 2
cluster: skills
sub: discover
description: Recommend skills for a role — ranked by four explained classes (most-useful-for-role, related-to-current-task, recently-adopted, popular-in-role). Local-only; every result carries a why.
skills: [file-editor]
suggestion:
eligible: true
trigger_description: "which skills should I use, recommend skills for my role, what fits this work, help me find a skill, /skills:discover sales"
trigger_context: "user wants a short, explained skill shortlist instead of scanning the 220-skill catalog"
workspaces:
- agent-config-maintainer
packs:
- meta
---
# /skills discover
Surfaces a short, explained skill shortlist for a role. Reuses existing local
signals only — the skill catalog frontmatter, the role's `skills.yml`
shortlist, and (when present and not opted out) the local-analytics JSONL.
Implements the [`skill-discovery`](../../../docs/contracts/skill-discovery.md)
contract. Local-only, read-only, no network.
## Prerequisites
- Python 3.10 + PyYAML on the host (already a package dependency).
- A role id — passed as `[role]`, or the active role from
`.agent-settings.yml` → `roles.active_role`.
## Steps
### 1. Resolve the role
The user invokes `/skills discover [role]`. The role is the first positional
argument. If omitted, the recommender falls back to `roles.active_role`. If
neither resolves, it prints the available roles and stops — do not guess.
### 2. Run the recommender
```bash
python3 scripts/skill_discovery.py --role <role>
```
Optional flags: `--format json` (machine-readable), `--limit N` (results per
class, default 5). The script is pure-local and writes nothing.
### 3. Present the table
Render the recommender's Markdown table to the user:
`skill · class · why · first command`. Each row's `why` names the *signal*
(role match, domain adjacency, recent adoption, role popularity) — never a
bare score. The four classes are:
- `most-useful-for-role` — the role's priority shortlist.
- `related-to-current-task` — same-domain peers not already shortlisted.
- `recently-adopted` — used recently in this workspace (analytics) or the
shortlist tail when no usage signal exists yet.
- `popular-in-role` — launched most by this role locally (analytics) or the
shortlist when no usage signal exists yet.
### 4. Offer the first command
Each row carries a `first command` — the natural way to start with that skill.
Suggest the user pick one and run it. Do **not** auto-invoke a skill.
## Rules
- **Local-only, read-only.** No network, no writes, no prompt/response bodies.
- **Every result has a non-empty `why`** — a contract invariant.
- **Analytics opt-out honoured.** `AGENT_CONFIG_NO_LOCAL_ANALYTICS` env or
`analytics.local: off` → the analytics-backed classes fall back to the role
shortlist with an honest `why`; the surface never fabricates a usage signal.
- **One role per invocation.** Do not chain.
No comments yet. Be the first to comment!