К основному содержанию
скилл CX Codex

ruff-linting — скилл для Claude Code: что делает и как установить

Скилл учит агента запускать ruff check, настраивать правила линтера в pyproject.toml и безопасно исправлять ошибки в коде на Python.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add laurigates/claude-plugins --skill ruff-linting -a claude-code
Открыть на GitHub

Что делает ruff-linting

Скилл даёт модели чёткие инструкции по поиску дефектов в коде на Python через ruff check. Он объясняет, как заменить связку из Flake8 и pylint единым быстрым набором проверок, выбрать категории правил вроде E, F или UP и выгрузить отчёты для GitHub Actions или GitLab. В арсенале агента задействованы команды Bash для ruff и uv, а также чтение и правка файлов репозитория.

Критическое правило вызова — всегда передавать путь к целевой директории аргументом, а не переходить в неё командой cd. Такой подход оставляет запуск в корне репозитория и предотвращает сбои при параллельной обработке путей. Для форматирования кода этот навык не предназначен: стилизацию исходников автор вынес в отдельный скилл ruff-formatting.

Какие задачи решает

  • запустить ruff check с автоисправлением ошибок через флаг --fix
  • настроить секцию [tool.ruff.lint] и исключения per-file-ignores в pyproject.toml
  • получить объяснение конкретного кода ошибки вроде F401 или B006
  • встроить проверку качества Python-кода в GitHub Actions и хуки pre-commit

Примеры запросов агенту

  • Проверь файлы в папке src/ через ruff и покажи diff безопасных правок
  • Настрой в pyproject.toml категории правил pyflakes и bugbear, исключив E501
  • Выведи справку по правилу F401 и подскажи, как отключить его для __init__.py

Как установить ruff-linting

1Через Skills CLI (Vercel)

npx skills add laurigates/claude-plugins --skill ruff-linting -a claude-code

2Вручную: положить файлы

~/.claude/skills/ruff-linting/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/ruff-linting/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о ruff-linting

Как установить ruff-linting в Claude Code?

Выполните в терминале команду npx skills add laurigates/claude-plugins --skill ruff-linting -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/ruff-linting/SKILL.md.

Чем ruff-linting отличается от ruff-formatting?

Этот скилл сфокусирован только на линтинге, анализе багов и исправлении нарушений через ruff check. Стилистическое форматирование кода и вызов команды ruff format обрабатывает скилл ruff-formatting.

Можно ли запускать этот скилл вручную?

Нет, параметр user-invocable установлен в false. Агент подтягивает правила скилла сам, когда вы просите проанализировать код на Python или отредактировать конфигурацию линтера.

Исходный текст

SKILL.md · MIT
---
created: 2025-12-16
modified: 2026-05-29
reviewed: 2026-05-29
name: ruff-linting
description: Python linting with ruff. Fast linting, rule selection, auto-fixing, and config. Use when checking Python code quality, enforcing standards, or finding bugs.
user-invocable: false
allowed-tools: Bash(ruff *), Bash(python *), Bash(uv *), Read, Edit, Write, Grep, Glob
---

# ruff Linting

Expert knowledge for using `ruff check` as an extremely fast Python linter with comprehensive rule support and automatic fixing.

## When to Use This Skill

