ajet/copilot/skill-normalizer/SKILL.md
Convert skills in non-standard formats to the standard Agent Skills `SKILL.md` format. Validates YAML frontmatter (name, description, license, compatibility, metadata, allowed-tools), directory structure (SKILL.md, scripts/, references/, assets/), and best practices. Use when the user asks to normalize, validate, or fix a skill.
npx skillsauth add modelscope/agentjet skill-normalizerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Your task is to make skills in non-standard formats compatible with the Agent Skills ecosystem by converting them to the standard SKILL.md format. This document provides the specification for the SKILL.md format, including required and optional fields, directory structure, and best practices for writing effective skills.
Documentation Index
Fetch the complete documentation index at: https://agentskills.io/llms.txt Use this file to discover all available pages before exploring further.
The complete format specification for Agent Skills.
A skill is a directory containing, at minimum, a SKILL.md file:
skill-name/
├── SKILL.md # Required: metadata + instructions
├── scripts/ # Optional: executable code
├── references/ # Optional: documentation
├── assets/ # Optional: templates, resources
└── ... # Any additional files or directories
SKILL.md formatThe SKILL.md file must contain YAML frontmatter followed by Markdown content.
| Field | Required | Constraints |
| --------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| name | Yes | Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. |
| description | Yes | Max 1024 characters. Non-empty. Describes what the skill does and when to use it. |
| license | No | License name or reference to a bundled license file. |
| compatibility | No | Max 500 characters. Indicates environment requirements (intended product, system packages, network access, etc.). |
| metadata | No | Arbitrary key-value mapping for additional metadata. |
| allowed-tools | No | Space-separated string of pre-approved tools the skill may use. (Experimental) |
---
name: skill-name
description: A description of what this skill does and when to use it.
---
Example with optional fields:
---
name: pdf-processing
description: Extract PDF text, fill forms, merge files. Use when handling PDFs.
license: Apache-2.0
metadata:
author: example-org
version: "1.0"
---
</Card>
name fieldThe required name field:
a-z) and hyphens (-)-)--)name: pdf-processing
name: data-analysis
name: code-review
Invalid examples:
name: PDF-Processing # uppercase not allowed
name: -pdf # cannot start with hyphen
name: pdf--processing # consecutive hyphens not allowed
</Card>
description fieldThe required description field:
description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents or when the user mentions PDFs, forms, or document extraction.
Poor example:
description: Helps with PDFs.
</Card>
license fieldThe optional license field:
license: Proprietary. LICENSE.txt has complete terms
</Card>
compatibility fieldThe optional compatibility field:
compatibility: Designed for Claude Code (or similar products)
compatibility: Requires git, docker, jq, and access to the internet
compatibility: Requires Python 3.14+ and uv
</Card>
<Note>
Most skills do not need the `compatibility` field.
</Note>
metadata fieldThe optional metadata field:
metadata:
author: example-org
version: "1.0"
</Card>
allowed-tools fieldThe optional allowed-tools field:
allowed-tools: Bash(git:*) Bash(jq:*) Read
</Card>
The Markdown body after the frontmatter contains the skill instructions. There are no format restrictions. Write whatever helps agents perform the task effectively.
Recommended sections:
Note that the agent will load this entire file once it's decided to activate a skill. Consider splitting longer SKILL.md content into referenced files.
scripts/Contains executable code that agents can run. Scripts should:
Supported languages depend on the agent implementation. Common options include Python, Bash, and JavaScript.
references/Contains additional documentation that agents can read when needed:
REFERENCE.md - Detailed technical referenceFORMS.md - Form templates or structured data formatsfinance.md, legal.md, etc.)Keep individual reference files focused. Agents load these on demand, so smaller files mean less use of context.
assets/Contains static resources:
Agents load skills progressively, pulling in more detail only as a task calls for it. Skills should be structured to take advantage of this:
name and description fields are loaded at startup for all skillsSKILL.md body is loaded when the skill is activatedscripts/, references/, or assets/) are loaded only when requiredKeep your main SKILL.md under 500 lines. Move detailed reference material to separate files.
When referencing other files in your skill, use relative paths from the skill root:
See [the reference guide](references/REFERENCE.md) for details.
Run the extraction script:
scripts/extract.py
Keep file references one level deep from SKILL.md. Avoid deeply nested reference chains.
Use the skills-ref reference library to validate your skills:
skills-ref validate ./my-skill
This checks that your SKILL.md frontmatter is valid and follows all naming conventions.
data-ai
How `max_env_worker` caps the "Running Episodes" gauge, and how `AgentJetJob` relates to the YAML config.
devops
Download per-step time-series metric data (reward, entropy, response length, etc.) from a SwanLab cloud run URL as a pandas.DataFrame. Use when the user provides a SwanLab URL and wants to fetch or analyze training curves.
development
Your task is to investigate the chat template of given model, go to its tokenizer config and check whether the following behavior exists: > > Remove history <think> block from the input when apply chat template when converting messages. > This behavior will make RL training slower, if this behavior exists, please change the chat template to forbid such behavior. You must not do this in-place, instead, please create another model. E.g., "/mnt/data_cpfs/xielipeng.xlp/models/Qwen3-8B" -> "/mnt
tools
Create an active, dataset-driven AgentJet swarm client. Write agent_roll.py and agent_run.py that iterate through a dataset, execute agent workflows, and compute rewards for reinforcement learning training with AgentJet Swarm.