Documentation
How to use skylls
Publish your Claude Code, Codex and Gemini skills, agents and swarms to private GitHub repos, share each one with the friends you choose, and install what they share with you.
For LLMs
Are you an AI agent? Read skylls.dev/llms.txt: the whole guide as plain Markdown, written for agents. Then install the skylls skill so your agent CLI knows how to use skylls (raw skill).
1. Install the skylls skill
skylls agent-skill -g -a all # Claude Code, Codex and Gemini, global
skylls add jcsancho/skylls/skylls -g -a all # or straight from the public GitHub repo
No skylls yet? npm install -g @skylls/cli, then skylls setup (see Install).
2. Skills
Share: a skill is a whole capability (its SKILL.md recipe plus its scripts and files), published to its own private repo, so everyone you share it with runs the same skill, maintained in one place:
skylls push pdf -m "First version" # ~/.claude/skills/pdf → <org>/skill-pdf (private)
skylls share pdf @bob # one skill to one friend (--all @bob for everything)
Use: find what you and your friends published and pull it into your agent:
skylls source add alice # once: see what alice shared with you
skylls find pdf --json --limit 5 # search, compact output for agents
skylls add pdf -g -a all # writes into ~/.claude/skills, ~/.agents/skills, ~/.gemini/skills (no -g: this project)
Agents ask first. The skill tells agents to install freely when you ask for a capability, but never to publish, share or remove anything without your go-ahead.
Overview
skylls is a command-line tool that sits on top of GitHub. It works with three kinds of items:
- Skills: folders with a
SKILL.mdthat teach an agent CLI a capability (Claude Code, Codex, Gemini CLI). - Agents: a long-lived agent's folder (
CLAUDE.md/AGENTS.md,.claude/, scripts), with its Obsidian memory. - Swarms: a team of agents working together, with their roles and memory.
Every item you publish gets its own private GitHub repo. GitHub stores everything and decides who can see what. skylls adds versions, changelogs, plain one-sentence summaries, folders, suggestions and a secret scan on top.
Nothing is shared by default. A friend you share one skill with sees that one repo only, not your other skills, agents or swarms.
Install
With npm
Needs Node 18+ and Python 3.11+ (the npm package runs the Python tool).
npm install -g @skylls/cli
skylls setup
To try it without installing: npx @skylls/cli --version.
Installed it as @jcsancho/skylls before 1.4.0? Run skylls update: it moves you to @skylls/cli (or by hand: npm uninstall -g @jcsancho/skylls && npm install -g @skylls/cli).
With the installer (macOS / Linux)
curl -fsSL https://skylls.dev/install.sh | bash
The installer:
- Checks
git,uv,ghandgitleaks, and offers to install missing ones with Homebrew. - Installs skylls and puts it on your PATH.
- Logs you in to GitHub.
- Runs
skylls setup.
Options go after the command: -y answers yes to everything, --no-setup only installs, --ref v1.0.0 installs a specific version. Example: curl -fsSL https://skylls.dev/install.sh | bash -s -- -y.
By hand
uv tool install git+https://github.com/jcsancho/skylls # or: pipx install git+https://github.com/jcsancho/skylls
skylls setup
Requirements
- Required: Python 3.11+,
git, and the GitHub CLIgh, logged in (gh auth login). - For publishing: gitleaks (
brew install gitleaks). - Optional: the
claudeCLI, which writes the plain summaries for you.
Updating
skylls update # the newest version, installed the way you installed skylls
skylls update --check # only check
skylls --version # check your version
On 1.2.2 or older (no skylls update yet), update once by hand: uv tool install --force git+https://github.com/jcsancho/skylls, or npm uninstall -g @jcsancho/skylls && npm install -g @skylls/cli if you installed with npm.
Setup
skylls setup runs once (any command starts it the first time) and asks four things:
-
Where to publish. We recommend a GitHub organization you administer. It works like a folder holding one private repo per item, keeps them apart from your other repos, and lets friends have read-only access.
If you don't have one, setup shows how to create it (free, about a minute, at github.com/account/organizations/new), can open the page and waits until it exists. It also offers to set the organization's base permission to No permission, so members see nothing by default. Typegithub.com/you-skylls ← your organization ├── skill-pdf ← one private repo per skill ├── agent-lead-generator ← one per agent (definition + memory) └── swarm-marketing-team ← one per swarmaccountto use your personal account instead; repos are then namedskylls-skill-pdfand so on. - Your agent CLIs:
claude,codex,geminiorall. - Your folders for agents and swarms (default
~/agentsand~/swarms). - The skylls skill: installs it globally so your agents can use skylls themselves (see For AI agents).
Without questions:
skylls setup --owner you-skylls --agents all --agents-dir ~/agents --swarms-dir ~/swarms
Your settings live in ~/.config/skylls/config.json. Run skylls setup again to change them.
Quick start
You publish a skill and share it with Bob:
$ skylls push pdf -m "First version" # ~/.claude/skills/pdf → you-skylls/skill-pdf (private)
$ skylls share pdf @bob # Bob may install it
Bob installs it:
$ skylls source add you-skylls # once: accepts your shares, shows what you shared
$ skylls add pdf -g -a all # installs it for Claude Code, Codex and Gemini
When you publish a new version, Bob gets it with skylls pull --update.
Find and install skills
skylls list # your skills and what friends shared, grouped by folder
skylls find invoice # search names, folders, summaries and SKILL.md text
skylls find --folder docs # one folder
skylls add pdf # install into this project
skylls add pdf -g -a all # install globally for every agent CLI
skylls add pdf --from alice # when several people have a "pdf"
skylls add pdf@1.2.0 # a specific (older) version
skylls log pdf # who made it, every version, what changed
skylls remove pdf # remove your local copy (never touches GitHub)
Where skills go
| Claude Code | Codex | Gemini | |
|---|---|---|---|
skylls add pdf (this project) | ./.claude/skills/pdf/ | ./.agents/skills/pdf/ | ./.gemini/skills/pdf/ |
skylls add pdf -g (global) | ~/.claude/skills/pdf/ | ~/.agents/skills/pdf/ | ~/.gemini/skills/pdf/ |
-a picks the agent CLIs (claude, codex, gemini, all); without it, skylls uses the ones you chose at setup. A global install for several CLIs keeps one real copy (Claude's) and links the others to it.
Publish
skylls push pdf -m "Handles scans" # 1.2.0 → 1.2.1 (default: patch)
skylls push pdf -m "New option" --minor # 1.2.1 → 1.3.0
skylls push pdf -m "Rewrite" --major # 1.3.0 → 2.0.0
skylls push pdf --folder docs # also put it in a folder
skylls push ./path/to/skill # or publish a folder by path
What happens on push:
- The repo: the first push creates the private repo
<org>/skill-<name>(<you>/skylls-skill-<name>on a personal account). Each version is a git tag such asv1.3.0. Without-m, push asks what changed. - Secret scan: before anything leaves your machine, push scans for API keys, tokens, passwords, private keys and personal data (emails, phone numbers…) with gitleaks. If it finds any, nothing is published. Use
--skip-scanonly for false positives. - Changelog: skylls writes a
CHANGELOG.mdin each repo (don't edit it by hand). It holds a plain one-sentence summary (written by Claude, or yours with--about "…"), who created the item, and one entry per version: what changed, when and by whom. The summary is also the repo's description on GitHub.
Add --dry-run before any command to see what it would do without changing anything: skylls --dry-run push pdf.
Versions and updates
skylls installed # installed skills; flags the ones with a newer version
skylls pull # check for newer versions
skylls pull --update # install them
skylls sync -m "Small fixes" # publish your changed items, then install friends' new versions
skylls add pdf@1.0.0 # go back to an older version
Every version stays installable, so you can always go back.
skylls sync does both directions in one go: it publishes a new version of every skill, agent and swarm you already published and changed since (each one is scanned for secrets; if one is refused, the others still go), then installs the newer versions of everything friends shared with you. Your copy of an agent's memory is refreshed to the owner's latest (--keep-memory keeps yours and puts theirs next to it). Add --dry-run to see what it would do.
Agents and swarms
Agents and swarms use the same commands, under skylls agents … and skylls swarms …:
skylls agents # yours (published or not) and friends'
skylls agents push lead-generator -m "Adds LinkedIn" # ~/agents/lead-generator → <org>/agent-lead-generator
skylls agents share lead-generator @bob
skylls agents add lead-generator --from alice # → ~/agents/lead-generator
skylls agents add lead-generator@1.0.0 --from alice --as lead-generator-old
skylls agents remove lead-generator # local folder → the Trash (repos untouched)
skylls swarms push marketing-team # ~/swarms/marketing-team → <org>/swarm-marketing-team
What gets published
Only the definition, never runtime state:
| Published | Not published | |
|---|---|---|
| Agent | CLAUDE.md/AGENTS.md/GEMINI.md, .claude/ (settings, skills, commands), scripts and other files, its memory folder | logs/, data/, reports/, scratch/, state/, caches and venvs, *.log, *.jsonl, databases, .claude/settings.local.json, env files, keys, files over 5 MB |
| Swarm | top-level and per-role instruction files and .claude/, .swarm/agents.json, .swarm/schedules.json, its memory folder | the roles' work files, reports, .swarm/bus.jsonl and other state |
To adjust this, put a .skyllsignore file in the folder: one pattern per line, !pattern to include something.
Installing a friend's agent or swarm
- It goes into your agents or swarms folder (for example
~/agents/lead-generator/). - Absolute paths from their machine are rewritten to yours, and missing ones are listed.
- Running
addagain (orsync) updates the definition and refreshes your copy of its memory to the owner's latest; notes only you added stay, and so does your runtime data. Pass--keep-memoryto keep your memory exactly as it is: the owner's latest goes next to it in its own folder (alice-wiki/besidewiki/). - Where it came from is recorded in its
CHANGELOG.md.
Obsidian memory
An agent's or swarm's memory travels with it.
- Best place: inside the item's folder, for example
~/agents/lead-generator/wiki/. A subfolder counts as memory if it's an Obsidian vault (has.obsidian/) or is namedmemory,wiki,obsidianor*-wiki. All of it is published, except Obsidian's per-user window layout, the trash and files over 5 MB. - Memory elsewhere in
~/Obsidianalso works: skylls finds a<x>-wikivault the instructions mention, or<vault>/AGENTS/<name>/. It's snapshotted into.skylls-memory/and restored to the same place under your friend's home. - Listing it yourself: a
.skyllsmemoryfile in the item's folder lists memory folders.
Seeing friends' items
skylls source add alice # see what alice shared with you (accepts her invites)
skylls source # your friends and how many items each shared
skylls source remove alice
Who shares what
skylls shared # what you shared and with whom, what friends shared with you
skylls shared @bob # only between you and Bob
skylls people # per person: what you share with them, what they share with you
Both also list what isn't accepted yet: your invites a friend hasn't accepted (with the date you sent them), and items shared with you that wait for you, with the skylls source add command that accepts them.
Run source add once per friend (their GitHub login or organization). Later shares from that friend are accepted automatically. If someone you haven't added shares with you, skylls list tells you, and you decide whether to add them.
Suggestions
Only the owner publishes an item. Friends suggest improvements, which become GitHub issues in the owner's repo:
skylls suggest pdf --from alice "Also handle scanned PDFs" # an issue in alice's repo, assigned to her
skylls suggestions # open suggestions for your items
skylls accept pdf#3 -m "Done in 1.3.0" # closes it as done
skylls decline pdf#4 -m "Out of scope" # closes it as not planned
Pull requests (agents and swarms)
Changed your copy of a friend's agent or swarm and want them to have it? Send it as a real GitHub pull request. They review it and, when they accept, skylls merges it into their copy and publishes a new version, which you install like any update.
# the owner, once per item (or --all): let the people they share with send pull requests
skylls swarms allow-prs opportunity-hunter
# you: compare your copy with the version you installed and send the difference
skylls swarms propose opportunity-hunter --from alyssa -m "Add the new data tools"
# the owner: review and answer
skylls swarms suggestions # opportunity-hunter#3 Add the new data tools (pull request)
skylls swarms review opportunity-hunter#3 # the diff, and a warning if you changed the same files
skylls swarms accept opportunity-hunter#3 # applies it to your folder, publishes a new version, closes it
skylls swarms decline opportunity-hunter#3 -m "I keep my helpers"
proposelists the changed files (leave some out with--skip FILE), scans them for secrets, puts the owner's paths back (an install points them at yours), forks the repo privately into your account or organization (<repo>-from-<owner>) and opens the pull request.acceptstops if the owner changed a file the pull request also changes since the version it started from;--forcetakes the proposal.- Memory and skills shared by reference are never part of a pull request.
- Accept with skylls, not on github.com: a merge there would be overwritten by the owner's next
push. - Sharing an agent or swarm asks whether the people you share it with may send pull requests (
--prs/--no-prsanswer it up front). It's one switch per item: everyone you share that item with can, or nobody. allow-prs --offturns it off again. For an organization,allow-prsalso allows private forks in it.
Folders
GitHub has no folders for repos, so skylls uses topics:
skylls push pdf --folder docs # or later: skylls move pdf docs ('.' = no folder)
skylls folder # your folders and how many items each has
skylls folder rename docs office
skylls folder remove office # items stay, just without a folder
skylls list -f docs # filter (also: find -f docs)
On GitHub, filter your repos by topic: github.com/<owner>?tab=repositories&q=topic:docs.
The dashboard
The dashboard does the sharing side of skylls from your browser. Sign in with GitHub and you can:
- Yours: see your skills, agents and swarms (tabs), with version, folder and summary. Click Who can see it to list the people with access, share with a GitHub user, or remove someone.
- Shared with you, waiting: accept invitations friends sent you.
- Open suggestions: accept or decline them, with a note.
- Friends' items: copy the install command for anything friends shared with you.
Publishing and installing still happen in the terminal: the dashboard has no access to your computer.
GitHub asks for the repo and read:org permissions, needed to read your private skylls repos and manage who can see them. The dashboard only touches skylls repos. It has no database: your token is kept in an encrypted cookie in your browser for up to 30 days, and signing out deletes it. Read the privacy policy for details.
Security and privacy
- Private repos only. Every item repo is created private. If skylls finds one that is public, it warns you and offers to make it private.
- Nothing shared by default. Friends are invited to single repos, never to your whole account or organization.
- Secret scan on every push. gitleaks checks for keys, tokens, passwords and personal data before anything is uploaded, and the push stops if it finds any.
- Definitions, not state. Agents and swarms never publish logs, data, local settings, env files or keys (see what gets published).
- No skylls server for your data. The CLI talks directly to GitHub with your own
ghlogin. The dashboard has no database and keeps your token only in an encrypted cookie. - Read what you install. A skill is instructions your agent follows. Install items from people you trust, and check
skylls log <name>to see who changed what.
For AI agents
Setup installs the skylls skill, which teaches Claude Code, Codex and Gemini to use skylls: install it if it's missing, find and install skills, agents and swarms, and ask you before publishing or sharing anything. So you can just ask your agent: "find a skill for PDF forms and install it".
skylls agent-skill -g -a all # install (or reinstall) it later
skylls add jcsancho/skylls/skylls -g -a all # or straight from GitHub
After an upgrade, the next skylls command updates your installed copy.
JSON output
With --json, read commands print one compact JSON object per line on stdout, without empty fields. Messages and errors go to stderr.
$ skylls find pdf --json --limit 5
{"name":"pdf","owner":"alice","folder":"docs","version":"1.3.0","summary":"Fills in PDF forms for you.","updated":"2026-10-07","repo":"alice-skylls/skill-pdf"}
skylls installed --json # "newer" when an update exists
skylls log pdf --json # details + version history
skylls agents list --json # "published":false for ones not published yet
find --json returns at most 10 results unless you pass --limit.
Public skills from skills.sh
skylls search pdf # top matches on skills.sh, with install counts
skylls add anthropics/skills/pdf -g # install straight from a public GitHub repo
How it works
<org>/skill-pdf ┐ one private repo per item, only what friends may see
<org>/agent-lead-generator │ + CHANGELOG.md, tags v1.0.0…, topics (folder)
<org>/swarm-marketing-team ┘ (personal account: skylls-skill-pdf, …)
▲ push (copy, commit, tag) │ add (copy the version you want)
│ ▼
~/.claude/skills/pdf ~/agents/lead-generator ~/swarms/marketing-team ← your copies / workspaces
- Config:
~/.config/skylls/config.jsonholds your login, where you publish, your agent CLIs, your folders and your friends. - Finding items: two GitHub GraphQL queries (the repos you can access, then the skylls repos' changelogs and instructions).
- Publishing and installing: small clones in
~/.cache/skylls/repos/. - Your folders:
~/agentsand~/swarmsare just your workspaces. skylls never commits there. - Naming: in an organization repos are
skill-…,agent-…,swarm-…; on a personal accountskylls-skill-…and so on. A repo only counts as a skylls item if it has theskyllstopic, which skylls sets.
Command reference
| Command | What it does |
|---|---|
setup [--owner O] [--agents A] [--agents-dir D] [--swarms-dir D] [--no-agent-skill] | Your account or organization, agent CLIs, folders, the skylls skill |
list [query] [--from O] [-f F] | Your items and what friends shared, grouped by folder |
find <words> [--from O] [-f F] [-n N] | Search; shows summary, version, owner, folder |
add <name[@ver]> [--from O] [-g] [-a A] [-y] | Install a skill (owner/repo/skill: from a public repo) |
log <name> [--from O] | Who made it, versions, what changed |
installed [-g] [-a A] | Installed skills and newer versions |
pull [--update] | Check for (and install) newer versions |
sync [-m msg] [--skip-scan] [--keep-memory] | Publish your changed items, then install friends' newer versions |
remove <name> [-g] [-a A] | Remove a local skill copy |
push <name|path> [-m msg] [--minor|--major] [--about text] [--folder F] [--skip-scan] | Publish a new version to its private repo |
share <name> @user… | --all @user | Let friends install it (no users: who has access) |
unshare <name> @user… | --all @user | Revoke access to one item |
revoke @user… [-y] | Take back everything you shared with them |
shared [@user…] | What you shared (with whom) and what's shared with you, incl. invites not accepted yet |
people | Who you share with and who shares with you, and what |
move <name> <folder> | Put it in a folder (. = none) |
folder [rename old new | remove F] | Your folders |
source [add|remove] <login> | Friends whose shares you see |
suggest <name> [--from O] "text" | Suggest an improvement to the owner |
suggestions [name] / review <name>#<n> / accept <name>#<n> / decline <name>#<n> | Your open suggestions and pull requests, and answering them |
agents|swarms propose <name> [--from O] -m "…" | Send your changes to a friend's agent/swarm as a pull request |
agents|swarms allow-prs <name> | --all [--off] | Let the people you share with send pull requests |
agents … / swarms … | The same commands for agents and swarms, plus add --as N --keep-memory and remove [--memory] [-y] |
agent-skill [-g] [-a A] | (Re)install the skylls skill for your agents |
search <query> | Public skills on skills.sh |
version / --version | The skylls version |
update [--check] | Update skylls itself to the newest version |
--json / --dry-run (before the command) | Compact output for agents / preview only |
Run skylls help for the same list in your terminal.
FAQ
Can a friend see my other skills?
No. Each item is its own private repo, and friends are invited to single repos only. GitHub enforces it.
What happens to a friend's copy when I unshare?
What they already installed stays on their machine. They just can't get new versions.
Can friends change my skill?
No. Only you publish. Friends send suggestions, and for agents and swarms also pull requests with their changes; you accept or decline.
The secret scan stopped my push, but it's a false positive.
Check the finding first. If it really is safe, push again with --skip-scan.
Two friends have a skill with the same name.
Pick one with --from <owner>, for example skylls add pdf --from alice.
Where do I report a bug?
Open an issue at github.com/jcsancho/skylls/issues.