Skip to main content
Skills can be created in three ways:
ModeSourceDescription
Skill FolderLocal directory or zipUpload a pre-built skill folder containing SKILL.md
Promptprompt (+ optional json_schema)Auto-generate SKILL.md and schema.json from a text prompt
Sessionsession_idAuto-generate SKILL.md from a chat session’s history

From Skill Folder

Upload a local skill folder directly. The folder must contain a SKILL.md file — the skill name and description are parsed from its YAML frontmatter automatically.
# Upload a local skill folder directly (zips and creates in one step)
vlmrun skills upload ./my-skill

# Override name/description from SKILL.md frontmatter
vlmrun skills upload ./my-skill --name "invoice-extraction" --description "Extract structured data from invoices"
from vlmrun.client import VLMRun
from pathlib import Path

client = VLMRun(api_key="<VLMRUN_API_KEY>")

# One-step: zip, upload, and create a skill from a local directory
skill = 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 frontmatter
skill = client.skills.create_from_directory(
    directory=Path("./my-skill"),
    name="invoice-extraction",
    description="Extract structured data from invoices",
)
create_from_directory handles zipping the folder, uploading the archive via the Files API, and creating the skill in one call. It returns an AgentSkill with type="skill_reference" that you can pass directly to any endpoint that accepts skills. The folder should follow the skill directory structure:
my-skill/
├── SKILL.md
├── schema.json
├── vlmrun.yaml
└── resources/  (optional)
Use the skill folder method when you need full control over the skill’s instructions, schema, and execution configuration. Use the prompt method for quick prototyping.

From Prompt

Generate a skill automatically from a text description and optional JSON schema:
# From a text prompt
vlmrun skills create --prompt "Extract invoice_id, date, and total_amount from invoices."

# With a JSON schema file
vlmrun skills create --prompt "Extract invoice data" --schema schema.json
from vlmrun.client import VLMRun

client = VLMRun(api_key="<VLMRUN_API_KEY>")

skill = client.skills.create(
    prompt="Extract invoice_id, date, and total_amount from invoices.",
    json_schema={
        "type": "object",
        "properties": {
            "invoice_id": {"type": "string"},
            "invoice_date": {"type": "string", "format": "date"},
            "total_amount": {"type": "number"}
        },
        "required": ["invoice_id", "invoice_date", "total_amount"]
    }
)
print(f"Created skill: {skill.id} ({skill.name})")
The platform generates a SKILL.md with instructions derived from your prompt and a schema.json from the provided JSON schema.

From Chat Session

Generate a skill from an existing chat session’s conversation history:
vlmrun skills create --session-id "<session-id>"
from vlmrun.client import VLMRun

client = VLMRun(api_key="<VLMRUN_API_KEY>")

skill = client.skills.create(session_id="<session-id>")
print(f"Created skill: {skill.id} ({skill.name})")
The platform analyzes the conversation to extract the task instructions and expected output format.