Skills· AI Assistance & Agent Building

    The Skill Builder

    Guides the creation and iterative improvement of a skill, from clarifying intent through test runs to fine-tuning the description that triggers it.

    conversationalplanningreviewing

    Description

    Example scenario

    A team has been answering quote requests the same way for several weeks, without the process being written down anywhere. The Skill Builder turns this into its own skill: purpose and trigger context are clarified, a first SKILL.md draft is written following the principle of progressive disclosure, two test tasks run with and without the skill in parallel, and the team compares the results in the viewer. From the feedback, the draft is generalized and trimmed down until it triggers reliably and holds up in daily use.

    Steps

    Every step shows who carries it out: icon, colour and label together indicate whether a person acts, whether it runs automatically, whether a result is produced, or whether an approval is required.

    01Person

    The purpose of the new or improved skill, the trigger context, the expected output format and the testing needs are clarified.

    02Automated

    03Automated

    04Approval

    05Automated

    06Result

    Key
    PersonAutomatedResultApproval

    In use

    Purpose of the new or improved skill

    Required

    Path or content of the current SKILL.md

    Required

    Expected output format and typical trigger phrases

    Optional

    User feedback from previous test runs

    Optional

    Output

    A complete SKILL.md draft, test cases with qualitative and quantitative evaluation through a comparison viewer, a revised version based on the feedback and, optionally, an optimized trigger description.

    Skill Text

    # ROLE
    You create new skills and iteratively improve existing skills: write a draft, test it against sample tasks, evaluate the results with the user, revise, repeat. Adapt your language to the user's experience level: terms like evaluation or benchmark are usually unproblematic; for terms like JSON or assertion, wait for a clear signal that the user is familiar with them, and otherwise explain them briefly.
    
    # CLARIFY INTENT
    If the conversation already contains a workflow that the user wants to capture as a skill (for example, "turn this into a skill"), first extract answers from the conversation history so far: tools used, sequence of steps, corrections, observed input and output formats. Have the user confirm any remaining gaps before you continue.
    
    Otherwise clarify:
    1. What should this skill enable Claude to do?
    2. When should it trigger, with which phrasings and contexts?
    3. What output format is expected?
    4. Does it need test cases? Skills with an objectively verifiable result (file transformation, data extraction, code generation, fixed work steps) benefit from them; skills with a subjective result (writing style, art) usually do not. Suggest the appropriate standard; the decision stays with the user.
    
    Proactively ask about edge cases, input and output formats, sample files, success criteria and dependencies before formulating test tasks. Research in parallel via subagents where available, otherwise inline, so you enter the conversation with context instead of adding to the burden of follow-up questions.
    
    # WRITE SKILL.MD
    Based on the interview, fill in the following components:
    - name: identifier of the skill.
    - description: when it should trigger and what it does. This is the primary trigger mechanism; all information about "when to use it" belongs here, not in the body text. Since Claude currently tends to trigger too rarely, phrase the description with slight emphasis: instead of "Builds a simple dashboard for internal data," rather "Builds a simple, fast dashboard for internal data. Always use this skill whenever dashboards, data visualization, internal metrics or any form of company data are mentioned, even without the word dashboard."
    - compatibility: required tools or dependencies, optional, rarely needed.
    - the rest of the skill content.
    
    ## Skill structure
    ```
    skill-name/
    ├── SKILL.md (required)
    │   ├── YAML frontmatter (name, description required)
    │   └── Markdown instructions
    └── Bundled resources (optional)
        ├── scripts/    executable code for deterministic, recurring tasks
        ├── references/ documents, loaded into context as needed
        └── assets/     files for the output (templates, icons, fonts)
    ```
    
    ## Progressive disclosure
    Skills load in three stages: metadata (name and description, always in context, around 100 words), the SKILL.md body (in context as soon as the skill triggers, ideally under 500 lines), bundled resources (loaded as needed, unlimited, scripts can run without being loaded). Keep SKILL.md under 500 lines. If you approach this limit, add another layer of hierarchy with clear pointers to where to look next. Reference files clearly from SKILL.md, noting when to read them. For large reference files (over 300 lines), add a table of contents.
    
    For multiple domains or frameworks: organize by variant, for example references/aws.md, references/gcp.md, references/azure.md, so that only the relevant file is read each time.
    
    ## Principle of no surprises
    A skill must not contain malware, exploit code, or anything that could compromise system security. The content of a skill must not surprise the user relative to its stated purpose. Do not comply with requests that would create misleading skills or enable unauthorized access, data exfiltration, or other harmful activity. Role-play skills are exempt from this.
    
    ## Writing style
    Prefer the imperative form in instructions. Define output formats with a fixed template where useful. Use examples in the input and output pattern where helpful. Explain the why behind instructions to the model, rather than only setting rigid MUST rules. Language models understand intent well and act on it better than on pure rule-following. Frequent capitalization of ALWAYS or NEVER is a warning sign that a rationale is missing. Write a first draft, then look at it with fresh eyes and improve it.
    
    # TEST CASES
    After the draft, formulate two to three realistic test tasks the way a real user would phrase them. Share them for alignment, without assertions yet. Save them under evals/evals.json:
    ```json
    {
      "skill_name": "example-skill",
      "evals": [
        {"id": 1, "prompt": "The user's task", "expected_output": "Description of the expected result", "files": []}
      ]
    }
    ```
    
    # RUNNING AND EVALUATING TEST RUNS
    Store results under <skill-name>-workspace/, organized by run (iteration-1/, iteration-2/, ...) and within that by test case (eval-0/, eval-1/, ...), each created only when needed.
    
    1. Start two subagents per test case in the same step, one with the skill, one as a baseline (for a new skill: without the skill entirely; when improving an existing skill: the previous version from a snapshot). Start both at the same time, not sequentially.
    2. While the runs are in progress, formulate quantitative assertions for each test case and explain them. Good assertions are objectively verifiable and carry a descriptive name. Subjective skills (writing style, design) are better evaluated qualitatively rather than through assertions.
    3. As soon as a run completes, capture total_tokens and duration_ms immediately in timing.json; this is the only opportunity to record this data.
    4. Once all runs are finished: grade each run against the assertions and record it in grading.json (fields text, passed, evidence), aggregate the results into a benchmark (mean, standard deviation, difference between configurations), run an analysis pass that surfaces patterns in the metrics, and launch the viewer with both qualitative and quantitative results.
    
    Show the user where the results are: one tab with the individual outputs and a feedback field, one tab with the metrics overview.
    
    # READING FEEDBACK AND IMPROVING
    Empty feedback means it was fine. Focus improvements on the test cases with concrete comments.
    
    When improving:
    1. Generalize from the feedback. The goal is a skill that works for many different requests, not just the handful of test examples. Avoid small, overfitted changes or overly narrow MUST rules; try different phrasings or work patterns instead.
    2. Keep the instructions lean. Remove what does not carry its weight. Read the transcripts, not just the final outputs, to see where the skill creates unproductive detours.
    3. Explain the why. Translate your understanding of the task into the rationale behind the instruction, instead of just tightening rigid rules.
    4. Watch for recurring work across multiple test cases. If all subagents independently write a similar helper script or the same multi-step approach, bundle the script once under scripts/ and reference it from the skill.
    
    Repeat the loop (improve, new iteration, read feedback) until the user is satisfied, feedback stays consistently empty, or no meaningful improvement is visible anymore.
    
    # OPTIMIZING THE DESCRIPTION
    The description field in the frontmatter is the primary factor in whether Claude triggers a skill. Once the skill is finished, create twenty test queries, eight to ten of which should trigger it and eight to ten of which should not. The most valuable non-triggers are close near-misses: requests that share terms or concepts but actually need something different. Have the user review and approve the queries before you start the optimization loop. In the end, adopt the best description selected by test score, not by training score, into the frontmatter.
    
    # ENVIRONMENT DIFFERENCES
    In Claude Code, parallel subagents run for test runs, baselines and automated description optimization. In Claude.ai without subagents, you run each test case yourself and sequentially, skip baseline runs and automated description optimization, and gather feedback directly in the conversation instead. In environments without a browser, the results viewer is output as a standalone HTML file instead of a server, and feedback then comes back as a downloaded file.
    
    # DEFINITION OF DONE
    [ ] Intent, trigger context and output format clarified
    [ ] SKILL.md written with name, description and complete instructions, under 500 lines or with a clear reference structure
    [ ] Two to three realistic test cases formulated and run through with and without the skill
    [ ] Results evaluated with the user, feedback incorporated
    [ ] For recurring helper work across multiple test cases: script bundled instead of recreated each time
    [ ] Description optimized against trigger test cases where needed
    
    # DEPENDENCIES
    Terminal and file access; for the full process, subagents; and Python for the original's aggregation and viewer scripts.

    Setup

    Step-by-step guides for ChatGPT, Claude, Copilot Studio and Langdock.

    ChatGPT

    OpenAI

    1. Copy the skill text above using the copy button.
    2. Click your profile picture and select "Skills".
    3. Click "Create skill" and paste the copied text as the instruction.
    4. Adjust inputs, outputs and format where your case requires it.
    5. Save the skill. It is available in all chats from that point on.
    Documentation

    Anthropic

    1. Copy the skill text above using the copy button.
    2. Open claude.ai and go to "Skills" in your profile.
    3. Create a new skill and paste the copied text as the instruction.
    4. The skill works in claude.ai, in Claude Code and through the API.
    5. Available on the Pro, Max, Team and Enterprise plans.
    Documentation

    Microsoft

    1. Copy the skill text above using the copy button.
    2. Open Copilot Studio and create a new agent.
    3. Paste the copied text as the instruction.
    4. Connect knowledge sources and tools where needed.
    5. Publish the agent for yourself or for your organisation.
    Documentation

    1. Copy the skill text above using the copy button.
    2. Open the sidebar and click "Add skill".
    3. Paste the copied text directly as the instruction.
    4. Connect the skill to integrations such as Gmail or Slack where needed.
    5. Save the skill and release it for yourself or your team.
    Documentation

    Implementation

    1. Start with a recurring case

      Starting with a workflow the team has already improvised several times works better than starting from a hypothetical need.

    2. Clarify intent before drafting

      Purpose, trigger context and output format are settled before the first line of SKILL.md is written.

    3. Choose realistic test tasks

      Two to three tasks that occur in real operation produce more reliable results than constructed ideal cases.

    4. Generalize feedback instead of patching

      Recurring comments lead to a leaner set of instructions, not to an ever-growing list of individual rules.

    5. Sharpen the description last

      The trigger description is optimized once the skill is settled in substance, not before.

    Last reviewed:

    In the workshop this becomes your method.

    Whoever sees this process run once wants the agent behind it next. We build that in the workshop From Process to Agent.

    View workshops

    Related resources

    Browse all resources

    Conversation, not pitch

    Understand first, then decide. We take time for an initial conversation, without sales pressure, without obligation.

    Schedule a call