Skill sharing made easy
302
stars
1,140
commits
Go
primary language
Sep 9, 2026
updated
⭐ Star this repo · 🌐 Website · 📋 Changelog · 📄 License

sx-app-* for macOS, Windows, Linux) and open it — it asks one question and sets up your library.Command-line person? The same thing, three lines (npm-style manifest + lock under the hood):
brew install sleuth-io/tap/sx
sx init --type path --path ~/Dropbox/sx-vault
sx add ~/.claude/skills/my-skill
AI assets — skills, MCPs, agents, rules, commands, hooks — usually live inside a single Git repo. The moment you want them in another repo you copy-paste, and they drift out of sync with no source of truth. sx manages complex sharing and distribution of AI assets for real-world teams:
sx stats), and an audit trail (sx audit) when you need themTwo front doors, one library. The app and the CLI share a single configuration, so a library added in one shows up in the other — mixed teams never drift.
sx-app-* artifacts).The app ships the matching CLI inside itself, because some of what it installs — session hooks, MCP server entries — is configuration your AI client executes later and needs a real binary to run. So installing only the app is a complete setup for the hooks that live in your home directory; you do not also need to install the CLI for those to work. Two exceptions are deliberate: hook files that get committed to a repository (GitHub Copilot's .github/hooks/sx.json, Kiro's .kiro/hooks/) keep a plain sx so they are not tied to one machine, and those resolve it from your PATH. Install the CLI separately if you rely on those, or when you just want sx in your own terminal — see docs/clients.md.
The app keeps its bundled CLI current: an app update replaces it along with the rest of the app. That bundled copy does not self-update, since rewriting a file inside a signed app bundle would break it. A separately installed CLI updates itself as usual, independently of the app.
Install via Homebrew (macOS/Linux):
brew tap sleuth-io/tap
brew install sx
Or via shell script:
curl -fsSL https://raw.githubusercontent.com/sleuth-io/sx/main/install.sh | bash
Then initialize in your vault or project:
sx init
From here: add skills, share them with the right people, and see what's used.

