Skip to main content

Skills

A skill is a named set of Markdown instructions the model loads only when it needs them. Each skill has a slug ($docs-style), a display name, a short description, and the full instructions.

Lazy loading

The description is the manifest: when tools are enabled for a turn, the built-in load_skill tool lists every enabled skill's slug, name, and description, and the model fetches the full instructions with one call. Long instructions therefore never occupy context until they are used. Mentioning $slug in a message nudges the model toward loading that skill.

Lifecycle

Skills can be disabled without deleting them; a disabled skill leaves the manifest and refuses to load. Updates bump the version and archive the prior revision, with rollback restoring any revision as a new version. The interchange form is a SKILL.md document — frontmatter carrying the name, slug, and description, followed by the Markdown instructions verbatim — which export downloads and import accepts alongside the JSON envelope. Names, descriptions, and instructions are encrypted at rest; the slug stays plain.

Importing from a store

Skills can be pulled straight from a remote source under Settings → Skills → From URL. Accepted forms: a skills.sh listing link, a GitHub repository or tree/blob URL, an owner/repo/skill shorthand (resolved against the conventional skills/<name>/SKILL.md layout), or a direct link to any SKILL.md file. The fetch runs through the same pinned egress guard as tool servers — public addresses only, size capped — and the document lands as your own editable skill, so a remote source never updates itself silently.

Bundled files

A skill can carry companion files in the SKILL.md folder layout — reference documents, templates, and script sources the instructions point at. load_skill lists the bundle at the end of the instructions, and the model reads a file on demand with the read_skill_file tool, so a large reference never occupies context until it is actually needed.

Files travel everywhere the skill does: Settings → Skills → From folder uploads a local SKILL.md folder in one step, a remote import pulls the text files sitting next to the fetched SKILL.md, the JSON export carries the bundle, and the edit modal manages files one by one. Paths are relative and can never escape the skill; contents are text-only, encrypted at rest, and bounded (32 files, 200 KB each, 1 MB per skill).

Sharing and profiles

Skills are private by default and shareable through the common resource-grant model. An assistant profile can bind a subset of skills, and sessions using that profile only see those skills in the manifest.

Example

Create a skill under Settings → Skills (or pick one of the starter templates there and edit it):

  • Slug: cite-sources

  • Name: Cite sources

  • Description: How to cite evidence: numbered references with URLs, no unreferenced claims. (this line is what the model sees in the manifest — make it say when to use the skill)

  • Instructions:

    # Citing sources

    - Every factual claim gets a numbered reference like [1].
    - End with a References section: number, title, URL.
    - If no source exists, say so instead of inventing one.

Enable the tools toggle in the composer and ask:

Summarize the latest results and $cite-sources.

Typing $ autocompletes your skill slugs. The model sees cite-sources in its manifest, calls load_skill to fetch the instructions above, and formats the answer accordingly. Disable the skill on its card and it disappears from the manifest without being deleted.