Turn any documentation website into a Claude Agent Skill.
site2skill is a tool that scrapes a documentation website, converts it to Markdown, and packages it as a Claude Agent Skill (ZIP format) with a proper SKILL.md entry point.
Agent Skills are dynamically loaded knowledge modules that Claude uses on demand. They work across Claude Code, Claude apps, and the API.
pip install site2skillThis installs the stable Python version (0.1.x), which requires Python 3.10+ and wget.
A rewrite in Rust is available as a beta. It's ~4x faster, has no wget dependency, and ships as a single binary.
pip install --pre site2skillOr pin the version:
pip install 'site2skill==0.2.0b1'Verify you're running the Rust version:
site2skill --version
# site2skill 0.2.0-beta.1The stable version has no --version flag, so if you see a version string, you're on the Rust beta.
To go back to stable:
pip install 'site2skill<0.2'# Beta (Rust)
uvx --pre site2skill <URL> <SKILL_NAME>
# Stable (Python, from legacy branch)
uvx --from 'git+https://github.com/laiso/site2skill@legacy' site2skill <URL> <SKILL_NAME>git clone https://github.com/laiso/site2skill.git
cd site2skill
cargo build --release
./target/release/site2skill --help# Basic usage
site2skill <URL> <SKILL_NAME>
# Example: Create a skill for PAY.JP
site2skill https://docs.pay.jp/v1/ payjp
# Example: Create a skill for uv documentation
site2skill https://docs.astral.sh/uv/ uv-docs
# Target specific agent (sets default output directory)
site2skill <URL> <SKILL_NAME> --target claude-desktopsite2skill <URL> <SKILL_NAME> [options]
Options:
--target Target agent (claude|claude-desktop|cursor|gemini|codex). Sets default output directory
--output, -o Base output directory for skill structure (overrides target default)
--skill-output Output directory for .skill file (default: .)
--temp-dir Temporary directory for processing (default: build)
--max-concurrency Maximum number of HTTP requests to run at once (default: 10)
--skip-fetch Skip the download step (use existing files in temp dir)
--clean Clean up temporary directory after completion
--version Print version (Rust beta only)
- Fetch: Crawls the documentation site with a built-in async HTTP crawler (robots.txt compliant, concurrent).
- Convert: Converts HTML pages to Markdown using scraper and htmd.
- Normalize: Resolves relative links to absolute URLs.
- Validate: Checks the skill structure and size limits.
- Package: Generates
SKILL.mdand zips everything into a.skillfile.
The tool generates a skill directory in .claude/skills/<skill_name>/ containing:
<skill_name>/
├── SKILL.md # Entry point with usage instructions
├── references/ # Markdown documentation files (preferred)
└── scripts/
└── search_docs.py # Search tool for documentation
Additionally, a <skill_name>.skill file (ZIP archive) is created in the current directory when targeting claude-desktop.
Legacy note: older skills may use docs/ instead of references/. The search tool and validator
now support both, preferring references/ when present.
Each generated skill includes a Python search script (requires Python 3 at runtime):
python scripts/search_docs.py "<query>"
python scripts/search_docs.py "<query>" --json --max-results 5MIT