Skip to main content
Every custom skill starts with a SKILL.md file. This file has two parts: a YAML frontmatter header (between --- markers) that describes the skill, and a Markdown body that contains the instructions or code. This page documents every field available in the frontmatter.

Required Fields

Every manifest must include these two fields: Here is a minimal SKILL.md that only uses the required fields:
That is all you need to create a valid skill. Everything below is optional.

Optional Fields

These fields give you more control over how the skill behaves:

Example with Optional Fields

Permissions

The permissions block declares what system resources this skill needs access to. By default, skills have no access to the filesystem, network, or environment variables. Each permission you add opens a specific door.
Only grant the permissions your skill actually needs. Start with none and add them one at a time as required. This follows the principle of least privilege — the less access a skill has, the less damage a bug or malicious skill can cause.

Comis Namespace

The comis: block contains fields specific to the Comis platform. These control runtime requirements and platform-level behavior.
The comis.requires fields are checked at startup using the runtime eligibility system. If a required binary or environment variable is missing, the skill is skipped with a warning — it does not crash the system. You can disable this check with skills.runtimeEligibility.enabled: false in your config, but that is not recommended.

Input Schema

For skills that expect structured input, you can attach a JSON Schema in the inputSchema field. The schema is stored alongside the manifest and surfaced as documentation — agents can read it to understand what arguments the skill expects.
inputSchema is currently advisory: it documents the expected shape but is not enforced at invocation time. Treat it as a contract you and the agent agree to honor in the skill body, not a runtime guard.

Complete Example

Here is a full SKILL.md using fields from every section:

Template Substitution

Prompt skill bodies support placeholder syntax for dynamic content:
  • Named placeholders: {placeholder} — mapped by name from the input parameters
  • Positional arguments: $1, $2 (1-indexed), $@ or $ARGUMENTS (all arguments), ${@:N} (arguments from position N onwards)
Named placeholders are recommended for clarity. Positional arguments are available for quick one-off skills.

Prompt Skills

Step-by-step guide to creating your first prompt skill

Security Scanning

What Comis checks before loading your skill

Examples

Complete skill examples with walkthroughs