{"id":107,"date":"2026-05-25T20:52:38","date_gmt":"2026-05-25T18:52:38","guid":{"rendered":"https:\/\/mesbahi.net\/en\/?p=107"},"modified":"2026-05-25T20:52:39","modified_gmt":"2026-05-25T18:52:39","slug":"from-skill-generation-to-skill-qualification-an-overview-on-waza-and-skill-validator","status":"publish","type":"post","link":"https:\/\/mesbahi.net\/en\/2026\/05\/25\/from-skill-generation-to-skill-qualification-an-overview-on-waza-and-skill-validator\/","title":{"rendered":"From Skill Generation to Skill Qualification: An Overview on Waza and skill-validator"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Skill Review Is the New Code Review<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve normalized code review. Most teams won&#8217;t merge a PR without at least one pair of eyes on it. But here&#8217;s what many teams haven&#8217;t caught up to yet: today it&#8217;s not just code that shapes what ends up in production. It&#8217;s the skills, prompts, and instructions that <em>generate<\/em> the code, review it, and document it. The output is only as good as the instructions behind it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skill review can and should become a standard part of the development process, just like code review. And just like code review depends on linters, CI checks, and test suites to work at scale, skill review needs its own tooling. That&#8217;s exactly what this post is about.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>One Step Back<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Before getting into the tools, a quick refresher: what is an Agent Skill and why should you care?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every time an AI agent, like Claude Code, Copilot, or Cursor, is working on your codebase, it operates within a limited context window. That context can include conversation history, project files, and skills defined in advance. An Agent Skill is a documented package that tells the agent: &#8220;when you encounter this type of task, behave this way.&#8221; Think of it as an SOP (Standard Operating Procedure) for the agent. Something like &#8220;write idiomatic Java,&#8221; &#8220;add meaningful comments to code,&#8221; or &#8220;follow our team&#8217;s coding conventions.&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem is that writing a good skill looks simpler than validating and testing it. That&#8217;s exactly where tools like Waza and skill-validator come in.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Waza: A Unified Platform for the Skill Lifecycle<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Waza (\u6280, Japanese for &#8220;skill&#8221; or &#8220;technique&#8221;) is a new CLI tool built by Microsoft in Go. Single binary, no extra dependencies, runs on Linux, macOS, and Windows. The goal is to consolidate the entire skill development lifecycle into one tool.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>The Problem Waza Solves<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Say you&#8217;ve just written a new skill. A few questions come up immediately:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Does the agent actually recognize it and use it at the right moment? Does it behave the same way on GPT and Claude? Does it manage the token budget well? How do I connect this to a CI\/CD pipeline? Did I structure the frontmatter correctly and is the overall skill structure sound?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before Waza, answering these questions meant juggling separate tools and a lot of manual testing. Waza tries to eliminate that fragmentation.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>The Four-Phase Workflow<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scaffold<\/strong>: Generates a spec-compliant structure from the start so you don&#8217;t build on a broken foundation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Develop<\/strong>: Gives you real-time compliance scoring as you write content, so you end up with a properly formed skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test<\/strong>: Runs the skill in a loop against real LLMs, checking that the agent behaves correctly at each step.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Evaluate<\/strong>: Cross-model comparison with comprehensive metrics.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Practical Example: Comparing Two Models<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Say you&#8217;ve written a skill for generating PostgreSQL migration scripts. You want to see how differently Claude Sonnet 4.6 and GPT-4.4 interact with it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>waza run eval.yaml --model claude-sonnet-4-6 -o claude.json\nwaza run eval.yaml --model gpt-4-4 -o gpt4.json\nwaza compare claude.json gpt4.json\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of manually testing each model and comparing results in your head, you get structured output that tells you which model aligns better with your skill&#8217;s intent.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>11 Validator Types<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Waza ships with 11 validator types: simple text matching, Python assertions, JSON Schema validation, and LLM-powered evaluation where another model acts as judge. The most architecturally interesting ones are Action Sequence and Skill Invocation, which let you verify exactly which tools the agent used and in what order.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Where the Roadmap Stands<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The project is still in active development. E2 (Sensei Engine for compliance scoring) and E3 (Evaluation Framework with statistical analysis) are not complete yet. If you want to adopt Waza today, E1 (the CLI foundation) and E6 (CI\/CD integration) are finished and stable.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>skill-validator: When Compliance Is Not Enough<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">skill-validator is a standalone CLI tool, not affiliated with Microsoft and not tied to Waza. Also written in Go. Its job is measuring the health and validity of skills, making sure a skill is both structurally correct and content-sound. For example, frontmatter structure has changed between early and current versions of the spec, and getting it wrong silently breaks things.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the other side, a skill can be perfectly spec-compliant and still be a disaster in practice. Broken links, a reference file with 60,000 tokens, technically passes validation but performs terribly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This tool goes beyond structural checks and measures content quality too.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>What It Checks<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Structure<\/strong>: Does SKILL.md exist? Are the frontmatter fields valid? Is the token budget respected? (SKILL.md body shouldn&#8217;t exceed 5,000 tokens (words), and each reference file shouldn&#8217;t go past 25,000 tokens.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Links<\/strong>: Do external URLs actually resolve? Worth noting: HTTP 403 responses are flagged as warnings, not errors, because many sites check request headers and block requests that don&#8217;t come from a browser. Since the request comes from an AI agent rather than a browser, they block it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Content quality<\/strong>: Several metrics: code-to-text ratio, imperative sentence ratio, instruction specificity (the ratio of directive language like &#8220;must\/always\/never&#8221; to advisory language like &#8220;may\/consider&#8221;), and information density.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Contamination detection<\/strong>: One of the more interesting features. If a skill written for MongoDB contains Python, JavaScript, and Shell examples side by side, it can confuse the agent. This tool detects that cross-language contamination.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>LLM-as-judge scoring<\/strong>: Using Claude or GPT-4o, your skill gets scored across 6 dimensions: Clarity, Actionability, Token Efficiency, Scope Discipline, Directive Precision, and Novelty. Research identifies Novelty as the most important one: skills that give the model information it doesn&#8217;t already know from training data add the most value to the agent.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Practical Example: Running a Full Check<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>skill-validator check --strict --emit-annotations .\/my-skill\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output looks something like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Validating skill: my-skill\/\n\nStructure\n  \u2713 SKILL.md found\n\nFrontmatter\n  \u2713 name: \"my-skill\" (valid)\n  \u2713 description: (54 chars)\n\nTokens\n  SKILL.md body:        1,250 tokens\n  references\/guide.md:    820 tokens\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  Total:                2,070 tokens\n\nResult: passed\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>CI\/CD Integration<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">A complete GitHub Actions workflow looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name: Validate Skills\non:\n  pull_request:\n    paths:\n      - \"skills\/**\"\njobs:\n  validate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v4\n      - name: Install skill-validator\n        run: brew install agent-ecosystem\/tap\/skill-validator\n      - name: Validate skills\n        run: |\n          skill-validator check --strict --emit-annotations skills\/\n          skill-validator check --strict -o markdown skills\/ &gt;&gt; \"$GITHUB_STEP_SUMMARY\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Important: <code>--strict<\/code> means both errors and warnings will fail the pipeline. For skills still in draft, remove <code>--strict<\/code> so warnings stay non-blocking.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>When to Use Which<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">These two tools are not competing. They complement each other.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">skill-validator is built for validation and quality checks. It&#8217;s fast, works without an API key (except for the LLM scoring part), and works great as a pre-commit hook. If you want to make sure your skill is structurally and content-wise sound, this is where you start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Waza is built for execution, evaluation, and cross-model comparison. If you want to know how a skill actually behaves alongside a live agent, or how GPT and Claude handle it differently, that&#8217;s Waza&#8217;s territory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In a mature pipeline, both have a place: skill-validator at pre-commit and PR validation, Waza at regression testing and benchmark tracking.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Closing Thoughts<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re serious about integrating skills into your development process, which is increasingly just table stakes, this toolchain is directly relevant. A bad skill is like bad code, except its impact can be much broader.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s a bigger picture here too. We&#8217;re entering an era where agent skills are becoming independent artifacts, versioned and consumed like packages or libraries. The same way we have linters and test suites for npm packages, we need the same infrastructure for skills. Waza and skill-validator are the first generation of that infrastructure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Skill Review Is the New Code Review We&#8217;ve normalized code review. Most teams won&#8217;t merge a PR without at least one pair of eyes on it. But here&#8217;s what many teams haven&#8217;t caught up to yet: today it&#8217;s not just code that shapes what ends up in production. It&#8217;s the skills, prompts, and instructions that &#8230; <a title=\"From Skill Generation to Skill Qualification: An Overview on Waza and skill-validator\" class=\"read-more\" href=\"https:\/\/mesbahi.net\/en\/2026\/05\/25\/from-skill-generation-to-skill-qualification-an-overview-on-waza-and-skill-validator\/\" aria-label=\"Read more about From Skill Generation to Skill Qualification: An Overview on Waza and skill-validator\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":109,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[26,10,11],"tags":[13,15,9],"class_list":["post-107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-software-development","category-technology","tag-ai","tag-software-architecture","tag-software-engineering"],"uagb_featured_image_src":{"full":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k.webp",1312,736,false],"thumbnail":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k-150x150.webp",150,150,true],"medium":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k-300x168.webp",300,168,true],"medium_large":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k-768x431.webp",768,431,true],"large":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k-1024x574.webp",1024,574,true],"1536x1536":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k.webp",1312,736,false],"2048x2048":["https:\/\/mesbahi.net\/en\/wp-content\/uploads\/sites\/2\/2026\/05\/XbIdGFgqWXaaPlrYZA-ZeA@2k.webp",1312,736,false]},"uagb_author_info":{"display_name":"Amin","author_link":"https:\/\/mesbahi.net\/en\/author\/en\/"},"uagb_comment_info":0,"uagb_excerpt":"Skill Review Is the New Code Review We&#8217;ve normalized code review. Most teams won&#8217;t merge a PR without at least one pair of eyes on it. But here&#8217;s what many teams haven&#8217;t caught up to yet: today it&#8217;s not just code that shapes what ends up in production. It&#8217;s the skills, prompts, and instructions that&hellip;","_links":{"self":[{"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/posts\/107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":1,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/posts\/107\/revisions"}],"predecessor-version":[{"id":110,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/posts\/107\/revisions\/110"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/media\/109"}],"wp:attachment":[{"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/media?parent=107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/categories?post=107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mesbahi.net\/en\/wp-json\/wp\/v2\/tags?post=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}