Docs
Resource

Skills

The full contract for a skill. A SKILL.md instruction bundle that agents load as context to learn how to do a kind of work — authored and published through the same resource lifecycle as workflows and apps.

A skill is a SKILL.md instruction bundle in the standard Agent Skills format. It is not executed: agents load it as context to learn how to do a kind of work — your email conventions, a report format, a triage procedure. The bundle is portable to any Agent Skills host, so a skill you author here also works elsewhere (and a skill folder from elsewhere publishes here unchanged).

Reach for a skill when you want to teach agents a repeatable method, not schedule work. For something that runs on a trigger, use a code or agent workflow.

How it's used

Published skills are offered to the platform's agents (the home chat, the workflow and app authoring agents, and the CRM chat), which load one by name when its description matches the task. A skill is offered only while it is both valid (last publish passed the spec) and enabled (the toggle on its dashboard page). Users can also @-mention a skill in chat to inline its instructions directly.

Not `geni skills`

geni skills (plural) is unrelated: it installs the local instruction files that teach YOUR coding agent how to use this CLI. Cloud skill resources live under geni resource.

Project layout

SKILL.md        the manifest: YAML frontmatter + the instructions body
scripts/        optional runnable code the loading agent executes as-is
references/     optional long detail read only when the agent needs depth
assets/         optional templates and files used in the output

SKILL.md must sit at the bundle root, and the bundle must contain exactly one. Everything else is optional.

SKILL.md format

---
name: gmail-inbox-triage
description: Triage a Gmail inbox: label, archive, and draft replies following the user's conventions. Use when the user asks to process, clean up, or respond to email.
---

# Gmail Inbox Triage

Step-by-step instructions, examples, and edge cases the loading agent follows.

Frontmatter contract (validated on publish):

FieldRules
nameRequired. Lowercase letters, numbers, and single hyphens; 64 chars max. The load key — it syncs to the skill's name on publish.
descriptionRequired, 1024 chars max. The ONLY thing agents see before deciding to load, so say what the skill does AND when to use it.

The body below the frontmatter must be non-empty.

Rules:

  • Link supporting files with standard Markdown links ([the export script](scripts/export.py)). Every linked path under scripts/, references/, or assets/ must exist in the bundle — a dangling link fails validation.
  • Progressive disclosure. Keep the body to a few hundred lines of "what to do and when". A long program belongs in scripts/ with a one-line instruction to run it; a big reference table belongs in references/ with a link.

The build loop

geni resource create --type skill --name "Gmail Inbox Triage"
# edit SKILL.md (and scripts/, references/, assets/)
geni resource validate
geni resource publish

Skills skip the config step — no credentials, consts, or schedules to wire — and publish needs no --summary. Each successful publish syncs the name and description from the frontmatter and snapshots a version you can revert to from the dashboard. pull brings a skill's live bundle to disk by its skl_ id, including any binary assets (bundle bytes ride the same tar transport as workflows and apps).

Read the machine contract with geni skills load skill-authoring — for this type the short contract is inline in the loaded SKILL.md.

On this page