Add assets to your vault (sx auto-detects the type):
sx add /path/to/my-skill
sx add ~/.claude/skills/my-skill # an existing Claude Code skill
sx add code-review@claude-plugins-official # a plugin from a registry
Your AI assets stay exactly as they are — sx just wraps them with metadata for versioning and stores them in its vault format.
Multiple vaults? Use profiles to switch between them:
sx profile add work # Add a new profile
sx profile use work # Switch to it
sx profile list # See all profiles
See what's actually used — track adoption and token usage across your team:
sx stats # adoption dashboard
sx stats --since 7d --json # machine-readable
# Install everything scoped to you, into the current project
sx install
Install targets — pick who sees which asset:
sx install my-skill --org # everyone in the vault
sx install my-skill --repo github.com/acme/infra # only inside that repo
sx install my-skill --path github.com/acme/infra#docs/ # one path in a repo
sx install my-skill --team platform # every member of a team
sx install my-skill --user alice@acme.com # a single user
sx install my-skill --bot python-backend # a bot identity (CI runner, agent)
See docs/scoping.md for the full overview and links to a per-scope doc for each install target.
Use your vault from claude.ai or chatgpt.com — expose it as an MCP endpoint via the skills.new relay:
sx cloud connect # opens skills.new, paste back the attach line
sx cloud serve # keep this running — Ctrl+C exits
sx cloud status # prints the MCP URL to paste into claude.ai / chatgpt.com
The relay forwards requests over a WebSocket — vault content stays local. See docs/cloud-relay.md.
Audit — every team and install mutation is recorded:
sx audit # recent team/install mutations
sx audit --actor alice@acme.com --since 30d --event install.set
Migrate a whole vault (assets + versions, teams, bots, scopes, audit, usage):
sx vault copy --from skills-new --to git-vault # preview (read-only)
sx vault copy --from skills-new --to git-vault --yes
See docs/copy.md for directionality and what's lossy. A gated change-request flow (RBAC) is on the roadmap.
An AI agent is only as good as what it knows and what it's allowed to do. sx lets you describe that once — define a Bot and attach the agent's prompt plus the skills, rules, commands, hooks, and MCP servers it depends on — and install it unchanged across any client, coding or not.
sx writes each one's native format on installsx gets your skills and agents onto every client your team uses. hetchy is where they run unattended: connect a repo, send a request from the web UI, Slack, or Linear, and hetchy runs a coding agent in an isolated sandbox, then opens a reviewable pull request with the evidence attached.
The two are wired together. Every hetchy run installs agent personas and scoped skills from an sx vault before the agent starts — its public vault by default, or your own Skills.new vault once an org admin adds an SX key. Publish here and it's in the next run:
sx add ~/.claude/skills/migration-reviewer # publish to your vault
# hetchy installs it into the next sandbox — no copy-paste, no redeploy
hetchy embeds sx as a Go library (pkg/sxvault) rather than shelling out to the CLI, so vault access is part of the run itself.
hetchy is self-hostable and Apache-2.0 — docker compose up. See docs/hetchy.md for the end-to-end workflow.
Choose the right distribution model for your team:
Put the vault in a folder your team already syncs — Dropbox, Google Drive, OneDrive, or iCloud. No git, no GitHub account, no server. See docs/synced-folders.md.
sx init --type path --path ~/Dropbox/sx-vault
Perfect for easily sharing personal tools across multiple personal projects
sx init --type path --path my/vault/path
Share assets through a shared git vault
sx init --type git --repo-url git@github.com:yourteam/skills.git
Centralized management with a UI for discovery, creation, sharing, and usage analytics
sx init --type sleuth
Every git or path vault is also a Claude Code / Codex plugin
marketplace — sx generates and maintains .claude-plugin/marketplace.json
and .codex-plugin/plugin.json on every publish. Teammates who don't run
sx can install the library's skills directly from their AI tool:
# Claude Code
/plugin marketplace add yourteam/skills
/plugin install skills@skills
# Codex
codex plugin marketplace add git@github.com:yourteam/skills.git
Each collection in the vault is also exposed as its own Claude Code
plugin, so people can install just the slice they need. Private repos
work through normal git credentials. Plugin installs deliver skills only
(rules and per-team scoping still need sx install) — see
docs/plugins-spec.md.
sx follows the manifest-and-lock pattern used by npm, cargo, and uv:
sx.toml) — the vault's source of truth. Lists every
managed asset, its install scopes (org, repo, path, team,
bot, user), and team definitions (members, admins, repositories).
Committed to git / path vaults. See docs/manifest-spec.md.sx install reads the
manifest, resolves team and user scopes against the caller's git
identity, and writes the result to the user's cache directory
(~/<cache>/sx/lockfiles/). When the resolved lock changes, the
previous file is rotated with a timestamp so old installs stay
reproducible..sx/audit/YYYY-MM.jsonl; usage events append to
.sx/usage/YYYY-MM.jsonl. Query them with sx audit / sx stats.High level: manage assets in one vault, distribute them globally, per repo, per path, per team, per bot, or per user — auto-installing on new Claude Code sessions so everyone stays in sync — and govern every change through the audit and usage streams.
Everything the CLI does to a vault is also a package. Publish skills and
agents, manage bots and teams, and browse or download assets from your own
program against Skills.new, Git, or local Path vaults through one Client:
import "github.com/sleuth-io/sx/v2/pkg/sxvault"
ctx := context.Background()
client, err := sxvault.OpenSkillsNew("https://app.skills.new", token)
if err != nil {
log.Fatal(err)
}
if err := client.PutSkillZip(ctx, sxvault.SkillZipSpec{
Name: "lint-helper", Version: "1.0.0", ZipData: zip,
}); err != nil {
log.Fatal(err)
}
See docs/library.md for the full API guide.
| Client | Status | Notes |
|---|---|---|
| Claude Code | ✅ Supported | Full support for all asset types |
| Cline | ✅ Supported | Skills, rules, workflows as commands, MCP servers, hooks |
| Codex | ✅ Supported | Skills, commands, agents, MCP servers |
| Cursor | ✅ Supported | Skills, rules, commands, MCP servers, hooks |
| GitHub Copilot | ✅ Supported | Skills, rules, commands, agents, MCP servers, local hooks |
| Gemini (CLI/VS Code) | ✅ Supported | Skills, rules, commands, MCP servers, hooks |
| Gemini (JetBrains) | ✅ Supported | Rules, MCP servers only (no commands/hooks) |
| Gemini (Android Studio) | ✅ Supported | Rules, MCP-remote only (HTTP, no stdio) |
| Kiro | ✅ Supported | Skills, rules, commands, MCP servers |
| Openclaw | ✅ Supported | Skills, rules, commands |
| OpenCode | ✅ Supported | Skills, commands, agents, rules, MCP servers |
| claude.ai (web) | ✅ Supported | Via the skills.new cloud relay |
| chatgpt.com (web) | ✅ Supported | Via the skills.new cloud relay |
See LICENSE file for details.
sx vault copy cross-vault migration (assets, teams, bots, scopes, audit, usage)sx audit filters, storage formatsx stats dashboard, JSON output, event formatpkg/sxvault public APIGo 1.25 or later is required. Install using gvm:
# Install gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# Install Go (use go1.4 as bootstrap if needed)
gvm install go1.4 -B
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.25
gvm use go1.25 --default
make init # First time setup (install tools, download deps)
make build # Build binary
make install # Install to GOPATH/bin
make test # Run tests with race detection
make format # Format code with gofmt
make lint # Run golangci-lint
make prepush # Run before pushing (format, lint, test, build)
Tag and push to trigger automated release via GoReleaser:
git tag v0.1.0
git push origin v0.1.0
Go
87.8%
TypeScript
10.6%
Skill sharing made easy
302
stars
1,140
commits
Go
primary language
Sep 9, 2026
updated
⭐ Star this repo · 🌐 Website · 📋 Changelog · 📄 License

