@echohello/skillet
v1.0.0
Published
Portable CLI for managing agent skills.
Readme
Skillet
Portable CLI for managing agent skills.
Skillet installs, discovers, and updates SKILL.md-based skills across Claude Code, Codex, OpenCode, Cursor, and Windsurf.
Why Skillet
- Manifest-driven — declare your skills in
apm.ymlandsklt installreproduces the tree on any machine. - OpenAPM-compatible —
apm.ymlconforms to the OpenAPM v0.1 spec, with a focused skills-only profile. - OCI-native — publish and consume skills as signed
oci://artifacts. Air-gapped, provenance-friendly, enterprise-ready. - Single static binary — no Python runtime, no Node dependency for native installs. Drops into CI runners, Docker images, and locked-down endpoints.
- Symlink-first — edit a skill in your repo, see it live in the agent immediately. No reinstall dance.
Install
# npm / npx (any platform with Node 20+)
npm i -g getskillet
npx getskillet --help
# macOS / Linux (Homebrew)
brew install echohello-dev/tap/sklt
# Windows (winget)
winget install echohello-dev.sklt
# Container
docker run --rm ghcr.io/echohello-dev/skillet --help
# Static binary — download from GitHub Releases
# https://github.com/echohello-dev/skillet/releasesAll install methods ship the same sklt binary. See docs/getting-started.md for the full install matrix and per-platform notes.
Quick start
# Scaffold an apm.yml in your project
mkdir my-agent-skills && cd my-agent-skills
sklt init
# Add a skill from any supported source
sklt add anthropics/skills
# Or declare everything up front and install in one shot
echo 'dependencies:
apm:
- anthropics/skills/skills/frontend-design
- oci://ghcr.io/your-org/team-skills:v1' >> apm.yml
sklt install
# Verify what's on disk
sklt findSee docs/usage.md for the full command reference, manifest schema, and source format guide.
Commands
| Command | Description |
| --- | --- |
| sklt find [query] | Search discovered local skills |
| sklt init [dir] | Scaffold a SKILL.md |
| sklt add <source> | Install skills from a source |
| sklt install | Install every dependency in apm.yml |
| sklt check | (in progress) Detect upstream changes |
| sklt update | (in progress) Refresh refs and reinstall |
| sklt generate-lock | Regenerate skillet.lock.yaml from disk |
Run sklt --help for the full list.
Source formats
Skillet resolves any of these as a sklt add or apm.yml source:
- Git —
owner/repo,owner/repo#v1.0.0, fullhttps://orgit@URLs - OCI —
oci://registry/repository:tagoroci://registry/repository@sha256:<digest> - HTTP archive —
.zip,.tar.gz,.tgz(with traversal and size safety checks) - Local —
./path,../path,/abs/path
See docs/usage.md#source-formats for details.
Supported agents
| Agent | Project scope | Global scope |
| --- | --- | --- |
| Claude Code | .claude/skills | ~/.claude/skills |
| Codex | .codex/skills | ~/.codex/skills |
| OpenCode | .opencode/skills | ~/.opencode/skills |
| Cursor | .cursor/skills | ~/.cursor/skills |
| Windsurf | .windsurf/skills | ~/.windsurf/skills |
APM target: and targets: values map to these names. Unknown targets (e.g. gemini, kiro, copilot) are silently ignored — Skillet is skills-only.
OCI artifact spec
oci:// artifacts must use:
- Artifact type:
application/vnd.skillet.skill.v1+tar - At least one tar layer containing a single skill directory with
SKILL.md - Safe extraction — no path traversal
Tag-based refs are resolved to a manifest digest and recorded in skillet.lock.yaml for reproducibility.
Publishing example (conceptual):
tar -cf skill.tar <skill-dir>
oras push ghcr.io/<org>/<skill>:v1 \
--artifact-type application/vnd.skillet.skill.v1+tar \
skill.tar:application/vnd.oci.image.layer.v1.tarDevelopment
mise run install # install dependencies
mise run test # run vitest
mise run ci # test + npm publish dry-run
mise run dev -- --helpProject conventions live in AGENTS.md. Architecture decisions are in docs/adr/.
Documentation
- Getting Started — install and first project
- Usage — command reference, manifest schema, source formats
- Parity: Vercel CLI
- ADR-0001: APM Manifest Compliance
Distribution channels:
