Skill Schema

Complete YAML specification for Chvor skill files, with detailed documentation of every field.

8 min read

Skill Schema

A skill is a YAML file that defines how a Chvor agent behaves when a specific trigger pattern is matched. This page documents every field in the skill schema.

Skill files live in ~/.chvor/skills/ (or $CHVOR_DATA_DIR/skills/). Any file with a .yaml or .yml extension in that directory is loaded automatically.


Complete Schema

# ─── Identity ─────────────────────────────────────────────
name: string              # Required. Unique identifier.
description: string       # Required. Human-readable summary.
version: string           # Optional. Semver version (e.g., "1.0.0").
author: string            # Optional. Author name or GitHub username.

# ─── Trigger ──────────────────────────────────────────────
trigger:                  # Required.
  patterns: string[]      # Required. List of trigger patterns.
  priority: number        # Optional. Higher wins. Default: 0.
  exact: boolean          # Optional. Require exact match. Default: false.

# ─── Model ────────────────────────────────────────────────
model:                    # Optional. Overrides server defaults.
  provider: string        # Optional. "anthropic", "openai", or "google".
  name: string            # Optional. Model ID (e.g., "claude-sonnet-4-20250514").
  temperature: number     # Optional. 0.0–1.0.
  maxTokens: number       # Optional. Max response tokens.

# ─── Behavior ─────────────────────────────────────────────
prompt: string            # Required. System prompt (supports multi-line YAML).

# ─── Tools ────────────────────────────────────────────────
tools: string[]           # Optional. MCP tool names. Omit = all tools. Empty = none.

# ─── Memory ───────────────────────────────────────────────
memory:                   # Optional.
  enabled: boolean        # Optional. Default: true.
  scope: string           # Optional. "conversation" or "global". Default: "conversation".

# ─── Metadata ─────────────────────────────────────────────
tags: string[]            # Optional. For organization and registry search.

Field Reference

name

Typestring
RequiredYes
ConstraintsLowercase alphanumeric and hyphens. Must be unique across all loaded skills.

The unique identifier for this skill. Used internally for routing and in log messages. Displayed in the Brain Canvas UI when the skill is active.

name: code-reviewer

description

Typestring
RequiredYes

A human-readable summary of what this skill does. Shown in the UI skill list and in registry listings.

description: Reviews code for bugs, style issues, and security vulnerabilities.

version

Typestring
RequiredNo
FormatSemantic versioning (MAJOR.MINOR.PATCH)

Version of the skill. Used by the registry for update detection.

version: "1.2.0"

author

Typestring
RequiredNo

Your name or GitHub username. Displayed in registry listings.

author: luka-zivkovic

trigger

The trigger block defines when this skill activates.

trigger.patterns

Typestring[]
RequiredYes
Minimum1 pattern

A list of patterns that activate the skill. Patterns support three syntaxes:

Literal — matches if the user message contains this phrase (case-insensitive):

trigger:
  patterns:
    - "summarize this"

Wildcard (*) — matches any sequence of words:

trigger:
  patterns:
    - "translate * to *"

Named placeholder ({name}) — captures a value for use in the prompt:

trigger:
  patterns:
    - "research {topic}"

Captured values are available in the prompt as {{name}}:

prompt: |
  Research the following topic: {{topic}}

trigger.priority

Typenumber
RequiredNo
Default0

When a message matches multiple skills, the skill with the highest priority wins. Use this to create specific overrides of general patterns.

trigger:
  patterns:
    - "help me with code *"
  priority: 10  # Wins over a generic "help me with *" at priority 0

trigger.exact

Typeboolean
RequiredNo
Defaultfalse

When true, the entire user message must match the pattern exactly (case-insensitive). When false (default), the pattern only needs to appear somewhere in the message.

trigger:
  patterns:
    - "hello"
  exact: true
# Matches: "hello"
# Does NOT match: "hello there" or "say hello"

model

Optional overrides for the LLM used by this skill. If omitted, the server’s default model is used.

model.provider

Typestring
RequiredNo
Values"anthropic", "openai", "google"

Selects the LLM provider. The corresponding API key must be set in environment variables.

model:
  provider: openai

model.name

Typestring
RequiredNo

The specific model identifier. Must be a valid model ID for the chosen provider.

