Skillsets
Hosting a GitHub Skillset
Publish a skillset as a GitHub repository. Anyone with access to the repository can add it to their Gamut instance and install its skills.
Repository structure
A skillset repository has an index.json manifest at the root and one directory per skill under skills/:
my-skillset/
index.json
skills/
email-triage/
SKILL.md
nda-review/
SKILL.md
templates/
review-checklist.md
database-query/
SKILL.md
schema-reference.json
The directory name is the skill's identifier and becomes the folder name when the skill is installed into an agent's workspace.
Naming conventions
- Use kebab-case for directory names (
email-triage,nda-review). Gamut converts them to Title Case for display ("Email Triage"). - Keep names short and descriptive. Path separators,
.., and other special characters are not allowed.
The index.json manifest
Gamut reads index.json whenever it clones or refreshes the skillset:
{
"skillset_name": "Acme Team Skills",
"description": "Shared skills for the Acme engineering and ops team.",
"version": "1.0.0",
"skills": [
{
"name": "Email Triage",
"path": "skills/email-triage/SKILL.md",
"description": "Triages incoming emails by urgency and category.",
"version": "1.0.0"
},
{
"name": "NDA Review",
"path": "skills/nda-review/SKILL.md",
"description": "Reviews NDAs for standard clause coverage.",
"version": "2.1.0"
},
{
"name": "Database Query",
"path": "skills/database-query/SKILL.md",
"description": "Queries a PostgreSQL database and formats results.",
"version": "1.3.0"
}
]
}Required fields
| Field | Type | Description |
|---|---|---|
skillset_name | string | Display name for the skillset. |
description | string | Brief description of what the skillset contains. |
version | string | Overall skillset version (informational). |
skills | array | List of skill entries. |
Skill entry fields
Each entry in the skills array describes one skill:
| Field | Type | Description |
|---|---|---|
name | string | Display name of the skill. |
path | string | Path to the SKILL.md file relative to the repository root. |
description | string | Brief description of what the skill does. |
version | string | SemVer version of this individual skill. |
Agent templates (optional)
Skillsets can also ship agent templates, listed in an optional agents array:
{
"skillset_name": "Acme Team Skills",
"description": "...",
"version": "1.0.0",
"skills": [...],
"agents": [
{
"name": "Research Assistant",
"path": "agents/research-assistant/",
"description": "Pre-configured agent for research workflows.",
"version": "1.0.0"
}
]
}Writing a SKILL.md file
Each skill directory must contain a SKILL.md file: YAML frontmatter for metadata, Markdown for the instructions.
Frontmatter format
---
name: Email Triage
description: Triages incoming emails by urgency and category.
metadata:
version: 1.0.0
required_env_vars:
- name: GMAIL_FILTER_LABEL
description: Gmail label to filter incoming messages
---Top-level fields:
| Field | Required | Description |
|---|---|---|
name | Recommended | Display name. Falls back to the directory name if omitted. |
description | Recommended | Short description shown in the skill browser. |
Metadata fields (nested under metadata):
| Field | Required | Description |
|---|---|---|
version | Recommended | SemVer version string. Should match the version in index.json. |
required_env_vars | Optional | Array of environment variables the skill needs at runtime. |
Each entry in required_env_vars has:
| Field | Description |
|---|---|
name | The environment variable name (e.g., DATABASE_URL). |
description | A human-readable explanation shown to the user during installation. |
Skill body
After the frontmatter, write the instructions the agent follows when the skill is invoked. Be specific and step-by-step.
---
name: Email Triage
description: Triages incoming emails by urgency and category.
metadata:
version: 1.0.0
---
# Email Triage
When asked to triage emails, follow this process:
1. Fetch unread emails from the inbox.
2. For each email, classify it into one of these categories:
- **Urgent**: requires a response within 1 hour
- **Action Required**: requires a response within 24 hours
- **Informational**: no response needed
- **Spam**: can be archived
3. Present a summary table sorted by urgency.
4. For urgent items, draft a brief response for review.Supporting files
Files alongside SKILL.md are copied to the agent's workspace at install time. Common uses:
- Templates: output formats, checklists, boilerplate text.
- Reference data: JSON or CSV lookup tables, schemas, configuration.
- Examples: sample inputs and outputs that guide the agent.
Everything in the skill directory is part of the skill package, except internal metadata files like .skillset-metadata.json.
Versioning
Each skill carries its own version, declared in both index.json and the SKILL.md frontmatter. The two should match; Gamut's PR suggestions propose a bump automatically when a skill changes.
Follow Semantic Versioning:
- PATCH (1.0.0 to 1.0.1): bug fixes, typos, minor wording tweaks.
- MINOR (1.0.0 to 1.1.0): new features, added capabilities.
- MAJOR (1.0.0 to 2.0.0): breaking changes, fundamental restructuring.
How updates are detected
Gamut reports an update when either the skill's version in index.json or the content hash of its files differs from what was recorded at install. A forgotten version bump still surfaces as an update through the content hash, but bumping the version shows users what changed.
Sharing your skillset
Public repositories
Anyone can add a public repository:
- Share the repository URL (
https://github.com/your-org/your-skillset). - The recipient opens Settings > Skillsets, pastes the URL, and clicks Add.
Public repositories work with both the GitHub provider (requires Git) and the public provider (ZIP download, no Git required).
Private repositories
Private repositories require read access and SSH authentication, since Gamut clones with GIT_TERMINAL_PROMPT=0 and cannot answer interactive prompts.
To set up SSH access:
- Generate an SSH key if none exists.
- Add the public key to the GitHub account.
- Use the SSH URL when adding the skillset (
git@github.com:your-org/your-skillset.git).
Accepting contributions
When users modify installed skills and submit them, pull requests are opened against the repository:
- Gamut forks the repository via the GitHub CLI.
- A branch is created with the modified skill files.
- A pull request is opened from the fork against the default branch.
The PR title, description, and version bump are AI-generated from the diff; contributors can edit them before submitting. The standard GitHub review workflow applies from there.
Quick start checklist
- Create a new GitHub repository.
- Add an
index.jsonat the root with the skillset name and an emptyskillsarray. - Create a
skills/directory. - For each skill, add a subdirectory with a
SKILL.mdcontaining frontmatter and instructions. - List each skill in the
skillsarray with its name, path, description, and version. - Push to GitHub and share the repository URL.