Skip to content
Back to skills

Tooling Python

ASecurity

Python audit tooling: ruff (linting), mypy (types), bandit (SAST), pip-audit (CVEs), radon (complexity), vulture (dead code), mutmut (mutations). Use during audit phases for Python projects.

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 12, 2026
code-qualitypythongoshellbashdjangotestingsecurity

Works with

  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill tooling-python --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tooling Python?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tooling Python
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-tooling-python/badge)](https://www.skillsdirectory.com/skills/aibot88-tooling-python)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tooling-python
description: "Python audit tooling: ruff (linting), mypy (types), bandit (SAST), pip-audit (CVEs), radon (complexity), vulture (dead code), mutmut (mutations). Use during audit phases for Python projects."
---

# Python Audit Tooling

Запуск SAST/quality tools для Python проектов.

## Когда применять

- В audit phases для Python проектов
- После того как `language-detector` определил Python в проекте
- Tools проверены на наличие через `command -v <tool>`

## Tools

### Ruff (linting)

```bash
ruff check . --output-format=json > /tmp/ruff.json 2>/dev/null
```

Установка если нет: `pip install ruff` (recommended) или через `pre-commit`.

Парсить:
- Errors (severity: HIGH-MEDIUM зависит от rule)
- Warnings (severity: LOW)
- Style issues (можно skip если есть formatter)

### MyPy (types)

```bash
mypy --no-incremental --strict --json-report /tmp/mypy-report . 2>/dev/null
```

Если strict ломает - попробовать без `--strict`:
```bash
mypy . --json-report /tmp/mypy-report 2>/dev/null
```

Findings по severity:
- `error` codes - HIGH/MEDIUM
- `note` codes - LOW

Common issues:
- Untyped function definitions in core modules
- `Any` types где должны быть конкретные
- Missing return type annotations

### Bandit (SAST)

```bash
bandit -r src/ -f json -o /tmp/bandit.json --skip B101 2>/dev/null
```

`--skip B101` пропускает `assert_used` - common false positive в Django.

Severity mapping:
- `HIGH` confidence + `HIGH` severity → CRITICAL
- `HIGH` + `MEDIUM` → HIGH
- `MEDIUM` + `MEDIUM` → MEDIUM
- Lower → LOW

Common findings:
- `subprocess_popen_with_shell_equals_true` (B602) - command injection
- `request_without_timeout` (B113)
- `hardcoded_password_string` (B105)

### Pip-audit (CVE check)

```bash
pip-audit --format=json --output=/tmp/pip-audit.json 2>/dev/null
```

Альтернатива: `safety check --json`

Парсить:
- Critical CVEs (CVSS >= 9.0) → BLOCKER (если в production deps)
- High CVEs → CRITICAL
- Medium → HIGH/MEDIUM
- Cross-reference с CISA KEV если возможно

### Radon (complexity)

```bash
# Cyclomatic complexity
radon cc -j -s . > /tmp/radon-cc.json 2>/dev/null

# Maintainability index
radon mi -j . > /tmp/radon-mi.json 2>/dev/null

# Halstead metrics  
radon hal -j . > /tmp/radon-hal.json 2>/dev/null
```

CC thresholds:
- A (1-5): excellent
- B (6-10): good
- C (11-20): acceptable
- D (21-30): high (HIGH finding)
- E (31-40): very high (CRITICAL finding)
- F (40+): critical (BLOCKER finding в hot path)

### Vulture (dead code)

```bash
vulture src/ --min-confidence 80 > /tmp/vulture.txt 2>/dev/null
```

`--min-confidence 80` - чтобы избежать false positives. Vulture часто триггерится на:
- Django ORM relations (used through introspection)
- Pytest fixtures (used by test runner)
- Click command handlers

Use confidence >= 80% only.

### Mutmut (mutation testing - DEEP MODE ONLY)

**Внимание**: медленный (часы для крупного проекта).

```bash
# Setup
mutmut run --paths-to-mutate=src/ --runner='pytest -x'

# Results
mutmut results > /tmp/mutmut-results.txt
mutmut html  # creates html/index.html
```

В deep mode:
- Запускать только на критичных модулях (не всё проект)
- Спросить пользователя подтверждение перед запуском (estimate time first)
- Если timeout > 4 hours - skip и пометить incomplete

### Detect-secrets

```bash
detect-secrets scan --all-files > /tmp/secrets-baseline.json
```

Если базовая история проекта содержит секреты - они попадут в `secrets-baseline.json`. Reviewer должен пересмотреть baseline манyally.

## Output

Сырые outputs в `docs/audit/<TS>/<phase>/tooling-output/python/`.

Парсинг JSON outputs в findings формате (см. `templates/finding.schema.json`).

## Tool unavailability

Если tool не установлен - **не падать**, документировать missing tool в audit report:

```markdown
## Missing tools (Python)

The following tools were not available; coverage of Python audit was reduced:

- bandit: not installed (`pip install bandit`)
- mutmut: not installed; mutation testing skipped
```

## Specific Django/DRF checks

Для Django проектов дополнительно:

```bash
# Django check command
python manage.py check --deploy 2>/dev/null

# Django security check
python manage.py check --tag security 2>/dev/null
```

Эти commands выявляют:
- DEBUG = True в production
- Missing security middleware
- Insecure SECRET_KEY
- HSTS settings

## Environment isolation

Если проект использует virtual env:
- `.venv/` или `venv/` - стандартные пути
- Активировать перед запуском tools (`source .venv/bin/activate`)
- Tools должны видеть установленные dependencies проекта (pip-audit, mypy особенно)

Files in this skill

  • SKILL.md5.2 KB
  • source.json707 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.