# Skill Management Pitfalls

Learned from attempting to optimize the skill library based on SkillRouter paper findings.

## Pitfall 1: "Same Output" ≠ "Functionally Overlapping"

**Wrong:** Deleted `pptx-generator` (python-pptx) because `powerpoint` (pptxgenjs) also makes .pptx files.
**Right:** Different tech stacks = different fallback options. python-pptx is pure Python, pptxgenjs needs Node.js. Keep both.

**Rule:** Two skills overlap only when they use the same tools AND serve the same user intent. Same output format is not enough.

## Pitfall 2: Don't Cross-Reference in Descriptions

**Wrong:** In arxiv's description: "需要多源学术搜索优先用 sn-search-academic"
**Right:** Each skill describes itself only. No competitive recommendations.

**Why:** Creates circular dependencies. If skill A recommends B, and B recommends A, the LLM loops.

## Pitfall 3: Don't Expose Implementation Details

**Wrong:** In sn-infographic description: "需要 SN_API_KEY"
**Right:** "需要 SenseNova API"

**Rule:** Descriptions should express user-facing capabilities, not internal tool/API names.

## Pitfall 4: Check Hard Dependencies Before Deleting

**Wrong:** Marked sn-research-planning for deletion because it was "never called."
**Right:** sn-deep-research calls it via `skill_view("sn-research-planning")` at runtime. Deleting breaks the pipeline.

**How to check:**
```python
# Search all SKILL.md files for references to the target skill name
# Only HARD dependencies count: skill_view("target-name") or "读取 target-name"
# "Related skills" mentions are SOFT and don't block deletion
```

## Pitfall 5: "Never skill_view'd" ≠ "Unused"

Skills can be auto-loaded via the system prompt's "MUST load" instruction without explicit `skill_view()` calls. Session data only shows explicit tool calls.

**Better metric:** Check if the skill is referenced as a runtime dependency by other skills.

## Pitfall 6: Don't Batch Recommendations Without Verification

**Wrong:** Generated all 87 recommendations at once, sent to user, then had to fix multiple errors.
**Right:** Verify each category before sending. Check dependencies. Then send once.

**User feedback:** "你这建议就不能确认好之后再发给我吗" (Can you verify before sending?)

## Description Quality Formula

Good skill description = **What it does** + **Trigger words** + **Negative boundary**

Example:
```
"深度调研全流程编排器（入口 skill）。自动完成：规划→分维度取证→综合→成稿。
触发词：深度研究/调研/全面研究/调研报告/deep research。
不用于：单点事实问答、一句话摘要。"
```

- What: 深度调研全流程编排器
- Triggers: 深度研究/调研/全面研究
- Boundary: 不用于单点事实问答
