Skip to main content

Development setup

You need Python 3.10 or newer and uv. Node.js is only needed for the documentation site and for CI's node --check on the bench script.

git clone https://github.com/chapeee/skillprinter
cd skillprinter
uv sync --all-extras # core, probe and ast-grep extras, dev tools
uv run playwright install chromium # only for browser tests and the probe

uv sync --all-extras installs the dev group too: mypy, pytest, ruff, and the PyYAML and jsonschema type stubs.

Use your working copy everywhere​

To try your clone as a global skillgendev command in other projects (like npm link):

scripts/install-local.sh # macOS, Linux
.\scripts\install-local.ps1 # Windows PowerShell (add -RunTests to run all checks)

Code edits apply at once, because the install is editable. Rerun the script after changing dependencies or pyproject.toml. See Installation for its options.

Repository layout​

src/skillgen/ the package (see Architecture)
claude/ /skillgendev command, route-analyzer agent, driver skill
hintpacks/ framework knowledge as YAML: folders/, routers/
tests/ unit tests, tests/fixtures/ (example apps), tests/bench/ (test page)
docs/ spec.md, decisions.md
scripts/ install-local.ps1 / install-local.sh
website/ this documentation site and the landing page
.github/workflows/ ci.yml (library checks), docs.yml (this site)

Tooling​

ToolCommandSettings
ruff (lint)uv run ruff check .Line length 100, Python 3.10 target, Google docstrings, many rule sets including T20 (no print), BLE (no blind except), ANN and D
ruff (format)uv run ruff format .Double quotes
mypyuv run mypystrict = true over src and tests
pytestuv run pytestBrowser and Claude tests excluded by default

cli.py is exempt from the no-print rule. Tests are exempt from docstring and annotation rules.

Running skillgendev from the clone​

uv run skillgendev doctor
uv run skillgendev routes --all --no-claude --root ../my-app

--root points any command at another project. It goes after the command name, like every shared option. Avoid running commands against tests/fixtures/ directly: they would write a .skillgendev/ workspace into the fixtures. The tests copy fixtures to a temporary folder first.