[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DR5Q0BXDAN7GTBSPA31SCN":3,"skill-same:01M6DR5Q0BXDAN7GTBSPA31SCN":102},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M6DR5Q0BXDAN7GTBSPA31SCN","modern-python",null,"Configures Python projects with modern tooling (uv, ruff, ty). Use when creating projects, writing standalone scripts, or migrating from pip\u002FPoetry\u002Fmypy\u002Fblack.","AntifragileTech\u002Fantifragile-claude-code","AntifragileTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F174357194?v=4","01M6DQCYMK4CDSQQAN0ZC72NTV","01M6DQCYS9YPW1WKMQ5TJMPQ43",9,"MIT","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29],"python","modern python","writing","projects","use","tooling","uv","ruff","ty","Poetry","black","scripts","2026-11-10 10:12:30",false,"---\nname: modern-python\ndescription: Configures Python projects with modern tooling (uv, ruff, ty). Use when creating projects, writing standalone scripts, or migrating from pip\u002FPoetry\u002Fmypy\u002Fblack.\n---\n\n# Modern Python\n\nGuide for modern Python tooling and best practices, based on [trailofbits\u002Fcookiecutter-python](https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fcookiecutter-python).\n\n## When to Use This Skill\n\n- Creating a new Python project or package\n- Setting up `pyproject.toml` configuration\n- Configuring development tools (linting, formatting, testing)\n- Writing Python scripts with external dependencies\n- Migrating from legacy tools (when user requests it)\n\n## When NOT to Use This Skill\n\n- **User wants to keep legacy tooling**: Respect existing workflows if explicitly requested\n- **Python \u003C 3.11 required**: These tools target modern Python\n- **Non-Python projects**: Mixed codebases where Python isn't primary\n\n## Anti-Patterns to Avoid\n\n| Avoid | Use Instead |\n|-------|-------------|\n| `[tool.ty]` python-version | `[tool.ty.environment]` python-version |\n| `uv pip install` | `uv add` and `uv sync` |\n| Editing pyproject.toml manually to add deps | `uv add \u003Cpkg>` \u002F `uv remove \u003Cpkg>` |\n| `hatchling` build backend | `uv_build` (simpler, sufficient for most cases) |\n| Poetry | uv (faster, simpler, better ecosystem integration) |\n| requirements.txt | PEP 723 for scripts, pyproject.toml for projects |\n| mypy \u002F pyright | ty (faster, from Astral team) |\n| `[project.optional-dependencies]` for dev tools | `[dependency-groups]` (PEP 735) |\n| Manual virtualenv activation (`source .venv\u002Fbin\u002Factivate`) | `uv run \u003Ccmd>` |\n| pre-commit | prek (faster, no Python runtime needed) |\n\n**Key principles:**\n- Always use `uv add` and `uv remove` to manage dependencies\n- Never manually activate or manage virtual environments—use `uv run` for all commands\n- Use `[dependency-groups]` for dev\u002Ftest\u002Fdocs dependencies, not `[project.optional-dependencies]`\n\n## Decision Tree\n\n```\nWhat are you doing?\n│\n├─ Single-file script with dependencies?\n│   └─ Use PEP 723 inline metadata (.\u002Freferences\u002Fpep723-scripts.md)\n│\n├─ New multi-file project (not distributed)?\n│   └─ Minimal uv setup (see Quick Start below)\n│\n├─ New reusable package\u002Flibrary?\n│   └─ Full project setup (see Full Setup below)\n│\n└─ Migrating existing project?\n    └─ See Migration Guide below\n```\n\n## Tool Overview\n\n| Tool | Purpose | Replaces |\n|------|---------|----------|\n| **uv** | Package\u002Fdependency management | pip, virtualenv, pip-tools, pipx, pyenv |\n| **ruff** | Linting AND formatting | flake8, black, isort, pyupgrade, pydocstyle |\n| **ty** | Type checking | mypy, pyright (faster alternative) |\n| **pytest** | Testing with coverage | unittest |\n| **prek** | Pre-commit hooks ([setup](.\u002Freferences\u002Fprek.md)) | pre-commit (faster, Rust-native) |\n\n### Security Tools\n\n| Tool | Purpose | When It Runs |\n|------|---------|--------------|\n| **shellcheck** | Shell script linting | pre-commit |\n| **detect-secrets** | Secret detection | pre-commit |\n| **actionlint** | Workflow syntax validation | pre-commit, CI |\n| **zizmor** | Workflow security audit | pre-commit, CI |\n| **pip-audit** | Dependency vulnerability scanning | CI, manual |\n| **Dependabot** | Automated dependency updates | scheduled |\n\nSee [security-setup.md](.\u002Freferences\u002Fsecurity-setup.md) for configuration and usage.\n\n## Quick Start: Minimal Project\n\nFor simple multi-file projects not intended for distribution:\n\n```bash\n# Create project with uv\nuv init myproject\ncd myproject\n\n# Add dependencies\nuv add requests rich\n\n# Add dev dependencies\nuv add --group dev pytest ruff ty\n\n# Run code\nuv run python src\u002Fmyproject\u002Fmain.py\n\n# Run tools\nuv run pytest\nuv run ruff check .\n```\n\n## Full Project Setup\nIf starting from scratch, ask the user if they prefer to use the Trail of Bits cookiecutter template to bootstrap a complete project with already preconfigured tooling.\n\n```bash\nuvx cookiecutter gh:trailofbits\u002Fcookiecutter-python\n```\n\n### 1. Create Project Structure\n\n```bash\nuv init --package myproject\ncd myproject\n```\n\nThis creates:\n```\nmyproject\u002F\n├── pyproject.toml\n├── README.md\n├── src\u002F\n│   └── myproject\u002F\n│       └── __init__.py\n└── .python-version\n```\n\n### 2. Configure pyproject.toml\n\nSee [pyproject.md](.\u002Freferences\u002Fpyproject.md) for complete configuration reference.\n\nKey sections:\n```toml\n[project]\nname = \"myproject\"\nversion = \"0.1.0\"\nrequires-python = \">=3.11\"\ndependencies = []\n\n[dependency-groups]\ndev = [{include-group = \"lint\"}, {include-group = \"test\"}, {include-group = \"audit\"}]\nlint = [\"ruff\", \"ty\"]\ntest = [\"pytest\", \"pytest-cov\"]\naudit = [\"pip-audit\"]\n\n[tool.ruff]\nline-length = 100\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"ALL\"]\nignore = [\"D\", \"COM812\", \"ISC001\"]\n\n[tool.pytest]\naddopts = [\"--cov=myproject\", \"--cov-fail-under=80\"]\n\n[tool.ty.terminal]\nerror-on-warning = true\n\n[tool.ty.environment]\npython-version = \"3.11\"\n\n[tool.ty.rules]\n# Strict from day 1 for new projects\npossibly-unresolved-reference = \"error\"\nunused-ignore-comment = \"warn\"\n```\n\n### 3. Install Dependencies\n\n```bash\n# Install all dependency groups\nuv sync --all-groups\n\n# Or install specific groups\nuv sync --group dev\n```\n\n### 4. Add Makefile\n\n```makefile\n.PHONY: dev lint format test build\n\ndev:\n\tuv sync --all-groups\n\nlint:\n\tuv run ruff format --check && uv run ruff check && uv run ty check src\u002F\n\nformat:\n\tuv run ruff format .\n\ntest:\n\tuv run pytest\n\nbuild:\n\tuv build\n```\n\n## Migration Guide\n\nWhen a user requests migration from legacy tooling:\n\n### From requirements.txt + pip\n\nFirst, determine the nature of the code:\n\n**For standalone scripts**: Convert to PEP 723 inline metadata (see [pep723-scripts.md](.\u002Freferences\u002Fpep723-scripts.md))\n\n**For projects**:\n```bash\n# Initialize uv in existing project\nuv init --bare\n\n# Add dependencies using uv (not by editing pyproject.toml)\nuv add requests rich  # add each package\n\n# Or import from requirements.txt (review each package before adding)\n# Note: Complex version specifiers may need manual handling\ngrep -v '^#' requirements.txt | grep -v '^-' | grep -v '^\\s*$' | while read -r pkg; do\n    uv add \"$pkg\" || echo \"Failed to add: $pkg\"\ndone\n\nuv sync\n```\n\nThen:\n1. Delete `requirements.txt`, `requirements-dev.txt`\n2. Delete virtual environment (`venv\u002F`, `.venv\u002F`)\n3. Add `uv.lock` to version control\n\n### From setup.py \u002F setup.cfg\n\n1. Run `uv init --bare` to create pyproject.toml\n2. Use `uv add` to add each dependency from `install_requires`\n3. Use `uv add --group dev` for dev dependencies\n4. Copy non-dependency metadata (name, version, description, etc.) to `[project]`\n5. Delete `setup.py`, `setup.cfg`, `MANIFEST.in`\n\n### From flake8 + black + isort\n\n1. Remove flake8, black, isort via `uv remove`\n2. Delete `.flake8`, `pyproject.toml [tool.black]`, `[tool.isort]` configs\n3. Add ruff: `uv add --group dev ruff`\n4. Add ruff configuration (see [ruff-config.md](.\u002Freferences\u002Fruff-config.md))\n5. Run `uv run ruff check --fix .` to apply fixes\n6. Run `uv run ruff format .` to format\n\n### From mypy \u002F pyright\n\n1. Remove mypy\u002Fpyright via `uv remove`\n2. Delete `mypy.ini`, `pyrightconfig.json`, or `[tool.mypy]`\u002F`[tool.pyright]` sections\n3. Add ty: `uv add --group dev ty`\n4. Run `uv run ty check src\u002F`\n\n## Quick Reference: uv Commands\n\n| Command | Description |\n|---------|-------------|\n| `uv init` | Create new project |\n| `uv init --package` | Create distributable package |\n| `uv add \u003Cpkg>` | Add dependency |\n| `uv add --group dev \u003Cpkg>` | Add to dependency group |\n| `uv remove \u003Cpkg>` | Remove dependency |\n| `uv sync` | Install dependencies |\n| `uv sync --all-groups` | Install all dependency groups |\n| `uv run \u003Ccmd>` | Run command in venv |\n| `uv run --with \u003Cpkg> \u003Ccmd>` | Run with temporary dependency |\n| `uv build` | Build package |\n| `uv publish` | Publish to PyPI |\n\n### Ad-hoc Dependencies with `--with`\n\nUse `uv run --with` for one-off commands that need packages not in your project:\n\n```bash\n# Run Python with a temporary package\nuv run --with requests python -c \"import requests; print(requests.get('https:\u002F\u002Fhttpbin.org\u002Fip').json())\"\n\n# Run a module with temporary deps\nuv run --with rich python -m rich.progress\n\n# Multiple packages\nuv run --with requests --with rich python script.py\n\n# Combine with project deps (adds to existing venv)\nuv run --with httpx pytest  # project deps + httpx\n```\n\n**When to use `--with` vs `uv add`:**\n- `uv add`: Package is a project dependency (goes in pyproject.toml\u002Fuv.lock)\n- `--with`: One-off usage, testing, or scripts outside a project context\n\nSee [uv-commands.md](.\u002Freferences\u002Fuv-commands.md) for complete reference.\n\n## Quick Reference: Dependency Groups\n\n```toml\n[dependency-groups]\ndev = [\"ruff\", \"ty\"]\ntest = [\"pytest\", \"pytest-cov\", \"hypothesis\"]\ndocs = [\"sphinx\", \"myst-parser\"]\n```\n\nInstall with: `uv sync --group dev --group test`\n\n## Best Practices Checklist\n\n- [ ] Use `src\u002F` layout for packages\n- [ ] Set `requires-python = \">=3.11\"`\n- [ ] Configure ruff with `select = [\"ALL\"]` and explicit ignores\n- [ ] Use ty for type checking\n- [ ] Enforce test coverage minimum (80%+)\n- [ ] Use dependency groups instead of extras for dev tools\n- [ ] Add `uv.lock` to version control\n- [ ] Use PEP 723 for standalone scripts\n\n## Read Next\n\n- [migration-checklist.md](.\u002Freferences\u002Fmigration-checklist.md) - Step-by-step migration cleanup\n- [pyproject.md](.\u002Freferences\u002Fpyproject.md) - Complete pyproject.toml reference\n- [uv-commands.md](.\u002Freferences\u002Fuv-commands.md) - uv command reference\n- [ruff-config.md](.\u002Freferences\u002Fruff-config.md) - Ruff linting\u002Fformatting configuration\n- [testing.md](.\u002Freferences\u002Ftesting.md) - pytest and coverage setup\n- [pep723-scripts.md](.\u002Freferences\u002Fpep723-scripts.md) - PEP 723 inline script metadata\n- [prek.md](.\u002Freferences\u002Fprek.md) - Fast pre-commit hooks with prek\n- [security-setup.md](.\u002Freferences\u002Fsecurity-setup.md) - Security hooks and dependency scanning\n- [dependabot.md](.\u002Freferences\u002Fdependabot.md) - Automated dependency updates\n","# Modern Python\n\nGuide for modern Python tooling and best practices, based on [trailofbits\u002Fcookiecutter-python](https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fcookiecutter-python).\n\n## When to Use This Skill\n\n- Creating a new Python project or package\n- Setting up `pyproject.toml` configuration\n- Configuring development tools (linting, formatting, testing)\n- Writing Python scripts with external dependencies\n- Migrating from legacy tools (when user requests it)\n\n## When NOT to Use This Skill\n\n- **User wants to keep legacy tooling**: Respect existing workflows if explicitly requested\n- **Python \u003C 3.11 required**: These tools target modern Python\n- **Non-Python projects**: Mixed codebases where Python isn't primary\n\n## Anti-Patterns to Avoid\n\n| Avoid | Use Instead |\n|-------|-------------|\n| `[tool.ty]` python-version | `[tool.ty.environment]` python-version |\n| `uv pip install` | `uv add` and `uv sync` |\n| Editing pyproject.toml manually to add deps | `uv add \u003Cpkg>` \u002F `uv remove \u003Cpkg>` |\n| `hatchling` build backend | `uv_build` (simpler, sufficient for most cases) |\n| Poetry | uv (faster, simpler, better ecosystem integration) |\n| requirements.txt | PEP 723 for scripts, pyproject.toml for projects |\n| mypy \u002F pyright | ty (faster, from Astral team) |\n| `[project.optional-dependencies]` for dev tools | `[dependency-groups]` (PEP 735) |\n| Manual virtualenv activation (`source .venv\u002Fbin\u002Factivate`) | `uv run \u003Ccmd>` |\n| pre-commit | prek (faster, no Python runtime needed) |\n\n**Key principles:**\n- Always use `uv add` and `uv remove` to manage dependencies\n- Never manually activate or manage virtual environments—use `uv run` for all commands\n- Use `[dependency-groups]` for dev\u002Ftest\u002Fdocs dependencies, not `[project.optional-dependencies]`\n\n## Decision Tree\n\n```\nWhat are you doing?\n│\n├─ Single-file script with dependencies?\n│   └─ Use PEP 723 inline metadata (.\u002Freferences\u002Fpep723-scripts.md)\n│\n├─ New multi-file project (not distributed)?\n│   └─ Minimal uv setup (see Quick Start below)\n│\n├─ New reusable package\u002Flibrary?\n│   └─ Full project setup (see Full Setup below)\n│\n└─ Migrating existing project?\n    └─ See Migration Guide below\n```\n\n## Tool Overview\n\n| Tool | Purpose | Replaces |\n|------|---------|----------|\n| **uv** | Package\u002Fdependency management | pip, virtualenv, pip-tools, pipx, pyenv |\n| **ruff** | Linting AND formatting | flake8, black, isort, pyupgrade, pydocstyle |\n| **ty** | Type checking | mypy, pyright (faster alternative) |\n| **pytest** | Testing with coverage | unittest |\n| **prek** | Pre-commit hooks ([setup](.\u002Freferences\u002Fprek.md)) | pre-commit (faster, Rust-native) |\n\n### Security Tools\n\n| Tool | Purpose | When It Runs |\n|------|---------|--------------|\n| **shellcheck** | Shell script linting | pre-commit |\n| **detect-secrets** | Secret detection | pre-commit |\n| **actionlint** | Workflow syntax validation | pre-commit, CI |\n| **zizmor** | Workflow security audit | pre-commit, CI |\n| **pip-audit** | Dependency vulnerability scanning | CI, manual |\n| **Dependabot** | Automated dependency updates | scheduled |\n\nSee [security-setup.md](.\u002Freferences\u002Fsecurity-setup.md) for configuration and usage.\n\n## Quick Start: Minimal Project\n\nFor simple multi-file projects not intended for distribution:\n\n```bash\n# Create project with uv\nuv init myproject\ncd myproject\n\n# Add dependencies\nuv add requests rich\n\n# Add dev dependencies\nuv add --group dev pytest ruff ty\n\n# Run code\nuv run python src\u002Fmyproject\u002Fmain.py\n\n# Run tools\nuv run pytest\nuv run ruff check .\n```\n\n## Full Project Setup\nIf starting from scratch, ask the user if they prefer to use the Trail of Bits cookiecutter template to bootstrap a complete project with already preconfigured tooling.\n\n```bash\nuvx cookiecutter gh:trailofbits\u002Fcookiecutter-python\n```\n\n### 1. Create Project Structure\n\n```bash\nuv init --package myproject\ncd myproject\n```\n\nThis creates:\n```\nmyproject\u002F\n├── pyproject.toml\n├── README.md\n├── src\u002F\n│   └── myproject\u002F\n│       └── __init__.py\n└── .python-version\n```\n\n### 2. Configure pyproject.toml\n\nSee [pyproject.md](.\u002Freferences\u002Fpyproject.md) for complete configuration reference.\n\nKey sections:\n```toml\n[project]\nname = \"myproject\"\nversion = \"0.1.0\"\nrequires-python = \">=3.11\"\ndependencies = []\n\n[dependency-groups]\ndev = [{include-group = \"lint\"}, {include-group = \"test\"}, {include-group = \"audit\"}]\nlint = [\"ruff\", \"ty\"]\ntest = [\"pytest\", \"pytest-cov\"]\naudit = [\"pip-audit\"]\n\n[tool.ruff]\nline-length = 100\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"ALL\"]\nignore = [\"D\", \"COM812\", \"ISC001\"]\n\n[tool.pytest]\naddopts = [\"--cov=myproject\", \"--cov-fail-under=80\"]\n\n[tool.ty.terminal]\nerror-on-warning = true\n\n[tool.ty.environment]\npython-version = \"3.11\"\n\n[tool.ty.rules]\n# Strict from day 1 for new projects\npossibly-unresolved-reference = \"error\"\nunused-ignore-comment = \"warn\"\n```\n\n### 3. Install Dependencies\n\n```bash\n# Install all dependency groups\nuv sync --all-groups\n\n# Or install specific groups\nuv sync --group dev\n```\n\n### 4. Add Makefile\n\n```makefile\n.PHONY: dev lint format test build\n\ndev:\n\tuv sync --all-groups\n\nlint:\n\tuv run ruff format --check && uv run ruff check && uv run ty check src\u002F\n\nformat:\n\tuv run ruff format .\n\ntest:\n\tuv run pytest\n\nbuild:\n\tuv build\n```\n\n## Migration Guide\n\nWhen a user requests migration from legacy tooling:\n\n### From requirements.txt + pip\n\nFirst, determine the nature of the code:\n\n**For standalone scripts**: Convert to PEP 723 inline metadata (see [pep723-scripts.md](.\u002Freferences\u002Fpep723-scripts.md))\n\n**For projects**:\n```bash\n# Initialize uv in existing project\nuv init --bare\n\n# Add dependencies using uv (not by editing pyproject.toml)\nuv add requests rich  # add each package\n\n# Or import from requirements.txt (review each package before adding)\n# Note: Complex version specifiers may need manual handling\ngrep -v '^#' requirements.txt | grep -v '^-' | grep -v '^\\s*$' | while read -r pkg; do\n    uv add \"$pkg\" || echo \"Failed to add: $pkg\"\ndone\n\nuv sync\n```\n\nThen:\n1. Delete `requirements.txt`, `requirements-dev.txt`\n2. Delete virtual environment (`venv\u002F`, `.venv\u002F`)\n3. Add `uv.lock` to version control\n\n### From setup.py \u002F setup.cfg\n\n1. Run `uv init --bare` to create pyproject.toml\n2. Use `uv add` to add each dependency from `install_requires`\n3. Use `uv add --group dev` for dev dependencies\n4. Copy non-dependency metadata (name, version, description, etc.) to `[project]`\n5. Delete `setup.py`, `setup.cfg`, `MANIFEST.in`\n\n### From flake8 + black + isort\n\n1. Remove flake8, black, isort via `uv remove`\n2. Delete `.flake8`, `pyproject.toml [tool.black]`, `[tool.isort]` configs\n3. Add ruff: `uv add --group dev ruff`\n4. Add ruff configuration (see [ruff-config.md](.\u002Freferences\u002Fruff-config.md))\n5. Run `uv run ruff check --fix .` to apply fixes\n6. Run `uv run ruff format .` to format\n\n### From mypy \u002F pyright\n\n1. Remove mypy\u002Fpyright via `uv remove`\n2. Delete `mypy.ini`, `pyrightconfig.json`, or `[tool.mypy]`\u002F`[tool.pyright]` sections\n3. Add ty: `uv add --group dev ty`\n4. Run `uv run ty check src\u002F`\n\n## Quick Reference: uv Commands\n\n| Command | Description |\n|---------|-------------|\n| `uv init` | Create new project |\n| `uv init --package` | Create distributable package |\n| `uv add \u003Cpkg>` | Add dependency |\n| `uv add --group dev \u003Cpkg>` | Add to dependency group |\n| `uv remove \u003Cpkg>` | Remove dependency |\n| `uv sync` | Install dependencies |\n| `uv sync --all-groups` | Install all dependency groups |\n| `uv run \u003Ccmd>` | Run command in venv |\n| `uv run --with \u003Cpkg> \u003Ccmd>` | Run with temporary dependency |\n| `uv build` | Build package |\n| `uv publish` | Publish to PyPI |\n\n### Ad-hoc Dependencies with `--with`\n\nUse `uv run --with` for one-off commands that need packages not in your project:\n\n```bash\n# Run Python with a temporary package\nuv run --with requests python -c \"import requests; print(requests.get('https:\u002F\u002Fhttpbin.org\u002Fip').json())\"\n\n# Run a module with temporary deps\nuv run --with rich python -m rich.progress\n\n# Multiple packages\nuv run --with requests --with rich python script.py\n\n# Combine with project deps (adds to existing venv)\nuv run --with httpx pytest  # project deps + httpx\n```\n\n**When to use `--with` vs `uv add`:**\n- `uv add`: Package is a project dependency (goes in pyproject.toml\u002Fuv.lock)\n- `--with`: One-off usage, testing, or scripts outside a project context\n\nSee [uv-commands.md](.\u002Freferences\u002Fuv-commands.md) for complete reference.\n\n## Quick Reference: Dependency Groups\n\n```toml\n[dependency-groups]\ndev = [\"ruff\", \"ty\"]\ntest = [\"pytest\", \"pytest-cov\", \"hypothesis\"]\ndocs = [\"sphinx\", \"myst-parser\"]\n```\n\nInstall with: `uv sync --group dev --group test`\n\n## Best Practices Checklist\n\n- [ ] Use `src\u002F` layout for packages\n- [ ] Set `requires-python = \">=3.11\"`\n- [ ] Configure ruff with `select = [\"ALL\"]` and explicit ignores\n- [ ] Use ty for type checking\n- [ ] Enforce test coverage minimum (80%+)\n- [ ] Use dependency groups instead of extras for dev tools\n- [ ] Add `uv.lock` to version control\n- [ ] Use PEP 723 for standalone scripts\n\n## Read Next\n\n- [migration-checklist.md](.\u002Freferences\u002Fmigration-checklist.md) - Step-by-step migration cleanup\n- [pyproject.md](.\u002Freferences\u002Fpyproject.md) - Complete pyproject.toml reference\n- [uv-commands.md](.\u002Freferences\u002Fuv-commands.md) - uv command reference\n- [ruff-config.md](.\u002Freferences\u002Fruff-config.md) - Ruff linting\u002Fformatting configuration\n- [testing.md](.\u002Freferences\u002Ftesting.md) - pytest and coverage setup\n- [pep723-scripts.md](.\u002Freferences\u002Fpep723-scripts.md) - PEP 723 inline script metadata\n- [prek.md](.\u002Freferences\u002Fprek.md) - Fast pre-commit hooks with prek\n- [security-setup.md](.\u002Freferences\u002Fsecurity-setup.md) - Security hooks and dependency scanning\n- [dependabot.md](.\u002Freferences\u002Fdependabot.md) - Automated dependency updates\n",{"name":5,"description":7},"master","c73386b305dec167db7654e0e6feacb462d4f9dc","assets\u002Fskills\u002Fdev\u002Fmodern-python",1,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code","https:\u002F\u002Fgithub.com\u002FAntifragileTech","2026-10-02 14:22:14",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add AntifragileTech\u002Fantifragile-claude-code --skill modern-python",{"tool":48,"command":49},"bunx","bunx skills add AntifragileTech\u002Fantifragile-claude-code --skill modern-python",{"tool":51,"command":52},"pnpm","pnpm dlx skills add AntifragileTech\u002Fantifragile-claude-code --skill modern-python","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002FSKILL.md",true,[56,62,66,70,74,78,82,86,90,94,98],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Fdependabot.md","REFERENCE","参考文档",1800,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fdependabot.md",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"references\u002Fmigration-checklist.md",3071,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fmigration-checklist.md",{"path":67,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fpep723-scripts.md",5134,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fpep723-scripts.md",{"path":71,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fprek.md",5951,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fprek.md",{"path":75,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fpyproject.md",5694,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fpyproject.md",{"path":79,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fruff-config.md",5476,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fruff-config.md",{"path":83,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fsecurity-setup.md",6504,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fsecurity-setup.md",{"path":87,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Ftesting.md",5214,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Ftesting.md",{"path":91,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fuv-commands.md",4653,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Freferences\u002Fuv-commands.md",{"path":95,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":96,"sourceHtmlUrl":97},"templates\u002Fdependabot.yml",958,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Ftemplates\u002Fdependabot.yml",{"path":99,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":100,"sourceHtmlUrl":101},"templates\u002Fpre-commit-config.yaml",2259,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fmodern-python\u002Ftemplates\u002Fpre-commit-config.yaml",[103,127,142,157,170,183],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":122,"publishedAt":30},"01M6DT9Q6VYA615SCXR757TZZ7","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-skills\u002FSKILL.md",[109,114,117],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":115,"categoryName":116,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[123,20,22,124,125,126],"writing skills","editing","work","deployment",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":135,"publishedAt":30},"01M6DT9GFHDNY90P41WGAE1TV0","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-plans\u002FSKILL.md",[133,134],{"categoryNo":115,"categoryName":116,"taxonomyType":112,"taxonomyTypeDesc":113},{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[136,137,20,138,139,22,140,141],"plans","writing plans","requirements","task","code","spec",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":150,"publishedAt":30},"01M6DT9C6PFGD86WS3HY7YE3XG","docs:write-concisely","Apply writing rules to any documentation that humans will read. Makes your writing clearer, stronger, and more professional.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwrite-concisely\u002FSKILL.md",[148,149],{"categoryNo":115,"categoryName":116,"taxonomyType":112,"taxonomyTypeDesc":113},{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[151,152,153,154,155,156,20],"docs:write concisely","write","docs","read","Rules","documentation",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":30},"01M6DT98AWQ27P0N1CG97WAG66","kaizen:why","Iterative Five Whys root cause analysis drilling from symptoms to fundamentals","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwhy\u002FSKILL.md",[],[159,164,165,166,167,168,169],"why","kaizen","issue","five whys","analysis","root cause analysis",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":30},"01M6DT93EH25NAX19R3WGE1P53","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-loop\u002FSKILL.md",[],[177,178,179,180,140,181,182],"verification loop","verification","loop","sessions","claude code sessions","system",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":30},"01M6DT90GW7Z7VCN98P9DVYSNC","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-before-completion\u002FSKILL.md",[],[190,178,191,125,22,192,193,194],"verification before completion","commands","evidence","claim","complete"]