sx-app-* for macOS, Windows, Linux) and open it — it asks one question and sets up your library.Command-line person? The same thing, three lines (npm-style manifest + lock under the hood):
brew install sleuth-io/tap/sx
sx init --type path --path ~/Dropbox/sx-vault
sx add ~/.claude/skills/my-skill
AI assets — skills, MCPs, agents, rules, commands, hooks — usually live inside a single Git repo. The moment you want them in another repo you copy-paste, and they drift out of sync with no source of truth. sx manages complex sharing and distribution of AI assets for real-world teams:
sx stats), and an audit trail (sx audit) when you need themTwo front doors, one library. The app and the CLI share a single configuration, so a library added in one shows up in the other — mixed teams never drift.
sx-app-* artifacts).The app ships the matching CLI inside itself, because some of what it installs — session hooks, MCP server entries — is configuration your AI client executes later and needs a real binary to run. So installing only the app is a complete setup for the hooks that live in your home directory; you do not also need to install the CLI for those to work. Two exceptions are deliberate: hook files that get committed to a repository (GitHub Copilot's .github/hooks/sx.json, Kiro's .kiro/hooks/) keep a plain sx so they are not tied to one machine, and those resolve it from your PATH. Install the CLI separately if you rely on those, or when you just want sx in your own terminal — see docs/clients.md.
The app keeps its bundled CLI current: an app update replaces it along with the rest of the app. That bundled copy does not self-update, since rewriting a file inside a signed app bundle would break it. A separately installed CLI updates itself as usual, independently of the app.
Install via Homebrew (macOS/Linux):
brew tap sleuth-io/tap
brew install sx
Or via shell script:
curl -fsSL https://raw.githubusercontent.com/sleuth-io/sx/main/install.sh | bash
Then initialize in your vault or project:
sx init
From here: add skills, share them with the right people, and see what's used.

