<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 兆鹏 于</title>
    <description>The latest articles on DEV Community by 兆鹏 于 (@__b01666abd57fb7bb91f9).</description>
    <link>https://dev.to/__b01666abd57fb7bb91f9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4006361%2F7aaf65b5-e469-4933-a4df-ef793f064156.png</url>
      <title>DEV Community: 兆鹏 于</title>
      <link>https://dev.to/__b01666abd57fb7bb91f9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/__b01666abd57fb7bb91f9"/>
    <language>en</language>
    <item>
      <title>The Ten Levels of AI Skill Construction - From Prompt to Business Closure System</title>
      <dc:creator>兆鹏 于</dc:creator>
      <pubDate>Sun, 28 Jun 2026 14:36:12 +0000</pubDate>
      <link>https://dev.to/__b01666abd57fb7bb91f9/the-ten-levels-of-ai-skill-construction-from-prompt-to-business-closure-system-25e7</link>
      <guid>https://dev.to/__b01666abd57fb7bb91f9/the-ten-levels-of-ai-skill-construction-from-prompt-to-business-closure-system-25e7</guid>
      <description>&lt;p&gt;I've spent the last year building AI agent skills for enterprise clients, and I kept running into the same problem: everyone treats "skills" as just fancy prompts. They write a Markdown file, call it a skill, and wonder why their agent can't handle real business workflows. So I mapped out ten distinct levels of skill construction — from a single prompt file to a full business closure system that orchestrates eight-plus skills end-to-end. Here's what I learned at each level.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 1: Pure Prompt Skill — The Single SKILL.md
&lt;/h2&gt;

&lt;p&gt;This is where everyone starts. You write one Markdown file, stick it in a folder, and your agent reads it as instructions. That's it. No scripts, no references, no assets — just text telling the AI what to do.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Meeting Minutes Organizer&lt;/span&gt;

You are a meeting minutes organizer. When the user provides meeting content,
extract the following fields and output structured results:

&lt;span class="gu"&gt;## Output Format&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Meeting Time
&lt;span class="p"&gt;-&lt;/span&gt; Meeting Location
&lt;span class="p"&gt;-&lt;/span&gt; Participants
&lt;span class="p"&gt;-&lt;/span&gt; Decisions
&lt;span class="p"&gt;-&lt;/span&gt; Action Items

Always respond in the same language as the input.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I've found this works surprisingly well for simple, well-scoped tasks. A meeting minutes extractor? Perfect. A knowledge-base Q&amp;amp;A bot with a single document set? Also fine. But the moment your skill needs to handle edge cases, reference external data, or follow conditional logic, you hit a wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Quick prototypes, demos, and tasks that fit in a single prompt window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to outgrow it:&lt;/strong&gt; The first time you catch yourself writing "if the user asks X, do Y; if they ask Z, do W..." inside one Markdown file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 2: Component Skill — Bringing References and Scripts
&lt;/h2&gt;

&lt;p&gt;A Component Skill adds structure around the prompt. You still have your &lt;code&gt;SKILL.md&lt;/code&gt;, but now it references other files: knowledge documents, Python scripts, YAML configs, or static assets the agent can load at runtime.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md
├── knowledge/
│   └── telecom-faq.md
├── scripts/
│   └── validate_input.py
└── assets/
    └── template.xlsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;code&gt;SKILL.md&lt;/code&gt; now acts as a &lt;strong&gt;coordinator&lt;/strong&gt;, pointing the agent to the right resources rather than stuffing everything into one file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Knowledge RAG Assistant&lt;/span&gt;

&lt;span class="gu"&gt;## Knowledge Base&lt;/span&gt;
Load documents from the &lt;span class="sb"&gt;`knowledge/`&lt;/span&gt; directory before answering.

&lt;span class="gu"&gt;## Validation&lt;/span&gt;
Before processing user input, run &lt;span class="sb"&gt;`scripts/validate_input.py`&lt;/span&gt; to check format.

