| name | create-package-skill |
| description | Interactive wizard that walks service teams through creating a package-specific skill for their Azure SDK package. Scans the package, detects customization patterns, scaffolds a SKILL.md with references, validates with vally lint, and registers in find-package-skill. WHEN: create package skill; add service skill; bootstrap skill for package; new package skill; skill for my SDK package; write skill for search; write skill for cosmos. |
Create Package Skill Wizard
Minimal beats comprehensive. Human-written beats auto-generated. Scaffold and iterate.
Skills encode tribal knowledge โ the "I wish someone had told me" stuff that's hard to learn from just reading code. Focus on what's non-obvious and package-specific.
Interaction Protocols
CONFIRM Protocol (asset-producing steps โ creating files):
- PRESENT the proposed assets and explain why.
- ASK exactly one question: "Create now (recommended), edit first, or skip?"
- ACT immediately. Create โ write files this turn. Edit โ refine, re-ask. Skip โ move on.
DECIDE Protocol (informational/correction steps โ no files created):
- PRESENT the information or findings.
- ASK one specific question appropriate to the decision.
- PROCEED based on the answer.
One question at a time. Respect "skip" โ never re-ask or defer.
Wizard Flow
Run each phase in order. Progressive loading: Read only the current phase file.
Guardrails
Content:
- Every line must be non-obvious and package-specific. No generic Python/SDK boilerplate.
- SKILL.md should be under 500 tokens (soft limit). Move details to references/.
- References under 1000 tokens each. Split if larger.
- Never duplicate what's already in
.github/copilot-instructions.md or shared skills.
Relationship to existing SDK tools:
- Package skills complement the Azure SDK MCP tools (
azsdk_package_generate_code, azsdk_package_build_code, azsdk_customized_code_update, etc.) โ they do NOT replace them.
- MCP tools handle deterministic operations (generate, build, test). Package skills provide the reasoning context an agent needs to use those tools correctly for a specific package, plus the package-specific verification commands the tools do not know about.
- Reference the existing tools for the overall workflow (e.g., "Run
tsp-client update or azsdk_package_generate_code"), but DO include the copy-pasteable verification commands an agent needs: import smoke tests (python -c "from ... import ..."), ApiVersion reconciliation (grep, python -c "import json; ..."), diff commands (git diff --name-only | grep ...), and the package validation invocation (azsdk_package_run_check with checkType="All").
- Never paraphrase an MCP tool's entire contract. Do include the one-line invocations the agent will run.
Structure:
- Skill directory:
sdk/<service>/<package-name>/.github/skills/<package-name>/
- Directory name MUST match
name field in frontmatter (vally lint enforces this).
name is the distribution package name, e.g. azure-search-documents, azure-ai-projects, azure-mgmt-appconfiguration.
- Use semicolons to separate trigger phrases in description (YAML-safe).
Security:
- Never embed secrets or credentials in skill content.
- Never instruct agents to bypass CI, pylint, mypy, pyright, or other gating tools.
- Never instruct agents to edit files inside
_generated/ (or any file with the "Code generated by Microsoft (R) Python Code Generator" header) โ always route through _patch.py or sibling hand-written modules.
Key Principles (from eval data)
Our eval showed that skill structure matters more than volume:
| Pattern | Impact |
|---|
| Numbered step-by-step post-regen workflow (Option A) | Agent executes verification top-to-bottom without inventing steps |
Copy-pasteable verification commands (import smoke tests, ApiVersion reconciliation, git diff of generated operations/models) | Agent actually runs the checks instead of guessing whether customizations still work |
"Expose new generated methods through _patch.py" step (mixin inheritance / override / polymorphic / create-or-update / list / __all__ re-export) | Agent wires new generated operations into the public surface instead of leaving them unreachable |
"Check _patch.py FIRST" directives | Changes agent default from "fix the error location" to "check the customization layer" |
Per-file Depends On / Defines / After Regeneration, Verify inventory in customizations.md | Agent can pinpoint exactly which generated symbol a breakage maps to |
| Generated-file detection guidance (directory OR header comment) | Agent correctly identifies auto-generated files under both _generated/ and inline layouts |
| Async parity checklist | Agent remembers to mirror sync changes into aio/ |
| CHANGELOG / README update step | Prevents "silent" releases that ship new operations without docs |
References (load on demand)