The folder must contain a SKILL.md file. The skill name and description are parsed from its YAML frontmatter.
# Upload a local skill folder directly (zips and creates in one step)vlmrun skills upload ./my-skill# Override name/description from SKILL.md frontmattervlmrun skills upload ./my-skill --name "invoice-extraction" --description "Extract structured data from invoices"
from vlmrun.client import VLMRunfrom pathlib import Pathclient = VLMRun(api_key="<VLMRUN_API_KEY>")# One-step: zip, upload, and create a skill from a local directoryskill = client.skills.create_from_directory( directory=Path("./my-skill"),)print(f"Created skill: {skill.skill_name} (type={skill.type})")# Override name/description from SKILL.md frontmatterskill = client.skills.create_from_directory( directory=Path("./my-skill"), name="invoice-extraction", description="Extract structured data from invoices",)
create_from_directory zips the folder, uploads the archive via the Files API, and creates the skill in one call. It returns an AgentSkill with type="skill_reference". Pass it directly to any endpoint that accepts skills.The folder should follow the skill directory structure:
# From a text promptvlmrun skills create --prompt "Extract invoice_id, date, and total_amount from invoices."# With a JSON schema filevlmrun skills create --prompt "Extract invoice data" --schema schema.json