Add assets to your vault (sx auto-detects the type):
sx add /path/to/my-skill
sx add ~/.claude/skills/my-skill # an existing Claude Code skill
sx add code-review@claude-plugins-official # a plugin from a registry
Your AI assets stay exactly as they are — sx just wraps them with metadata for versioning and stores them in its vault format.
Multiple vaults? Use profiles to switch between them:
sx profile add work # Add a new profile
sx profile use work # Switch to it
sx profile list # See all profiles
See what's actually used — track adoption and token usage across your team:
sx stats # adoption dashboard
sx stats --since 7d --json # machine-readable
# Install everything scoped to you, into the current project
sx install
Install targets — pick who sees which asset:
sx install my-skill --org # everyone in the vault
sx install my-skill --repo github.com/acme/infra # only inside that repo
sx install my-skill --path github.com/acme/infra#docs/ # one path in a repo
sx install my-skill --team platform # every member of a team
sx install my-skill --user alice@acme.com # a single user
sx install my-skill --bot python-backend # a bot identity (CI runner, agent)
See docs/scoping.md for the full overview and links to a per-scope doc for each install target.
Use your vault from claude.ai or chatgpt.com — expose it as an MCP endpoint via the skills.new relay:
sx cloud connect # opens skills.new, paste back the attach line
sx cloud serve # keep this running — Ctrl+C exits
sx cloud status # prints the MCP URL to paste into claude.ai / chatgpt.com
The relay forwards requests over a WebSocket — vault content stays local. See docs/cloud-relay.md.
Audit — every team and install mutation is recorded:
sx audit # recent team/install mutations
sx audit --actor alice@acme.com --since 30d --event install.set
Migrate a whole vault (assets + versions, teams, bots, scopes, audit, usage):
sx vault copy --from skills-new --to git-vault # preview (read-only)
sx vault copy --from skills-new --to git-vault --yes
See docs/copy.md for directionality and what's lossy. A gated change-request flow (RBAC) is on the roadmap.
An AI agent is only as good as what it knows and what it's allowed to do. sx lets you describe that once — define a Bot and attach the agent's prompt plus the skills, rules, commands, hooks, and MCP servers it depends on — and install it unchanged across any client, coding or not.
sx writes each one's native format on installsx gets your skills and agents onto every client your team uses. hetchy is where they run unattended: connect a repo, send a request from the web UI, Slack, or Linear, and hetchy runs a coding agent in an isolated sandbox, then opens a reviewable pull request with the evidence attached.
The two are wired together. Every hetchy run installs agent personas and scoped skills from an sx vault before the agent starts — its public vault by default, or your own Skills.new vault once an org admin adds an SX key. Publish here and it's in the next run:
sx add ~/.claude/skills/migration-reviewer # publish to your vault
# hetchy installs it into the next sandbox — no copy-paste, no redeploy
hetchy embeds sx as a Go library (pkg/sxvault) rather than shelling out to the CLI, so vault access is part of the run itself.
hetchy is self-hostable and Apache-2.0 — docker compose up. See docs/hetchy.md for the end-to-end workflow.
Choose the right distribution model for your team:
Put the vault in a folder your team already syncs — Dropbox, Google Drive, OneDrive, or iCloud. No git, no GitHub account, no server. See docs/synced-folders.md.
sx init --type path --path ~/Dropbox/sx-vault
Perfect for easily sharing personal tools across multiple personal projects
sx init --type path --path my/vault/path
Share assets through a shared git vault
sx init --type git --repo-url git@github.com:yourteam/skills.git
Centralized management with a UI for discovery, creation, sharing, and usage analytics
sx init --type sleuth
Every git or path vault is also a Claude Code / Codex plugin
marketplace — sx generates and maintains .claude-plugin/marketplace.json
and .codex-plugin/plugin.json on every publish. Teammates who don't run
sx can install the library's skills directly from their AI tool:
# Claude Code
/plugin marketplace add yourteam/skills
/plugin install skills@skills
# Codex
codex plugin marketplace add git@github.com:yourteam/skills.git
Each collection in the vault is also exposed as its own Claude Code
plugin, so people can install just the slice they need. Private repos
work through normal git credentials. Plugin installs deliver skills only
(rules and per-team scoping still need sx install) — see
docs/plugins-spec.md.
sx follows the manifest-and-lock pattern used by npm, cargo, and uv:
sx.toml) — the vault's source of truth. Lists every
managed asset, its install scopes (org, repo, path, team,
bot, user), and team definitions (members, admins, repositories).
Committed to git / path vaults. See docs/manifest-spec.md.sx install reads the
manifest, resolves team and user scopes against the caller's git
identity, and writes the result to the user's cache directory
(~/<cache>/sx/lockfiles/). When the resolved lock changes, the
previous file is rotated with a timestamp so old installs stay
reproducible..sx/audit/YYYY-MM.jsonl; usage events append to
.sx/usage/YYYY-MM.jsonl. Query them with sx audit / sx stats.High level: manage assets in one vault, distribute them globally, per repo, per path, per team, per bot, or per user — auto-installing on new Claude Code sessions so everyone stays in sync — and govern every change through the audit and usage streams.
Everything the CLI does to a vault is also a package. Publish skills and
agents, manage bots and teams, and browse or download assets from your own
program against Skills.new, Git, or local Path vaults through one Client:
import "github.com/sleuth-io/sx/v2/pkg/sxvault"
ctx := context.Background()
client, err := sxvault.OpenSkillsNew("https://app.skills.new", token)
if err != nil {
log.Fatal(err)
}
if err := client.PutSkillZip(ctx, sxvault.SkillZipSpec{
Name: "lint-helper", Version: "1.0.0", ZipData: zip,
}); err != nil {
log.Fatal(err)
}
See docs/library.md for the full API guide.
| Client | Status | Notes |
|---|---|---|
| Claude Code | ✅ Supported | Full support for all asset types |
| Cline | ✅ Supported | Skills, rules, workflows as commands, MCP servers, hooks |
| Codex | ✅ Supported | Skills, commands, agents, MCP servers |
| Cursor | ✅ Supported | Skills, rules, commands, MCP servers, hooks |
| GitHub Copilot | ✅ Supported | Skills, rules, commands, agents, MCP servers, local hooks |
| Gemini (CLI/VS Code) | ✅ Supported | Skills, rules, commands, MCP servers, hooks |
| Gemini (JetBrains) | ✅ Supported | Rules, MCP servers only (no commands/hooks) |
| Gemini (Android Studio) | ✅ Supported | Rules, MCP-remote only (HTTP, no stdio) |
| Kiro | ✅ Supported | Skills, rules, commands, MCP servers |
| Openclaw | ✅ Supported | Skills, rules, commands |
| OpenCode | ✅ Supported | Skills, commands, agents, rules, MCP servers |
| claude.ai (web) | ✅ Supported | Via the skills.new cloud relay |
| chatgpt.com (web) | ✅ Supported | Via the skills.new cloud relay |
See LICENSE file for details.
sx vault copy cross-vault migration (assets, teams, bots, scopes, audit, usage)sx audit filters, storage formatsx stats dashboard, JSON output, event formatpkg/sxvault public APIGo 1.25 or later is required. Install using gvm:
# Install gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# Install Go (use go1.4 as bootstrap if needed)
gvm install go1.4 -B
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.25
gvm use go1.25 --default
make init # First time setup (install tools, download deps)
make build # Build binary
make install # Install to GOPATH/bin
make test # Run tests with race detection
make format # Format code with gofmt
make lint # Run golangci-lint
make prepush # Run before pushing (format, lint, test, build)
Tag and push to trigger automated release via GoReleaser:
git tag v0.1.0
git push origin v0.1.0
Go
87.8%
TypeScript
10.6%