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.
| Phase |
Description |
Instructions |
| Phase 0 |
🧭 Scan Package — detect architecture, customizations, key files |
phases/00-scan-package.md |
| Phase 1 |
📝 Scaffold SKILL.md — generate skill with step-by-step post-regen workflow (Option A) or reference-manual structure (Option B) |
phases/01-scaffold-skill.md |
| Phase 2 |
📚 Generate References — create customizations.md (required) and optionally architecture.md |
phases/02-generate-references.md |
| Phase 3 |
Validate -- run vally lint |
phases/03-validate.md |
| Phase 4 |
📋 Finalize — confirm discoverable location, summarize |
phases/04-finalize.md |
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)
- references/skill-template.md -- SKILL.md template with required sections
- references/validation-tools.md -- vally lint, CI workflow setup
1---2name: create-package-skill3description: 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, and validates with vally lint. The skill is placed inside the package's .github/skills/ directory so find-package-skill discovers it automatically. 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.4---56# Create Package Skill Wizard78> **Minimal beats comprehensive. Human-written beats auto-generated. Scaffold and iterate.**910> 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.1112## Interaction Protocols1314**CONFIRM Protocol** (asset-producing steps — creating files):151. PRESENT the proposed assets and explain why.162. ASK exactly one question: "Create now (recommended), edit first, or skip?"173. ACT immediately. Create → write files this turn. Edit → refine, re-ask. Skip → move on.1819**DECIDE Protocol** (informational/correction steps — no files created):201. PRESENT the information or findings.212. ASK one specific question appropriate to the decision.223. PROCEED based on the answer.2324One question at a time. Respect "skip" — never re-ask or defer.2526## Wizard Flow2728Run each phase in order. **Progressive loading:** Read only the current phase file.2930| Phase | Description | Instructions |31|---|---|---|32| **Phase 0** | 🧭 Scan Package — detect architecture, customizations, key files | [phases/00-scan-package.md](phases/00-scan-package.md) |33| **Phase 1** | 📝 Scaffold SKILL.md — generate skill with step-by-step post-regen workflow (Option A) or reference-manual structure (Option B) | [phases/01-scaffold-skill.md](phases/01-scaffold-skill.md) |34| **Phase 2** | 📚 Generate References — create customizations.md (required) and optionally architecture.md | [phases/02-generate-references.md](phases/02-generate-references.md) |35| **Phase 3** | Validate -- run vally lint | [phases/03-validate.md](phases/03-validate.md) |36| **Phase 4** | 📋 Finalize — confirm discoverable location, summarize | [phases/04-finalize.md](phases/04-finalize.md) |3738## Guardrails3940**Content:**41- Every line must be non-obvious and package-specific. No generic Python/SDK boilerplate.42- SKILL.md should be under 500 tokens (soft limit). Move details to references/.43- References under 1000 tokens each. Split if larger.44- Never duplicate what's already in `.github/copilot-instructions.md` or shared skills.4546**Relationship to existing SDK tools:**47- 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.48- 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.49- 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"`).50- Never paraphrase an MCP tool's entire contract. Do include the one-line invocations the agent will run.5152**Structure:**53- Skill directory: `sdk/<service>/<package-name>/.github/skills/<package-name>/`54- Directory name MUST match `name` field in frontmatter (vally lint enforces this).55- `name` is the distribution package name, e.g. `azure-search-documents`, `azure-ai-projects`, `azure-mgmt-appconfiguration`.56- Use semicolons to separate trigger phrases in description (YAML-safe).5758**Security:**59- Never embed secrets or credentials in skill content.60- Never instruct agents to bypass CI, pylint, mypy, pyright, or other gating tools.61- 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.6263## Key Principles (from eval data)6465Our eval showed that skill **structure** matters more than **volume**:6667| Pattern | Impact |68|---|---|69| Numbered step-by-step post-regen workflow (Option A) | Agent executes verification top-to-bottom without inventing steps |70| 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 |71| "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 |72| "Check `_patch.py` FIRST" directives | Changes agent default from "fix the error location" to "check the customization layer" |73| Per-file `Depends On` / `Defines` / `After Regeneration, Verify` inventory in `customizations.md` | Agent can pinpoint exactly which generated symbol a breakage maps to |74| Generated-file detection guidance (directory OR header comment) | Agent correctly identifies auto-generated files under both `_generated/` and inline layouts |75| Async parity checklist | Agent remembers to mirror sync changes into `aio/` |76| CHANGELOG / README update step | Prevents "silent" releases that ship new operations without docs |7778## References (load on demand)7980- [references/skill-template.md](references/skill-template.md) -- SKILL.md template with required sections81- [references/validation-tools.md](references/validation-tools.md) -- vally lint, CI workflow setup