| Use this skill when... | Use a focused sibling instead when... |
|---|---|
| Running `ruff check`, selecting rule sets, or auto-fixing lint violations | Running `ruff format` to enforce code style — use ruff-formatting |
| Configuring `[tool.ruff.lint]` rules and per-file ignores in pyproject.toml | Comparing ruff against type-checkers and formatters at a stack level — use python-code-quality |
| Wiring ruff into editors, pre-commit, CI/CD, Docker, or build systems | See the quick forms in [CI/CD Integration](#cicd-integration) below; full editor/CI/Docker/migration recipes in [REFERENCE.md](REFERENCE.md) |
| Migrating from Flake8/pylint/isort/pyupgrade to ruff's combined rule set | Running `ruff format` to enforce code style — use ruff-formatting |

## Core Expertise

**ruff Advantages**
- Extremely fast (10-100x faster than Flake8)
- Written in Rust for performance
- Replaces multiple tools (Flake8, pylint, isort, pyupgrade, etc.)
- Auto-fix capabilities for many rules
- Compatible with existing configurations
- Over 800 built-in rules

## Basic Usage

### Simple Linting
```bash
# Lint current directory
ruff check

# Lint specific files or directories
ruff check path/to/file.py
ruff check src/ tests/

# IMPORTANT: Pass directory as parameter to stay in repo root
# ✅ Good
ruff check services/orchestrator

# ❌ Bad
cd services/orchestrator && ruff check
```

### Auto-Fixing
```bash
# Show what would be fixed (diff preview)
ruff check --diff

# Apply safe automatic fixes
ruff check --fix

# Fix specific files
ruff check --fix src/main.py

# Fix with preview (see changes before applying)
ruff check --diff services/orchestrator
ruff check --fix services/orchestrator
```

### Output Formats
```bash
# Default output
ruff check

# Show statistics
ruff check --statistics

# JSON output for tooling
ruff check --output-format json

# GitHub Actions annotations
ruff check --output-format github

# GitLab Code Quality report
ruff check --output-format gitlab

# Concise output
ruff check --output-format concise
```

## Rule Selection

### Common Rule Codes

| Code | Description | Example Rules |
|------|-------------|---------------|
| `E` | pycodestyle errors | E501 (line too long) |
| `F` | Pyflakes | F401 (unused import) |
| `W` | pycodestyle warnings | W605 (invalid escape) |
| `B` | flake8-bugbear | B006 (mutable default) |
| `I` | isort | I001 (unsorted imports) |
| `UP` | pyupgrade | UP006 (deprecated types) |
| `SIM` | flake8-simplify | SIM102 (nested if) |
| `D` | pydocstyle | D100 (missing docstring) |
| `N` | pep8-naming | N806 (variable naming) |
| `S` | flake8-bandit (security) | S101 (assert usage) |
| `C4` | flake8-comprehensions | C400 (unnecessary generator) |

### Selecting Rules
```bash
# Select specific rules at runtime
ruff check --select E,F,B,I

# Extend default selection
ruff check --extend-select UP,SIM

# Ignore specific rules
ruff check --ignore E501,E402

# Show which rules would apply
ruff rule --all

# Explain a specific rule
ruff rule F401
```

### Rule Queries
```bash
# List all available rules
ruff rule --all

# Search for rules by pattern
ruff rule --all | grep "import"

# Get detailed rule explanation
ruff rule F401
# Output: unused-import (F401)
#   Derived from the Pyflakes linter.
#   Checks for unused imports.

# List all linters
ruff linter

# JSON output for automation
ruff rule F401 --output-format json
```

## Configuration

### pyproject.toml
```toml
[tool.ruff]
# Line length limit (same as Black)
line-length = 88

# Target Python version
target-version = "py311"

# Exclude directories
exclude = [
    ".git",
    ".venv",
    "__pycache__",
    "build",
    "dist",
]

[tool.ruff.lint]
# Enable specific rule sets
select = [
    "E",   # pycodestyle errors
    "F",   # Pyflakes
    "B",   # flake8-bugbear
    "I",   # isort
    "UP",  # pyupgrade
    "SIM", # flake8-simplify
]

# Disable specific rules
ignore = [
    "E501",  # Line too long (handled by formatter)
    "B008",  # Function calls in argument defaults
]

# Allow automatic fixes
fixable = ["ALL"]
unfixable = ["B"]  # Don't auto-fix bugbear rules

# Per-file ignores
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401", "E402"]
"tests/**/*.py" = ["S101"]  # Allow assert in tests
```

### ruff.toml (standalone)
```toml
# Same options as pyproject.toml but without [tool.ruff] prefix
line-length = 100
target-version = "py39"

[lint]
select = ["E", "F", "B"]
ignore = ["E501"]

[lint.isort]
known-first-party = ["myapp"]
force-single-line = true
```

## Advanced Usage

Per-file config overrides, targeted rule checks, and changed-files-only / parallel
invocation patterns are in [references/command-recipes.md](references/command-recipes.md).

## CI/CD Integration

Quick form — lint with PR annotations on GitHub Actions:

```yaml
# .github/workflows/lint.yml
name: Lint
on: [push, pull_request]
jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/ruff-action@v3
        with:
          args: 'check --output-format github'
```

Quick form — pre-commit hook:

```yaml
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.14.0
    hooks:
      - id: ruff-check
        args: [--fix]
      - id: ruff-format
```

For the full integration recipes — editor setup (VS Code, Neovim, Zed, Helix), the advanced pre-commit config, GitLab/CircleCI/Jenkins, Make/Just/Task/tox, Docker, LSP server settings, and Flake8/Black/pylint migration guides — see [REFERENCE.md](REFERENCE.md).

## Common Patterns

Recipes for finding specific issues, gradual adoption, and refactoring support are
in [references/command-recipes.md](references/command-recipes.md).

## Plugin Configuration

Per-plugin `[tool.ruff.lint.<plugin>]` settings (isort, flake8-quotes, pydocstyle,
pylint) are in [references/plugin-configuration.md](references/plugin-configuration.md).

## Best Practices

**When to Use ruff check**
- Code quality enforcement
- Pre-commit validation
- CI/CD pipelines
- Refactoring assistance
- Security scanning
- Import organization

**Critical: Directory Parameters**
- ✅ **Always** pass directory as parameter: `ruff check services/orchestrator`
- ❌ **Never** use cd: `cd services/orchestrator && ruff check`
- Reason: Parallel execution, clearer output, tool compatibility

**Rule Selection Strategy**
1. Start minimal: `select = ["E", "F"]` (errors + pyflakes)
2. Add bugbear: `select = ["E", "F", "B"]`
3. Add imports: `select = ["E", "F", "B", "I"]`
4. Add pyupgrade: `select = ["E", "F", "B", "I", "UP"]`
5. Consider security: `select = ["E", "F", "B", "I", "UP", "S"]`

**Fixable vs Unfixable**
- Mark uncertain rules as `unfixable` to review manually
- Common unfixables: `B` (bugbear), `F` (pyflakes F401)
- Let ruff fix safe rules: `I` (isort), `UP` (pyupgrade)

**Common Mistakes to Avoid**
- Using `cd` instead of passing directory parameter
- Enabling ALL rules immediately (use gradual adoption)
- Not using `--diff` before `--fix`
- Ignoring rule explanations (`ruff rule <code>`)
- Not configuring per-file ignores for special cases

## Quick Reference

### Essential Commands

```bash
# Basic operations
ruff check                          # Lint current directory
ruff check path/to/dir              # Lint specific directory
ruff check --diff                   # Show fix preview
ruff check --fix                    # Apply fixes

# Rule management
ruff rule --all                     # List all rules
ruff rule F401                      # Explain rule F401
ruff linter                         # List all linters

# Output formats
ruff check --statistics             # Show violation counts
ruff check --output-format json     # JSON output
ruff check --output-format github   # GitHub Actions format

# Selection
ruff check --select E,F,B          # Select rules
ruff check --ignore E501           # Ignore rules
ruff check --extend-select UP      # Extend selection
```

### Configuration Hierarchy

1. Command-line arguments (highest priority)
2. `ruff.toml` in current directory
3. `pyproject.toml` in current directory
4. Parent directory configs (recursive)
5. User config: `~/.config/ruff/ruff.toml`

### Common Rule Combinations

```bash
# Minimal safety
ruff check --select E,F

# Good default
ruff check --select E,F,B,I

# Comprehensive
ruff check --select E,F,B,I,UP,SIM

# Security-focused
ruff check --select E,F,B,S

# Docstring enforcement
ruff check --select D --config '[lint.pydocstyle]\nconvention = "google"'
```

This makes ruff check the preferred tool for fast, comprehensive Python code linting.

© laurigates · MIT · laurigates/claude-plugins

Похожие скиллы

Все скиллы по теме «Код-ревью и рефакторинг» →
improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. 1 163 035установок tdd Matt Pocock Скилл управляет циклом красный-зелёный в TDD: проверяет, что тесты пишутся до кода, держит их на уровне публичных интерфейсов и не завязывает на внутреннюю структуру. 1 141 062установок triage Matt Pocock Скилл проводит issue и внешние PR через роли триажа, проверку и подготовку брифа для агента. Подойдёт мейнтейнеру, который разбирает очередь задач. 990 453установок codebase-design Matt Pocock Скилл помогает проектировать модули с небольшим интерфейсом и скрытой внутри сложностью. Подходит для рефакторинга, тестируемости и поиска чистого seam. 850 344установок code-review Matt Pocock Проверяет изменения от выбранной точки по стандартам репозитория и требованиям задачи. Нужен для ревью ветки, PR или незавершённой работы. 789 521установок implement Matt Pocock Выполняет задачу по спецификации или тикетам, ведёт работу через тесты и завершает её ревью с коммитом. Подходит для задач, где нужен дисциплинированный цикл разработки. 774 700установок

Из того же набора6

Спонсоры проекта

Компании, которые помогают держать аналитику открытой