Read remote skills (SKILL.md + references/ / scripts/ / templates/ / assets/) without installing them. Built for AI agents that need to peek at a skill before deciding to install.
brew install fdarian/tap/rskills
# or one-shot, no install:
npx rskills-cli <command># Fetch SKILL.md (raw markdown to stdout)
rskills read skills-sh://vercel-labs/json-render/json-render-react
rskills read github://anthropics/skills/skills/pdf
rskills read https://example.com/some/SKILL.md
# Fetch a sub-resource (references, scripts, templates, assets, or any .md sibling)
rskills read github://anthropics/skills/skills/pdf/reference.md
rskills read skills-sh://vercel-labs/skills/references/foo.md
rskills read claude://my-skill
rskills read claude://my-skill/references/api.md
rskills read --raw claude://my-skill # literal file, no preprocessing# List top-level entries of a skill
rskills ls github://anthropics/skills/skills/xlsx
rskills ls skills-sh://anthropics/skills/xlsx
# List a subdirectory within a skill
rskills ls github://anthropics/skills/skills/xlsx/scripts
rskills ls skills-sh://anthropics/skills/xlsx/scripts
rskills ls claude://my-skillls mirrors Anthropic's ls/Glob tools — it lists directory entries, while read fetches file content. Reading a directory path with read will error and suggest using ls instead.
On an interactive terminal (no --source, --format, --json, or --token-*), search opens a live Ink picker: type to search, ↑/↓ to navigate, Enter for an action menu (read SKILL.md / copy identifier / copy install command / open on skills.sh), Esc to quit. Skills-sh only.
rskills search # open interactive picker (TTY only)
rskills search react # pre-fill query in picker (TTY) or emit structured output (non-TTY)
rskills search react --source skills-sh --limit 5
rskills search https://mintlify.com/docs --source well-known
rskills search react --limit 5 --format json # structured output, skip picker<source>://<identifier>[/<subpath>]
| Source | Example | Search | Read | List |
|---|---|---|---|---|
skills-sh |
skills-sh://vercel-labs/json-render/json-render-react |
✓ | ✓ | ✓ |
github |
github://anthropics/skills/skills/pdf |
— | ✓ | ✓ |
well-known |
well-known://mintlify.com/docs |
✓ | ✓ | ✓ (requires files array in index) |
https |
https://example.com/SKILL.md (must end in .md) |
— | ✓ | — |
claude |
claude://my-skill |
— | ✓ (local) | ✓ |
Local claude skills resolve under <cwd>/.claude/skills/ then ~/.claude/skills/ (first match wins). By default, read strips YAML frontmatter and runs inline !`shell` / ```! blocks (respects shell: frontmatter and disableSkillShellExecution in settings). Use read --raw for the literal file.
No subpath → fetches SKILL.md. With a subpath, rskills detects the boundary heuristically:
- Known subdir (
references,scripts,templates,assets,SKILL.md) — splits there - Extension on last segment — that segment is the subpath
- Otherwise the whole path is the identifier
readprints raw markdown to stdout regardless of--format. Pipe it anywhere.lsprints structured{ entries: [{ name, type }] }— TOON by default, switchable with--format json|yaml|md|jsonl.searchopens an interactive live picker on a TTY; otherwise prints structured results ({ identifier, name, installs?, source }) — TOON by default, switchable with--format json|yaml|md|jsonl.- Errors exit with non-zero status and print a short message.
- Reading a directory path with
readexits non-zero with a message pointing torskills ls.
rskills inherits incur's agent-friendly defaults:
--llms/--llms-full— print a command manifest agents can read--filter-output <keys>— narrow structured output to specific fields--format <toon|json|yaml|md|jsonl>— pick the output serialization--token-count,--token-limit,--token-offset— token-aware output
Run rskills --help for the full list.