Skills
Skills are markdown instruction files that teach an agent
domain-specific behavior. At runtime the GitHub Copilot SDK loads the
SKILL.md files from the materialized skill directory into the
agent's system context - conceptually, skills are modular system-prompt
extensions.
An agent references skills by name:
# in an agent YAML
skills:
- pql-search
- data-object-proposals
The names must match existing skills (unknown names are silently
dropped). See the skills field on agents.
Where skills come from
Like agents, skills follow the three-layer merge model - see README → The merge model. Bundle-provided skills are the bottom layer; user skills created through Pimcore Studio override bundle skills of the same name.
| Layer | Source | Editable in UI |
|---|---|---|
| User skills | Pimcore Studio → System → Pimcore Agent → Skill Configuration | Yes |
| Bundle skills | Directories listed under pimcore_agent.skills.paths | No, but customizable |
Every skill Pimcore Studio shows carries a bundle or user source badge so you can see at a glance
whether you are looking at a bundle default or at your own override. A Custom / Preset switch at the
top of the tree separates the two views - see
Customizing a bundle skill in Pimcore Studio below.
Customizing a bundle skill in Pimcore Studio
The Custom view lists only user skills with no matching bundle preset. The Preset view lists every bundle-provided skill, each tagged Bundle or Customized.
- Customize materializes a bundle skill's full content (front-matter and body) as an editable copy in
one click. The copy is written to the configured write target (
settings-storeby default, or a YAML file undervar/config/agent/skillswhen set tosymfony-config) and the skill then shows as Customized in the Preset view. - Reset to default removes the customization, so the shipped skill applies again on the next reload.
- Activate / Deactivate toggles the skill's
enabledflag (defaulttrue). A deactivated skill is excluded from the export the agent-server consumes, so no agent can load it - a non-destructive alternative to deleting it. Deactivating a skill that has not been customized yet stores a lightweight disable record instead of a full customization; customizing it later upgrades that record in place.
Bundle skill content is always read-only. Customize, Reset to default, and Activate/Deactivate are available only when the configured write target is writeable; the actions are disabled with an explanatory tooltip otherwise.
User skills (Pimcore Studio)
Administrators can create simple skills directly in the Pimcore Studio skill editor. Each user skill has four fields:
| Field | Meaning |
|---|---|
name | Unique identifier (e.g. my-custom-skill) |
description | Shown in the agent editor's skill dropdown |
instructions | Markdown body - the skill content |
group | Optional folder grouping in the skill config tree |
At export time user skills are serialized into a single SKILL.md file
with auto-generated YAML front-matter (name, description) followed
by the instructions body.
Bundle skills
Bundle skills are file-based. Each skill is a directory that contains a
SKILL.md file:
config/skills/
├── pql-search/
│ └── SKILL.md
├── data-object-proposals/
│ ├── SKILL.md
│ └── resources/
│ └── field-types.md
└── tag-proposals/
└── SKILL.md
Nested files alongside SKILL.md (examples, schemas, templates)
travel through the export pipeline with the skill - the whole
directory's files end up in the agent-server's materialized skill dir
so SKILL.md can reference relative paths.
Bundles register skill parent directories via pimcore_agent.skills.paths. See Shipping Presets for the
registration walkthrough (hard vs optional bundle dependency).
SKILL.md file format
Each skill directory must contain a SKILL.md with YAML front-matter:
---
name: pql-search
description: >-
Search for data objects using Pimcore Query Language (PQL)
with field discovery and structured filters.
---
# PQL Search
Step-by-step workflow, syntax reference, examples…
namemust match the directory name and is what the agent'sskills: [...]list references.descriptionis shown in the agent editor's skill dropdown.- Everything below the closing
---is the skill body and becomes part of the agent's system message when the skill is active for a session.
Skill resolution at runtime
An agent sees only the skills it lists. At runtime the agent-server materializes every skill in the registry to
{skillsMaterializeDir}/{skillName}/ (default /app/var/skills/) and uses disabledSkills to opt the agent out of
everything it did not ask for.
Wipe-and-rewrite semantics, the skill tool requirement, and the disabledSkills computation are documented
in Architecture → Configuration System → Skill materialization.
Related docs
- Agents →
skillsfield - Tool Security Reference → the
skilltool - Shipping Presets - ship bundle skills from your own bundle
- Tool Bundles - group a skill with SDK tools and MCP groups under one reusable name