microsoft/discovery-catalog
Inventory the contents of this Discovery catalog repo. Lists publishers, agents, starter-kits, and the tools shipped under each agent. Use this skill whenever the user asks what's in the catalog, who publishes what, what agents/tools/starter-kits exist, lists or counts of any of those, "show me the catalog", "do we have an agent for X", "what starter kits do we have", "list the publishers", "list tools per agent", or any inventory/discovery question about repo-resident assets — even if the user doesn't explicitly say the word "list".
npx skills add https://github.com/microsoft/discovery --skill discovery-catalog
This skill is read-only and runs on Windows, macOS, and Linux through PowerShell. PowerShell 7+ (pwsh) is recommended for consistent table rendering, though the dispatcher also works in Windows PowerShell 5.1 with less polished wrapping.
Read-only inventory of the Discovery catalog repo. One dispatcher script (scripts/discovery-catalog.ps1) supports list and item-inspection invocations:
| Invocation | What it lists |
|---|---|
| discovery-catalog publishers | Every publisher across agents/ and starter-kits/, with per-publisher agent and starter-kit counts |
| discovery-catalog agents | Every agent in the catalog (one row per agent folder name) |
| discovery-catalog agents list-tools | Every agent plus the tools shipped under each agent's tools/ folder |
| discovery-catalog starter-kits | Every starter kit (one row per kit folder name) |
| discovery-catalog <agent-name> describe | One agent with Name, Publisher, Version, HasTool, Description |
| discovery-catalog <starterkit-name> describe | One starter kit with Name, Publisher, Version, Category, AgentCount, Description |
| discovery-catalog <agent-name> list-tools | One agent with Agent, Publisher, Version, ToolCount, Tools, Description |
The catalog uses a flat layout — one folder per agent or starter kit directly under the parent directory:
| Asset | Path pattern | Display |
|---|---|---|
| Agent | agents/<agent-name>/ | <agent-name> |
| Starter kit | starter-kits/<kit-name>/ | <kit-name> |
| Tool under an agent | agents/<agent>/tools/<tool-name>/ | <tool-name> |
Inclusion rules:
agent.yaml.kit.json.agents/tmp/ scratch directory used by the deployer skills is always skipped.Publisher and party come from the asset's metadata, not from the folder location:
metadata.yaml → publisher.name (publisher) and publisher.party (1p / 3p).kit.json → author.name (publisher) and the top-level party field.If publisher.name / author.name is missing, the publisher is reported as (unspecified).
Use this skill whenever the user wants to know what is in the catalog. Trigger phrases include but are not limited to:
-Tag retrosynthesis)-WithoutToolsOnly)discovery-services-agent-deployer, when the user isn't sure of the exact agent folder nameThe skill is fully read-only and needs no Azure config. All inputs are positional or named parameters on scripts/discovery-catalog.ps1.
| Parameter | Position | Description | Default |
|---|---|---|---|
| Command | 0 (mandatory) | publishers, agents, starter-kits, or an agent/starter-kit name | — |
| SubCommand | 1 (optional) | list-tools (with agents or <agent-name>) or describe (with <agent-name> / <starterkit-name>) | empty |
| -Format | named | Table, Markdown, Json, or Plain | Table |
| -Publisher | named | Filter by publisher name (case-insensitive). Applies to agents and starter-kits | all |
| -Tag | named | Filter agents whose metadata.yaml includes this tag (agents only) | all |
| -WithToolsOnly | named | Only show agents that ship a tools/ folder (agents only) | off |
| -WithoutToolsOnly | named | Only show agents missing a tools/ folder (agents only) | off |
Invalid combinations exit with a non-zero code and a friendly message (e.g. agents foo, publishers list-tools).
/discovery-catalog ... requests to invocationsWhen the user types a slash-style invocation like /discovery-catalog publishers, run the dispatcher with the matching arguments:
| User says | Run |
|---|---|
| /discovery-catalog publishers | pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 publishers |
| /discovery-catalog agents | ... discovery-catalog.ps1 agents |
| /discovery-catalog agents list-tools | ... discovery-catalog.ps1 agents list-tools |
| /discovery-catalog starter-kits | ... discovery-catalog.ps1 starter-kits |
| /discovery-catalog <agent-name> describe | ... discovery-catalog.ps1 <agent-name> describe |
| /discovery-catalog <starterkit-name> describe | ... discovery-catalog.ps1 <starterkit-name> describe |
| /discovery-catalog <agent-name> list-tools | ... discovery-catalog.ps1 <agent-name> list-tools |
Use -Format Table for all catalog responses. Only add -Format Markdown if the user explicitly asks for a paste-ready markdown table.
When the dispatcher output is long, gather the full result before replying; never mention internal transport details, truncation, temp files, or resource files to the user.
Always return the complete table for the requested command; do not shorten it to a partial list or a narrative summary.
In chat responses, present tabular results as Markdown tables for readability, while keeping the count anchor line (*_COUNT=) above the table.
git rev-parse --show-toplevel.agents/ and/or starter-kits/ one level deep, skipping tmp/.agent.yaml; starter-kit folders need kit.json.metadata.yaml for name, version, description, tags, plus the nested publisher.name and publisher.party.kit.json for name, version, description, category, party, author.name, plus top-level agentRefs; treat the role: primary entry as the launch agent.agents list-tools): tool.yaml for name; folder name as fallback.-Publisher, -Tag, -WithToolsOnly, -WithoutToolsOnly.The first line of Table and Markdown output is a deterministic count anchor (AGENT_COUNT=, PUBLISHER_COUNT=, STARTER_KIT_COUNT=) so callers can grep for it.
discovery-catalog publishersPUBLISHER_COUNT=2
Publisher Party AgentCount StarterKits
--------- ----- ---------- -----------
Contoso Legal Tech 3p 1 0
Microsoft 1p 41 2
discovery-catalog agentsAGENT_COUNT=41
Agent Publisher Party
---- --------- -----
aizynthfinder Microsoft 1p
online-researcher Microsoft 1p
...
discovery-catalog agents list-toolsAGENT_COUNT=41
Agent Publisher Tools
---- --------- -----
aizynthfinder Microsoft tools/aizynthfinder
bookshelf-researcher Microsoft (no tools)
...
discovery-catalog starter-kitsSTARTER_KIT_COUNT=2
Starter-Kit Publisher Category
---- --------- --------
drug-discovery Microsoft Chemistry
protein-structure-analysis Microsoft Biology
discovery-catalog <agent-name> describeName Publisher Version HasTool Description
---- --------- ------- ------- -----------
aizynthfinder Microsoft 1.0.0 True Expert agent for retrosynthetic route planning using AiZynthFinder...
discovery-catalog <starterkit-name> describeName Publisher Version Category AgentCount Description
---- --------- ------- -------- ---------- -----------
drug-discovery Microsoft 1.0.0 Chemistry 5 Accelerate small-molecule drug discovery...
discovery-catalog <agent-name> list-toolsAgent Publisher Version ToolCount Tools Description
----- --------- ------- --------- ----- -----------
aizynthfinder Microsoft 1.0.0 1 aizynthFinder Expert agent for retrosynthetic route planning using AiZynthFinder...
User: *"Who publishes agents in this repo?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 publishers
User: *"What agents do we have?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 agents
User: *"Show me each agent and the tools it ships."*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 agents list-tools
User: *"What starter kits are available?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 starter-kits
User: *"Describe the drug-discovery starter kit"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 drug-discovery describe
User: *"Describe aizynthfinder"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 aizynthfinder describe
User: *"List tools for aizynthfinder"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 aizynthfinder list-tools
User: *"Which agents have a retrosynthesis tag?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 agents -Tag retrosynthesis
User: *"Which agents don't have a tool yet?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 agents -WithoutToolsOnly
User: *"Which agents are published by Microsoft?"*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 agents -Publisher Microsoft
User: *"Give me a markdown table of all starter kits I can paste into a README."*
pwsh -NoProfile -ExecutionPolicy Bypass -File .github/skills/discovery-catalog/scripts/discovery-catalog.ps1 starter-kits -Format Markdown
metadata.yaml/kit.json.<agent-name> alone is enough to disambiguate.pwsh) and work on Windows, macOS, and Linux when PowerShell is installed.PUBLISHER_COUNT=, AGENT_COUNT=, STARTER_KIT_COUNT=) in Table/Markdown output so downstream automation has a deterministic anchor.Json or Plain for normal discovery responses.metadata.yaml or unparseable kit.json are silently skipped (kits) or shown with empty fields (agents). Missing publisher.name is rendered as (unspecified).agents/tmp/ — it's the scratch tree used by other skills (discovery-services-agent-deployer) and is gitignored.Format-Table -AutoSize -Wrap renders long descriptions cleanly. The script works in Windows PowerShell 5.1 too but wrapping is uglier.agents foo or publishers list-tools.Take microsoft/discovery-catalog from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.