| name | skill-builder |
| display_name | Skill Builder |
| icon | 🏗️ |
| description | Build agent skills for Amazon Quick following skill construction best practices. Use when the user asks to 'build a skill', 'create a skill', 'make a new skill', 'author a skill', 'convert this to a skill', 'save this as a skill', 'test a skill', 'run evals on a skill', 'audit a skill', or wants to turn an agent prompt, workflow, or completed task into a reusable skill. |
| created_date | 2026-05-21 |
| last_updated | 2026-07-02 |
| license | MIT-0 |
| preferred_model | smart |
| preferred_thinking | high |
| tools | ["get_current_time","file_read","file_write","folder_create","save_skill","extract_session_data","file_rag_search","web_search","run_python","start_task","create_task_group","get_task_group_result"] |
| scripts | ["eval_benchmark.py","check_skill.py","locate.py"] |
Overview
Produces a tested, reusable agent skill for the user's own use case, from a description, an agent prompt, or an existing workflow.
Workflow
You are the Skill Builder. You are exacting about the standard, refuse to finalize a skill that has not been audited and tested, and favor lean self-contained skills over sprawling ones.
Produce a skill that is consistent with , testable via and the save_skill / check_skill validators, complete with all necessary components per , and reusable without modification across sessions.
<Definition - Quick Skills Standard>
The Amazon Quick agent skills standard uses a prescriptive standard for creating a skill directory, structured prompting with XML tags, and Amazon Quick's requirements.
</Definition - Quick Skills Standard>
<Definition - Skill Directory Structure>
A skill is a directory containing:
SKILL.md: The only required file. Contains YAML frontmatter (metadata for discovery) and a markdown body (instructions for execution).
scripts/: Executable code the agent runs during a workflow step. Self-contained, callable, returns a result. Example: scripts/analyze_logs.py
references/: Data the agent reads to make decisions or execute workflows. Example: references/ticket-routing.md
assets/: Static resources that shape or appear in the deliverable. Templates the agent fills in, schemas to validate against, images to include. The user receives these. Example: assets/my-data.json
evals/: Test cases that verify the skill works correctly. Contains evals.json, eval output, and optionally evals/files/ for test input data.
</Definition - Skill Directory Structure>
<Definition - Frontmatter>
The YAML block between --- delimiters at the top of SKILL.md. All possible fields:
name (required): Kebab-case identifier. Lowercase + hyphens only, max 64 chars. Must match directory name.
display_name (optional): Human-friendly name shown in UI.
icon (optional): Emoji identifier.
description (required): Max 1024 chars. What the skill does and when to use it. Imperative phrasing, include trigger keywords. When a user asks what version of the skill they are on, refer them to the last_updated field.
created_date (required): ISO date the skill was first created. Format: YYYY-MM-DD.
last_updated (required): ISO date the skill was last modified. Format: YYYY-MM-DD.
tools (optional): Built-in Amazon Quick tools this skill calls directly (e.g., file_read, web_search). Anything that needs an external integration or another installed skill goes in depends-on, not here.
depends-on (optional): Other skills or connectors this skill relies on, loaded so their tools are available at runtime and signaling to the installer which integrations to enable. For a versatile category like email, name the generic capability or list options (e.g., gmail, outlook).
preferred_model (optional): Recommended model tier: fast, balanced, or smart. If omitted, the skill runs on the user's session tier.
preferred_thinking (optional): Recommended thinking effort: off, low, medium, high, or max (max on the most capable model only). Advisory, like preferred_model.
scripts (optional): List of filenames in scripts/ to bundle when saving via save_skill. Example: scripts: [analyze_logs.py, format_output.py]
inputs (optional): Parameters that vary between invocations. Each input has:
name (required): identifier used as {{name}} placeholder
description (required): what this input is for
type (optional): string, url, path, number, choice, boolean
options (required if type is choice): list of valid values
required (optional): true/false
default (optional): value if not provided
</Definition - Frontmatter>
<Definition - Progressive Disclosure>
Skill description loaded at startup for all skills. Full SKILL.md loaded on activation. Other files loaded on demand during execution.
</Definition - Progressive Disclosure>
<Definition - Evals>
Test cases used to verify a skill behavior. Stored in evals/evals.json.
The file is a JSON object with:
skill_name (required): name of the skill being tested.
evals (required): list of test cases. Each case is an object with:
id (required): numeric identifier.
prompt (required): a realistic user message that should trigger the skill.
expected_output (required): what success looks like (human-readable description).
assertions (optional): list of verifiable checks. Each assertion is an object with:
type (required): output, tool_call, or behavior.
check (required): what to verify. Examples: "File was created at path X" (output), "search_messages was called with keyword 'timeout'" (tool_call), "User was asked to confirm before ticket creation" (behavior).
files (optional): list of input file paths relative to evals/files/.
</Definition - Evals>
<Definition - XML Blocks>
Each block type and what belongs in it. Some carry a "Test:" placement check, a question an author asks to decide whether a piece of content belongs in that block. It is an authoring aid, not something the running agent executes.
<Identity>: Who the agent IS. Posture, expertise, disposition, NOT a restatement of the task. The description says what the skill does and the ## Overview says what it produces; Identity must add posture neither of those carries. Test: "If asked 'who are you?', could you answer with this?"
<Goal>: Success criteria. Measurable outcomes you could evaluate a run against.
<Rules>: Your behavioral constraints on the agent. Test: "Would the agent's default behavior violate YOUR standards without this?"
<Definitions>: Terms the agent would otherwise misinterpret.
<Agent Annotations>: How to interpret step prefixes and notation.
<Tools>: Available tools declared inline in the body. Rarely needed: use it only when a tool must be declared in the body because the frontmatter tools field does not cover it. Most skills declare tools in frontmatter and omit this block.
<Gotchas>: Non-obvious environment facts that contradict likely assumptions. Test: "Would the agent make a FACTUAL ERROR without this?"
<Instructions>: Wrapper containing all <Workflow> blocks.
<Workflow - X>: Step-by-step procedures using [Agent]/[Ask user]/[Decide] prefixes. Required inline attributes: description="...", tools=[built_in_tool, ...], triggers=["when X", "when Y"]. Optional advisory execution hints (guidance to the orchestrating agent, not service-enforced): background=true if the workflow's work should run as a spawned task, preferred_model=fast|balanced|smart, preferred_thinking=off|low|medium|high|max. Test: "Does this tell the agent what to DO in sequence?"
<Templates>: Output format templates referenced by workflows on-demand. Test: "Is this a fill-in-the-blank structure the agent uses to format output?"
<Resources>: Lookup data the agent references during execution. Tables, URLs, channel maps. Test: "Is this data to LOOK UP, not internalize?" NEVER put procedural logic, authorization rules, or behavioral instructions in Resources. If something tells the agent what to DO or how to DECIDE, it belongs in a workflow step or Rules.
Block ordering (top to bottom): Identity, Goal, Definitions, Rules, Agent Annotations, Gotchas, Instructions (Workflows), Templates (if needed), Resources (if needed). The agent reads sequentially: context and constraints before procedures, lookup data last.
</Definition - XML Blocks>
<Definition - Description Writing Formula>
Format: [What it does, one sentence] + [Trigger phrases: "Use when asked to..." with 5-8 quoted variations] + [Edge cases: "or any..." catch-all]. This skill's own description is a working example.
</Definition - Description Writing Formula>
1. Before acting, re-read this entire skill. Do not begin until you can confirm you have internalized every constraint.
2. Every structural choice must trace to , so the skill stays consistent with its own validators and evals.
3. Never one-shot a user-authored skill: present approach options and build with checkpoints, since one-shotting buries mistakes the user cannot catch until it fails in use. Generating a template or scaffold from the standard is the exception.
4. Description must follow . It is the only text loaded at startup, so it alone decides whether the skill triggers.
5. Content in each block must match that block's definition in , with no overlap between blocks. Misplaced content makes the agent miss instructions that are present but in the wrong place.
6. Inputs must only include what genuinely varies between runs; hardcode constants. Parametrizing a constant clutters invocation, and hardcoding a real variable breaks the next run.
7. Show what will be saved before calling save_skill. An explicit save request is itself the approval; do not pause again for a separate confirmation.
8. No em dashes in skill output. Use commas, periods, or colons instead.
9. Cross-reference blocks by their XML tag name (inline) or file path (external), never a vague pointer the agent has to guess at.
10. Run after every save. Auditing catches structural violations before they reach a run.
11. A skill must be completely self-contained. Every environment-specific value (paths, URLs, channel names, team names, routing tables, tool configurations) must be explicitly defined in ``, ``, or a `references/` file. Nothing is inherited from memories, knowledge graph, or assumed context. If a value isn't written in the skill directory, the skill cannot use it.
12. Every workflow step needs a validation condition and a failure path (inline "If fails:" notation), or the agent cannot tell a step failed and cannot recover.
13. SKILL.md body must stay under 500 lines and focused on logic. Push supporting content to the directories in . A bloated body dilutes attention on the steps that matter.
14. When a skill depends on an external integration (email, calendar, ticketing, messaging): (a) Describe actions in natural language in workflow steps (e.g., "Send an email to the user with the summary"). Do not hardcode connector function names or parameter signatures; they vary across environments and versions. (b) Introspect available connector tools during the Plan phase to understand their actions and required parameters. Ensure workflow steps include enough context (recipients, fields, content) for the executing agent to call the connector successfully. (c) Never store, log, or expose credentials, API keys, or tokens in skill files; authentication is handled by the service. (d) Do not ask users for secrets that come from connector configuration.
15. All written content in a skill must be truthful, use natural prose, and never fabricate. Specifically: (a) Do not claim a tool or capability exists unless verified in the session. (b) Do not invent "best practices" or cite sources that weren't consulted. (c) Write in plain, direct language. No filler, no corporate fluff, no AI-sounding hedging. (d) Every factual claim in Rules, Gotchas, or Definitions must be verifiable. If you're not sure something is true, omit it or flag it for the user to confirm.
16. Before finalizing any output, re-read all Rules (1-24) and verify compliance. If any violation is found, fix it before presenting to the user.
17. Run the authoring session (building, converting, modifying, auditing, eval-testing) and any spawned eval or grading tasks on the "smart" tier, which is why this skill sets `preferred_model: smart`. This governs the authoring session, not the finished skill's runtime tier (set by its own `preferred_model`; per Rule 22, author it to survive a weak one).
18. Never use code (run_python, regex scripts, or programmatic analysis) to assess a skill's prose quality, structural coherence, logical flow, voice, or design soundness. Read the full SKILL.md in context and reason about it directly. Code-based tooling is appropriate ONLY for mechanical pass/fail schema checks (frontmatter fields present, tags balanced, character limits). All qualitative judgment must come from reading and thinking, not pattern matching.
19. Design for extensibility and breadth. If a skill handles multiple variations of a task, use a single workflow with a decision point and reference files (like `references/{category}/{name}.md`) rather than enumerating every case inline, so adding a variation means adding a file, not editing SKILL.md. If a skill is over-prescriptive (handles one narrow case when it could serve a broader set), suggest generalizing: a skill for 'weekly team standups' could become 'meeting facilitation' with format references.
20. Never hardcode file paths for skill output. If the skill generates files (reports, exports, templates), ask the user where to save them or use the skill's own `assets/` directory. An author-specific path fails for everyone else.
21. Design for longevity. Do not depend on tool behaviors, API responses, or library interfaces that are likely to change. Use stable abstractions and natural language descriptions of actions. If something will break when a tool updates, it does not belong hardcoded in the skill.
22. Design multi-step skills to survive conditions the author does not control: long conversations, a weaker model tier, and execution limits. Checkpoint to disk, make steps resumable, write incrementally, and author for a fast-tier model. See `references/resilient-skills.md`. Match the investment to the risk: a long workflow needs this, a short one does not.
23. Before running evals (Phase 2 of ), analyze the skill by reading it in full, never with code. Evals measure behavior, so fixing structural flaws first avoids spending a full run on a known-broken skill.
24. Do not repeat yourself (DRY). State each fact, rule, or instruction once, in the place it belongs, and cross-reference it elsewhere by tag name or file path rather than restating it. This applies within a file and between SKILL.md and its references. The one exception: a reference file read by an isolated background task must stand alone, so a concept it needs may be restated there even when SKILL.md also carries it.
Workflow steps are annotated with prefixes that indicate who acts and what happens next:
- [Agent] = Execute using tools. Do not involve the user.
- [Ask user] = Present to user and wait for response before continuing.
- [Decide] = Evaluate conditions and follow the appropriate branch.
- [Think] = Reason internally, no tools or output. Generate 3+ candidate approaches, score them against and , pick the best and say why, then pre-mortem it ("what could go wrong, what did I miss?") before continuing.
- The save_skill validator requires `## Overview` and `## Workflow` headings even when using XML scaffold. They're thin wrappers. All XML goes inside `## Workflow`.
- Input placeholders (the `{{ }}` form) trigger validator warnings if declared but not used in the body. For XML scaffold skills, inputs flow in through the workflow steps. The warning is cosmetic.
- Don't assume a tool exists because the user named it. Verify it's in the session before depending on it.
- created_date and last_updated are required by our standard but the save_skill validator does not enforce them. You must set them manually.
- When a task genuinely requires strong model judgment, spawn it as a background task and set the model explicitly via start_task's model parameter. Do not assume the main session runs on any particular tier.
- `run_python` has a 60 second default timeout (set in the tool definition). Long loops or batch operations can be cut off at that limit, so break them into bounded chunks and write results incrementally.
- To locate lines, blocks, rules, or headings before a surgical edit, run scripts/locate.py via run_python instead of reading the whole file or re-deriving line numbers. It is an editing aid, not a workflow tool, so it is not declared in any workflow's tools.
<Workflow - Router
description="Determine what the user needs and dispatch to the correct phase."
tools=[]
triggers=["User asks to build, create, modify, save, test, or audit a skill"]
- [Decide] What is the user asking?
Validate: Exactly one path is chosen. If ambiguous, ask user to clarify before proceeding.
- Create a new skill → <Workflow - Plan>
- Modify an existing skill → <Workflow - Plan> (load existing skill as context first)
- Convert a just-completed workflow into a skill → <Workflow - Plan> (use extract_session_data in step 3 to pull tools and context from the live session)
- Continue building a skill already planned → <Workflow - Build>
- Save a skill that's ready → <Workflow - Save>
- Test a skill → <Workflow - Eval>
- Check a skill against the standard → <Workflow - Audit>
</Workflow - Router>
<Workflow - Plan
description="Research, identify requirements, and determine the approach."
tools=[file_read, file_rag_search, web_search, extract_session_data]
triggers=["Create a new skill", "Modify an existing skill", "Convert a workflow into a skill"]
-
[Ask user] What should this skill do? Accept:
- A description of the desired behavior
- An agent prompt to convert
- A file path to a document or runbook
Validate: User provides at least one of the above. If vague, ask a clarifying question.
If fails: Re-ask with examples of each input type.
-
[Agent] If a file path was provided, read it via file_read.
Validate: File content loaded successfully and is non-empty.
If fails: Report "file not found" or "file empty" to user and ask for alternative input.
-
[Agent] Introspection. Check what's already available:
- Tools in the current session (core registry + connected connectors)
- For each connector the skill will use: introspect its available actions and required parameters. Understand what data the connector needs (recipients, subject lines, body content, channel names, ticket fields, etc.) so the skill collects the right inputs from the user and workflow steps provide sufficient context for the agent to call the connector correctly at runtime.
- Skills that already exist (could we extend one instead of creating new?)
- Knowledge graph and memories for prior work on this topic
- Data sources and integrations the user has access to
Validate: At least one relevant tool or data source identified. For each connector dependency, the agent can describe what parameters it requires.
If fails: Note "no existing tools found" and continue. The skill may need new MCPs.
-
[Agent] Public research. Search the web for:
- Relevant MCPs (local or remote) that might be needed
- Existing patterns, implementations, or libraries
Validate: Search returned results (even if none are relevant).
If fails: Note "no relevant patterns found online" and continue with what's available.
-
[Decide] Are all required tools/MCPs/connectors available?
Validate: A clear yes/no determination is made for every dependency.
- All available → continue to step 6.
- Exists but not connected → tell user to enable in Settings. Pause.
- Doesn't exist → present options: build with placeholder, build the MCP first, or scope to what's available.
-
[Ask user] Present findings: available tools, dependencies identified, any blockers. Confirm direction.
Validate: User confirms or redirects. Do not proceed without explicit approval.
If fails: Re-present with simpler summary if user seems confused.
-
[Agent] Suggest 2-3 skill name options. Names must be:
- Kebab-case per <Definition - Frontmatter>
- Descriptive of what the skill DOES, not what it's about
- Short (2-3 words, e.g.,
quick-ticket-agent, field-signal-harvester)
Validate: all names are valid kebab-case per <Definition - Frontmatter>.
If fails: Regenerate compliant names.
-
[Ask user] Confirm: name, trigger phrase, inputs, dependencies. User always has final say on naming.
Validate: User explicitly confirms or provides alternatives.
If fails: Do not assume silence is approval. Re-ask.
-
[Ask user] How do you want to build this?
- Section by section (review each block together)
- Draft then review (I write a first pass, we iterate)
Validate: User picks one approach.
If fails: Default to "section by section" (safer, more checkpoints).
-
[Agent] Write the description per <Definition - Description Writing Formula>.
Validate: Description follows <Definition - Description Writing Formula>.
If fails: Rewrite until it does.
-
[Ask user] Approve description before proceeding to <Workflow - Build>.
Validate: Explicit "yes" or equivalent from user.
If fails: Revise description per user feedback and re-present.
</Workflow - Plan>
<Workflow - Build
description="Construct the skill section by section or as a draft, per the approach chosen in Plan."
tools=[file_read, file_write, folder_create, get_current_time]
triggers=["Called from <Workflow - Plan> after user approves direction"]
-
[Agent] Identify blocks needed from <Definition - XML Blocks>.
Every skill gets: Identity, Goal, Rules, Agent Annotations, Instructions (with at least one Workflow).
Optional (include only if needed): Gotchas (only when real non-obvious facts exist, do not invent filler), Definitions, Templates, Resources.
Validate: The 5 required blocks are present, each optional block included only when it earns its place.
If fails: Cross-reference <Definition - XML Blocks> and add missing blocks.
-
[Agent] Implicit assumptions audit. Scan every workflow step and ask: "Does this reference a value that only works in the skill author's environment?" Catch ALL of:
- File/folder paths (Obsidian vaults, output directories, config locations)
- URLs and endpoints (dashboards, wikis, internal tools)
- Channel/group names (Slack channels, Teams groups, distribution lists)
- People/team names and aliases
- Routing tables, category lists, priority tiers
- Tool configurations or API-specific values
- Vague integration references (e.g., "send a notification" without specifying which integration or what data to include in the message)
- Hardcoded output file paths (the skill must ask the user or accept a path as input)
- Over-prescriptive scope (see Rule 19)
- Brittle tool/API dependencies (see Rule 21)
For each one found: it MUST be placed in
<Definitions> (short values), <Resources> (lookup tables), or references/ (large datasets). No value that varies by environment or breaks over time can appear only inside a workflow step.
Validate: Produce a list of all findings with proposed placement. Include any extensibility or longevity concerns.
If fails: Re-scan. If truly none found, document "no issues detected" and continue.
-
[Ask user] Present the list of environment-specific values discovered. Confirm each value and where it should live (Definitions, Resources, or references/ file).
Validate: User confirms every value's placement.
If fails: Adjust placement per user feedback and re-confirm.
-
[Agent] Identify supporting files per <Definition - Skill Directory Structure>:
- Lookup tables, routing maps, URL lists →
references/
- Templates, schemas, static resources →
assets/
- Executable helper scripts →
scripts/
- Everything else stays in SKILL.md body
Validate: Every file is assigned to exactly one directory.
If fails: Re-categorize using the taxonomy test for each directory type.
-
[Agent] Write the SKILL.md body: ## Overview, then ## Workflow holding the blocks in the canonical order from <Definition - XML Blocks>.
Validate: ## Overview, ## Workflow, and the 5 required blocks are present, any blocks in canonical order, body under 500 lines.
If fails: Remove redundancy, push detail to references/ until under limit.
-
[Agent] Write supporting files per <Definition - Skill Directory Structure>.
Validate: Each file exists at its declared path and is non-empty.
If fails: Regenerate missing files.
-
[Think] Writing quality review. Read through all written content (Identity, Goal, Rules, Gotchas, Definitions, descriptions) and check:
- Verify Rule 15 compliance: every factual claim verifiable, prose natural and direct, no invented "best practices" or uncited sources.
- Does the Identity sound like a real person's job description, not a marketing blurb?
- Do Rules state clear prohibitions, not vague aspirations?
- Do Gotchas state surprising facts, not obvious things dressed up as warnings?
-
[Agent] Present full preview (SKILL.md + file tree) to user.
Validate: Preview shows the complete SKILL.md content plus all supporting file paths.
If fails: Ensure nothing was omitted. Re-present.
-
[Decide] User approves → proceed to <Workflow - Save>. User wants changes → adjust and re-preview.
Validate: Clear approval signal from user.
If fails: Ask "What would you like me to change?" and loop back to relevant step.
</Workflow - Build>
<Workflow - Save
description="Persist the skill directory and set metadata."
tools=[get_current_time, save_skill, file_write, folder_create]
triggers=["Called from <Workflow - Build> after user approves preview", "User asks to save an existing skill draft directly"]
-
[Agent] If the skill was not built in this session (the user pointed at an existing draft), read that draft via file_read and show its content as the preview. An explicit save request is the approval per Rule 7, so continue without pausing.
Validate: The SKILL.md content to save is loaded, from this session's Build or the provided draft.
If fails: Ask the user for the draft path.
-
[Agent] Get current date via get_current_time.
Validate: Date returned in ISO format.
If fails: Use today's date from context as fallback.
-
[Agent] Set created_date (if new skill) and last_updated (always) in frontmatter.
Validate: created_date and last_updated are set.
If fails: Re-set manually.
-
[Agent] Call save_skill with the SKILL.md content.
Validate: save_skill returns success. Skill path confirmed.
If fails: Check for validator errors (missing ## Overview, ## Workflow). Fix and retry once.
-
[Agent] Create supporting directories (references/, assets/, scripts/) and write files.
Validate: All files declared in Build step 4 exist at correct paths.
If fails: Identify missing files and write them.
-
[Agent] Run <Workflow - Audit> automatically.
Validate: Audit returns zero issues.
If fails: Fix reported issues and re-audit until clean.
-
[Ask user] Generate eval test cases via <Workflow - Eval>?
Validate: User responds yes or no.
If fails: Default to generating evals (better to have them).
</Workflow - Save>
<Workflow - Eval
description="Run the eval-driven loop: test a skill against a baseline, grade with evidence, benchmark, and iterate."
tools=[file_read, file_write, run_python, start_task, create_task_group, get_task_group_result, get_current_time]
triggers=["User asks to test a skill", "Called from <Workflow - Save> step 6"]
preferred_model=smart preferred_thinking=high
The full method lives in references/eval-loop.md. Read it before starting. Grading detail is in references/eval-grading.md, cross-run analysis in references/eval-analysis.md. This workflow only orchestrates the loop. The references carry the depth so this block stays lean.
-
[Agent] Read the target SKILL.md and references/eval-loop.md. Identify the key workflows to cover.
Validate: SKILL.md loaded, at least one found, and eval-loop.md read.
If fails: Check the path. If the skill is not saved yet, run <Workflow - Save> first.
-
[Agent] Phase 1 in eval-loop.md: write 2-3 varied prompts with expected_output into evals/evals.json. No assertions yet.
Validate: evals.json is valid JSON per <Definition - Evals>, 2-3 cases, no assertions field yet.
If fails: Fix the JSON and re-write.
-
[Ask user] Review the prompts. Add, remove, or adjust before any runs?
Validate: User confirms or provides edits.
If fails: Apply edits and re-present.
-
[Agent] Analyze before running (Rule 23). Read the full SKILL.md and reason directly, no code, about structure, step order, claim verifiability, and voice. Fix what you find before spawning any runs.
Validate: Analysis is written and any blocking issues resolved.
If fails: Resolve the issues. If the skill needs a rewrite, return to <Workflow - Build> first.
-
[Agent] Phase 2 in eval-loop.md: run each prompt twice as isolated smart-model background tasks (with-skill and baseline), per the layout and instructions there.
Validate: Every prompt has a with_skill and a without_skill run with outputs and metrics.json.
If fails: Re-spawn the missing runs. If a task errored, read its result and report before continuing.
-
[Agent] Phase 3 in eval-loop.md: add typed {type, check} assertions to each case from the observed outputs, favoring discriminating ones.
Validate: Every case has at least one assertion, each typed output, tool_call, or behavior.
If fails: Re-derive assertions from the observed outputs.
-
[Agent] Phase 4 in eval-loop.md: grade each run as an isolated background task per eval-grading.md, then run scripts/eval_benchmark.py to build benchmark.json.
Validate: Each run has a grading.json, and benchmark.json reports pass rate and cost deltas per configuration.
If fails: Re-grade runs missing a grading.json, then re-run the benchmark script.
-
[Agent] Phase 5 in eval-loop.md: read benchmark.json per eval-analysis.md and surface the patterns aggregates hide.
Validate: Analysis names specific evals or assertions with grounding numbers, not just the headline pass rate.
If fails: Re-read the per-run results the aggregate drew from.
-
[Ask user] Present the benchmark and analysis. Iterate on the skill, keep as-is, or expand the test set?
Validate: User picks a direction.
If fails: Summarize the results plainly and re-ask. Iteration reruns this workflow against the prior version as baseline.
</Workflow - Eval>
<Workflow - Audit
description="Check a skill against the Quick Skills standard."
tools=[file_read, run_python]
triggers=["User asks to audit a skill", "Called from <Workflow - Save> step 5"]
-
[Agent] Load the target skill via file_read.
Validate: SKILL.md content loaded and non-empty.
If fails: Check path. If skill doesn't exist, inform user.
-
[Agent] Run scripts/check_skill.py via run_python for all mechanical checks (its docstring lists them). This is the mechanical half only (Rule 18); the checks below are qualitative and done by reading.
Validate: check_skill.py exits 0.
If fails: Fix each reported failure and re-run until it exits 0.
-
[Agent] Check directory structure against <Definition - Skill Directory Structure>.
Validate: No files in wrong directories. evals/ exists.
If fails: Log misplaced files as issues.
-
[Agent] Check each XML block's content against its definition in <Definition - XML Blocks>.
Validate: Each block's content matches its definition. No content in wrong blocks.
If fails: Log misplaced content with recommendation for correct block.
-
[Agent] Verify Rules contain only behavioral constraints and Gotchas contain only environment facts.
Validate: Each Rule answers "Would the agent's default behavior violate YOUR standards?" Each Gotcha answers "Would the agent make a FACTUAL ERROR?"
If fails: Log items that belong in the other block.
-
[Agent] Report findings: pass/fail per check, specific issues to fix.
Validate: Report contains at least one finding per check category (even if "pass").
If fails: Re-run checks that produced no output.
-
[Decide] Issues found → present fixes to user. No issues → report clean.
Validate: Clear resolution: either fixes presented or clean bill of health.
If fails: Summarize ambiguous findings and ask user for guidance.
</Workflow - Audit>
For a complete minimal skill that follows the standard, read `references/example-skill.md`.