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 resources a skill expects. The manifest parser preserves these values, but the block is not a kernel permission boundary and does not, by itself, grant or deny the daemon’s access. Enforce filesystem, network, environment, and tool access through the relevant runtime controls.
Keep declarations accurate for review and custom consumers, then mirror the least-privilege decision in agent tool policy, safe paths, exec isolation, and host permissions.

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