[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5ZF4NPJX2ZAD43AF6WNB6":3,"skill-same:01M6C5ZF4NPJX2ZAD43AF6WNB6":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":14,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M6C5ZF4NPJX2ZAD43AF6WNB6","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.","CoralShades\u002Facm-ai","CoralShades","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F220297585?v=4","01M6C5211QSJHZ8HXSDDWCR507","Coral Shades AI Agency","01M6C52161FNQDRQ0FRR8DAA9D",0,"MIT","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002FSKILL.md",[],[19,20,21,22,23,24,25],"python","modern python","writing","projects","use","tooling","uv","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},"main","1ca81b0a7de199942400f965edd4d7544077ac5d",".opencode\u002Fskills\u002Fmodern-python","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai","https:\u002F\u002Fgithub.com\u002FCoralShades","coralshades.com.au","2026-04-18 00:45:07",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add CoralShades\u002Facm-ai --skill modern-python",{"tool":44,"command":45},"bunx","bunx skills add CoralShades\u002Facm-ai --skill modern-python",{"tool":47,"command":48},"pnpm","pnpm dlx skills add CoralShades\u002Facm-ai --skill modern-python","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002FSKILL.md",true,[52,58,62,66,70,74,78,82,86,90,94],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"references\u002Fdependabot.md","REFERENCE","参考文档",1800,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fdependabot.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Fmigration-checklist.md",3071,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fmigration-checklist.md",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"references\u002Fpep723-scripts.md",5134,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fpep723-scripts.md",{"path":67,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fprek.md",5951,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fprek.md",{"path":71,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fpyproject.md",5694,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fpyproject.md",{"path":75,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fruff-config.md",5476,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fruff-config.md",{"path":79,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fsecurity-setup.md",6504,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fsecurity-setup.md",{"path":83,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Ftesting.md",5214,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Ftesting.md",{"path":87,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fuv-commands.md",4653,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Freferences\u002Fuv-commands.md",{"path":91,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":92,"sourceHtmlUrl":93},"templates\u002Fdependabot.yml",958,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Ftemplates\u002Fdependabot.yml",{"path":95,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":96,"sourceHtmlUrl":97},"templates\u002Fpre-commit-config.yaml",2259,"https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fmodern-python\u002Ftemplates\u002Fpre-commit-config.yaml",[99,122,135,151,173,182],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":110,"publishedAt":26},"01M6C63HKXA890HHV47WBAX0TB","uncodixfy","Prevents generic AI\u002FCodex UI patterns when generating frontend code. Use this skill whenever generating HTML, CSS, React, Vue, Svelte, or any frontend UI code to enforce clean, human-designed aesthetics inspired by Linear, Raycast, Stripe, and GitHub instead of typical AI-generated UI.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Funcodixfy\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[101,111,112,113,114,115,116,117,118,119,120,23,121],"github","frontend","css","codex","react","code","linear","ui","vue","generated","html",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":126,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":26},"01M6C63FJ2GEBBGZ5XSMV40KXB","runpodctl","Runpod CLI to manage your GPU workloads.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Frunpodctl\u002FSKILL.md",[],[124,130,131,132,133,134],"macos","cli","linux","gpu","Bash",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":26},"01M6C63DPAV46TFVQ01SFYPJ7X","langgraph-persistence","INVOKE THIS SKILL when your LangGraph needs to persist state, remember conversations, travel through history, or configure subgraph checkpointer scoping. Covers checkpointers, thread_id, time travel, Store, and subgraph persistence modes.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-persistence\u002FSKILL.md",[],[142,143,144,145,146,147,148,149,150],"langgraph persistence","langgraph","persistence","travel","history","scoping","remember","state","configure",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":162,"publishedAt":26},"01M6C63BNS9CQEBTB8RNSSBFPA","langgraph-human-in-the-loop","INVOKE THIS SKILL when implementing human-in-the-loop patterns, pausing for approval, or handling errors in LangGraph. Covers interrupt(), Command(resume=...), approval\u002Fvalidation workflows, and the 4-tier error handling strategy.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-human-in-the-loop\u002FSKILL.md",[157],{"categoryNo":158,"categoryName":159,"taxonomyType":160,"taxonomyTypeDesc":161},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[163,164,143,165,166,167,168,169,170,171,172],"langgraph human in the loop","loop","workflows","error handling","validation","human-in-the-loop","command","strategy","approval","resume",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":26},"01M6C639GVYZFX3NFPV5FBDR4F","langgraph-fundamentals","INVOKE THIS SKILL when writing ANY LangGraph code. Covers StateGraph, state schemas, nodes, edges, Command, Send, invoke, streaming, and error handling.","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flanggraph-fundamentals\u002FSKILL.md",[],[180,143,166,149,181,21,169,116],"langgraph fundamentals","streaming",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":188,"publishedAt":26},"01M6C6375N34YX2GZ3SD3R7XR2","langchain-rag","INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).","https:\u002F\u002Fgithub.com\u002FCoralShades\u002Facm-ai\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Flangchain-rag\u002FSKILL.md",[],[189,190,191,192,193,194,195,196,197,198],"rag","langchain rag","langchain","embeddings","vector","openai","chroma","faiss","vector stores","system"]