Perform a two-level search between installed skills and the full ecosystem catalog using natural language keywords, locate the best-matching skill, and instruct the host to read that skill's SKILL.md into context only when needed.
Customer-Readable Description
What This Skill Can Do
- Prioritize finding SOIA skills already installed on this machine that can be loaded immediately.
- When there is no match on this machine, locate uninstalled skills from the full ecosystem catalog shipped with the skill and provide the exact installation command.
- When there is more than one candidate, list the top 3 most relevant ones for the current model to choose from based on the customer's original need.
How Customers Use It
Customers only need to state their goal, such as "clip a webpage," "draft a PRD," or "check the release checklist." After the Agent extracts one highly distinctive keyword and an optional domain, run:
python3 scripts/find_skill.py --query <关键词> [--domain <领域>]
If invoking from repository source code, use:
python3 skills/soia-meta-find-skill/scripts/find_skill.py --query <关键词> [--domain <领域>]
Dependencies and Installation
At runtime it depends only on the Python 3 standard library. To install this routing skill:
claude plugin marketplace add soia-team/soia-open-skills
claude plugin install soia-meta@soia
When you only want this one skill, you can use the npx route. Note that the skill will land in the shared source of truth ~/.agents/skills; if the plugin is also installed, the same skill will appear as two indexes and drift separately, so it is recommended to choose one of the two:
npx skills add soia-team/soia-open-skills -g -a '*' -s soia-meta-find-skill -y
Candidates in the catalog that are not installed come with the corresponding repository's npx skills add command. Installation changes the local machine state; first show the command to the customer and obtain authorization, then search again after installation.
WorkBuddy 's loading unit is role-based experts rather than plugins,npx skills add -a '*' cannot cover it, and it needs to be installed separately, see docs/install/workbuddy.md。
Private Information and Intermediate Data
- The local scan scope is only
~/.agents/skills/*/SKILL.md; it does not read skill-private configuration, credentials, or customer files. - Queries and results are output only to the terminal, with no cache or logs written. Local paths in the results are used only for host reading and are not copied into public deliverables.
- The full ecosystem catalog is a public generated artifact within the repository and contains no accounts, tokens, private skills, or local paths.
Logs and Completion Receipt
The receipt must state the query terms, whether there was a local match, the number of candidates shown, the final choice, and the basis for it. When there is no match, explicitly return an empty list and do not guess or invent skill names.
完成:已为“<需求>”定位 <技能名>。
日志摘要:本机/全生态目录命中 <数量> 个候选;选择依据为 <关键词或领域>。
下一步:已读取 <SKILL.md 路径> / 等待授权执行 <安装命令> / 未找到匹配项。
Retrieval and Loading Contract
- Extract 1–3 highly distinctive words from the customer's need; when the domain is already clear, append
--domain, and do not use an entire natural language passage as a single keyword. - Run
scripts/find_skill.py. The script first scans~/.agents/skills/*/SKILL.md's frontmatternameanddescription。 - If there is a local match, return only installed candidates; if not, query
references/skill-directory.json, returning uninstalled candidates and the exactinstall_cmd。 - Show at most the top 3 ranked candidates to the model. Choose one autonomously based on the original need, skill boundaries, and description; if it cannot be distinguished, ask the customer one short question.
- Installed candidates include
path. Invoke the host's file-reading capability to fully read that path'sSKILL.md; only actually reading the content counts as loading, and you must not merely reference the path or execute from memory. - Uninstalled candidates include
install_cmd. Display the command and wait for customer authorization; after successful installation, re-run the retrieval, then read the returnedpath。 - After reading the selected skill, continue handling the original requirement based on that skill's dependencies, security boundaries, workflow, and verification contract. This routing skill does not replace the target skill.
Output contract
The script outputs a JSON array to stdout, with at most 3 items:
[
{
"name": "soia-example-skill",
"description": "示例描述",
"installed": true,
"path": "<home>/.agents/skills/soia-example-skill/SKILL.md"
}
]
Uninstalled items use install_cmd in place of path. Do not propagate maintenance fields such as repo within the directory into the runtime contract.
Directory maintenance boundary
references/skill-directory.json is generated by scripts/generate_router_index.py in the meta-repository root directory from the read-only routing/routing-manifest.json . Regular customers do not refresh the directory when running the router; maintainers generate and commit the artifact only when public skill descriptions or the routing manifest change.
Verification
python3 skills/soia-meta-find-skill/scripts/find_skill.py --query 剪藏
python3 scripts/generate_router_index.py --check
Real output acceptance: the first command must return valid JSON; each item must contain exactly the common fields,installed boolean value, and one of path or install_cmd . The second command must confirm that the committed ecosystem-wide directory is consistent with the remote public SKILL.md descriptions.