Skill Authoring Guide
This guide covers how to create a new skill that the sideBar AI agent can use, and how to register that skill in the Skills Store catalog.Skill Types
There are two skill types in sideBar:- Instruction-only skills: used for guidance/discovery and catalog metadata, with no runtime tool wiring.
- Tool-backed skills: executable agent tools that map to scripts under
backend/skills/<skill-id>/scripts/.
Skill Folder Structure
Create a new folder underbackend/skills/<skill-id>/:
<skill-id>.
Required File Template (SKILL.md)
- Keep frontmatter keys minimal (
name,description; optional metadata keys may be used if required by your tooling). - Put trigger conditions in
description, not only in body text.
Detail Metadata (metadata)
To power the Skills Store detail modal, add fields under metadata:
- For Store skills,
metadata.long_description,metadata.how_it_works,metadata.version, andmetadata.updated_atare required. - For required/standard skills, metadata is optional but recommended when shown in Skills UI.
metadata.requirementsis optional and should list only user-facing setup prerequisites.
metadata.requirements should only include user-facing prerequisites. Do not include:
- API key/credential requirements
- usage-time inputs (for example “a file to transcribe”, “a URL to analyze”)
- local runtime/setup dependencies (for example
ffmpeg,pip install,brew install)
backend/api/services/tools/skill_metadata.py (SKILL_CREDENTIAL_REQUIREMENTS).
Developer dependencies should stay in the body docs for maintainers.
Source Of Truth
For Skills Store detail content,SKILL.md frontmatter metadata is the source of truth.
Do not rely on hardcoded fallback maps for long-term content.
Validation Rules For Detail Metadata
backend/skills/skill-creator/scripts/quick_validate.py validates these metadata fields when present:
metadata.long_description: non-empty stringmetadata.how_it_works: non-empty stringmetadata.requirements: list of non-empty stringsmetadata.version: semantic version string (for example1.2.3)metadata.updated_at: ISO date or datetime (for example2026-02-22or2026-02-22T14:30:00Z)
metadata.requirements entries that look like credential or developer dependency instructions.
Store-skill metadata presence is enforced by authoring policy/review and publish checklist.
UI Fallback Behavior
When optional detail metadata is not provided:long_descriptionfalls back to the shortdescriptionhow_it_worksfalls back to a generic user-friendly explanationrequirementssection is shown only when user-facing requirements or required credential metadata existversionandupdated_atare omitted in the detail section
Reserved Future Fields
The skills API also carries reserved future engagement fields:install_countupvotesdownvotescurrent_user_vote
SKILL.md metadata today.
Optional Script Template
Tool-Backed Script Contract
Tool-backed skills must follow this execution contract:- Accept
--json. - Accept
--user-idfor user-scoped operations. - Print success payload as JSON to stdout:
{"success": true, "data": ...}
- Print error payload as JSON to stderr and exit non-zero:
{"success": false, "error": "..."}
- Keep scripts deterministic and argument-driven (no hidden prompts/interactive input).
Register Tool-Backed Skills In Agent Runtime
Creatingbackend/skills/<skill-id>/scripts/*.py is not sufficient by itself. Wire the skill into runtime:
- Add tool definitions in the appropriate definitions module under
backend/api/services/tools/definitions_*.py. - Ensure that definitions module is aggregated by
backend/api/services/agent/tools/registry.py. - Add argument builders in
backend/api/services/tools/parameter_builders/and mapper functions inbackend/api/services/tools/parameter_mapper.py. - Use
skill: "<skill-id>"in tool definitions, matching the folder name inbackend/skills/<skill-id>/. - If the tool requires per-user context, add the skill ID to
SKILLS_REQUIRING_USER_IDinbackend/api/services/agent/tools/mapper.py. - Add
validate_readand/orvalidate_writein tool definitions when path safety is required.
Skill ID Stability And Renames
Skill IDs are stable once shipped. Prefer introducing a new skill over renaming. If a rename is unavoidable pre-release, perform a full sweep:- Rename
backend/skills/<old-id>/tobackend/skills/<new-id>/. - Update catalog metadata/tier sets and display fields in
backend/api/services/tools/skill_metadata.py. - Update tool definitions/runtime wiring to the new ID.
- Update any client logic keyed by tool names and skill IDs.
- Add/adjust migrations for persisted settings arrays if data already exists.
- Update tests and docs in the same change set.
Validation Workflow
- Initialize a new skeleton (optional but recommended):
- Validate the skill:
- Add or update tests for behavior you introduce (for scripts and API integration).
Minimum expected coverage for tool-backed skills:
backend/tests/api/test_tool_mapper.py(routing/filtering/execution path)backend/tests/api/test_skill_catalog_service.pybackend/tests/api/test_skills_api.py- Store install/update tests when tier is
store
Add Skill To Skills Store Catalog
To make a skill appear in the Skills Store UI, update backend catalog metadata:- Add display metadata in
backend/api/services/tools/skill_metadata.pyunderSKILL_DISPLAY. - Classify the skill by adding it to exactly one tier set:
REQUIRED_SKILLSSTANDARD_SKILLSSTORE_SKILLS(installable from Skills Store)
- If it is a store skill with provider requirements, update:
SKILL_PROVIDER_DEPENDENCYSKILL_CREDENTIAL_REQUIREMENTS
- Ensure skill detail metadata is present in
SKILL.mdfrontmattermetadata(long_description,how_it_works,version,updated_atrequired for Store skills; addrequirementswhen setup prerequisites exist). - Bump
CATALOG_VERSIONinbackend/api/services/tools/skill_metadata.py. - Add category mapping in
backend/api/services/agent/skills/catalog.py(_category_map). - Add or update API/service tests:
backend/tests/api/test_skill_catalog_service.pybackend/tests/api/test_skills_api.py
- If skill inventory changed, regenerate
backend/SKILLS.md:
iOS Presentation Updates (when applicable)
If the skill is visible in iOS Skills Store, update symbol mappings:- Add icon symbol mapping in
ios/sideBar/sideBar/Views/SkillsStore/SkillsStoreLogic.swift(skillSymbols). - If you add a new category type, update category icon mapping in
ios/sideBar/sideBar/Views/SkillsStore/SkillsStoreCardComponents.swift.
Publish Checklist
- Skill folder exists in
backend/skills/<skill-id>/. SKILL.mdvalidates.- All skills pass quick validation (local loop or CI
Skills Validationworkflow). - Store skill includes
metadata.long_description,metadata.how_it_works,metadata.version, andmetadata.updated_at(metadata.requirementsincluded when setup prerequisites exist). - Tool-backed skills are wired through definitions, registry, and parameter builders/mappers.
- Catalog metadata, tier, and category are updated.
CATALOG_VERSIONis bumped.- Backend tests for mapper + catalog/API pass.
backend/SKILLS.mdis regenerated when skill inventory changes.- UI icon/category mappings are updated where needed.