&lt;span class="gu"&gt;## Output Template&lt;/span&gt;
Use &lt;span class="sb"&gt;`assets/template.xlsx`&lt;/span&gt; as the output format for structured reports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built a telecom FAQ skill this way — the knowledge base was 200+ pages of installation manuals, and the validation script caught malformed addresses before they caused downstream errors. The prompt stayed clean; the heavy lifting lived in the supporting files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Any skill that needs domain knowledge, input validation, or structured output templates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 3: Workflow Skill — Multi-Step Decision Trees
&lt;/h2&gt;

&lt;p&gt;This is where things get interesting. A Workflow Skill defines a multi-step process with explicit decision points. Instead of "do this," you write "if X, go to step 3; if Y, go to step 5."&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Complaint Handling Workflow&lt;/span&gt;

&lt;span class="gu"&gt;## Phase 1: Information Extraction&lt;/span&gt;
Extract: customer_id, complaint_type, urgency_level

&lt;span class="gu"&gt;## Phase 2: Routing Decision&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; If urgency_level = "critical" → Phase 3A (Escalation)
&lt;span class="p"&gt;-&lt;/span&gt; If urgency_level = "normal" AND complaint_type = "billing" → Phase 3B (Billing Track)
&lt;span class="p"&gt;-&lt;/span&gt; Otherwise → Phase 3C (Standard Track)

&lt;span class="gu"&gt;## Phase 3A: Escalation&lt;/span&gt;
Notify supervisor, create priority ticket, SLA = 2 hours

&lt;span class="gu"&gt;## Phase 3B: Billing Track&lt;/span&gt;
Pull billing records, calculate discrepancy, auto-refund if &amp;lt; $50

&lt;span class="gu"&gt;## Phase 3C: Standard Track&lt;/span&gt;
Create standard ticket, SLA = 48 hours

&lt;span class="gu"&gt;## Phase 4: Closure&lt;/span&gt;
Confirm resolution with customer, update knowledge base
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The breakthrough for me was realizing that workflow skills don't need code — they need &lt;strong&gt;clarity&lt;/strong&gt;. When I wrote unambiguous branching logic in plain Markdown, the agent followed it correctly 90%+ of the time. The 10% failure rate came from vague wording, not missing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Any multi-step process with conditional branching — complaint handling, onboarding flows, troubleshooting guides.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 4: Orchestration Skill — Multi-Agent Collaboration
&lt;/h2&gt;

&lt;p&gt;At Level 4, we stop pretending one agent can do everything. An Orchestration Skill uses a &lt;strong&gt;Phase-Orchestrator&lt;/strong&gt; to launch independent sub-agents for each phase, passing structured JSON between them.&lt;/p&gt;

&lt;p&gt;Here's what the flow looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request
    ↓
Phase 1: Info-Extractor (sub-agent A)
    ↓ [JSON: extracted fields]
Phase 2: Data-Analyst (sub-agent B)
    ↓ [JSON: analysis results]
Phase 3: Report-Generator (sub-agent C)
    ↓ [Markdown report]
Final Output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;SKILL.md&lt;/code&gt; defines the protocol:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Data Analysis Pipeline&lt;/span&gt;

&lt;span class="gu"&gt;## Orchestration Protocol&lt;/span&gt;
This skill uses Phase-Orchestrator for multi-Agent execution.
Each Phase runs as an independent sub-agent.

&lt;span class="gu"&gt;## Phase 1: Info-Extractor&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Input: raw user text
&lt;span class="p"&gt;-&lt;/span&gt; Output: JSON with extracted_fields
&lt;span class="p"&gt;-&lt;/span&gt; Pass to: Phase 2

&lt;span class="gu"&gt;## Phase 2: Data-Analyst&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Input: Phase 1 JSON output
&lt;span class="p"&gt;-&lt;/span&gt; Output: JSON with analysis_results, insights, anomalies
&lt;span class="p"&gt;-&lt;/span&gt; Pass to: Phase 3

&lt;span class="gu"&gt;## Phase 3: Report-Generator&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Input: Phase 2 JSON output
&lt;span class="p"&gt;-&lt;/span&gt; Output: Markdown report
&lt;span class="p"&gt;-&lt;/span&gt; Pass to: user

&lt;span class="gu"&gt;## Inter-Phase Data Contract&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
json&lt;br&gt;
{&lt;br&gt;
  "extracted_fields": {...},&lt;br&gt;
  "analysis_results": {...},&lt;br&gt;
  "report_markdown": "..."&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
yaml&lt;/p&gt;

&lt;p&gt;Why sub-agents instead of one agent doing all phases? &lt;strong&gt;Isolation&lt;/strong&gt;. If Phase 2 crashes, Phase 1's extracted data isn't lost. Each sub-agent starts fresh with a clean context, so you don't hit token limits. And you can swap out Phase 2's skill without touching the others.&lt;/p&gt;

&lt;p&gt;I tested this with a 4-phase financial report pipeline. Single-agent approach: 70% completion rate, frequent context loss. Orchestrated approach: 95% completion rate, clean handoffs every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Any task that takes more than one distinct transformation — extract → analyze → report, query → aggregate → visualize, etc.&lt;/p&gt;


&lt;h2&gt;
  
  
  Level 5: Security Skill — Permission Control and Protection
&lt;/h2&gt;

&lt;p&gt;Security isn't a luxury; it's a layer. A Security Skill wraps protective checks around your other skills. It enforces the principle of least privilege, scans for dangerous actions, and blocks operations that exceed authorized scope.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# security-guard-config.yaml&lt;/span&gt;
&lt;span class="na"&gt;skill_permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;info-extractor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;allowed_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;search&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;blocked_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;delete&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;write&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;execute&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;data_scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customer_profile_readonly"&lt;/span&gt;
    &lt;span class="na"&gt;sensitive_fields&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;id_card_number&lt;/span&gt;
        &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mask&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phone_number&lt;/span&gt;
        &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mask_last_4&lt;/span&gt;

&lt;span class="na"&gt;defense_rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ignore.*previous.*instructions"&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;block_and_log&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pretend.*you.*are"&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warn_and_confirm&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;export.*all.*data"&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;require_approval&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Security Skill sits in the orchestration pipeline as a gate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1: Info-Extractor
    ↓
Security-Guard (check permissions, mask sensitive fields)
    ↓
Phase 2: Data-Analyst
    ↓
Security-Guard (validate output, check for data leaks)
    ↓
Phase 3: Report-Generator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I ran a red-team test against one of my skills. Without Security-Guard: 4 out of 6 attack vectors succeeded (prompt injection, data exfiltration, privilege escalation, unauthorized export). With Security-Guard: 0 out of 6 succeeded. The defense rules caught injection patterns, and the permission config blocked unauthorized tool access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Always. Seriously. Any skill that touches real data or performs real actions needs this layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 6: Scoring Skill — Rule Engine with YAML Config
&lt;/h2&gt;

&lt;p&gt;A Scoring Skill evaluates business objects against configurable rules and weights. The rules live in YAML, not in the prompt — so when business logic changes, you update the config, not the skill.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# scoring-rules.yaml&lt;/span&gt;
&lt;span class="na"&gt;object_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enterprise_customer"&lt;/span&gt;
&lt;span class="na"&gt;dimensions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;business_potential"&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.35&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;annual_revenue"&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;revenue_million"&lt;/span&gt;
        &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;range"&lt;/span&gt;
        &lt;span class="na"&gt;ranges&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;100&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;100&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;500&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;2&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;500&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1000&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;1000&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5000&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;4&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;5000&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;growth_rate"&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yoy_growth_pct"&lt;/span&gt;
        &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;range"&lt;/span&gt;
        &lt;span class="na"&gt;ranges&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;-5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;-5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;2&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;15&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;15&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;30&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;4&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;30&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_risk"&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.30&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contract_expiry"&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;months_to_expiry"&lt;/span&gt;
        &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;range"&lt;/span&gt;
        &lt;span class="na"&gt;ranges&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;4&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;6&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;6&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;12&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;2&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;12&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;complaint_count"&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;complaints_last_6m"&lt;/span&gt;
        &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;range"&lt;/span&gt;
        &lt;span class="na"&gt;ranges&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;null&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;4&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tech_readiness"&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.35&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;digital_maturity"&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;digital_score"&lt;/span&gt;
        &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;direct"&lt;/span&gt;
        &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scoring engine follows an orchestrated pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1: Info-Extractor → pull customer data from input
Phase 2: Knowledge-RAG → match scoring rules from YAML
Phase 3: Data-Analyst → calculate weighted scores per dimension
Phase 4: Report-Generator → output scorecard with recommendations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built this for a telecom client who needed to score enterprise customers for 5G private network sales opportunities. They changed the weighting three times in the first month — each time, I updated two numbers in the YAML and redeployed. Zero code changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Lead scoring, risk assessment, supplier evaluation, partner grading — anything that needs multi-dimensional weighted evaluation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 7: Verification Skill — Multi-Source Evidence Cross-Validation
&lt;/h2&gt;

&lt;p&gt;A Verification Skill doesn't trust any single data source. It pulls evidence from multiple independent sources, cross-validates them, detects conflicts, and produces confidence-scored conclusions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Evidence Chain Analyzer&lt;/span&gt;

&lt;span class="gu"&gt;## Evidence Sources&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Customer complaint records (CRM)
&lt;span class="p"&gt;2.&lt;/span&gt; System alert logs (monitoring)
&lt;span class="p"&gt;3.&lt;/span&gt; SLA performance data (operations)
&lt;span class="p"&gt;4.&lt;/span&gt; Technician work orders (field)

&lt;span class="gu"&gt;## Cross-Validation Rules&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; If ≥2 sources agree → confidence = 0.85
&lt;span class="p"&gt;-&lt;/span&gt; If all sources agree → confidence = 0.95
&lt;span class="p"&gt;-&lt;/span&gt; If sources conflict → flag conflict, lower confidence to 0.50
&lt;span class="p"&gt;-&lt;/span&gt; If only 1 source available → confidence = 0.40, flag for manual review

&lt;span class="gu"&gt;## Conflict Detection&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Timeline mismatch: event A reported before cause B
&lt;span class="p"&gt;-&lt;/span&gt; Quantity mismatch: complaint says 3 outages, logs show 1
&lt;span class="p"&gt;-&lt;/span&gt; Attribution mismatch: CRM blames network, alerts show power failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output includes a confidence matrix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"conclusion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Root cause: power failure at site DC-042"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alert_logs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"supports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UPS failure at 14:32"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"technician_order"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"supports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Power restoration at 16:15"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crm_complaint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"supports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Customer reported outage at 14:35"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sla_data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"supports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SLA recorded as network issue (misclassification)"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"conflicts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"attribution_mismatch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"alert_logs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sla_data"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SLA misclassified; alert logs are authoritative"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I used this for a complaint investigation where the customer claimed 5 outages, the monitoring system showed 2, and the technician's work orders confirmed 3. The evidence chain revealed that 2 of the customer's reported outages were actually a single event they perceived as separate — and 1 real outage wasn't captured by monitoring due to a probe failure. Without cross-validation, we'd have either dismissed the customer's complaint or over-escalated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Complaint investigation, incident root cause analysis, audit verification, any scenario where truth lies across multiple systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Level 8: Approval Skill — Human-in-Loop Risk Control
&lt;/h2&gt;

&lt;p&gt;An Approval Skill adds a mandatory human checkpoint before high-risk operations execute. It auto-assesses risk level, generates an approval request, and waits for explicit confirmation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SKILL.md — Human-in-Loop Approval&lt;/span&gt;

&lt;span class="gu"&gt;## Risk Assessment Matrix&lt;/span&gt;
| Level | Criteria | Examples |
|-------|----------|----------|
| L1 | Read-only, no data exposure | Query internal database |
| L2 | Read-only, contains sensitive data | View customer PII |
| L3 | Write to internal systems | Update customer record |
| L4 | External communication | Send email, post to chat |
| L5 | Irreversible or bulk operations | Delete records, export all data |

&lt;span class="gu"&gt;## Approval Workflow&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; L1-L2: Execute automatically, log action
&lt;span class="p"&gt;-&lt;/span&gt; L3: Execute with confirmation prompt
&lt;span class="p"&gt;-&lt;/span&gt; L4: Require approval with content preview
&lt;span class="p"&gt;-&lt;/span&gt; L5: Require approval + supervisor notification + audit trail

&lt;span class="gu"&gt;## Approval Request Format&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
json&lt;br&gt;
{&lt;br&gt;
  "risk_level": "L4",&lt;br&gt;
  "action": "send_email",&lt;br&gt;
  "recipient": "&lt;a href="mailto:client@company.com"&gt;client@company.com&lt;/a&gt;",&lt;br&gt;
  "content_preview": "Dear Client, regarding your 5G deployment...",&lt;br&gt;
  "requires_approval_from": "supervisor",&lt;br&gt;
  "audit_trail_id": "AIL-20260628-0042"&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
The key design principle: **never auto-execute L4+ operations**. I learned this the hard way when an agent auto-sent a draft client email that contained internal pricing notes. The human-in-loop layer now catches every L4+ action before it leaves the system.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
python&lt;/p&gt;
&lt;h1&gt;
  
  
  Simplified approval gate logic
&lt;/h1&gt;

&lt;p&gt;def execute_with_approval(action):&lt;br&gt;
    risk = assess_risk(action)&lt;br&gt;
    if risk in ["L1", "L2"]:&lt;br&gt;
        return execute(action)&lt;br&gt;
    elif risk == "L3":&lt;br&gt;
        if confirm_with_user(action):&lt;br&gt;
            return execute(action)&lt;br&gt;
    elif risk in ["L4", "L5"]:&lt;br&gt;
        approval = request_approval(action, require_supervisor=(risk=="L5"))&lt;br&gt;
        if approval.status == "approved":&lt;br&gt;
            log_audit(action, approval)&lt;br&gt;
            return execute(action)&lt;br&gt;
        else:&lt;br&gt;
            return {"status": "rejected", "reason": approval.reason}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
**When to use it:** Any action that sends data externally, modifies records, or performs irreversible operations.

---

## Level 9: Composite Skill — 5+ Skills Orchestrated Pipeline

A Composite Skill chains five or more specialized skills into a coordinated pipeline. Each skill retains its independence, but the composite skill defines the overall flow and data contracts between them.

Here's a real example — a **Customer Operations Dashboard** that combines six skills:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;br&gt;
User: "Show me the complaint trend for enterprise customers in Q2"&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;[L3-GW-01: Data Query Gateway] — routes the request&lt;br&gt;
    ↓&lt;br&gt;
[L3-NL-01: NL2Query] — converts natural language to SQL&lt;br&gt;
    ↓&lt;br&gt;
[Security-Guard] — checks query permissions&lt;br&gt;
    ↓&lt;br&gt;
[L3-DB-01: Data Executor] — executes the validated SQL&lt;br&gt;
    ↓&lt;br&gt;
[L3-AG-01: Data Aggregator] — calculates trends, YoY, rankings&lt;br&gt;
    ↓&lt;br&gt;
[L3-VZ-01: Visualization Renderer] — generates ECharts dashboard&lt;br&gt;
    ↓&lt;br&gt;
Output: Interactive HTML dashboard with complaint trends&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
The composite skill's `SKILL.md` defines the orchestration:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
markdown&lt;/p&gt;
&lt;h1&gt;
  
  
  SKILL.md — Intelligent Data Query Dashboard
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Pipeline Definition
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Receive natural language query from user&lt;/li&gt;
&lt;li&gt;Route to NL2Query for intent recognition and SQL generation&lt;/li&gt;
&lt;li&gt;Pass SQL through Security-Guard for permission validation&lt;/li&gt;
&lt;li&gt;Execute validated query via Data Executor (read-only, rate-limited)&lt;/li&gt;
&lt;li&gt;Aggregate results via Data Aggregator (statistics, YoY, rankings)&lt;/li&gt;
&lt;li&gt;Render visualization via Visualization Renderer&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Data Contracts
&lt;/h2&gt;

&lt;p&gt;Phase 2 → Phase 3: SQL string + query_metadata JSON&lt;br&gt;
Phase 3 → Phase 4: Validated SQL + permission_token&lt;br&gt;
Phase 4 → Phase 5: Raw result set JSON&lt;br&gt;
Phase 5 → Phase 6: Aggregated data JSON + chart_suggestions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
The beauty of this approach: each component skill can be swapped, upgraded, or tested independently. When we switched the visualization engine from Chart.js to ECharts, we only touched Phase 6. The other five phases didn't change at all.

**When to use it:** Complex business workflows that need querying, processing, validating, and presenting — dashboards, report pipelines, analysis suites.

---

## Level 10: Closure Skill — 8+ Skills End-to-End Business Loop

This is the final form. A Closure Skill doesn't just process data — it closes a business loop from intent to execution to archival. It orchestrates eight or more skills in a complete cycle, with human checkpoints, security gates, and knowledge retention built in.

Here's the architecture I built for **enterprise customer operations** (codename: ArkClaw):

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;br&gt;
Step 1: Intent Understanding&lt;br&gt;
    → NL2Query + Info-Extractor&lt;br&gt;
    ↓&lt;br&gt;
Step 2: Multi-Source Query&lt;br&gt;
    → Data Executor + Knowledge-RAG&lt;br&gt;
    ↓&lt;br&gt;
Step 3: Rule-Based Scoring&lt;br&gt;
    → Scoring Engine (YAML-configured)&lt;br&gt;
    ↓&lt;br&gt;
Step 4: Evidence Verification&lt;br&gt;
    → Evidence Chain (cross-source validation)&lt;br&gt;
    ↓&lt;br&gt;
Step 5: Root Cause Mapping&lt;br&gt;
    → Root-Cause-Mapper (topology + 3-layer reasoning)&lt;br&gt;
    ↓&lt;br&gt;
Step 6: Human Approval&lt;br&gt;
    → Human-in-Loop (risk-gated confirmation)&lt;br&gt;
    ↓&lt;br&gt;
Step 7: Execution &amp;amp; Archival&lt;br&gt;
    → Archive-Manager (tag, sanitize, persist)&lt;br&gt;
    ↓&lt;br&gt;
Step 8: Visual Output&lt;br&gt;
    → Visualization Renderer + Report Generator&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
The full `SKILL.md` is substantial, but here's the core protocol:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
markdown&lt;/p&gt;

&lt;h1&gt;
  
  
  SKILL.md — Enterprise Customer Operations Assistant (ArkClaw)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Business Closure Protocol
&lt;/h2&gt;

&lt;p&gt;This skill implements a complete operations loop:&lt;br&gt;
Understand → Investigate → Score → Verify → Diagnose → Approve → Execute → Visualize&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Intent Understanding&lt;/strong&gt; — Parse user's natural language request, identify
customer entity and operation type (analysis, scoring, risk check)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Source Query&lt;/strong&gt; — Pull data from CRM, monitoring, SLA, and knowledge
base in parallel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rule-Based Scoring&lt;/strong&gt; — Apply YAML-configured scoring rules, calculate
weighted scores across dimensions (business potential, churn risk, tech readiness)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence Verification&lt;/strong&gt; — Cross-validate scoring results against multiple
data sources, flag conflicts, compute confidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause Mapping&lt;/strong&gt; — If anomalies detected, build fault topology,
apply 3-layer reasoning (earliest-time, downstream-dependency,
independent-fault-exclusion)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Approval&lt;/strong&gt; — For L4+ actions (external communication, data export),
generate approval request with risk assessment and content preview&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution &amp;amp; Archival&lt;/strong&gt; — After approval, execute action and archive
results with tags, sanitized sensitive fields, and metadata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Output&lt;/strong&gt; — Generate interactive HTML dashboard or DOCX report
with key findings, scorecards, and action recommendations&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Output Structure (per user preference)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Executive Summary&lt;/strong&gt; — Key findings and core conclusions, max 1 page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Tables&lt;/strong&gt; — Layered data, business structure, risk warnings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action Recommendations&lt;/strong&gt; — Prioritized by urgent/short-term/mid-term,
with owners and expected outcomes&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


I ran this end-to-end for a real client — analyzing Jiangling Motors Group's 5G private network opportunity. The system scored their business potential at 84/100 (high opportunity), identified a moderate churn risk of 55/100, and generated a 15-page DOCX report with a one-page executive summary, data tables comparing revenue and contract timelines, and prioritized action recommendations. Total time: about 4 minutes. A human analyst would take 4 hours for the same depth.

The critical difference between Level 9 and Level 10? **Level 10 closes the loop.** It doesn't just produce output — it archives the analysis for future reference, updates the knowledge base with new patterns, and creates an audit trail. The next time someone asks about the same customer, the system starts from accumulated knowledge, not from scratch.

---

## Putting It All Together: The Level Progression

Here's how I think about when to move up a level:

| Level | What You Get | What It Costs | Signal to Level Up |
|-------|-------------|---------------|-------------------|
| 1 | Zero setup | Zero flexibility | "I need if/then logic" |
| 2 | Knowledge + scripts | File management | "I need branching workflows" |
| 3 | Decision trees | More complex prompts | "I need separate agents per step" |
| 4 | Multi-agent isolation | Orchestration overhead | "I need permission controls" |
| 5 | Security gates | Config complexity | "I need configurable rules" |
| 6 | Configurable scoring | YAML maintenance | "I need cross-source verification" |
| 7 | Evidence confidence | More data sources | "I need human checkpoints" |
| 8 | Risk-gated approval | Latency from waits | "I need a full pipeline" |
| 9 | End-to-end pipeline | Coordination complexity | "I need business loop closure" |
| 10 | Complete closure | Maximum architecture | "This IS my business process" |

One thing I want to emphasize: **you don't always need Level 10.** A Level 3 workflow skill is the right tool for a troubleshooting guide. A Level 6 scoring skill is perfect for lead qualification. The levels aren't a maturity model — they're a design space. Pick the level that matches your problem's complexity.

---

## The Pattern That Connects All Ten Levels

Looking back across all ten levels, I see one recurring pattern: **separation of concerns through structured protocols.**

- Level 1: Concerns mixed in one file
- Level 2: Knowledge separated from instructions
- Level 3: Steps separated with decision points
- Level 4: Agents separated with JSON contracts
- Level 5: Security separated as a gate layer
- Level 6: Rules separated into YAML config
- Level 7: Evidence separated by source
- Level 8: Approval separated by risk level
- Level 9: Pipeline separated into composable stages
- Level 10: Business logic separated from technical execution

Every level up is an act of separating something that was previously coupled. And the mechanism for that separation is always the same: a **structured data contract** (usually JSON) that one component produces and the next component consumes.

---

## What's Next?

I'm currently teaching a course where students build skills starting at Level 1 and work their way up to creating their own Level 9 composite skills in a two-hour hands-on session. The biggest "aha" moment? When they realize that the jump from Level 3 to Level 4 — from a single agent with a decision tree to multiple agents with structured handoffs — is the inflection point. Everything before Level 4 is prompt engineering. Everything from Level 4 onward is system engineering.

What level are your current AI skills at? And more importantly — what level do they *need* to be at to solve your actual business problems? I'd love to hear where you are in this progression.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
