name: uv-ruff-only-tooling-migration description: Migrate a Python repo from Poetry/Black to UV + Ruff-only (CI, pre-commit, pyproject, docs). license: MIT compatibility: opencode,claude metadata: created_at: "2026-01-29T05:46:15.157Z" updated_at: "2026-01-29T05:46:15.157Z" version: "1"
When To Use
- Repo has
uv.lock(or wants UV). - User wants no Poetry and/or no Black.
Steps
- Remove Poetry artifacts
- Delete
poetry.lock. - Remove Poetry commands/docs references.
- Delete
- Make
pyproject.tomlUV-native- Ensure PEP 621
[project]is source of truth. - Prefer
[dependency-groups]fordev/docstool deps. - Add missing runtime deps surfaced by imports/tests.
- Run
uv lockto regenerateuv.lock.
- Ensure PEP 621
- Pre-commit
- Remove Black hook.
- Add
ruff-formatandruffhooks. - Ensure hooks run via the repo’s standard workflow.
- CI
- Replace Black check with
uv run ruff format --check. - Lint with
uv run ruff check. - Use
uv sync --devanduv pip install -e .. - If needed, temporarily run a stable smoke suite while fixing failing tests.
- Replace Black check with
- Docs/agent guidance
- Update
AGENTS.md,README.md, and contrib/dev docs to reference UV + Ruff only.
- Update
Verify
uv sync --devuv pip install -e .uv run ruff format --check src testsuv run ruff check src testsuv run pytest(or smoke suite if full is broken)
Manual notes
This section is preserved when the skill is updated. Put human notes, caveats, and exceptions here.