Skip to content
Back to skills

Getty Skill Library

ASecurity

Use when adding, naming, moving or renaming a skill in Getty's projects, installing one into a repo with skilletor, or before editing an installed SKILL.md.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 4, 2026
developmentrustbashkubernetesgitapi

Works with

  • claude code
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned October 4, 2026

npx -y skills add Getty/skills --skill getty-skill-library --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Getty Skill Library?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Getty Skill Library
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/getty-getty-skill-library/badge)](https://www.skillsdirectory.com/skills/getty-getty-skill-library)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: getty-skill-library
description: "Use when adding, naming, moving or renaming a skill in Getty's projects, installing one into a repo with skilletor, or before editing an installed SKILL.md."
---

# Getty's Skill Library

How skills are owned, named, shared, and edited across Getty's
projects. The shared library is [Getty/skills](https://github.com/Getty/skills);
the transport is [skilletor](https://github.com/Getty/skilletor) — one source
file per skill, installed copies everywhere else.

## Where a skill lives

**A skill lives in the repo that owns its subject.** A Perl module keeps its
module skill, a cluster repo keeps its cluster skill. The shared library holds
only what has no single home:

- Knowledge a *second, unrelated* project needs → promote it to the
  library as `<group>/<name>/` and install it back as `<name>@getty`. Write it
  where it is used first; promotion is triggered by the second consumer, never
  by anticipation.
- A skill only *related* repos share stays with its owner: the owner repo is a
  skilletor source of its own, and the siblings install `<name>@<owner>`.
- Skills that run only user-level (never installed into a project, e.g.
  `getty-agent-team`) also live in the library — it is their home repo.
- The moment a shared skill turns out to belong to one project, it moves
  there and the library drops it.

Groups are one directory level under the repo root, each with a `README.md`
listing its skills; the root `README.md` lists the groups (the directory
listing is the authority — this skill deliberately doesn't enumerate them).
Create a new group only when no existing one fits — a domain name, never a
`misc` drawer. "Didn't know where to put it" means a new group is due, not
that the nearest group absorbs it.

## Naming

Pattern: `{lang}-{name}` (`perl-mcp`) or `{tool}` (`rex`), kebab-case.
Prepend `getty-` when the skill **prescribes** — a house choice among valid
options (`getty-git-usage`: rebase, not merge) or the API of Getty's own
software. Drop the prefix when it is **reference** — equally true for anyone
using the tool (`kubernetes-concepts`, `perl-mcp`). The test: does it tell you
what Getty chose, or just what the tool does?

Skill names are flat and global across all sources — check for collisions
before naming (`skilletor available`). Renaming a skill means chasing every
`install.skills` entry in a `skilletor.json`, every `briefing.skills` entry and
every `CLAUDE.md` reference in every consuming repo; name it right the first
time.

## Editing a shared skill — edit the source

An installed skill is a build artifact. skilletor owns every skill directory
that carries its `.gitignore` (`# installed by skilletor`), and the next sync
overwrites whatever was edited there. **Edit the skill in its source, then sync
the consumer:**

```bash
$EDITOR ~/dev/skills/<group>/<skill>/SKILL.md   # the source: plain file, any tool
skilletor sync                                   # in a consuming repo
skilletor sync --scope user                      # for ~/.claude/skills
```

On Getty's machines `~/.claude/skilletor.json` maps each source name to its
checkout (`"getty": { "local": "~/dev/skills" }`), which overrides the
same-named `git` source in a project's committed config. While the checkout
exists every sync reads it directly — a local change needs no push to arrive.
Everyone else gets it once it is pushed.

A skill directory without skilletor's `.gitignore` is the repo's own: tracked,
edited in place. `skilletor status` lists what is managed.

## Wiring a project

```bash
skilletor add Getty --project                     # source `getty` = github.com/Getty/skills
skilletor install getty-git-usage@getty perl-mcp@getty --project
skilletor status                                  # declared vs. installed
```

- Commit `.claude/skilletor.json` and `.claude/.gitignore`. Installed skills
  stay out of git; the repo's own skills stay tracked.
- A root `.gitignore` that ignores `.claude/*` behind an allowlist needs
  `!.claude/skilletor.json` and `!.claude/.gitignore`, or the config is
  silently never committed.
- Take each skill from the repo that owns it: library skills `@getty`, karr's
  `@karr`, a sibling's `@<owner>`. A repo that merely holds an installed copy
  does not offer it.

## Old pattern — manage-skills hardlinks

Shared skills used to be hardlinked with manage-skills. A leftover link shows
as a link count above 1 (`stat -c %h SKILL.md`). skilletor leaves a file alone
while its content matches the source, so such a link survives a migration:
delete the managed skill directory and `skilletor sync` to get a plain copy.
Until then the file *is* the source — an in-place edit there changes it for
every repo still linked.

## Distribution duties (library repo)

Three routes ship the same files: skilletor source, Claude Code plugin,
Codex plugin. When skills or groups are added, renamed, or moved:

1. Update the group `README.md` and the root `README.md` skill lists — they
   are hand-maintained and drift silently.
2. Add the skill to the `skills` array in `.claude-plugin/plugin.json` **and**
   `.codex-plugin/plugin.json`, by hand. A grouped layout lists every skill
   path individually, and skilletor finds the library's skills through that
   array — a skill missing there cannot be installed. Validate with
   `claude plugin validate .` (the root-CLAUDE.md warning is expected; don't
   use `--strict`).
3. The marketplace entry lives in `Getty/marketplace`, not here.

`bin/check-listings` in the library repo verifies all of this at once — group
README entry, group-table count, the skill table, both manifests, and that the
frontmatter `name` matches the directory. Run it after adding or renaming a
skill; it exits non-zero with one line per omission.

## Related

- `skill-authoring` — how to write the skill's content.
- `skill-compressor` — shrinking or merging existing skills.
- `skilletor` (plugin skill) — the CLI in full: sources, bundles, vars, trust.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…