Find Skills Combo
Discover and install skill combinations from the open agent skills ecosystem. Unlike single-skill search, this skill decomposes complex tasks into subtasks, searches for candidates per subtask, evaluates coverage, and recommends two strategies: Maximum Quality (best skill per subtask, highest output quality) and Minimum Dependencies (fewest installs, lean setup). Users pick the strategy that fits their priorities.
When to Use This Skill
Use this skill when the user:
- - Asks "how do I do X" where X involves multiple capabilities or domains
- Says "find a skill for X" or "is there a skill for X"
- Describes a task that spans several concerns (e.g., "build a quarterly report with charts, risk analysis, and executive summary")
- Wants to compose a workflow from multiple skills
- Asks "can you do X" where X is a complex, multi-step task
- Expresses interest in extending agent capabilities for a non-trivial project
Fallback: If the task is genuinely single-domain and simple (one clear capability), skip the decomposition — run a single npx skills find query, present results, and offer to install. Don't over-engineer simple requests.
What is the Skills CLI?
The Skills CLI (npx skills) is the package manager for the open agent skills ecosystem.
Key commands:
- -
npx skills find [query] — Search for skills by keyword - INLINECODE3 — Install a skill from GitHub or other sources
- INLINECODE4 — Install globally, skip confirmation
- INLINECODE5 — Check for skill updates
- INLINECODE6 — Update all installed skills
Browse skills at: https://skills.sh/
The 5-Phase Pipeline
For complex tasks, follow all five phases in order. For simple tasks, see the Fallback section above.
Phase 1: Task Decomposition
Break the user's request into independent subtasks. Each subtask represents a distinct capability needed to complete the overall task.
Step 1: Extract Task-Specific Constraints
Before decomposing, scan the user's request for task-specific constraints — these are requirements that narrow the problem space and must be preserved in the subtasks. Look for:
- - Domain-specific terminology: Jargon, proper nouns, named standards, or specialized vocabulary the user explicitly uses (e.g., "WCAG 2.1 AA compliance", "GAAP reporting", "OpenAPI 3.1 spec"). These terms signal that generic skills won't suffice — the subtask must target this exact domain.
- Scenario constraints: Environmental or contextual restrictions (e.g., "offline-only", "must run in CI", "single-page app with no backend", "monorepo with pnpm workspaces"). These filter out skills that technically do the right thing but in the wrong context.
- Format / output requirements: Specific file formats, templates, or delivery formats (e.g., "output as PDF", "Helm chart", "Jupyter notebook", "Markdown with Mermaid diagrams").
- Toolchain lock-ins: Explicit technology choices the user has already committed to (e.g., "using Svelte, not React", "PostgreSQL only", "must integrate with our existing FastAPI backend").
Collect these into a Constraints List — a flat list of non-negotiable requirements extracted verbatim (or near-verbatim) from the user's request. Every subtask you create must trace back to at least one constraint, and no constraint should be orphaned.
Step 2: Decompose into Subtasks
- 1. Read the user's request carefully. Identify every distinct outcome or deliverable they need.
- Group related outcomes into subtasks. Each subtask should be a "capability unit" — something one skill could plausibly handle.
- Write a short completion criterion for each subtask so you know what "covered" means later.
- Attach relevant constraints from the Constraints List to each subtask. A subtask without any attached constraint is likely too generic — refine it. A constraint not attached to any subtask is a gap — either create a subtask for it or fold it into an existing one.
Constraints:
- - Aim for 2–7 subtasks. Fewer than 2 means the task is simple — use the fallback. More than 7 means you're splitting too fine — merge related items.
- Each subtask needs a clear boundary. If two subtasks always require the same skill, merge them.
- Preserve the user's own words: When a subtask maps to a domain-specific term the user used, keep that term in the subtask description and completion criteria — don't paraphrase it into a generic synonym. This ensures Phase 2 keyword generation stays precise.
Output format (present this to the user for confirmation):
Constraints List:
- - C1: INLINECODE7
- C2: INLINECODE8
- ...
| ID | Subtask | Completion Criteria | Constraints |
|---|
| S1 | ... | ... | C1, C3 |
| S2 |
... | ... | C2 |
Before proceeding to Phase 2, briefly show the user the decomposition and constraints list: "I've identified N constraints and broken this into M subtasks — does this look right?" If they want to adjust, iterate. Don't spend too long here — a reasonable decomposition is better than a perfect one.
Phase 2: Precision-Focused Search
For each subtask, the goal is precision over recall — find the skills that most closely match the subtask's specific requirements, not just loosely related ones.
Step 1: Subtask Intent Analysis
Before generating keywords, write a one-sentence intent statement for each subtask that captures:
- - The specific action (e.g., "generate", "analyze", "validate", not vague terms like "handle" or "process")
- The domain object (e.g., "Sharpe ratio", "Docker container", "React component")
- The expected output format (e.g., "a chart", "a score", "a config file")
- The attached constraints from Phase 1 — weave the user's domain-specific terms and scenario restrictions directly into the intent statement
This intent statement is the anchor for keyword generation — every keyword group must map back to it. Constraints ensure the intent stays grounded in the user's actual context rather than drifting to generic descriptions.
| ID | Subtask | Constraints | Intent Statement |
|---|
| S1 | ... | C1, C3 | "Calculate portfolio risk metrics (Sharpe, beta, drawdown) under GAAP standards and output a summary table" |
| S2 |
... | C2 | "Generate interactive Mermaid-based charts from time-series data in a Svelte SPA" |
Step 2: Keyword Generation (Precision-First)
For each subtask, generate 2–3 keyword groups using different precision levels:
- - Exact-match keywords: Use the most specific terms from the intent statement — tool names, metric names, framework names, file formats. These find skills purpose-built for the subtask. (e.g.,
sharpe ratio beta drawdown calculator) - Functional-match keywords: Describe the capability at one level of abstraction higher — what the skill does rather than what it is. These catch skills that solve the same problem with different terminology. (e.g.,
portfolio risk analysis metrics) - Domain-match keywords (only if exact + functional return < 3 results): Broaden to the domain level as a safety net. (e.g.,
quantitative finance)
Priority rule: Always run exact-match first. Only fall back to broader keywords if the precise search returns too few results (< 3 candidates).
Step 3: Search Execution
- 1. Build a keyword plan table with precision level annotated:
| Subtask | Exact-Match | Functional-Match | Domain-Match (if needed) |
|---|
| S1 | INLINECODE12 | INLINECODE13 | INLINECODE14 |
| S2 |
interactive chart time-series dashboard |
data visualization web | — |
- 2. Run all exact-match searches in parallel first:
CODEBLOCK0
- 3. Check result counts. For any subtask with < 3 candidates from exact-match, run the functional-match search. If still < 3, run domain-match.
- 4. Merge and deduplicate results. For each candidate, record:
- Which subtask found it
- Which precision level matched (exact > functional > domain)
- The skill's self-described purpose (from search output)
Step 4: Relevance Pre-Filter
Before passing candidates to Phase 3, do a quick relevance check per candidate:
- 1. Re-read the candidate's one-line description from the search output.
- Compare it against the subtask's intent statement.
- Keep if the description shares at least one specific term (tool name, metric, framework) with the intent statement, OR if it describes the same functional capability.
- Drop if the connection is only at the domain level (e.g., a skill about "financial news aggregation" found via domain-match for a "risk metrics" subtask).
Keep the top 3–5 candidates per subtask after filtering. Fewer but more precise candidates produce better evaluations in Phase 3.
Phase 3: Candidate Evaluation
Build a Subtask × Candidate coverage matrix with two extra columns for combination planning.
For each candidate skill:
- 1. Look up its description on skills.sh or read its SKILL.md if installed.
- Rate its relevance to each subtask as High, Medium, or Low:
-
High — The skill directly addresses this subtask with dedicated features or workflows
-
Medium — The skill partially covers this subtask or addresses it as a secondary concern
-
Low — The skill has minimal or no relevance to this subtask
- 3. Write a one-line justification for each rating.
- Compute two additional metrics per candidate:
-
Breadth — Count of subtasks where the skill rates High or Medium (higher = more versatile, valuable for minimum-dependency strategy)
-
Peak — Count of subtasks where the skill is the top-rated candidate (higher = more irreplaceable, valuable for best-effect strategy)
Output the matrix:
| Candidate | S1 | S2 | S3 | Breadth | Peak |
|---|
| Skill A | High: ... | Low | High: ... | 2 | 1 |
| Skill B |
Medium: ... | High: ... | Low | 2 | 1 |
| Skill C | Low | High: ... | Medium: ... | 2 | 1 |
| Skill D | Low | Low | High: ... | 1 | 1 |
Pruning: Drop candidates that are Low across all subtasks — they are noise.
Phase 4: Dual-Strategy Planning
Produce exactly two recommended strategies targeting different user priorities.
Strategy A — Maximum Quality (追求最强效果)
Goal: Every subtask gets its best-fit skill. Accept more installs to maximize output quality.
Algorithm:
- 1. For each subtask, pick the candidate with the highest rating (use Peak column to break ties — prefer skills that are uniquely best at something).
- If multiple candidates tie at High for a subtask, prefer the one with higher community popularity or more recent maintenance.
- List all selected skills (may include one skill per subtask if they're all different).
This strategy is for users who want the highest-quality result and don't mind installing several skills.
Strategy B — Minimum Dependencies (最少外部依赖)
Goal: Cover all subtasks with as few skills as possible. Accept Medium coverage where it avoids adding an extra skill.
Algorithm:
- 1. Sort candidates by Breadth descending (most versatile first).
- Greedily select: pick the highest-Breadth skill, mark its High/Medium subtasks as covered, repeat until all subtasks are covered.
- If a subtask can only reach Medium coverage with the greedy set but has a dedicated High-coverage skill, do NOT add that skill — keep the set minimal. Only flag the trade-off.
- Target ceiling: if the task has N subtasks, this strategy should ideally use ≤ ⌈N/2⌉ skills.
This strategy is for users who want to keep their environment lean and are comfortable with "good enough" coverage on some subtasks.
For both strategies, document:
- - Which skills are included and total install count
- A subtask → skill mapping table
- A one-sentence rationale
- A quality delta summary: where Strategy B trades quality for fewer installs compared to Strategy A
Coverage gap check: If any subtask has no High or Medium candidate in either strategy, flag it: "⚠ Subtask SX has no strong skill coverage — you may need to handle this manually or create a custom skill."
Conflict detection: If two skills in Strategy A overlap significantly on the same subtask, note it: "Skills X and Y both cover S2 — you only need one; keeping the higher-rated one."
Phase 5: Present Results
Structure the final output with these sections:
1. Task Decomposition Summary
Show the subtask table from Phase 1 (brief, since the user already confirmed it).
2. Side-by-Side Comparison
Start with a quick comparison table so the user can choose a strategy immediately:
CODEBLOCK1
3. Strategy A — Maximum Quality (Recommended for critical tasks)
CODEBLOCK2 bash
npx skills add owner/repo@skill-a -g -y
npx skills add owner/repo@skill-b -g -y
npx skills add owner/repo@skill-c -g -y
CODEBLOCK3
4. Strategy B — Minimum Dependencies (Recommended for lean setup)
CODEBLOCK4 bash
npx skills add owner/repo@skill-a -g -y
CODEBLOCK5
The vs Strategy A column makes the trade-off transparent — users see exactly what they give up by installing fewer skills.
5. Coverage Gaps & Risks
- - List any subtasks without strong coverage in either strategy
- Suggest workarounds (manual steps, creating a custom skill with
npx skills init) - If Strategy B downgrades a subtask from High to Medium, briefly explain the practical impact
6. Next Steps
Ask the user:
- - "Which strategy do you prefer — Maximum Quality or Minimum Dependencies?"
- "Want me to install your chosen strategy now?"
- "Want me to search deeper for any specific subtask?"
- "Want to adjust the decomposition?"
Fallback: Simple Single-Skill Search
When the task is straightforward (single domain, one clear capability):
- 1. Run
npx skills find [query] with 1–2 relevant keyword sets - Present the top 2–3 results with name, description, and install command
- Offer to install
This is the same behavior as the basic find-skills workflow — no decomposition needed.
Common Skill Categories
When generating keywords, draw from these domains:
| Category | Example Keywords |
|---|
| Web Development | react, nextjs, typescript, css, tailwind |
| Testing |
testing, jest, playwright, e2e |
| DevOps | deploy, docker, kubernetes, ci-cd |
| Documentation | docs, readme, changelog, api-docs |
| Code Quality | review, lint, refactor, best-practices |
| Design | ui, ux, design-system, accessibility |
| Data & Analytics | data, visualization, charts, analysis |
| Finance | portfolio, trading, risk, investment |
| Productivity | workflow, automation, git |
Tips
- 1. Precision beats recall: 3 highly relevant candidates are more useful than 10 loosely related ones. Always start with the most specific keywords and only broaden if needed.
- Intent statements are your anchor: A good intent statement in Phase 2 prevents keyword drift. If your keywords don't map back to the intent, they're too broad.
- Parallel search matters: Running all keyword groups simultaneously saves significant time. Use subagents when available.
- Don't over-decompose: 3–5 subtasks is the sweet spot for most tasks. More than that creates noise.
- Skills.sh is your friend: When evaluating candidates, quickly check
https://skills.sh/<owner>/<repo>/<skill-name> for descriptions. - User confirmation at Phase 1 is critical: A wrong decomposition cascades into bad search and bad recommendations. Take 30 seconds to verify.
- Always present both strategies: Users have different priorities — some want the best possible result, others want a lean setup. Let them choose.
- Make the trade-off explicit: The
vs Strategy A column in Strategy B is the most important part of the output. It turns an abstract choice into a concrete comparison. - Breadth and Peak drive strategy selection: High-Breadth skills are MVPs for Strategy B (minimum dependencies); High-Peak skills are essential for Strategy A (maximum quality). Computing both in Phase 3 makes Phase 4 mechanical.
When No Skills Are Found
If a subtask has no relevant skills:
- 1. Flag it in the coverage gaps section
- Offer to help with that subtask directly using general capabilities
- Suggest the user create a custom skill: INLINECODE22
- If the entire task has no skills at all, acknowledge it honestly and pivot to direct assistance
查找技能组合
从开放智能体技能生态中发现并安装技能组合。与单一技能搜索不同,本技能将复杂任务分解为子任务,为每个子任务搜索候选技能,评估覆盖范围,并推荐两种策略:最强效果(每个子任务使用最佳技能,输出质量最高)和最少外部依赖(安装数量最少,环境最精简)。用户可根据自身优先级选择策略。
何时使用本技能
当用户出现以下情况时使用本技能:
- - 询问如何做X,且X涉及多种能力或领域
- 说找一个做X的技能或有没有做X的技能
- 描述的任务跨越多个关注点(例如:制作包含图表、风险分析和执行摘要的季度报告)
- 想要组合多个技能构建工作流
- 询问你能做X吗,且X是一个复杂的多步骤任务
- 对扩展智能体能力以完成重要项目表示兴趣
回退方案:如果任务确实是单一领域且简单(一个明确的能力),则跳过分解——直接运行单次npx skills find查询,展示结果并提供安装。不要对简单请求过度设计。
什么是 Skills CLI?
Skills CLI(npx skills)是开放智能体技能生态的包管理器。
主要命令:
- - npx skills find [查询词] — 按关键词搜索技能
- npx skills add <包名> — 从 GitHub 或其他来源安装技能
- npx skills add <包名> -g -y — 全局安装,跳过确认
- npx skills check — 检查技能更新
- npx skills update — 更新所有已安装技能
浏览技能: https://skills.sh/
五阶段流程
对于复杂任务,按顺序执行所有五个阶段。对于简单任务,请参见上面的回退方案部分。
阶段 1:任务分解
将用户的请求分解为独立的子任务。每个子任务代表完成整体任务所需的一种独特能力。
步骤 1:提取任务特定约束
在分解之前,扫描用户请求中的任务特定约束——这些是缩小问题空间的要求,必须在子任务中保留。查找:
- - 领域特定术语:用户明确使用的行话、专有名词、命名标准或专业词汇(例如:WCAG 2.1 AA 合规性、GAAP 报告、OpenAPI 3.1 规范)。这些术语表明通用技能不够用——子任务必须针对这个精确领域。
- 场景约束:环境或上下文限制(例如:仅离线、必须在 CI 中运行、无后端的单页应用、使用 pnpm workspaces 的 monorepo)。这些约束会过滤掉技术上能做正确事情但上下文不匹配的技能。
- 格式/输出要求:特定的文件格式、模板或交付格式(例如:输出为 PDF、Helm chart、Jupyter notebook、带 Mermaid 图表的 Markdown)。
- 工具链锁定:用户已承诺的明确技术选择(例如:使用 Svelte,不是 React、仅 PostgreSQL、必须与我们现有的 FastAPI 后端集成)。
将这些收集到约束列表中——从用户请求中逐字(或接近逐字)提取的不可协商要求的扁平列表。你创建的每个子任务必须至少追溯到一个约束,且没有约束被遗漏。
步骤 2:分解为子任务
- 1. 仔细阅读用户的请求。识别他们需要的每个不同的结果或交付物。
- 将相关结果分组为子任务。每个子任务应该是一个能力单元——一个技能可以合理处理的事情。
- 为每个子任务编写简短的完成标准,以便后续知道覆盖意味着什么。
- 将相关约束从约束列表附加到每个子任务。没有任何附加约束的子任务可能过于通用——需要优化。未附加到任何子任务的约束是一个缺口——要么为其创建子任务,要么将其合并到现有子任务中。
约束:
- - 目标为 2-7 个子任务。少于 2 个意味着任务简单——使用回退方案。多于 7 个意味着分解过细——合并相关项。
- 每个子任务需要有清晰的边界。如果两个子任务总是需要相同的技能,合并它们。
- 保留用户的原话:当子任务映射到用户使用的领域特定术语时,在子任务描述和完成标准中保留该术语——不要将其改写为通用同义词。这确保阶段 2 的关键词生成保持精确。
输出格式(向用户展示以确认):
约束列表:
- - C1:[用户的原话约束]
- C2:[用户的原话约束]
- ...
| 编号 | 子任务 | 完成标准 | 约束 |
|---|
| S1 | ... | ... | C1, C3 |
| S2 |
... | ... | C2 |
在进入阶段 2 之前,简要向用户展示分解和约束列表:我已识别出 N 个约束,并将其分解为 M 个子任务——这样看起来对吗?如果他们想调整,进行迭代。不要在这里花太长时间——合理的分解比完美的分解更好。
阶段 2:精准搜索
对于每个子任务,目标是精准优先于召回——找到最匹配子任务特定要求的技能,而不是仅松散相关的技能。
步骤 1:子任务意图分析
在生成关键词之前,为每个子任务编写一句意图陈述,包含:
- - 具体动作(例如:生成、分析、验证,而不是处理或操作等模糊术语)
- 领域对象(例如:夏普比率、Docker 容器、React 组件)
- 预期输出格式(例如:图表、分数、配置文件)
- 阶段 1 的附加约束——将用户的领域特定术语和场景限制直接融入意图陈述
这个意图陈述是关键词生成的锚点——每个关键词组必须映射回它。约束确保意图保持在用户实际上下文中,而不是漂移到通用描述。
| 编号 | 子任务 | 约束 | 意图陈述 |
|---|
| S1 | ... | C1, C3 | 在 GAAP 标准下计算投资组合风险指标(夏普比率、贝塔系数、回撤),并输出汇总表 |
| S2 |
... | C2 | 在 Svelte SPA 中从时间序列数据生成交互式 Mermaid 图表 |
步骤 2:关键词生成(精准优先)
为每个子任务使用不同精准级别生成 2-3 个关键词组:
- - 精确匹配关键词:使用意图陈述中最具体的术语——工具名称、指标名称、框架名称、文件格式。这些能找到专门为子任务构建的技能。(例如:夏普比率 贝塔系数 回撤 计算器)
- 功能匹配关键词:在更高抽象级别描述能力——技能做什么而不是它是什么。这些能捕捉到使用不同术语解决相同问题的技能。(例如:投资组合 风险 分析 指标)
- 领域匹配关键词(仅在精确+功能返回少于 3 个结果时):作为安全网扩展到领域级别。(例如:量化金融)
优先级规则:始终先运行精确匹配。仅在精确搜索返回结果太少(少于 3 个候选)时才回退到更宽泛的关键词。
步骤 3:搜索执行
- 1. 构建带有精准级别注释的关键词计划表:
| 子任务 | 精确匹配 | 功能匹配 | 领域匹配(如需) |
|---|
| S1 | 夏普比率 贝塔系数 回撤 | 投资组合 风险 指标 | 量化金融 |
| S2 |
交互式 图表 时间序列 仪表盘 | 数据 可视化 网页 | — |
- 2. 首先并行运行所有精确匹配搜索:
bash
npx skills find <精确匹配关键词>
- 3. 检查结果数量。对于任何从精确匹配获得少于 3 个候选的子任务,运行功能匹配搜索。如果仍然少于 3 个,运行领域匹配。
- 4. 合并并去重结果。对于每个候选,记录:
- 哪个子任务找到它
- 哪个精准级别匹配(精确 > 功能 > 领域)
- 技能的自我描述目的(来自搜索输出)
步骤 4:相关性预过滤
在将候选传递给阶段 3 之前,对每个候选进行快速相关性检查:
- 1. 重新阅读搜索输出中候选的一行描述。
- 将其与子任务的意图陈述进行比较。
- 保留如果描述与意图陈述共享至少一个特定术语(工具名称、指标、框架),或者描述了相同的功能能力。
- 丢弃如果连接仅在领域级别(例如,通过领域匹配为风险指标子任务找到的关于金融新闻聚合的技能)。
过滤后每个子任务保留前 3-5 个候选。更少但更精准的候选能在阶段 3 产生更好的评估。
阶段 3:候选评估
构建