Guide for creating effective skills. Use when creating a new skill or updating an existing skill that extends agent capabilities with specialized knowledge, workflows, or tool integrations.
Create skills that give CAMEL agents useful, non-obvious guidance without constraining unrelated work.
description is visible before the body and
is the primary trigger. State the job, likely trigger terms, and any boundary
needed to prevent common false matches.SKILL.md.
Put conditional details in directly linked references and load only the
resources needed for the current request.A skill is a directory with one required file and optional resources:
skill-name/
|-- SKILL.md Required frontmatter and instructions
|-- scripts/ Optional deterministic helpers
|-- references/ Optional guidance loaded only when relevant
`-- assets/ Optional templates or files used in output
For repository-scoped CAMEL skills, prefer
<repo-root>/.camel/skills/<skill-name>/. SkillToolkit also discovers
repository skills under .agents/skills, user skills under ~/.camel/skills
and ~/.config/camel/skills, and system skills under /etc/camel/skills.
Design for these runtime behaviors:
SkillToolkit initially exposes each skill's name, description, path,
scope, and direct child entries. It loads the body only after the agent calls
load_skill.name.clear_cache() or recreate the toolkit when
testing changes in a running process.SkillToolkit loads instructions but does not execute scripts. Give the
agent TerminalToolkit or another appropriate execution tool when a skill
requires runnable helpers.agents/openai.yaml unless a target host actually consumes them; CAMEL's
SkillToolkit does not require them.Adapt the workflow to the request. Skip steps that add no value, but verify the finished skill against realistic use.
Identify:
Ask the user only for missing information that would materially change the skill. For an existing skill, inspect its current files and callers before removing or renaming anything.
Use SKILL.md alone when instructions are sufficient. Add resources only for
these reasons:
scripts/: logic that would otherwise be rewritten, or operations needing
deterministic behavior;references/: maintained schemas, policies, APIs, or substantial guidance
needed only in some modes;assets/: templates, fonts, images, boilerplate, or other files copied or
adapted into the result.Do not add placeholder directories, README files, changelogs, installation guides, or duplicated quick references without a concrete requirement.
For a new skill, either create the directory and SKILL.md directly or use the
bundled initializer when its scaffold is useful:
python <skill-creator-base>/scripts/init_skill.py \
<skill-name> --path <repo-root>/.camel/skills
The current initializer creates example resource directories. Delete every placeholder and directory the finished skill does not need. Do not initialize an existing skill again.
Use lowercase letters, digits, and single hyphens for names, with a maximum of 64 characters.
In frontmatter:
name equal to the skill directory name.description that says what the skill does
and when it applies. Front-load the main use case because hosts may shorten
long descriptions.name and description. Add supported optional
fields only when the target environment needs them.In the body:
For conditional patterns, read only the applicable bundled guide:
Run the bundled validator from any working directory:
python <skill-creator-base>/scripts/quick_validate.py <skill-directory>
Then verify the behavior that validation cannot prove:
SkillToolkit with the intended repository root as
working_directory and confirm the skill appears in list_skills().list_skill_files() exposes the intended resources and
load_skill() returns the body with the correct base directory.SkillToolkit and the
execution toolkit the workflow expects.Test trigger quality and execution quality separately:
Use the CAMEL model and agent configuration already chosen for the task. Do not introduce a provider-specific CLI merely to evaluate a CAMEL skill. Independent or parallel agent evaluation is optional when available and justified; it is not a prerequisite for creating a useful skill.
If the user needs a distributable .skill archive, run:
python <skill-creator-base>/scripts/package_skill.py \
<skill-directory> [output-directory]
The packager validates first and excludes common local, credential, cache, and build artifacts. Inspect the archive contents before delivery. Do not package an intermediate skill when repository-local use is the requested outcome.
A skill is complete when: