migration-patterns-plugin/skills/black-to-ruff-format/SKILL.md
Migrate Python formatting from black to ruff-format. Use when psf/black is in .pre-commit-config.yaml or [tool.black] exists in pyproject.toml.
npx skillsauth add laurigates/claude-plugins black-to-ruff-formatInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Migrate from black to ruff format — Ruff's drop-in Black-compatible formatter written in Rust (~35x faster). Replaces the psf/black pre-commit hook, migrates [tool.black] configuration, and removes black from dev dependencies.
| Use this skill when... | Keep black when... |
|------------------------|-------------------|
| .pre-commit-config.yaml contains psf/black | Team has strong preference for black's exact output |
| [tool.black] exists in pyproject.toml | CI uses black --check specifically by name |
| Repo already uses ruff for linting | Project uses black's API in build scripts |
| Wanting to consolidate formatting under ruff | |
find . -maxdepth 1 -name '.pre-commit-config.yaml'find . -maxdepth 1 -name 'pyproject.toml'find . -maxdepth 1 -name 'ruff.toml'| Parameter | Description |
|-----------|-------------|
| --check-only | Report what would change without modifying files |
| --fix | Apply migration automatically |
Execute this black-to-ruff-format migration:
.pre-commit-config.yaml and locate psf/black entries.pyproject.toml and extract the [tool.black] section.black → ruff-format migration audit
=====================================
pre-commit hook: psf/black found at rev <rev>
pyproject.toml: [tool.black] section found (line-length=<N>, target-version=<X>)
ruff already: EXISTS / NOT PRESENT
If --check-only, stop here.Remove the psf/black repo block. If ruff-pre-commit is already present, add the ruff-format hook ID. Otherwise add the full ruff-pre-commit repo block with both ruff and ruff-format hooks:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.1 # use latest stable ruff version
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
If ruff-pre-commit already exists but only has the ruff linter hook, add the ruff-format hook ID under the same repo block.
Convert black configuration to ruff format config:
| black key | ruff equivalent | Notes |
|-----------|----------------|-------|
| line-length | [tool.ruff] line-length | Shared with linter |
| target-version | [tool.ruff] target-version | Shared with linter |
| skip-string-normalization | [tool.ruff.format] quote-style = "preserve" | |
| skip-magic-trailing-comma | [tool.ruff.format] skip-magic-trailing-comma = true | |
| preview | [tool.ruff.format] preview = true | |
Remove the [tool.black] section. Merge settings into [tool.ruff] and [tool.ruff.format] sections (create if absent, merge if existing).
Remove black from dev/lint dependencies:
# With uv
uvx --from uv uv remove --dev black 2>/dev/null || true
If not using uv, note it for manual removal.
Run the new hook to confirm it works:
pre-commit run ruff-format --all-files
If it exits 0, the migration is complete. If it produces diffs, this is expected on first run (ruff format may reformat some files differently from black). Commit the reformatted files as part of the migration.
Print a summary of changes:
black → ruff-format migration complete
=======================================
.pre-commit-config.yaml UPDATED (removed psf/black, added ruff-format hook)
pyproject.toml UPDATED ([tool.black] → [tool.ruff.format])
Note: ruff-format is Black-compatible (same defaults), but may reformat a small
number of files. Review the diff and include these reformatted files in the
migration commit.
Files to stage:
git add .pre-commit-config.yaml pyproject.toml
git add <any reformatted .py files>
| Context | Command |
|---------|---------|
| Audit only | /migration-patterns:black-to-ruff-format --check-only |
| Apply migration | /migration-patterns:black-to-ruff-format --fix |
| Verify after migration | pre-commit run ruff-format --all-files |
| Check format directly | uvx ruff format --check . |
| Item | Value |
|------|-------|
| ruff format docs | https://docs.astral.sh/ruff/formatter/ |
| Black compatibility | ruff format is designed as a Black drop-in with ~99.9% compatible output |
| Config section | [tool.ruff.format] in pyproject.toml |
| Pre-commit hook | ruff-format in astral-sh/ruff-pre-commit |
/migration-patterns:flake8-to-ruff — Migrate flake8/isort linting to ruff/migration-patterns:mypy-to-ty — Migrate mypy to ty/configure:repo — End-to-end repo config drivertesting
Verify accumulated bug claims at upstream HEAD and dedup against trackers before filing issues. Use when filing upstream reports from backlogs, audit docs, or git-history findings.
documentation
Gate outward-bound text (upstream issues, docs, PR bodies) through isolated haiku fresh-reader critique before publishing. Use when an artifact must survive a reader with zero project context.
tools
Suggest improvements to SKILL.md content, descriptions, or tool config from eval results. Use when raising pass rates, fixing triggering, or iterating on a skill after evaluation.
tools
deadbranch CLI for stale-branch cleanup — dry-run preview, TUI or non-interactive delete, protects main/develop/WIP. Use when asked to clean up branches, prune branches, or remove stale branches.