Creating a Skillset¶
Build your own geno-{name} skillset that geno-tools can install, update, and manage.
Minimum viable skillset¶
geno-myskill/
├── genotools.yaml # required — the manifest
├── SKILL.md # umbrella description for the agent
└── commands/
└── gt-myskill.md # at least one slash command
The manifest — genotools.yaml¶
This is the only required file by name. Everything else is whatever the manifest points at.
name: myskill # "geno-" prefix stripped if present
version: 0.1.0
description: Short description of what this skillset does
# Optional — skip for skillsets with no Python dependencies
venv:
name: default
python: ">=3.10"
deps: ["some-package>=1.0"]
# Optional — symlink runtime scripts
runtime:
- { src: runtime/process.py, dst: process.py }
- { src: runtime/helpers, dst: helpers, recursive: true }
# Optional — copy-once config defaults (preserved across updates)
config:
- { src: config/defaults/settings.yaml, dst: settings.yaml }
# Optional — override the commands directory (default: "commands/")
commands:
source: commands/
Required fields¶
| Field | Description |
|---|---|
name |
Skillset name. The geno- prefix is stripped if present. |
version |
Semantic version string |
description |
One-line description |
Optional sections¶
venv¶
Declares an isolated Python environment:
| Field | Description |
|---|---|
name |
Venv name (default: default) |
python |
Python version constraint |
deps |
List of pip requirements |
runtime¶
Symlinks from repo into ~/.geno-tools/geno-{name}/scripts/:
| Field | Description |
|---|---|
src |
Path relative to repo root |
dst |
Path relative to scripts dir |
recursive |
true to symlink a directory tree |
config¶
Copy-once files into ~/.geno-tools/geno-{name}/configs/. Only created if missing — user edits are never overwritten.
| Field | Description |
|---|---|
src |
Path relative to repo root |
dst |
Path relative to configs dir |
SKILL.md¶
The umbrella manifest that describes your skillset to the agent. Use YAML frontmatter:
---
name: geno-myskill
description: >-
What this skillset does and when to use it.
Use when user says /gt-myskill.
license: MIT
metadata:
author: your-username
version: "0.1.0"
---
# geno-myskill
Description, install instructions, command table, runtime notes.
Slash commands¶
Each .md file in commands/ becomes a /gt-* slash command. The filename (minus .md) is the command name.
Write these as instructions for the agent — what to do when the user invokes the command, what tools to use, what output to produce.
Testing locally¶
Use dev to link your local checkout:
Edits take effect immediately. When you're happy, push to a git remote and others can install it:
Adding to the registry¶
To add your skillset to the built-in registry, submit a PR adding an entry to genotools/registry.py:
_REGISTRY: dict[str, str] = {
# ...existing entries...
"myskill": "https://github.com/you/geno-myskill.git",
}
Skillsets vs. plugins
Ecosystem skillsets use the skills format (SKILL.md + commands/*.md) and are installed via geno-tools install. Only geno-tools itself ships as a Claude Code plugin (.claude-plugin/plugin.json) to provide the /gt-install, /gt-remove, /gt-ls, and /gt-update slash commands.