From python3-development
Validates Python shebangs and PEP 723 metadata against dependency rules. Fixes incorrect patterns or adds blocks for standalone scripts with uv.
npx claudepluginhub jamie-bitflight/claude_skills --plugin python3-developmentThis skill uses the workspace's default tool permissions.
<file_paths>$ARGUMENTS</file_paths>
Validates Python shebangs against dependency requirements and PEP 723 inline script metadata. Fixes incorrect patterns or adds blocks for standalone scripts with external dependencies.
Creates self-contained Python scripts with inline PEP 723 dependencies for UV execution via `uv run`. Includes shebangs, templates, and examples for CLI apps and data tasks.
Runs Python scripts with uv supporting PEP 723 inline dependencies, temporary --with packages, and ephemeral uvx tools. Use for quick script execution without virtualenvs.
Share bugs, ideas, or general feedback.
<file_paths>$ARGUMENTS</file_paths>
The model validates Python shebangs against dependency requirements and ensures correct PEP 723 inline script metadata.
<file_paths/>
If file paths provided above:
If no arguments provided:
Pattern: #!/usr/bin/env python3
Conditions:
Reasoning: No dependency installation required, standard Python interpreter sufficient.
Pattern: #!/usr/bin/env python3
Conditions:
Reasoning: Dependencies installed via package manager, not script metadata.
Pattern: #!/usr/bin/env -S uv --quiet run --active --script
Conditions:
Reasoning: PEP 723 inline metadata declares dependencies, uv installs them automatically.
Pattern: No shebang line
Conditions:
Reasoning: Not intended for direct execution.
The shebang: #!/usr/bin/env -S uv --quiet run --active --script
| Component | Position | Purpose |
|---|---|---|
#!/usr/bin/env -S | Prefix | Shebang invoking env with -S flag for multiple arguments |
uv | Command | The uv binary on PATH |
--quiet | GLOBAL flag (before subcommand) | Suppresses progress output from uv |
run | Subcommand | Executes Python scripts with automatic environment management |
--active | run flag (after subcommand) | Prefer active virtual environment over isolated environment |
--script | run flag (after subcommand) | Indicates file contains PEP 723 inline script metadata |
uv [GLOBAL_FLAGS] SUBCOMMAND [SUBCOMMAND_FLAGS] [ARGS]
Global flags modify the uv binary behavior and MUST appear before the subcommand. Subcommand flags modify that specific subcommand's behavior and MUST appear after the subcommand.
Valid: uv --quiet run --active --script
Invalid: uv run --quiet --active --script (--quiet is global flag)
The model MUST reject these malformed shebangs:
#!/usr/bin/env -S uv run --quiet --active --script (--quiet in wrong position)#!/usr/bin/env -S uv --quiet run --script (missing --active)#!/usr/bin/env -S uv run --active --script (missing --quiet)#!/usr/bin/env -S uv --quiet --active run --script (--active in wrong position)All files with shebangs MUST have execute permission set.
chmod +x filename
Without execute bit, the shebang is ignored by the kernel.
For each file, output in this exact order:
Before (invalid - no external dependencies):
#!/usr/bin/env -S uv --quiet run --active --script
# /// script
# requires-python = ">=3.11"
# dependencies = []
# ///
from __future__ import annotations
import re
from pathlib import Path
After (corrected):
#!/usr/bin/env python3
from __future__ import annotations
import re
from pathlib import Path
typer>=0.12.0 ships with rich and shellingham as bundled transitive dependencies. When typer appears in a PEP 723 dependencies block, the model MUST NOT add rich or shellingham as separate entries.
# WRONG — rich is transitively installed by typer
# dependencies = [
# "typer>=0.21.2",
# "rich>=13.0.0", # ← redundant, DO NOT ADD
# ]
# CORRECT — typer only; rich and shellingham arrive automatically
# dependencies = [
# "typer>=0.21.2",
# ]
This rule applies regardless of how much rich API surface the script uses (Console, Panel, Progress, Table, etc.). The import works because typer guarantees rich's presence.
SOURCE: "By default, typer comes with rich and shellingham." — https://typer.tiangolo.com/#installation (accessed 2026-02-22)
Before (invalid - missing PEP 723):
#!/usr/bin/env python
from __future__ import annotations
from pathlib import Path
from typing import Annotated
import typer
from rich.console import Console
from rich.panel import Panel
After (corrected):
#!/usr/bin/env -S uv --quiet run --active --script
# /// script
# requires-python = ">=3.11"
# dependencies = [
# "typer>=0.21.2",
# ]
# ///
from __future__ import annotations
from pathlib import Path
from typing import Annotated
import typer
from rich.console import Console
from rich.panel import Panel