A community catalog of reusable Agent Skills — portable SKILL.md instruction folders for AI coding agents such as Claude Code, Cursor, GitHub Copilot, Codex, and others. A skill is just a folder you drop into your agent's skills directory; nothing here is tied to one vendor.
There are three ways to install:
- CLI (
skillsdeck) — search, install, and update skills from any agent's skills directory. Vendor-neutral; works anywhere Node runs. - One-command script (
install.sh) — copies skill folders straight into a skills directory. No dependencies; good for a quick, no-frills install. - Claude Code plugin marketplace — for Claude Code users, a native integration: add the marketplace once and install any skill with a choice of scope (global or per-project), with updates via
git pullsemantics.
| Skill | Description |
|---|---|
code-comments |
Comment only where a senior dev would need more than two glances; default to none. |
laravel-services-support |
Laravel: external integrations live in app/Services, internal abstractions in app/Support. |
project-conventions |
House rules for a Laravel + Inertia + React app: component reuse-first, mandatory tests, type locations. |
uat-tdd-e2e |
Implement a feature in one pass: write a UAT, drive it with TDD, validate end-to-end, then report. |
| Skill | Description |
|---|---|
tighten-prose |
Tighten prose by cutting filler, hedging, and redundancy without changing meaning or voice. |
| Skill | Description |
|---|---|
no-ai-attribution |
Keep AI attribution (Co-Authored-By, "Generated with" footers) out of git commits and pull requests. |
The skillsdeck CLI installs SKILL.md folders into any agent's skills directory. No install needed — run it with npx:
npx skillsdeck search testing
npx skillsdeck install code-comments tighten-prose # Claude Code (default → ~/.claude/skills)
npx skillsdeck install uat-tdd-e2e --agent codex # OpenAI Codex (~/.agents/skills)
npx skillsdeck install tighten-prose --agent gemini # Gemini CLI (~/.gemini/skills)
npx skillsdeck install project-conventions --project . # the agent's project dir (shared with the team)
npx skillsdeck install code-comments --dir ~/.config/agent/skills # any other agent, by path
npx skillsdeck update --all--agent targets a known agent's skills directory; anything else works with --dir <path>:
--agent |
User directory | Project directory | Agent |
|---|---|---|---|
claude (default) |
~/.claude/skills |
<project>/.claude/skills |
Claude Code |
codex |
~/.agents/skills |
<repo>/.agents/skills |
OpenAI Codex |
gemini |
~/.gemini/skills |
<project>/.gemini/skills |
Gemini CLI |
| other | — | — | pass --dir <path> |
See cli/README.md for the full command reference.
MCP server: npx skillsdeck mcp serve runs a read-only MCP server exposing the catalog as tools (list_skills, search_skills, get_skill_info, read_skill) — add it to Claude Code with claude mcp add skillsdeck -- npx -y skillsdeck mcp serve.
From a clone:
git clone https://github.com/Teners-net/skillsdeck.git
cd skillsdeck
./install.sh --all --global # or: ./install.sh code-comments uat-tdd-e2e --projectOr as a true one-liner (set the URL to your repo first; see Setup):
curl -fsSL https://raw.githubusercontent.com/Teners-net/skillsdeck/main/install.sh | bash -s -- --allFlags: --all, --agent NAME (claude (default), codex, gemini), --global (default), --project [DIR], --dir DIR (install into any directory), --list, --help. With no arguments and a terminal, it shows a numbered menu.
This route just drops SKILL.md folders into the target directory — no versioning or auto-update. If your agent is already open, reload it so it picks up a newly created skills directory.
Claude Code users get a native integration. One-time setup per machine:
claude plugin marketplace add Teners-net/skillsdeckThen install any skill, choosing where it applies:
# Global — available in all your projects (this is the default scope)
claude plugin install code-comments@skillsdeck --scope user
# Project — recorded in this repo's .claude/settings.json and shared with the team
claude plugin install project-conventions@skillsdeck --scope projectInstall several at once:
for s in code-comments laravel-services-support uat-tdd-e2e; do
claude plugin install "$s@skillsdeck" --scope user
doneYou can also do all of this interactively with /plugin inside a Claude Code session (Discover → pick a skill → choose scope).
Keep skills current after the repo changes:
claude plugin marketplace update skillsdeckA plugin's skill is namespaced as <plugin>:<skill> (e.g. code-comments:code-comments); it still auto-triggers from its description, and you can invoke it explicitly with that name.
Commit this to a repo's .claude/settings.json and teammates are prompted to install the marketplace when they trust the folder:
{
"extraKnownMarketplaces": {
"skillsdeck": {
"source": { "source": "github", "repo": "Teners-net/skillsdeck" }
}
},
"enabledPlugins": {
"project-conventions@skillsdeck": true,
"code-comments@skillsdeck": true
}
}-
Create a GitHub repo and push these files. The canonical manifest lives at
plugins/marketplace.json;npm run generatealso writes a byte-identical copy to.claude-plugin/marketplace.json, which Claude Code's native marketplace requires at that exact path. Keep both committed. -
In
plugins/marketplace.json, setowner.nameand, if you like, renamename(skillsdeck). For Claude Code compatibility, avoid the reserved names in the marketplace docs (e.g. anythinganthropic-*orclaude-*). -
In
install.sh, setREPO_URLto your repo (or callers can exportSKILLS_REPO_URL). -
Replace
Teners-net/skillsdeckthroughout this README with yourowner/repo. -
Validate before sharing:
npm run validate # schema, name invariants, and generated-artifact sync claude plugin validate . # optional — Claude Code's own marketplace check
The browsable catalog at teners-net.github.io/skillsdeck is generated from the skills/ tree by npm run build:site (into site/, which is gitignored) and deployed by .github/workflows/pages.yml on every push to main. Enable it once under repo Settings → Pages → Source = "GitHub Actions". Build it locally with npm run build:site and preview with npx serve site.
The site's Submit page (/submit.html) is a form that generates a skill and opens a PR: it builds a pre-filled GitHub issue, and .github/workflows/skill-from-issue.yml parses it via scripts/skill-from-issue.mjs, writes skills/<name>/SKILL.md + skill.json, regenerates artifacts, and opens the pull request. For this to work, enable Settings → Actions → General → Workflow permissions → "Allow GitHub Actions to create and approve pull requests".
Each skill pins version: 0.1.0 in its skill.json. Bump that field whenever you change a skill, or delete the version fields entirely — for a git-hosted marketplace, omitting version makes every commit a new version so users always get the latest on update.
The easiest way is the Submit a skill form on the site — fill it in and a bot opens the PR for you. To do it manually in a clone:
- Create
skills/<name>/SKILL.md(anameanddescriptionin the YAML frontmatter, then the instructions) andskills/<name>/skill.json(catalog metadata — seedocs/authoring-skills.md). - Run
npm run validateto check it, thennpm run generateto rebuild the manifests,registry.json, and the README catalog. You never hand-edit those files — they are derived fromskills/, andinstall.shdiscovers skills from the tree automatically. - Optionally run
npm run lint:secrets— an advisory scan that flags any leaked tokens, absolute local paths, or private URLs in your skill folder.