Mise en place for your agents.
Skills are structured files that teach AI agents how to accomplish specific tasks. Getting them installed across different agent environments — Claude Code, GitHub Copilot, generic agents — requires detecting the right tool, resolving the right path, handling updates, and presenting a consistent experience. Every skill author would have to build that from scratch.
Skillet solves this once. Authors ship a small npm package powered by @skillet-cli/core; end users run it to install, update, and uninstall skills in any agent environment.
- One dependency ships a complete installer. Add
@skillet-cli/coreto your package, callrun(). The CLI, prompts, adapters, drift detection, and UX are all included. Nothing else to wire up. - Standard package distribution. Skills ship as npm packages — via GitHub Package Registry, npmjs.com, or any compatible registry. Skillet adds an installer, not a new distribution channel. Your existing publish workflow is enough.
- UX is skillet's job, not yours. Scope selection, auto-detection of agent environments, drift detection, update prompts, rich terminal output — everything that makes an installer feel polished comes out of the box. Write great skills; let skillet handle the rest.
- Broad reach that expands over time. Skillet ships with adapters for Claude Code, GitHub Copilot, and generic agents. As the ecosystem grows, so does adapter support — without changes to your skill.
When you install a skill published with @skillet-cli/core, you get four commands:
my-skill install # Install the skill into detected agent environments
my-skill update # Update an installed skill, preserving local modifications
my-skill list # Show installed locations and drift status
my-skill uninstall # Remove the skill from selected locationsScopes — skills install at two granularities:
user— installs to your home directory; available across every projectproject— installs to the current directory; scoped to that repo
The installer detects which agent tools are present and pre-selects them. You can confirm the defaults or choose a different target.
Use @skillet-cli/core to ship your skill as an npm package with a complete CLI — so your users can install, update, and uninstall it in any agent environment with a single command, whether that's Claude Code, GitHub Copilot, or any other agent.
Quick start: Run npm create skillet in your project directory. The interactive wizard detects defaults from your git config and existing files, prompts for the rest, and scaffolds everything for you — skip straight to step 4.
Initialize a directory with a package.json. Publishing via GitHub Package Registry requires no separate npm account:
{
"name": "@your-github-username/my-skill",
"version": "1.0.0",
"type": "module",
"bin": { "my-skill": "bin/cli.js" },
"publishConfig": { "registry": "https://npm.pkg.github.com" }
}Place your prompt files in a skill/ directory.
Install the library:
npm install @skillet-cli/coreCreate bin/cli.js — this is your entire CLI:
#!/usr/bin/env node
import { createRequire } from 'node:module';
import { fileURLToPath } from 'node:url';
import { run } from '@skillet-cli/core';
const pkg = createRequire(import.meta.url)('../package.json');
await run({ skillDir: fileURLToPath(new URL('../skill', import.meta.url)), pkg });Authenticate with GitHub Package Registry once, then publish:
npm login --registry=https://npm.pkg.github.com
npm publishYour users configure the registry for your scope once, then install via npx:
npm config set @your-github-username:registry https://npm.pkg.github.com
npx @your-github-username/my-skill installSkillet detects their agent environment and puts the skill in the right place.
If you'd rather publish to the public npm registry, remove publishConfig from your package.json and run npm publish. Your users can then run npx @your-github-username/my-skill install with no registry setup.
| Option | Type | Description |
|---|---|---|
skillDir |
string |
Path to the directory containing your skill files |
pkg |
{ name: string; version: string } |
Your package's name and version (used by the update notifier) |
hooks.transform |
(skill: NormalizedSkill) => NormalizedSkill |
Modify the normalized skill before adapter dispatch; may be async |
hooks.beforeInstall |
(skill: NormalizedSkill, adapter: Adapter, ctx: Context) => void |
Run before each adapter install; may be async |
hooks.afterInstall |
(skill: NormalizedSkill, adapter: Adapter, ctx: Context) => void |
Run after each adapter install; may be async |
hooks.extendProgram |
(program: Command, ctx: Record<string, unknown>) => void |
Add custom subcommands to the CLI (Command is from commander) |
All hooks fields are optional. NormalizedSkill, Adapter, and Context are TypeScript types exported from @skillet-cli/core.
See CONTRIBUTING.md for dev setup, scripts, commit format, and the release process.