model:
  provider: anthropic
  name: claude-sonnet-4-20250514

Common model IDs:

ProviderModel IDs
Anthropicclaude-sonnet-4-20250514, claude-haiku-35-20241022
OpenAIgpt-4o, gpt-4o-mini
Googlegemini-2.0-flash, gemini-2.5-pro

model.temperature

Typenumber
RequiredNo
Range0.0 to 1.0

Controls randomness. Lower values produce more deterministic output. Higher values are more creative.

model:
  temperature: 0.1  # Precise, factual output

model.maxTokens

Typenumber
RequiredNo

Maximum number of tokens in the response. If omitted, the provider’s default is used.

model:
  maxTokens: 4096

prompt

Typestring
RequiredYes

The system prompt injected when this skill is active. This defines the agent’s personality, instructions, and constraints.

Use YAML multi-line syntax for readability:

prompt: |
  You are an expert code reviewer. When the user shares code:
  1. Identify bugs or potential runtime errors.
  2. Flag security vulnerabilities.
  3. Suggest improvements.

  Be specific. Reference line numbers. Be constructive.

The prompt can include {{placeholder}} references to values captured by named trigger patterns:

trigger:
  patterns:
    - "translate to {language}"

prompt: |
  Translate the user's text into {{language}}.
  Only output the translation.

tools

Typestring[]
RequiredNo
DefaultAll tools (when field is omitted)

List of MCP tool names this skill can use. The names must match keys in your ~/.chvor/config.json mcpServers object.

# Only web tools
tools:
  - web-search
  - web-fetch
# No tools — pure conversation
tools: []

If the tools field is omitted entirely, the skill has access to all configured MCP tools.


memory

Controls whether the skill retains context across messages.

memory.enabled

Typeboolean
RequiredNo
Defaulttrue

When true, the skill has access to previous messages in the conversation. When false, each message is handled independently.

memory:
  enabled: false  # Stateless — each message is independent

memory.scope

Typestring
RequiredNo
Default"conversation"
Values"conversation", "global"
  • conversation — memory is scoped to the current conversation thread.
  • global — memory persists across all conversations (useful for skills that build up knowledge over time).
memory:
  enabled: true
  scope: global

tags

Typestring[]
RequiredNo

Metadata tags for organizing skills and enabling search in the registry.

tags:
  - code
  - review
  - quality

Complete Example

A fully specified skill file:

name: security-auditor
description: Audits code and configurations for security vulnerabilities.
version: "2.1.0"
author: luka-zivkovic

trigger:
  patterns:
    - "audit this code"
    - "security review"
    - "check for vulnerabilities"
    - "is this secure"
  priority: 15
  exact: false

model:
  provider: anthropic
  name: claude-sonnet-4-20250514
  temperature: 0.1
  maxTokens: 8192

prompt: |
  You are a senior application security engineer performing a code audit.

  When the user shares code or configuration files:
  1. Identify security vulnerabilities (OWASP Top 10, CWE categories).
  2. Assess severity: Critical, High, Medium, Low, Informational.
  3. Provide specific remediation steps with code examples.
  4. Check for hardcoded secrets, SQL injection, XSS, CSRF, insecure
     deserialization, and misconfigured access controls.
  5. If the code uses dependencies, flag known-vulnerable versions.

  Format your response as:
  ## Findings
  ### [SEVERITY] Finding Title
  **CWE:** CWE-XXX
  **Location:** file/function/line
  **Description:** ...
  **Remediation:** ...

  ## Summary
  Total findings by severity. Overall risk assessment.

tools:
  - filesystem
  - web-search

memory:
  enabled: true
  scope: conversation

tags:
  - security
  - audit
  - code-review

Validation

Chvor validates skill files on load. Common validation errors:

ErrorCauseFix
missing required field: nameThe name field is absentAdd a name field
duplicate skill name: XTwo files have the same nameRename one of them
invalid trigger: no patternstrigger.patterns is emptyAdd at least one pattern
invalid model provider: XUnsupported provider stringUse anthropic, openai, or google
YAML parse error at line NMalformed YAML syntaxCheck indentation and quoting

Check server logs for validation messages:

[skills] Loaded: security-auditor (4 patterns, 2 tools)
[skills] Error in my-skill.yaml: missing required field: prompt

Next Steps