.agents/skills/property-migration/SKILL.md
How properties map works, snake_case convention
npx skillsauth add ronniegeraghty/hyoka property-migrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Hyoka uses property-based tool filtering to dynamically match tools to prompts based on metadata (language, service, plane). This allows a single config to work across multiple prompts without hardcoding tool lists. Property migration is the process of updating the property schema when business logic or tool definitions change.
Prompt declares properties:
id: key-vault-dp-python-crud
language: python
service: key-vault
plane: data-plane
Tool defines property filters:
# config.yaml
tools:
- name: python_key_vault_sdk
include: true
properties:
language: python
service: key-vault
Engine matches at runtime:
Does prompt.language (python) match tool.properties.language (python)? ✓
Does prompt.service (key-vault) match tool.properties.service (key-vault)? ✓
→ Tool included in session
No match excludes tool:
Does prompt.language (dotnet) match tool.properties.language (python)? ✗
→ Tool hidden from session
All property names and values use snake_case (not camelCase or kebab-case):
✓ Correct:
properties:
language: python # not "Language" or "PYTHON"
service: key_vault # not "keyVault" or "Key-Vault"
deployment_plane: data_plane # not "deploymentPlane"
✗ Incorrect:
properties:
Language: python # CamelCase in key
language: Python # CamelCase in value
service: Key-Vault # Kebab-case
When you want to filter tools by a new dimension:
Define in prompt frontmatter:
# prompts/storage/python/blob-upload.md
tier: premium # New property
Add to tool filter (optional):
# config.yaml
tools:
- name: storage_premium_tools
properties:
language: python
service: storage
tier: premium # Now filtered
Verify tool visibility:
go run ./hyoka run --prompt-id storage-dp-python-blob-upload --dry-run
# Shows: storage_premium_tools included
go run ./hyoka run --prompt-id storage-dp-python-blob-list --dry-run
# Shows: storage_premium_tools NOT included (no tier=premium)
If you rename service to azure_service:
Update all prompts (batch script):
for f in prompts/**/*.md; do
sed -i 's/^service:/azure_service:/' "$f"
done
Update all configs:
# Before
properties:
service: key_vault
# After
properties:
azure_service: key_vault
Validate no orphaned properties:
grep -r "service:" prompts/ # Should be empty (all renamed)
grep -r "service:" configs/ # Should be empty
If plane values change from data-plane to data_plane:
Update all prompts:
for f in prompts/**/*.md; do
sed -i 's/plane: data-plane/plane: data_plane/' "$f"
sed -i 's/plane: management-plane/plane: management_plane/' "$f"
done
Update all configs:
# Before
properties:
plane: data-plane
# After
properties:
plane: data_plane
Test property matching:
go run ./hyoka list --plane data_plane
# Verify correct prompts listed
// hyoka/internal/config/tools.go
func matchesProperties(prompt *Prompt, toolProps map[string]string) bool {
for key, expectedValue := range toolProps {
actualValue := prompt.GetProperty(key)
if actualValue != expectedValue {
return false // Property mismatch → tool not included
}
}
return true // All properties match → tool included
}
go run ./hyoka list to verify filtering still worksCreate a test to verify property matching:
func TestPropertyMatching(t *testing.T) {
tests := []struct {
prompt *Prompt
toolProp map[string]string
expect bool
}{
{
prompt: &Prompt{Language: "python", Service: "key_vault"},
toolProp: map[string]string{
"language": "python",
"service": "key_vault",
},
expect: true,
},
{
prompt: &Prompt{Language: "dotnet", Service: "key_vault"},
toolProp: map[string]string{
"language": "python", // Mismatch
"service": "key_vault",
},
expect: false,
},
}
for _, tt := range tests {
if matchesProperties(tt.prompt, tt.toolProp) != tt.expect {
t.Fail()
}
}
}
hyoka/internal/config/tools.gohyoka/internal/prompt/prompt.gohyoka/internal/config/config.gohyoka/prompts/**/*.mddevelopment
Identifies Azure SDK packages in generated code and checks whether they are the latest available versions. Use during code review to catch outdated dependencies.
development
Sets up build environments for generated Azure SDK code samples and attempts to compile/build without modifying generated files. Use during review to verify code compiles correctly.
development
# Java SDK Validation Skill You are a **Java Azure SDK validation reviewer** for generated code samples. Your job is to check whether generated Java code follows modern Azure SDK for Java conventions and flag violations of common anti-patterns that LLMs frequently produce. ## Rules 1. **NEVER modify generated code.** You are evaluating, not fixing. 2. Report all findings honestly — pass or fail with specific evidence. 3. Check every rule below. A single violation in a category means that cate
development
Reads generated Azure SDK code files and adds inline review comments without changing any actual code. Use during code review to annotate quality issues, best practices, and suggestions.