[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FVM2FZZQC6P3KSQ4XSPEV":3,"skill-same:01M71FVM2FZZQC6P3KSQ4XSPEV":300},{"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":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M71FVM2FZZQC6P3KSQ4XSPEV","python3-development",null,"The model must use this skill when : 1. working within any python project. 2. Python CLI applications with Typer and Rich are mentioned by the user. 2. tasked with Python script writing or editing. 3. building CI scripts or tools. 4. Creating portable Python scripts with stdlib only. 5. planning out a python package design. 6. running any python script or test. 7. writing tests (unit, integration, e2e, validation) for a python script, package, or application. Reviewing Python code against best practices or for code smells. 8. The python command fails to run or errors, or the python3 command shows errors. 9. pre-commit or linting errors occur in python files. 10. Writing or editing python code  in a git repository.\\n\u003Chint>This skill provides : 1. the users preferred workflow patterns for test-driven development, feature addition, refactoring, debugging, and code review using modern Python 3.11+ patterns (including PEP 723 inline metadata, native generics, and type-safe async processing). 2. References to favored modules. 3. Working pyproject.toml configurations. 4. Linting and formatting configuration and troubleshooting. 5. Resource files that provide solutions to known errors and linting issues. 6. Project layouts the user prefers.\u003C\u002Fhint>","JSGforever\u002Fskillguard","JSGforever","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F85541948?v=4","01M71FQD3E132VMR5F4TAYX3YS","01M71FQD4DYW0XJ4XQ4YQH75Y9",2,"GPL-3.0","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002FSKILL.md",[17,22,25],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":26,"categoryName":27,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"python3","development","python3 development","for","rich","git","safe","run","refactoring","command","inline","writing","files","design","ci","code review","project","unit","python project","modules","2026-11-10 10:12:30",false,"---\nname: python3-development\ndescription: 'The model must use this skill when : 1. working within any python project. 2. Python CLI applications with Typer and Rich are mentioned by the user. 2. tasked with Python script writing or editing. 3. building CI scripts or tools. 4. Creating portable Python scripts with stdlib only. 5. planning out a python package design. 6. running any python script or test. 7. writing tests (unit, integration, e2e, validation) for a python script, package, or application. Reviewing Python code against best practices or for code smells. 8. The python command fails to run or errors, or the python3 command shows errors. 9. pre-commit or linting errors occur in python files. 10. Writing or editing python code  in a git repository.\\n\u003Chint>This skill provides : 1. the users preferred workflow patterns for test-driven development, feature addition, refactoring, debugging, and code review using modern Python 3.11+ patterns (including PEP 723 inline metadata, native generics, and type-safe async processing). 2. References to favored modules. 3. Working pyproject.toml configurations. 4. Linting and formatting configuration and troubleshooting. 5. Resource files that provide solutions to known errors and linting issues. 6. Project layouts the user prefers.\u003C\u002Fhint>'\nversion: \"1.1.0\"\nlast_updated: \"2025-11-04\"\npython_compatibility: \"3.11+\"\n---\n\n# Opinionated Python Development Skill\n\n## Role Identification (Mandatory)\n\nThe model must identify its ROLE_TYPE and echo the following statement:\n\n```text\nMy ROLE_TYPE is \"\u003Cthe role type>\". I follow instructions given to \"the model\" and \"\u003Crole name>\".\n```\n\nWhere:\n\n- `\u003Cthe role type>` is either \"orchestrator\" or \"sub-agent\" based on the ROLE_TYPE identification rules in CLAUDE.md\n- `\u003Crole name>` is \"orchestrator\" if ROLE_TYPE is orchestrator, or \"sub-agent\" if ROLE_TYPE is sub-agent\n\n**Example for orchestrator:**\n\n```text\nMy ROLE_TYPE is \"orchestrator\". I follow instructions given to \"the model\" and \"orchestrator\".\n```\n\n**Example for sub-agent:**\n\n```text\nMy ROLE_TYPE is \"sub-agent\". I follow instructions given to \"the model\" and \"sub-agent\".\n```\n\n---\n\nOrchestration guide for Python development using specialized agents and modern Python 3.11-3.14 patterns.\n\n## Skill Architecture\n\n### Bundled Resources (Included in This Skill)\n\n**Reference Documentation:**\n\n- [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) - Extracted conventions from user's production projects (MANDATORY for new projects)\n- [Modern Python Modules](.\u002Freferences\u002Fmodern-modules.md) - 50+ library guides with usage patterns and best practices\n- [Tool & Library Registry](.\u002Freferences\u002Ftool-library-registry.md) - Development tools catalog for linting, testing, and build automation\n- [API Reference](.\u002Freferences\u002Fapi_reference.md) - API specifications and integration guides\n- [Python Development Orchestration](.\u002Freferences\u002Fpython-development-orchestration.md) - Detailed workflow patterns for TDD, feature addition, refactoring, and code review\n\n**Command Templates and Guides** (`commands\u002F`):\n\n- Reference material for creating slash commands (NOT the actual slash commands)\n- Command templates and patterns for development\n- Testing and development workflow guides\n- See [Commands README](.\u002Fcommands\u002FREADME.md) for details\n\n**Scripts and Assets:**\n\n- Example scripts demonstrating patterns\n- Configuration templates and boilerplate\n\n### External Dependencies (Required - Not Bundled)\n\n**Agents** (install to `~\u002F.claude\u002Fagents\u002F`):\n\n- `@agent-python-cli-architect` - Python CLI development with Typer and Rich\n- `@agent-python-pytest-architect` - Test suite creation and planning\n- `@agent-python-code-reviewer` - Post-implementation code review\n- `@agent-python-portable-script` - Standalone stdlib-only script creation\n- `@agent-spec-architect` - Architecture design\n- `@agent-spec-planner` - Task breakdown and planning\n- `@agent-spec-analyst` - Requirements gathering\n\n**Slash Commands** (install to `~\u002F.claude\u002Fcommands\u002F`):\n\n- `\u002Fmodernpython` - Python 3.11+ pattern enforcement and legacy code detection\n- `\u002Fshebangpython` - PEP 723 inline script metadata validation\n\n**System Tools** (install via package manager or uv):\n\n- `uv` - Python package and project manager (required)\n- `ruff` - Linter and formatter\n- `pyright` - Type checker (Microsoft)\n- `mypy` - Static type checker\n- `pytest` - Testing framework\n- `pre-commit` - Git hook framework\n- `mutmut` - Mutation testing (for critical code)\n- `bandit` - Security scanner (for critical code)\n\n**Installation Notes:**\n\n- Agents and slash commands must be installed separately in their respective directories\n- This skill provides orchestration guidance and references; agents perform actual implementation\n- Use the `uv` skill for comprehensive uv documentation and package management guidance\n\n## Core Concepts\n\n### Python Development Standards\n\nThis skill provides orchestration patterns, modern Python 3.11+ standards, quality gates, and reference documentation for Python development.\n\n**Commands** (external - in `~\u002F.claude\u002Fcommands\u002F`):\n\n- `\u002Fmodernpython` - Validates Python 3.11+ patterns, identifies legacy code\n- `\u002Fshebangpython` - Validates correct shebang for all Python scripts\n- Note: This skill contains command templates in `commands\u002F` directory, not the actual slash commands\n\n**Reference Documentation**:\n\n- Modern Python modules (50+ libraries)\n- Tool and library registry with template variable system\n- API specifications\n- Working configurations for pyproject.toml, ruff, mypy, pytest\n\n**Docstring Standard**: Google style (Args\u002FReturns\u002FRaises sections). See [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) for ruff pydocstyle configuration (`convention = \"google\"`).\n\n**CRITICAL: Pyproject.toml Template Variables**:\n\nAll pyproject.toml examples use explicit template variables (e.g., `{{project_name_from_directory_or_git_remote}}`) instead of generic placeholders. The model MUST replace ALL template variables with actual values before creating files. See [Tool & Library Registry sections 18-19](.\u002Freferences\u002Ftool-library-registry.md#18-pyprojecttoml-template-variable-reference) for:\n\n- Complete variable reference and sourcing methods\n- Mandatory rules for file creation\n- Validation and verification procedures\n\n### Script Dependency Trade-offs\n\nUnderstand the complexity vs portability trade-off when creating Python CLI scripts:\n\n**Scripts with dependencies (Typer + Rich via PEP 723)**:\n\n- **Benefits**:\n  - Less development complexity - Leverage well-tested libraries for argument parsing, formatting, validation\n  - Less code to write - Typer handles CLI boilerplate, Rich handles output formatting\n  - Better UX - Colors, progress bars, structured output built-in\n  - Just as simple to execute - PEP 723 makes it a single-file executable; uv handles dependencies automatically\n- **Trade-off**: Requires network access on first run (to fetch packages)\n\n**stdlib-only scripts**:\n\n- **Benefits**:\n  - Maximum portability - Runs on ANY Python installation without network access\n  - Best for: Air-gapped systems, restricted corporate environments, embedded systems\n- **Trade-offs**:\n  - More development complexity - Build everything from scratch (manual argparse, manual tree formatting, manual color codes)\n  - More code to write and test - Everything must be implemented manually\n  - Basic UX - Limited formatting without external libraries\n\n**Default recommendation:** Use Typer + Rich with PEP 723 unless you have specific portability requirements that prevent network access.\n\n**See:**\n\n- [Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md) for detailed agent selection criteria\n- [Typer and Rich CLI Examples](.\u002Fassets\u002Ftyper_examples\u002Findex.md) for Rich width handling solutions\n\n### Rich Panel and Table Width Handling\n\n**Common Problem**: Rich containers (Panel, Table) wrap content at 80 characters in CI\u002Fnon-TTY environments, breaking URLs, commands, and structured output.\n\n**Two Solutions Depending on Context**:\n\n#### Solution 1: Plain Text (No Containers)\n\nFor plain text output that shouldn't wrap:\n\n```python\nfrom rich.console import Console\n\nconsole = Console()\n\n# URLs, paths, commands - never wrap\nconsole.print(long_url, crop=False, overflow=\"ignore\")\n```\n\n#### Solution 2: Rich Containers (Panel\u002FTable)\n\nFor Panel and Table that contain long content, `crop=False` alone doesn't work because containers calculate their own internal layout. Use `get_rendered_width()` helper with different patterns for Panel vs Table:\n\n```python\nfrom rich.console import Console, RenderableType\nfrom rich.measure import Measurement\nfrom rich.panel import Panel\nfrom rich.table import Table\n\ndef get_rendered_width(renderable: RenderableType) -> int:\n    \"\"\"Get actual rendered width of Rich renderable.\n\n    Handles color codes, Unicode, styling, padding, borders.\n    Works with Panel, Table, or any Rich container.\n    \"\"\"\n    temp_console = Console(width=9999)\n    measurement = Measurement.get(temp_console, temp_console.options, renderable)\n    return int(measurement.maximum)\n\nconsole = Console()\n\n# Panel: Set Console width (Panel fills Console width)\npanel = Panel(long_content)\npanel_width = get_rendered_width(panel)\nconsole.width = panel_width  # Set Console width, NOT panel.width\nconsole.print(panel, crop=False, overflow=\"ignore\", no_wrap=True, soft_wrap=True)\n\n# Table: Set Table width (Table controls its own width)\ntable = Table()\ntable.add_column(\"Type\", style=\"cyan\", no_wrap=True)\ntable.add_column(\"Value\", style=\"green\", no_wrap=True)\ntable.add_row(\"Data\", long_content)\ntable.width = get_rendered_width(table)  # Set Table width\nconsole.print(table, crop=False, overflow=\"ignore\", no_wrap=True, soft_wrap=True)\n```\n\n**Executable Examples**: See [.\u002Fassets\u002Ftyper_examples\u002F](.\u002Fassets\u002Ftyper_examples\u002Findex.md) for complete working scripts:\n\n- `console_no_wrap_example.py` - Plain text wrapping solutions\n- `console_containers_no_wrap.py` - Panel\u002FTable width handling with `get_rendered_width()`\n\n### Rich Emoji Usage\n\n**Instruction**: In Rich console output, always use Rich emoji tokens instead of literal Unicode emojis.\n\n**Use Rich emoji tokens**: `:white_check_mark: :cross_mark: :magnifying_glass:`\n\n**Why**: Cross-platform compatibility, consistent rendering, markdown-safe alignment\n\n**Example:**\n\n```python\nfrom rich.console import Console\n\nconsole = Console()\n\n# Correct - Rich emoji tokens\nconsole.print(\":white_check_mark: Task completed\")\nconsole.print(\":cross_mark: Task failed\")\nconsole.print(\":sparkles: New feature\")\nconsole.print(\":rocket: Performance improvement\")\n```\n\n**Benefits**:\n\n- Rich emoji tokens work consistently across all terminals and fonts\n- Avoid markdown table alignment issues (emoji width calculation problems)\n- Enable proper width measurement in `get_rendered_width()`\n- Ensure cross-platform compatibility (Windows, Linux, macOS)\n\n**See**: [Rich Emoji Documentation](https:\u002F\u002Frich.readthedocs.io\u002Fen\u002Fstable\u002Fappendix\u002Fcolors.html#appendix-emoji) for complete emoji token reference.\n\n### Python Exception Handling\n\nCatch exceptions only when you have a specific recovery action. Let all other errors propagate to the caller.\n\n**Reason**: Fail-fast principle surfaces issues early rather than hiding them behind generic error messages.\n\n**Pattern**:\n\n```python\ndef get_user(id):\n    return db.query(User, id)  # Errors surface naturally\n\ndef get_user_with_handling(id):\n    try:\n        return db.query(User, id)\n    except ConnectionError:\n        logger.warning(\"DB unavailable, using cache\")\n        return cache.get(f\"user:{id}\")  # Specific recovery action\n```\n\nWhen adding try\u002Fexcept, answer: \"What specific error do I expect, and what is my recovery action?\"\n\n**See**: [Exception Handling in Python CLI Applications](.\u002Freferences\u002Fexception-handling.md) for comprehensive patterns including Typer exception chain prevention.\n\n### Type Safety with Mypy\n\n**REQUIREMENT**: All Python code MUST be comprehensively typed using Python 3.11+ native type hints.\n\n**Python Version**: Python 3.11+ is required unless explicitly documented otherwise. Older versions are rare, documented exceptions.\n\n**The model MUST read the official mypy documentation examples before implementing type patterns. Each subsection links to authoritative mypy docs.**\n\n#### When to Use Generics\n\nUse generics for type-safe container classes and functions that work with multiple types.\n\n**Applicable scenarios:**\n\n- Custom collection classes (stacks, queues, boxes)\n- Functions accepting multiple type variants\n- Decorators and factory methods\n- Reusable protocols and type aliases\n\n**MUST read examples before implementing**: [Mypy Generics Documentation](.\u002Freferences\u002Fmypy-docs\u002Fgenerics.rst)\n\n**Python 3.11 Generic Pattern** (TypeVar with Generic):\n\n```python\nfrom typing import TypeVar, Generic, Sequence\n\nT = TypeVar('T')\n\nclass Stack(Generic[T]):\n    def __init__(self) -> None:\n        self._items: list[T] = []\n\n    def push(self, item: T) -> None:\n        self._items.append(item)\n\n    def pop(self) -> T:\n        return self._items.pop()\n\ndef first(seq: Sequence[T]) -> T:\n    return seq[0]\n```\n\n**Python 3.12+ Generic Pattern** (Native Syntax):\n\n```python\nclass Stack[T]:\n    def __init__(self) -> None:\n        self._items: list[T] = []\n\n    def push(self, item: T) -> None:\n        self._items.append(item)\n\n    def pop(self) -> T:\n        return self._items.pop()\n\ndef first[T](seq: Sequence[T]) -> T:\n    return seq[0]\n```\n\n**Type Variable Bounds** (restrict to subtypes):\n\n```python\nfrom collections.abc import Sequence\nfrom typing import Protocol\n\nclass SupportsAbs[T](Protocol):\n    def __abs__(self) -> T: ...\n\ndef max_by_abs[T: SupportsAbs[float]](*xs: T) -> T:\n    return max(xs, key=abs)\n```\n\n**Value Restrictions** (limit to specific types):\n\n```python\ndef concat[S: (str, bytes)](x: S, y: S) -> S:\n    return x + y  # Type-safe for str OR bytes, but not mixed\n```\n\n**Generic Method Chaining** (precise return types):\n\n```python\nfrom typing import Self\n\nclass Shape:\n    scale: float = 1.0\n\n    def set_scale(self, scale: float) -> Self:\n        self.scale = scale\n        return self  # Returns precise subclass type\n```\n\n#### When to Use Protocols\n\nUse protocols for structural subtyping when you need duck typing with type safety. Protocols check whether an object has required methods\u002Fattributes regardless of inheritance.\n\n**Applicable scenarios:**\n\n- Accept any object with specific capabilities without requiring inheritance\n- Define interfaces for duck-typed code\n- Create flexible callback types\n- Ensure compatibility without tight coupling\n\n**MUST read examples before implementing**: [Mypy Protocols Documentation](.\u002Freferences\u002Fmypy-docs\u002Fprotocols.rst)\n\n**Basic Protocol Pattern**:\n\n```python\nfrom typing import Protocol\n\nclass SupportsClose(Protocol):\n    def close(self) -> None: ...\n\ndef close_resource(resource: SupportsClose) -> None:\n    resource.close()  # Works with ANY object having close() method\n\n# No inheritance needed - structural match\nclass FileHandler:\n    def close(self) -> None:\n        print(\"Closing file\")\n\nclose_resource(FileHandler())  # ✅ Type-safe\n```\n\n**Read-Only Attributes** (use @property to avoid invariance issues):\n\n```python\nfrom typing import Protocol\n\nclass Named(Protocol):\n    @property\n    def name(self) -> str: ...  # Read-only via property\n```\n\n**Recursive Protocols** (tree structures):\n\n```python\nfrom typing import Protocol\n\nclass TreeLike(Protocol):\n    value: int\n\n    @property\n    def left(self) -> TreeLike | None: ...\n\n    @property\n    def right(self) -> TreeLike | None: ...\n```\n\n**Runtime Checks**:\n\n```python\nfrom typing import Protocol, runtime_checkable\n\n@runtime_checkable\nclass Drawable(Protocol):\n    def draw(self) -> None: ...\n\ndef render(obj: object) -> None:\n    if isinstance(obj, Drawable):  # Runtime check enabled\n        obj.draw()\n```\n\n**WARNING**: `isinstance()` with protocols only verifies attribute existence, NOT type correctness. Use for structural validation, not precise type guarantees.\n\n#### TypedDict for Dictionary Typing\n\nUse TypedDict for dictionaries with fixed schemas and string keys where each key has a specific value type.\n\n**Applicable scenarios:**\n\n- Dictionaries representing objects with predictable structure\n- JSON-like data structures\n- Configuration dictionaries\n- API request\u002Fresponse payloads\n\n**MUST read examples before implementing**: [Mypy TypedDict Documentation](.\u002Freferences\u002Fmypy-docs\u002Ftyped_dict.rst)\n\n**Required Fields Pattern** (all keys required):\n\n```python\nfrom typing import TypedDict\n\nclass Movie(TypedDict):\n    name: str\n    year: int\n    director: str\n\nmovie: Movie = {\n    \"name\": \"Blade Runner\",\n    \"year\": 1982,\n    \"director\": \"Ridley Scott\"\n}  # All keys required\n```\n\n**Optional Fields Pattern** (total=False):\n\n```python\nfrom typing import TypedDict\n\nclass MovieOptions(TypedDict, total=False):\n    subtitles: bool\n    audio_language: str\n\noptions: MovieOptions = {}  # ✅ Empty dict valid\noptions2: MovieOptions = {\"subtitles\": True}  # ✅ Partial valid\n```\n\n**Mixed Required\u002FOptional Pattern**:\n\n```python\nfrom typing import TypedDict\n\nclass MovieBase(TypedDict):\n    name: str  # Required\n    year: int  # Required\n\nclass Movie(MovieBase, total=False):\n    director: str  # Optional\n    rating: float  # Optional\n\nmovie: Movie = {\"name\": \"Alien\", \"year\": 1979}  # ✅ Valid\n```\n\n**CRITICAL**: Always annotate variables when assigning TypedDict literals. Without annotation, mypy infers `dict[str, Any]`:\n\n```python\n# ❌ Wrong - inferred as dict[str, Any]\nmovie = {\"name\": \"Alien\", \"year\": 1979}\n\n# ✅ Correct - explicitly typed\nmovie: Movie = {\"name\": \"Alien\", \"year\": 1979}\n```\n\n#### Type Narrowing\n\nUse type narrowing to refine broad union types to specific types based on runtime checks.\n\n**Applicable scenarios:**\n\n- Handling union types (e.g., `str | int | None`)\n- Optional value processing\n- Validating input types\n- Control flow-based type refinement\n\n**MUST read examples before implementing**: [Mypy Type Narrowing Documentation](.\u002Freferences\u002Fmypy-docs\u002Ftype_narrowing.rst)\n\n**isinstance() Narrowing**:\n\n```python\ndef process_value(value: str | int) -> str:\n    if isinstance(value, str):\n        return value.upper()  # Narrowed to str\n    else:\n        return str(value * 2)  # Narrowed to int\n```\n\n**None Checks**:\n\n```python\ndef greet(name: str | None) -> str:\n    if name is not None:\n        return f\"Hello, {name}\"  # Narrowed to str\n    return \"Hello, stranger\"\n```\n\n**Type Guards** (custom narrowing functions):\n\n```python\nfrom typing import TypeGuard\n\ndef is_str_list(val: list[object]) -> TypeGuard[list[str]]:\n    return all(isinstance(x, str) for x in val)\n\ndef process(values: list[object]) -> None:\n    if is_str_list(values):\n        # Narrowed to list[str] in this branch\n        print(\" \".join(values))\n```\n\n**TypeIs (Python 3.13+, more powerful than TypeGuard)**:\n\n```python\nfrom typing import TypeIs\n\ndef is_str(val: object) -> TypeIs[str]:\n    return isinstance(val, str)\n\ndef process(val: str | int) -> None:\n    if is_str(val):\n        print(val.upper())  # Narrowed to str\n    else:\n        print(val * 2)  # Narrowed to int (complement type)\n```\n\n**Key difference**: TypeGuard narrows only the if-branch; TypeIs narrows both branches (if-branch to the specified type, else-branch to the complement).\n\n#### attrs vs dataclasses vs pydantic\n\n**Decision Matrix**:\n\n| Feature                | attrs                              | dataclasses                            | pydantic                                 |\n| ---------------------- | ---------------------------------- | -------------------------------------- | ---------------------------------------- |\n| **Performance**        | Fastest (compiled)                 | Fast (native)                          | Slower (validation overhead)             |\n| **Validation**         | Basic (via converters\u002Fvalidators)  | None (requires custom `__post_init__`) | Comprehensive (built-in)                 |\n| **Immutability**       | `@frozen`                          | `frozen=True`                          | `frozen=True` (v2)                       |\n| **Evolution**          | Excellent (`evolve()`)             | Basic (`replace()`)                    | Good (`model_copy()`)                    |\n| **Slots**              | Automatic                          | Manual (`slots=True`)                  | Automatic (v2)                           |\n| **Type Coercion**      | Manual                             | None                                   | Automatic                                |\n| **JSON Serialization** | Manual                             | Manual                                 | Native (`model_dump_json()`)             |\n| **Use When**           | High-performance, pure Python data | Stdlib-only requirement                | External data validation (APIs, configs) |\n\n**attrs Pattern** (high performance, pure Python):\n\n```python\nfrom attrs import define, field\n\n@define\nclass User:\n    name: str\n    age: int = field(validator=lambda i, a, v: v >= 0)\n    email: str | None = None\n```\n\n**MUST read examples**: [Mypy Additional Features - Attrs](.\u002Freferences\u002Fmypy-docs\u002Fadditional_features.rst)\n\n**dataclasses Pattern** (stdlib-only):\n\n```python\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True, slots=True)\nclass User:\n    name: str\n    age: int\n    email: str | None = None\n\n    def __post_init__(self) -> None:\n        if self.age \u003C 0:\n            raise ValueError(\"Age must be non-negative\")\n```\n\n**pydantic Pattern** (external data validation):\n\n```python\nfrom pydantic import BaseModel, Field, field_validator\n\nclass User(BaseModel):\n    name: str\n    age: int = Field(ge=0)\n    email: str | None = None\n\n    @field_validator('age')\n    @classmethod\n    def validate_age(cls, v: int) -> int:\n        if v \u003C 0:\n            raise ValueError('Age must be non-negative')\n        return v\n```\n\n**Recommendation**:\n\n- **Default**: Use `attrs` for internal data structures (best performance, most features)\n- **Stdlib-only requirement**: Use `dataclasses`\n- **External data (APIs, configs, user input)**: Use `pydantic` (if already a dependency)\n\n**NEVER add pydantic as a dependency solely for dataclasses. Use attrs or stdlib dataclasses instead.**\n\n#### Additional Mypy Features\n\n**MUST read before using advanced patterns**: [Mypy Additional Features](.\u002Freferences\u002Fmypy-docs\u002Fadditional_features.rst)\n\n**Generic Dataclasses**:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Generic, TypeVar\n\nT = TypeVar('T')\n\n@dataclass\nclass Box(Generic[T]):\n    value: T\n\nint_box: Box[int] = Box(value=42)\nstr_box: Box[str] = Box(value=\"hello\")\n```\n\n**Self Type for Method Chaining**:\n\n```python\nfrom typing import Self\n\nclass Builder:\n    def set_name(self, name: str) -> Self:\n        self.name = name\n        return self\n\n    def set_value(self, value: int) -> Self:\n        self.value = value\n        return self\n\n# Type-safe chaining\nbuilder = Builder().set_name(\"test\").set_value(42)\n```\n\n#### Mypy Configuration Best Practices\n\n**Strict Mode Configuration** (pyproject.toml):\n\n```toml\n[tool.mypy]\npython_version = \"3.11\"\nstrict = true\nwarn_return_any = true\nwarn_unused_configs = true\ndisallow_untyped_defs = true\ndisallow_any_generics = true\ncheck_untyped_defs = true\nno_implicit_reexport = true\nwarn_redundant_casts = true\nwarn_unused_ignores = true\nwarn_no_return = true\nwarn_unreachable = true\n```\n\n**Per-Module Overrides** (for gradual typing):\n\n```toml\n[[tool.mypy.overrides]]\nmodule = \"third_party_lib.*\"\nignore_missing_imports = true\n\n[[tool.mypy.overrides]]\nmodule = \"legacy_code.*\"\ndisallow_untyped_defs = false\n```\n\n**See**: [Tool & Library Registry - Mypy Configuration](.\u002Freferences\u002Ftool-library-registry.md) for complete configuration examples.\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Agent Orchestration (Orchestrator Only)\n\n### Delegation Pattern\n\nThe orchestrator delegates Python development tasks to specialized agents rather than implementing directly.\n\n**Reason**: Agents have focused expertise and appropriate tool access for their specific domains.\n\n**The orchestrator follows this pattern**:\n\n1. Read the complete orchestration guide before delegating tasks\n2. Choose appropriate agents based on task requirements\n3. Provide clear context: file paths, success criteria, scope boundaries\n4. Chain agents for complex workflows (design → implement → test → review)\n5. Validate outputs with quality gates\n\n**The orchestrator delegates rather than implements**:\n\n| Task Type          | Delegation Target                |\n| ------------------ | -------------------------------- |\n| Python code        | `@agent-python-cli-architect`    |\n| Test creation      | `@agent-python-pytest-architect` |\n| Code review        | `@agent-python-code-reviewer`    |\n| Stdlib-only script | `@agent-python-portable-script`  |\n| Architecture       | `@agent-spec-architect`          |\n| Task breakdown     | `@agent-spec-planner`            |\n| Requirements       | `@agent-spec-analyst`            |\n\n**Reason for delegation table**: Clear mapping prevents orchestrator from implementing when it should coordinate.\n\n### Required Reading\n\n**The orchestrator must read and understand the complete agent selection guide before delegating any Python development task:**\n\n[Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md)\n\nThis guide contains:\n\n- Agent selection criteria and decision trees\n- Workflow patterns (TDD, feature addition, code review, refactoring, debugging)\n- Quality gates and validation requirements\n- Delegation best practices\n\n### Quick Reference Example\n\n```text\nUser: \"Build a CLI tool to process CSV files\"\n\nOrchestrator workflow:\n1. Read orchestration guide for agent selection\n2. Delegate to @agent-python-cli-architect\n   \"Create CSV processing CLI with Typer+Rich progress bars\"\n3. Delegate to @agent-python-pytest-architect\n   \"Create test suite for CSV processor\"\n4. Instruct agent to run: \u002Fshebangpython, \u002Fmodernpython\n5. Delegate to @agent-python-code-reviewer\n   \"Review CSV processor implementation\"\n6. Validate: Code quality checks (linting, formatting) performed and issues addressed per the holistic-linting skill, then uv run pytest\n```\n\n\u003C\u002Fsection>\n\n## Command Usage\n\n### \u002Fmodernpython\n\n**Purpose**: Comprehensive reference guide for Python 3.11+ patterns with official PEP citations\n\n**When to use**:\n\n- As reference guide when writing new code\n- Learning modern Python 3.11-3.14 features and patterns\n- Understanding official PEPs (585, 604, 695, etc.)\n- Identifying legacy patterns to avoid\n- Finding modern alternatives for old code\n\n**Note**: This is a reference document to READ, not an automated validation tool. Use it to guide your implementation choices.\n\n**Usage**:\n\n```text\n\u002Fmodernpython\n→ Loads comprehensive reference guide\n→ Provides Python 3.11+ pattern examples\n→ Includes PEP citations with research tool guidance (prefer MCP tools: Ref\u002Fexa over WebFetch)\n→ Shows legacy patterns to avoid\n→ Shows modern alternatives to use\n→ Framework-specific guides (Typer, Rich, pytest)\n\nResearch tool preference for PEP documentation:\n1. mcp__Ref__ref_search_documentation(query=\"PEP {number} Python enhancement proposal\")\n2. mcp__exa__get_code_context_exa(query=\"PEP {number} implementation examples\")\n3. WebFetch as fallback\n\n> [Web resource access, definitive guide for getting accurate data for high quality results](.\u002Freferences\u002Faccessing_online_resources.md)\n```\n\n**With file path argument**:\n\n```text\n\u002Fmodernpython src\u002Fmymodule.py\n→ Loads guide for reference while working on specified file\n→ Use guide to manually identify and refactor legacy patterns\n```\n\n### \u002Fshebangpython\n\n**Purpose**: Validate correct shebang for ALL Python scripts based on their dependencies and execution context\n\n**When to use**:\n\n- Creating any standalone executable Python script\n- Validating script shebang correctness\n- Ensuring scripts have proper execution configuration\n\n**Required for**: ALL executable Python scripts (validates shebang matches script type)\n\n**What it validates**:\n\n- **Stdlib-only scripts**: `#!\u002Fusr\u002Fbin\u002Fenv python3` (no PEP 723 needed - nothing to declare)\n- **Scripts with dependencies**: `#!\u002Fusr\u002Fbin\u002Fenv -S uv --quiet run --active --script` + PEP 723 metadata declaring those dependencies\n- **Package executables**: `#!\u002Fusr\u002Fbin\u002Fenv python3` (dependencies via package manager)\n- **Library modules**: No shebang (not directly executable)\n\n**See**: [PEP 723 Reference](.\u002Freferences\u002FPEP723.md) for details on inline script metadata\n\n**Pattern**:\n\n```text\n\u002Fshebangpython scripts\u002Fdeploy.py\n→ Analyzes imports to determine dependency type\n→ **Corrects shebang** to match script type (edits file if wrong)\n→ **Adds PEP 723 metadata** if external dependencies detected (edits file)\n→ **Removes PEP 723 metadata** if stdlib-only (edits file)\n→ Sets execute bit if needed\n→ Provides detailed verification report\n```\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Core Workflows (Orchestrator Only)\n\nThe orchestrator follows established workflow patterns for Python development tasks. See [Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md) for complete details.\n\n### Workflow Overview\n\n1. **TDD (Test-Driven Development)**: Design → Write Tests → Implement → Review → Validate\n2. **Feature Addition**: Requirements → Architecture → Plan → Implement → Test → Review\n3. **Code Review**: Self-Review → Standards Check → Agent Review → Fix → Re-validate\n4. **Refactoring**: Tests First → Refactor → Validate → Review\n5. **Debugging**: Reproduce → Trace → Fix → Test → Review\n\nEach workflow uses agent chaining with specific quality gates. See the orchestration guide for complete patterns, examples, and best practices.\n\n\u003C\u002Fsection>\n\n## Linting Discovery Protocol\n\n**The model executes this discovery sequence before any linting or formatting operations**:\n\n**Reason**: Projects use different tool configurations. Discovery ensures compatibility with project standards and CI pipelines.\n\n### Discovery Sequence\n\n1. **Check for git hook tool configuration**:\n\n   ```bash\n   # Verify .pre-commit-config.yaml exists\n   test -f .pre-commit-config.yaml && echo \"git hook config detected\"\n   ```\n\n   **If found**: Detect and run the correct git hook tool:\n\n   ```bash\n   # Detect tool (outputs 'prek' or 'pre-commit')\n   uv run python -c \"print(open('.git\u002Fhooks\u002Fpre-commit').readlines()[1].split()[4].rstrip(':') if __import__('pathlib').Path('.git\u002Fhooks\u002Fpre-commit').exists() else 'prek')\"\n\n   # Or use the holistic-linting detection script if available\n   uv run holistic-linting\u002Fscripts\u002Fdetect-hook-tool.py run --files \u003Cfiles>\n   ```\n\n   Detection logic: reads `.git\u002Fhooks\u002Fpre-commit` line 2, token 5 identifies the tool. Defaults to `prek`.\n\n   **Note**: prek is a Rust-based drop-in replacement for pre-commit. Both tools use the same `.pre-commit-config.yaml` and have identical CLI interfaces.\n\n   **Use detected tool with**: `uv run \u003Cdetected-tool> run --files \u003Cfiles>` for ALL quality checks\n\n   - This runs the complete toolchain configured in the project\n   - Includes formatting, linting, type checking, and custom validators\n   - Matches exactly what runs in CI and blocks merges\n\n2. **Else check CI pipeline configuration**:\n\n   ```bash\n   # Check for GitLab CI or GitHub Actions\n   test -f .gitlab-ci.yml || find .github\u002Fworkflows -name \"*.yml\" 2>\u002Fdev\u002Fnull\n   ```\n\n   **If found**: Read the CI config to identify required linting tools and their exact commands\n\n   - Look for `ruff`, `mypy`, `basedpyright`, `pyright`, `bandit` invocations\n   - Note the exact commands and flags used\n   - Execute those specific commands to ensure CI compatibility\n\n3. **Else fallback to tool detection**:\n   - Check `pyproject.toml` `[project.optional-dependencies]` or `[dependency-groups]` for dev tools\n   - Use discovered tools with standard configurations\n\n### Format-First Workflow\n\n**The model always formats before linting.**\n\n**Reason**: Formatting operations (like `ruff format`) automatically fix many linting issues (whitespace, line length, quote styles). Running linting before formatting wastes context and creates false positives.\n\n**Mandatory sequence**:\n\n1. **Format**: `uv run ruff format \u003Cfiles>` or via git hook tool (pre-commit\u002Fprek)\n2. **Lint**: `uv run ruff check \u003Cfiles>` or via git hook tool\n3. **Type check**: Use project-configured type checker\n4. **Test**: `uv run pytest`\n\n**When using git hook tool (pre-commit or prek)**:\n\n```bash\n# Detect which tool is installed, then run it\n# Tool runs hooks in configured order (formatting first)\nuv run \u003Cdetected-tool> run --files \u003Cfiles>\n```\n\nThe `.pre-commit-config.yaml` already specifies correct ordering - trust it.\n\n### Type Checker Discovery\n\n**The model detects which type checker the project uses**:\n\n**Reason**: Projects standardize on different type checkers (basedpyright, pyright, mypy). Using the wrong one produces incompatible results.\n\n**Detection priority**:\n\n1. Check `.pre-commit-config.yaml` for `basedpyright`, `pyright`, or `mypy` hooks\n2. Check `pyproject.toml` for `[tool.basedpyright]`, `[tool.pyright]`, or `[tool.mypy]` sections\n3. Check `.gitlab-ci.yml` or GitHub Actions for type checker invocations\n\n**Common patterns**:\n\n- **basedpyright**: GitLab projects (native GitLab reporting format)\n- **pyright**: General TypeScript-style projects\n- **mypy**: Python-first type checking\n\n**Example detection**:\n\n```bash\n# Check .pre-commit-config.yaml (works with both pre-commit and prek)\ngrep -E \"basedpyright|pyright|mypy\" .pre-commit-config.yaml\n\n# Check pyproject.toml\ngrep -E \"^\\[tool\\.(basedpyright|pyright|mypy)\\]\" pyproject.toml\n```\n\nAlways detect from project configuration rather than assuming.\n\n## Quality Gates\n\n**The model follows the Linting Discovery Protocol before executing quality gates.**\n\n**Every Python task must pass**:\n\n1. **Format-first**: `uv run ruff format \u003Cfiles>` (or via git hook tool)\n2. **Linting**: `uv run ruff check \u003Cfiles>` (clean, after formatting)\n3. **Type checking**: Use **detected type checker** (`basedpyright`, `pyright`, or `mypy`)\n4. **Tests**: `uv run pytest` (>80% coverage)\n5. **Modern patterns**: `\u002Fmodernpython` (no legacy typing)\n6. **Script compliance**: `\u002Fshebangpython` (for standalone scripts)\n\n**Preferred execution method**:\n\n```bash\n# If .pre-commit-config.yaml exists (runs all checks in correct order):\n# First detect which tool is installed (pre-commit or prek), then:\nuv run \u003Cdetected-tool> run --files \u003Cchanged_files>\n\n# Else use individual tools in this exact sequence:\nuv run ruff format \u003Cfiles>           # 1. Format first\nuv run ruff check \u003Cfiles>            # 2. Lint after formatting\nuv run \u003Cdetected-type-checker> \u003Cfiles>  # 3. Type check (basedpyright\u002Fpyright\u002Fmypy)\nuv run pytest                         # 4. Test\n```\n\n**For critical code** (payments, auth, security):\n\n- Coverage >95%\n- Mutation testing: `uv run mutmut run` (>90% score)\n- Security scan: `uv run bandit -r packages\u002F`\n\n**CI Compatibility Verification**:\n\nAfter local quality gates pass, verify CI will accept the changes:\n\n1. If `.gitlab-ci.yml` exists: Check for additional validators not in pre-commit\n2. If `.github\u002Fworkflows\u002F*.yml` exists: Check for additional quality gates\n3. Ensure all CI-required checks are executed locally before claiming task completion\n\n## Standard Project Structure\n\nAll Python projects use this directory layout:\n\n**Reason**: Consistent structure enables reliable automation and clear separation between user code and dependencies.\n\n```text\nproject-root\u002F\n├── pyproject.toml\n├── packages\u002F\n│   └── package_name\u002F      # Package code (hyphens in project name → underscores)\n│       ├── __init__.py\n│       └── ...\n├── tests\u002F\n├── scripts\u002F\n├── sessions\u002F              # Optional: cc-sessions framework\n└── README.md\n```\n\n**Package Directory Naming**:\n\n- Project name: `my-cli-tool` → Package directory: `packages\u002Fmy_cli_tool\u002F`\n- Hyphens in project names become underscores in package directories\n- The `packages\u002F` directory distinguishes user code from external dependencies\n\n**Hatchling Configuration**:\n\n```toml\n[tool.hatchling.build.targets.wheel]\npackages = [\"packages\u002Fpackage_name\"]\n```\n\nThis structure is consistent across all projects and enables clear separation of concerns.\n\n## Integration\n\n### External Reference Example\n\n**Complete working example** (external): `~\u002F.claude\u002Fagents\u002Fpython-cli-demo.py`\n\nThis reference implementation demonstrates all recommended patterns:\n\n- PEP 723 metadata with correct shebang\n- Typer + Rich integration\n- Modern Python 3.11+ (StrEnum, Protocol, TypeVar, Generics)\n- Annotated syntax for CLI params\n- Async processing\n- Comprehensive docstrings\n\nThis file is not bundled with this skill and must be available in `~\u002F.claude\u002Fagents\u002F` separately. Use as reference when creating CLI tools.\n\n### Using Asset Templates\n\nWhen creating new Python projects, copy standard configuration files from the skill's assets directory to ensure consistency with established conventions:\n\n**Reason**: Templates implement proven patterns and save setup time.\n\n**Asset Directory Location**: `~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F`\n\n**Available Templates**:\n\n1. **version.py** - Dual-mode version management (hatch-vcs + importlib.metadata fallback)\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002Fversion.py packages\u002F{package_name}\u002Fversion.py\n   ```\n\n2. **hatch_build.py** - Build hook for binary\u002Fasset handling (only if needed)\n\n   ```bash\n   mkdir -p scripts\u002F\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002Fhatch_build.py scripts\u002Fhatch_build.py\n   ```\n\n3. **.markdownlint.json** - Markdown linting configuration\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.markdownlint.json .\n   ```\n\n4. **.pre-commit-config.yaml** - Standard git hooks configuration\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.pre-commit-config.yaml .\n\n   # Install hooks using pre-commit or prek (whichever is available)\n   # Both tools use the same configuration file and have identical interfaces\n   uv run pre-commit install  # or: uv run prek install\n   ```\n\n5. **.editorconfig** - Editor formatting settings\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.editorconfig .\n   ```\n\nThese templates implement the patterns documented in [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) and ensure all projects follow the same standards for version management, linting, formatting, and build configuration.\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Common Patterns to Follow (Orchestrator Only)\n\n**Delegation Pattern**:\n\n| Instead of                             | Use this pattern                                                               |\n| -------------------------------------- | ------------------------------------------------------------------------------ |\n| Writing Python code directly           | Delegate to `@agent-python-cli-architect` with clear requirements              |\n| Skipping validation steps              | Complete workflow: implement → test → review → validate                        |\n| Pre-deciding technical implementations | Let agents determine HOW based on requirements                                 |\n| Implementing and testing in same step  | Chain agents: `@agent-python-cli-architect` → `@agent-python-pytest-architect` |\n\n**Reason**: Orchestrators coordinate workflows. Agents have specialized expertise and focused tool access for implementation.\n\nFor detailed pattern examples and corrections, see [Anti-Patterns section](.\u002Freferences\u002Fpython-development-orchestration.md#anti-patterns-to-avoid) in the orchestration guide.\n\n\u003C\u002Fsection>\n\n## Detailed Documentation\n\n### Reference Documentation\n\n**Core Orchestration Guide**: [Python Development Orchestration](.\u002Freferences\u002Fpython-development-orchestration.md) - Detailed workflow patterns for TDD, feature addition, refactoring, and code review with comprehensive agent coordination strategies\n\n**PEP 723 Specification**: [PEP 723 - Inline Script Metadata](.\u002Freferences\u002FPEP723.md) - User-friendly guide to PEP 723 inline script metadata with examples and migration patterns\n\n**Exception Handling**: [Exception Handling in Python CLI Applications with Typer](.\u002Freferences\u002Fexception-handling.md) - Critical guidance on preventing exception chain explosion in Typer applications with correct patterns for graceful error handling\n\n**Typer and Rich Examples**: [Typer and Rich CLI Examples](.\u002Fassets\u002Ftyper_examples\u002Findex.md) - Executable examples demonstrating solutions to common problems with Rich Console text wrapping in CI\u002Fnon-TTY environments and Panel\u002FTable content wrapping\n\n**Module Reference**: [Modern Python Modules](.\u002Freferences\u002Fmodern-modules.md) - Comprehensive guide to 50+ modern Python libraries with deep-dive documentation for each module including usage patterns and best practices\n\n**Tool Registry**: [Tool & Library Registry](.\u002Freferences\u002Ftool-library-registry.md) - Catalog of development tools, their purposes, and usage patterns for linting, testing, and build automation\n\n**API Documentation**: [API Reference](.\u002Freferences\u002Fapi_reference.md) - API specifications, integration guides, and programmatic interface documentation\n\n#### Navigating Large References\n\nTo find specific modules in modern-modules.md:\n\n```bash\ngrep -i \"^### \" references\u002Fmodern-modules.md\n```\n\nTo search for tools by category in tool-library-registry.md:\n\n```bash\ngrep -A 5 \"^## \" references\u002Ftool-library-registry.md\n```\n\nTo locate workflow patterns in python-development-orchestration.md:\n\n```bash\ngrep -i \"^## \" references\u002Fpython-development-orchestration.md\n```\n\n### External Commands\n\nThese slash commands are external dependencies installed in `~\u002F.claude\u002Fcommands\u002F`:\n\n- [\u002Fmodernpython](~\u002F.claude\u002Fcommands\u002Fmodernpython.md) - Python 3.11+ patterns and PEP references\n- [\u002Fshebangpython](~\u002F.claude\u002Fcommands\u002Fshebangpython.md) - PEP 723 validation and shebang standards\n\n## Summary\n\n### Python Development Skill for All Roles\n\n**For All Roles (Orchestrators and Agents)**:\n\n- Modern Python 3.11+ standards and patterns\n- Quality gates: ruff, pyright, mypy, pytest (>80% coverage)\n- Command standards: \u002Fmodernpython, \u002Fshebangpython\n- Reference documentation for 50+ modern Python modules\n- Tool and library registry\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n**For Orchestrators Only**:\n\n1. Read the [orchestration guide](.\u002Freferences\u002Fpython-development-orchestration.md) before delegating\n2. Choose the right agent based on task requirements\n3. Provide clear context: file paths, success criteria, scope boundaries\n4. Chain agents for complex workflows (design → test → implement → review)\n5. Instruct agents to validate with quality gates and commands\n6. Enable uv skill for package management\n\n**Orchestration = Coordination + Delegation + Validation**\n\n\u003C\u002Fsection>\n","# Opinionated Python Development Skill\n\n## Role Identification (Mandatory)\n\nThe model must identify its ROLE_TYPE and echo the following statement:\n\n```text\nMy ROLE_TYPE is \"\u003Cthe role type>\". I follow instructions given to \"the model\" and \"\u003Crole name>\".\n```\n\nWhere:\n\n- `\u003Cthe role type>` is either \"orchestrator\" or \"sub-agent\" based on the ROLE_TYPE identification rules in CLAUDE.md\n- `\u003Crole name>` is \"orchestrator\" if ROLE_TYPE is orchestrator, or \"sub-agent\" if ROLE_TYPE is sub-agent\n\n**Example for orchestrator:**\n\n```text\nMy ROLE_TYPE is \"orchestrator\". I follow instructions given to \"the model\" and \"orchestrator\".\n```\n\n**Example for sub-agent:**\n\n```text\nMy ROLE_TYPE is \"sub-agent\". I follow instructions given to \"the model\" and \"sub-agent\".\n```\n\n---\n\nOrchestration guide for Python development using specialized agents and modern Python 3.11-3.14 patterns.\n\n## Skill Architecture\n\n### Bundled Resources (Included in This Skill)\n\n**Reference Documentation:**\n\n- [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) - Extracted conventions from user's production projects (MANDATORY for new projects)\n- [Modern Python Modules](.\u002Freferences\u002Fmodern-modules.md) - 50+ library guides with usage patterns and best practices\n- [Tool & Library Registry](.\u002Freferences\u002Ftool-library-registry.md) - Development tools catalog for linting, testing, and build automation\n- [API Reference](.\u002Freferences\u002Fapi_reference.md) - API specifications and integration guides\n- [Python Development Orchestration](.\u002Freferences\u002Fpython-development-orchestration.md) - Detailed workflow patterns for TDD, feature addition, refactoring, and code review\n\n**Command Templates and Guides** (`commands\u002F`):\n\n- Reference material for creating slash commands (NOT the actual slash commands)\n- Command templates and patterns for development\n- Testing and development workflow guides\n- See [Commands README](.\u002Fcommands\u002FREADME.md) for details\n\n**Scripts and Assets:**\n\n- Example scripts demonstrating patterns\n- Configuration templates and boilerplate\n\n### External Dependencies (Required - Not Bundled)\n\n**Agents** (install to `~\u002F.claude\u002Fagents\u002F`):\n\n- `@agent-python-cli-architect` - Python CLI development with Typer and Rich\n- `@agent-python-pytest-architect` - Test suite creation and planning\n- `@agent-python-code-reviewer` - Post-implementation code review\n- `@agent-python-portable-script` - Standalone stdlib-only script creation\n- `@agent-spec-architect` - Architecture design\n- `@agent-spec-planner` - Task breakdown and planning\n- `@agent-spec-analyst` - Requirements gathering\n\n**Slash Commands** (install to `~\u002F.claude\u002Fcommands\u002F`):\n\n- `\u002Fmodernpython` - Python 3.11+ pattern enforcement and legacy code detection\n- `\u002Fshebangpython` - PEP 723 inline script metadata validation\n\n**System Tools** (install via package manager or uv):\n\n- `uv` - Python package and project manager (required)\n- `ruff` - Linter and formatter\n- `pyright` - Type checker (Microsoft)\n- `mypy` - Static type checker\n- `pytest` - Testing framework\n- `pre-commit` - Git hook framework\n- `mutmut` - Mutation testing (for critical code)\n- `bandit` - Security scanner (for critical code)\n\n**Installation Notes:**\n\n- Agents and slash commands must be installed separately in their respective directories\n- This skill provides orchestration guidance and references; agents perform actual implementation\n- Use the `uv` skill for comprehensive uv documentation and package management guidance\n\n## Core Concepts\n\n### Python Development Standards\n\nThis skill provides orchestration patterns, modern Python 3.11+ standards, quality gates, and reference documentation for Python development.\n\n**Commands** (external - in `~\u002F.claude\u002Fcommands\u002F`):\n\n- `\u002Fmodernpython` - Validates Python 3.11+ patterns, identifies legacy code\n- `\u002Fshebangpython` - Validates correct shebang for all Python scripts\n- Note: This skill contains command templates in `commands\u002F` directory, not the actual slash commands\n\n**Reference Documentation**:\n\n- Modern Python modules (50+ libraries)\n- Tool and library registry with template variable system\n- API specifications\n- Working configurations for pyproject.toml, ruff, mypy, pytest\n\n**Docstring Standard**: Google style (Args\u002FReturns\u002FRaises sections). See [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) for ruff pydocstyle configuration (`convention = \"google\"`).\n\n**CRITICAL: Pyproject.toml Template Variables**:\n\nAll pyproject.toml examples use explicit template variables (e.g., `{{project_name_from_directory_or_git_remote}}`) instead of generic placeholders. The model MUST replace ALL template variables with actual values before creating files. See [Tool & Library Registry sections 18-19](.\u002Freferences\u002Ftool-library-registry.md#18-pyprojecttoml-template-variable-reference) for:\n\n- Complete variable reference and sourcing methods\n- Mandatory rules for file creation\n- Validation and verification procedures\n\n### Script Dependency Trade-offs\n\nUnderstand the complexity vs portability trade-off when creating Python CLI scripts:\n\n**Scripts with dependencies (Typer + Rich via PEP 723)**:\n\n- **Benefits**:\n  - Less development complexity - Leverage well-tested libraries for argument parsing, formatting, validation\n  - Less code to write - Typer handles CLI boilerplate, Rich handles output formatting\n  - Better UX - Colors, progress bars, structured output built-in\n  - Just as simple to execute - PEP 723 makes it a single-file executable; uv handles dependencies automatically\n- **Trade-off**: Requires network access on first run (to fetch packages)\n\n**stdlib-only scripts**:\n\n- **Benefits**:\n  - Maximum portability - Runs on ANY Python installation without network access\n  - Best for: Air-gapped systems, restricted corporate environments, embedded systems\n- **Trade-offs**:\n  - More development complexity - Build everything from scratch (manual argparse, manual tree formatting, manual color codes)\n  - More code to write and test - Everything must be implemented manually\n  - Basic UX - Limited formatting without external libraries\n\n**Default recommendation:** Use Typer + Rich with PEP 723 unless you have specific portability requirements that prevent network access.\n\n**See:**\n\n- [Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md) for detailed agent selection criteria\n- [Typer and Rich CLI Examples](.\u002Fassets\u002Ftyper_examples\u002Findex.md) for Rich width handling solutions\n\n### Rich Panel and Table Width Handling\n\n**Common Problem**: Rich containers (Panel, Table) wrap content at 80 characters in CI\u002Fnon-TTY environments, breaking URLs, commands, and structured output.\n\n**Two Solutions Depending on Context**:\n\n#### Solution 1: Plain Text (No Containers)\n\nFor plain text output that shouldn't wrap:\n\n```python\nfrom rich.console import Console\n\nconsole = Console()\n\n# URLs, paths, commands - never wrap\nconsole.print(long_url, crop=False, overflow=\"ignore\")\n```\n\n#### Solution 2: Rich Containers (Panel\u002FTable)\n\nFor Panel and Table that contain long content, `crop=False` alone doesn't work because containers calculate their own internal layout. Use `get_rendered_width()` helper with different patterns for Panel vs Table:\n\n```python\nfrom rich.console import Console, RenderableType\nfrom rich.measure import Measurement\nfrom rich.panel import Panel\nfrom rich.table import Table\n\ndef get_rendered_width(renderable: RenderableType) -> int:\n    \"\"\"Get actual rendered width of Rich renderable.\n\n    Handles color codes, Unicode, styling, padding, borders.\n    Works with Panel, Table, or any Rich container.\n    \"\"\"\n    temp_console = Console(width=9999)\n    measurement = Measurement.get(temp_console, temp_console.options, renderable)\n    return int(measurement.maximum)\n\nconsole = Console()\n\n# Panel: Set Console width (Panel fills Console width)\npanel = Panel(long_content)\npanel_width = get_rendered_width(panel)\nconsole.width = panel_width  # Set Console width, NOT panel.width\nconsole.print(panel, crop=False, overflow=\"ignore\", no_wrap=True, soft_wrap=True)\n\n# Table: Set Table width (Table controls its own width)\ntable = Table()\ntable.add_column(\"Type\", style=\"cyan\", no_wrap=True)\ntable.add_column(\"Value\", style=\"green\", no_wrap=True)\ntable.add_row(\"Data\", long_content)\ntable.width = get_rendered_width(table)  # Set Table width\nconsole.print(table, crop=False, overflow=\"ignore\", no_wrap=True, soft_wrap=True)\n```\n\n**Executable Examples**: See [.\u002Fassets\u002Ftyper_examples\u002F](.\u002Fassets\u002Ftyper_examples\u002Findex.md) for complete working scripts:\n\n- `console_no_wrap_example.py` - Plain text wrapping solutions\n- `console_containers_no_wrap.py` - Panel\u002FTable width handling with `get_rendered_width()`\n\n### Rich Emoji Usage\n\n**Instruction**: In Rich console output, always use Rich emoji tokens instead of literal Unicode emojis.\n\n**Use Rich emoji tokens**: `:white_check_mark: :cross_mark: :magnifying_glass:`\n\n**Why**: Cross-platform compatibility, consistent rendering, markdown-safe alignment\n\n**Example:**\n\n```python\nfrom rich.console import Console\n\nconsole = Console()\n\n# Correct - Rich emoji tokens\nconsole.print(\":white_check_mark: Task completed\")\nconsole.print(\":cross_mark: Task failed\")\nconsole.print(\":sparkles: New feature\")\nconsole.print(\":rocket: Performance improvement\")\n```\n\n**Benefits**:\n\n- Rich emoji tokens work consistently across all terminals and fonts\n- Avoid markdown table alignment issues (emoji width calculation problems)\n- Enable proper width measurement in `get_rendered_width()`\n- Ensure cross-platform compatibility (Windows, Linux, macOS)\n\n**See**: [Rich Emoji Documentation](https:\u002F\u002Frich.readthedocs.io\u002Fen\u002Fstable\u002Fappendix\u002Fcolors.html#appendix-emoji) for complete emoji token reference.\n\n### Python Exception Handling\n\nCatch exceptions only when you have a specific recovery action. Let all other errors propagate to the caller.\n\n**Reason**: Fail-fast principle surfaces issues early rather than hiding them behind generic error messages.\n\n**Pattern**:\n\n```python\ndef get_user(id):\n    return db.query(User, id)  # Errors surface naturally\n\ndef get_user_with_handling(id):\n    try:\n        return db.query(User, id)\n    except ConnectionError:\n        logger.warning(\"DB unavailable, using cache\")\n        return cache.get(f\"user:{id}\")  # Specific recovery action\n```\n\nWhen adding try\u002Fexcept, answer: \"What specific error do I expect, and what is my recovery action?\"\n\n**See**: [Exception Handling in Python CLI Applications](.\u002Freferences\u002Fexception-handling.md) for comprehensive patterns including Typer exception chain prevention.\n\n### Type Safety with Mypy\n\n**REQUIREMENT**: All Python code MUST be comprehensively typed using Python 3.11+ native type hints.\n\n**Python Version**: Python 3.11+ is required unless explicitly documented otherwise. Older versions are rare, documented exceptions.\n\n**The model MUST read the official mypy documentation examples before implementing type patterns. Each subsection links to authoritative mypy docs.**\n\n#### When to Use Generics\n\nUse generics for type-safe container classes and functions that work with multiple types.\n\n**Applicable scenarios:**\n\n- Custom collection classes (stacks, queues, boxes)\n- Functions accepting multiple type variants\n- Decorators and factory methods\n- Reusable protocols and type aliases\n\n**MUST read examples before implementing**: [Mypy Generics Documentation](.\u002Freferences\u002Fmypy-docs\u002Fgenerics.rst)\n\n**Python 3.11 Generic Pattern** (TypeVar with Generic):\n\n```python\nfrom typing import TypeVar, Generic, Sequence\n\nT = TypeVar('T')\n\nclass Stack(Generic[T]):\n    def __init__(self) -> None:\n        self._items: list[T] = []\n\n    def push(self, item: T) -> None:\n        self._items.append(item)\n\n    def pop(self) -> T:\n        return self._items.pop()\n\ndef first(seq: Sequence[T]) -> T:\n    return seq[0]\n```\n\n**Python 3.12+ Generic Pattern** (Native Syntax):\n\n```python\nclass Stack[T]:\n    def __init__(self) -> None:\n        self._items: list[T] = []\n\n    def push(self, item: T) -> None:\n        self._items.append(item)\n\n    def pop(self) -> T:\n        return self._items.pop()\n\ndef first[T](seq: Sequence[T]) -> T:\n    return seq[0]\n```\n\n**Type Variable Bounds** (restrict to subtypes):\n\n```python\nfrom collections.abc import Sequence\nfrom typing import Protocol\n\nclass SupportsAbs[T](Protocol):\n    def __abs__(self) -> T: ...\n\ndef max_by_abs[T: SupportsAbs[float]](*xs: T) -> T:\n    return max(xs, key=abs)\n```\n\n**Value Restrictions** (limit to specific types):\n\n```python\ndef concat[S: (str, bytes)](x: S, y: S) -> S:\n    return x + y  # Type-safe for str OR bytes, but not mixed\n```\n\n**Generic Method Chaining** (precise return types):\n\n```python\nfrom typing import Self\n\nclass Shape:\n    scale: float = 1.0\n\n    def set_scale(self, scale: float) -> Self:\n        self.scale = scale\n        return self  # Returns precise subclass type\n```\n\n#### When to Use Protocols\n\nUse protocols for structural subtyping when you need duck typing with type safety. Protocols check whether an object has required methods\u002Fattributes regardless of inheritance.\n\n**Applicable scenarios:**\n\n- Accept any object with specific capabilities without requiring inheritance\n- Define interfaces for duck-typed code\n- Create flexible callback types\n- Ensure compatibility without tight coupling\n\n**MUST read examples before implementing**: [Mypy Protocols Documentation](.\u002Freferences\u002Fmypy-docs\u002Fprotocols.rst)\n\n**Basic Protocol Pattern**:\n\n```python\nfrom typing import Protocol\n\nclass SupportsClose(Protocol):\n    def close(self) -> None: ...\n\ndef close_resource(resource: SupportsClose) -> None:\n    resource.close()  # Works with ANY object having close() method\n\n# No inheritance needed - structural match\nclass FileHandler:\n    def close(self) -> None:\n        print(\"Closing file\")\n\nclose_resource(FileHandler())  # ✅ Type-safe\n```\n\n**Read-Only Attributes** (use @property to avoid invariance issues):\n\n```python\nfrom typing import Protocol\n\nclass Named(Protocol):\n    @property\n    def name(self) -> str: ...  # Read-only via property\n```\n\n**Recursive Protocols** (tree structures):\n\n```python\nfrom typing import Protocol\n\nclass TreeLike(Protocol):\n    value: int\n\n    @property\n    def left(self) -> TreeLike | None: ...\n\n    @property\n    def right(self) -> TreeLike | None: ...\n```\n\n**Runtime Checks**:\n\n```python\nfrom typing import Protocol, runtime_checkable\n\n@runtime_checkable\nclass Drawable(Protocol):\n    def draw(self) -> None: ...\n\ndef render(obj: object) -> None:\n    if isinstance(obj, Drawable):  # Runtime check enabled\n        obj.draw()\n```\n\n**WARNING**: `isinstance()` with protocols only verifies attribute existence, NOT type correctness. Use for structural validation, not precise type guarantees.\n\n#### TypedDict for Dictionary Typing\n\nUse TypedDict for dictionaries with fixed schemas and string keys where each key has a specific value type.\n\n**Applicable scenarios:**\n\n- Dictionaries representing objects with predictable structure\n- JSON-like data structures\n- Configuration dictionaries\n- API request\u002Fresponse payloads\n\n**MUST read examples before implementing**: [Mypy TypedDict Documentation](.\u002Freferences\u002Fmypy-docs\u002Ftyped_dict.rst)\n\n**Required Fields Pattern** (all keys required):\n\n```python\nfrom typing import TypedDict\n\nclass Movie(TypedDict):\n    name: str\n    year: int\n    director: str\n\nmovie: Movie = {\n    \"name\": \"Blade Runner\",\n    \"year\": 1982,\n    \"director\": \"Ridley Scott\"\n}  # All keys required\n```\n\n**Optional Fields Pattern** (total=False):\n\n```python\nfrom typing import TypedDict\n\nclass MovieOptions(TypedDict, total=False):\n    subtitles: bool\n    audio_language: str\n\noptions: MovieOptions = {}  # ✅ Empty dict valid\noptions2: MovieOptions = {\"subtitles\": True}  # ✅ Partial valid\n```\n\n**Mixed Required\u002FOptional Pattern**:\n\n```python\nfrom typing import TypedDict\n\nclass MovieBase(TypedDict):\n    name: str  # Required\n    year: int  # Required\n\nclass Movie(MovieBase, total=False):\n    director: str  # Optional\n    rating: float  # Optional\n\nmovie: Movie = {\"name\": \"Alien\", \"year\": 1979}  # ✅ Valid\n```\n\n**CRITICAL**: Always annotate variables when assigning TypedDict literals. Without annotation, mypy infers `dict[str, Any]`:\n\n```python\n# ❌ Wrong - inferred as dict[str, Any]\nmovie = {\"name\": \"Alien\", \"year\": 1979}\n\n# ✅ Correct - explicitly typed\nmovie: Movie = {\"name\": \"Alien\", \"year\": 1979}\n```\n\n#### Type Narrowing\n\nUse type narrowing to refine broad union types to specific types based on runtime checks.\n\n**Applicable scenarios:**\n\n- Handling union types (e.g., `str | int | None`)\n- Optional value processing\n- Validating input types\n- Control flow-based type refinement\n\n**MUST read examples before implementing**: [Mypy Type Narrowing Documentation](.\u002Freferences\u002Fmypy-docs\u002Ftype_narrowing.rst)\n\n**isinstance() Narrowing**:\n\n```python\ndef process_value(value: str | int) -> str:\n    if isinstance(value, str):\n        return value.upper()  # Narrowed to str\n    else:\n        return str(value * 2)  # Narrowed to int\n```\n\n**None Checks**:\n\n```python\ndef greet(name: str | None) -> str:\n    if name is not None:\n        return f\"Hello, {name}\"  # Narrowed to str\n    return \"Hello, stranger\"\n```\n\n**Type Guards** (custom narrowing functions):\n\n```python\nfrom typing import TypeGuard\n\ndef is_str_list(val: list[object]) -> TypeGuard[list[str]]:\n    return all(isinstance(x, str) for x in val)\n\ndef process(values: list[object]) -> None:\n    if is_str_list(values):\n        # Narrowed to list[str] in this branch\n        print(\" \".join(values))\n```\n\n**TypeIs (Python 3.13+, more powerful than TypeGuard)**:\n\n```python\nfrom typing import TypeIs\n\ndef is_str(val: object) -> TypeIs[str]:\n    return isinstance(val, str)\n\ndef process(val: str | int) -> None:\n    if is_str(val):\n        print(val.upper())  # Narrowed to str\n    else:\n        print(val * 2)  # Narrowed to int (complement type)\n```\n\n**Key difference**: TypeGuard narrows only the if-branch; TypeIs narrows both branches (if-branch to the specified type, else-branch to the complement).\n\n#### attrs vs dataclasses vs pydantic\n\n**Decision Matrix**:\n\n| Feature                | attrs                              | dataclasses                            | pydantic                                 |\n| ---------------------- | ---------------------------------- | -------------------------------------- | ---------------------------------------- |\n| **Performance**        | Fastest (compiled)                 | Fast (native)                          | Slower (validation overhead)             |\n| **Validation**         | Basic (via converters\u002Fvalidators)  | None (requires custom `__post_init__`) | Comprehensive (built-in)                 |\n| **Immutability**       | `@frozen`                          | `frozen=True`                          | `frozen=True` (v2)                       |\n| **Evolution**          | Excellent (`evolve()`)             | Basic (`replace()`)                    | Good (`model_copy()`)                    |\n| **Slots**              | Automatic                          | Manual (`slots=True`)                  | Automatic (v2)                           |\n| **Type Coercion**      | Manual                             | None                                   | Automatic                                |\n| **JSON Serialization** | Manual                             | Manual                                 | Native (`model_dump_json()`)             |\n| **Use When**           | High-performance, pure Python data | Stdlib-only requirement                | External data validation (APIs, configs) |\n\n**attrs Pattern** (high performance, pure Python):\n\n```python\nfrom attrs import define, field\n\n@define\nclass User:\n    name: str\n    age: int = field(validator=lambda i, a, v: v >= 0)\n    email: str | None = None\n```\n\n**MUST read examples**: [Mypy Additional Features - Attrs](.\u002Freferences\u002Fmypy-docs\u002Fadditional_features.rst)\n\n**dataclasses Pattern** (stdlib-only):\n\n```python\nfrom dataclasses import dataclass\n\n@dataclass(frozen=True, slots=True)\nclass User:\n    name: str\n    age: int\n    email: str | None = None\n\n    def __post_init__(self) -> None:\n        if self.age \u003C 0:\n            raise ValueError(\"Age must be non-negative\")\n```\n\n**pydantic Pattern** (external data validation):\n\n```python\nfrom pydantic import BaseModel, Field, field_validator\n\nclass User(BaseModel):\n    name: str\n    age: int = Field(ge=0)\n    email: str | None = None\n\n    @field_validator('age')\n    @classmethod\n    def validate_age(cls, v: int) -> int:\n        if v \u003C 0:\n            raise ValueError('Age must be non-negative')\n        return v\n```\n\n**Recommendation**:\n\n- **Default**: Use `attrs` for internal data structures (best performance, most features)\n- **Stdlib-only requirement**: Use `dataclasses`\n- **External data (APIs, configs, user input)**: Use `pydantic` (if already a dependency)\n\n**NEVER add pydantic as a dependency solely for dataclasses. Use attrs or stdlib dataclasses instead.**\n\n#### Additional Mypy Features\n\n**MUST read before using advanced patterns**: [Mypy Additional Features](.\u002Freferences\u002Fmypy-docs\u002Fadditional_features.rst)\n\n**Generic Dataclasses**:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Generic, TypeVar\n\nT = TypeVar('T')\n\n@dataclass\nclass Box(Generic[T]):\n    value: T\n\nint_box: Box[int] = Box(value=42)\nstr_box: Box[str] = Box(value=\"hello\")\n```\n\n**Self Type for Method Chaining**:\n\n```python\nfrom typing import Self\n\nclass Builder:\n    def set_name(self, name: str) -> Self:\n        self.name = name\n        return self\n\n    def set_value(self, value: int) -> Self:\n        self.value = value\n        return self\n\n# Type-safe chaining\nbuilder = Builder().set_name(\"test\").set_value(42)\n```\n\n#### Mypy Configuration Best Practices\n\n**Strict Mode Configuration** (pyproject.toml):\n\n```toml\n[tool.mypy]\npython_version = \"3.11\"\nstrict = true\nwarn_return_any = true\nwarn_unused_configs = true\ndisallow_untyped_defs = true\ndisallow_any_generics = true\ncheck_untyped_defs = true\nno_implicit_reexport = true\nwarn_redundant_casts = true\nwarn_unused_ignores = true\nwarn_no_return = true\nwarn_unreachable = true\n```\n\n**Per-Module Overrides** (for gradual typing):\n\n```toml\n[[tool.mypy.overrides]]\nmodule = \"third_party_lib.*\"\nignore_missing_imports = true\n\n[[tool.mypy.overrides]]\nmodule = \"legacy_code.*\"\ndisallow_untyped_defs = false\n```\n\n**See**: [Tool & Library Registry - Mypy Configuration](.\u002Freferences\u002Ftool-library-registry.md) for complete configuration examples.\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Agent Orchestration (Orchestrator Only)\n\n### Delegation Pattern\n\nThe orchestrator delegates Python development tasks to specialized agents rather than implementing directly.\n\n**Reason**: Agents have focused expertise and appropriate tool access for their specific domains.\n\n**The orchestrator follows this pattern**:\n\n1. Read the complete orchestration guide before delegating tasks\n2. Choose appropriate agents based on task requirements\n3. Provide clear context: file paths, success criteria, scope boundaries\n4. Chain agents for complex workflows (design → implement → test → review)\n5. Validate outputs with quality gates\n\n**The orchestrator delegates rather than implements**:\n\n| Task Type          | Delegation Target                |\n| ------------------ | -------------------------------- |\n| Python code        | `@agent-python-cli-architect`    |\n| Test creation      | `@agent-python-pytest-architect` |\n| Code review        | `@agent-python-code-reviewer`    |\n| Stdlib-only script | `@agent-python-portable-script`  |\n| Architecture       | `@agent-spec-architect`          |\n| Task breakdown     | `@agent-spec-planner`            |\n| Requirements       | `@agent-spec-analyst`            |\n\n**Reason for delegation table**: Clear mapping prevents orchestrator from implementing when it should coordinate.\n\n### Required Reading\n\n**The orchestrator must read and understand the complete agent selection guide before delegating any Python development task:**\n\n[Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md)\n\nThis guide contains:\n\n- Agent selection criteria and decision trees\n- Workflow patterns (TDD, feature addition, code review, refactoring, debugging)\n- Quality gates and validation requirements\n- Delegation best practices\n\n### Quick Reference Example\n\n```text\nUser: \"Build a CLI tool to process CSV files\"\n\nOrchestrator workflow:\n1. Read orchestration guide for agent selection\n2. Delegate to @agent-python-cli-architect\n   \"Create CSV processing CLI with Typer+Rich progress bars\"\n3. Delegate to @agent-python-pytest-architect\n   \"Create test suite for CSV processor\"\n4. Instruct agent to run: \u002Fshebangpython, \u002Fmodernpython\n5. Delegate to @agent-python-code-reviewer\n   \"Review CSV processor implementation\"\n6. Validate: Code quality checks (linting, formatting) performed and issues addressed per the holistic-linting skill, then uv run pytest\n```\n\n\u003C\u002Fsection>\n\n## Command Usage\n\n### \u002Fmodernpython\n\n**Purpose**: Comprehensive reference guide for Python 3.11+ patterns with official PEP citations\n\n**When to use**:\n\n- As reference guide when writing new code\n- Learning modern Python 3.11-3.14 features and patterns\n- Understanding official PEPs (585, 604, 695, etc.)\n- Identifying legacy patterns to avoid\n- Finding modern alternatives for old code\n\n**Note**: This is a reference document to READ, not an automated validation tool. Use it to guide your implementation choices.\n\n**Usage**:\n\n```text\n\u002Fmodernpython\n→ Loads comprehensive reference guide\n→ Provides Python 3.11+ pattern examples\n→ Includes PEP citations with research tool guidance (prefer MCP tools: Ref\u002Fexa over WebFetch)\n→ Shows legacy patterns to avoid\n→ Shows modern alternatives to use\n→ Framework-specific guides (Typer, Rich, pytest)\n\nResearch tool preference for PEP documentation:\n1. mcp__Ref__ref_search_documentation(query=\"PEP {number} Python enhancement proposal\")\n2. mcp__exa__get_code_context_exa(query=\"PEP {number} implementation examples\")\n3. WebFetch as fallback\n\n> [Web resource access, definitive guide for getting accurate data for high quality results](.\u002Freferences\u002Faccessing_online_resources.md)\n```\n\n**With file path argument**:\n\n```text\n\u002Fmodernpython src\u002Fmymodule.py\n→ Loads guide for reference while working on specified file\n→ Use guide to manually identify and refactor legacy patterns\n```\n\n### \u002Fshebangpython\n\n**Purpose**: Validate correct shebang for ALL Python scripts based on their dependencies and execution context\n\n**When to use**:\n\n- Creating any standalone executable Python script\n- Validating script shebang correctness\n- Ensuring scripts have proper execution configuration\n\n**Required for**: ALL executable Python scripts (validates shebang matches script type)\n\n**What it validates**:\n\n- **Stdlib-only scripts**: `#!\u002Fusr\u002Fbin\u002Fenv python3` (no PEP 723 needed - nothing to declare)\n- **Scripts with dependencies**: `#!\u002Fusr\u002Fbin\u002Fenv -S uv --quiet run --active --script` + PEP 723 metadata declaring those dependencies\n- **Package executables**: `#!\u002Fusr\u002Fbin\u002Fenv python3` (dependencies via package manager)\n- **Library modules**: No shebang (not directly executable)\n\n**See**: [PEP 723 Reference](.\u002Freferences\u002FPEP723.md) for details on inline script metadata\n\n**Pattern**:\n\n```text\n\u002Fshebangpython scripts\u002Fdeploy.py\n→ Analyzes imports to determine dependency type\n→ **Corrects shebang** to match script type (edits file if wrong)\n→ **Adds PEP 723 metadata** if external dependencies detected (edits file)\n→ **Removes PEP 723 metadata** if stdlib-only (edits file)\n→ Sets execute bit if needed\n→ Provides detailed verification report\n```\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Core Workflows (Orchestrator Only)\n\nThe orchestrator follows established workflow patterns for Python development tasks. See [Python Development Orchestration Guide](.\u002Freferences\u002Fpython-development-orchestration.md) for complete details.\n\n### Workflow Overview\n\n1. **TDD (Test-Driven Development)**: Design → Write Tests → Implement → Review → Validate\n2. **Feature Addition**: Requirements → Architecture → Plan → Implement → Test → Review\n3. **Code Review**: Self-Review → Standards Check → Agent Review → Fix → Re-validate\n4. **Refactoring**: Tests First → Refactor → Validate → Review\n5. **Debugging**: Reproduce → Trace → Fix → Test → Review\n\nEach workflow uses agent chaining with specific quality gates. See the orchestration guide for complete patterns, examples, and best practices.\n\n\u003C\u002Fsection>\n\n## Linting Discovery Protocol\n\n**The model executes this discovery sequence before any linting or formatting operations**:\n\n**Reason**: Projects use different tool configurations. Discovery ensures compatibility with project standards and CI pipelines.\n\n### Discovery Sequence\n\n1. **Check for git hook tool configuration**:\n\n   ```bash\n   # Verify .pre-commit-config.yaml exists\n   test -f .pre-commit-config.yaml && echo \"git hook config detected\"\n   ```\n\n   **If found**: Detect and run the correct git hook tool:\n\n   ```bash\n   # Detect tool (outputs 'prek' or 'pre-commit')\n   uv run python -c \"print(open('.git\u002Fhooks\u002Fpre-commit').readlines()[1].split()[4].rstrip(':') if __import__('pathlib').Path('.git\u002Fhooks\u002Fpre-commit').exists() else 'prek')\"\n\n   # Or use the holistic-linting detection script if available\n   uv run holistic-linting\u002Fscripts\u002Fdetect-hook-tool.py run --files \u003Cfiles>\n   ```\n\n   Detection logic: reads `.git\u002Fhooks\u002Fpre-commit` line 2, token 5 identifies the tool. Defaults to `prek`.\n\n   **Note**: prek is a Rust-based drop-in replacement for pre-commit. Both tools use the same `.pre-commit-config.yaml` and have identical CLI interfaces.\n\n   **Use detected tool with**: `uv run \u003Cdetected-tool> run --files \u003Cfiles>` for ALL quality checks\n\n   - This runs the complete toolchain configured in the project\n   - Includes formatting, linting, type checking, and custom validators\n   - Matches exactly what runs in CI and blocks merges\n\n2. **Else check CI pipeline configuration**:\n\n   ```bash\n   # Check for GitLab CI or GitHub Actions\n   test -f .gitlab-ci.yml || find .github\u002Fworkflows -name \"*.yml\" 2>\u002Fdev\u002Fnull\n   ```\n\n   **If found**: Read the CI config to identify required linting tools and their exact commands\n\n   - Look for `ruff`, `mypy`, `basedpyright`, `pyright`, `bandit` invocations\n   - Note the exact commands and flags used\n   - Execute those specific commands to ensure CI compatibility\n\n3. **Else fallback to tool detection**:\n   - Check `pyproject.toml` `[project.optional-dependencies]` or `[dependency-groups]` for dev tools\n   - Use discovered tools with standard configurations\n\n### Format-First Workflow\n\n**The model always formats before linting.**\n\n**Reason**: Formatting operations (like `ruff format`) automatically fix many linting issues (whitespace, line length, quote styles). Running linting before formatting wastes context and creates false positives.\n\n**Mandatory sequence**:\n\n1. **Format**: `uv run ruff format \u003Cfiles>` or via git hook tool (pre-commit\u002Fprek)\n2. **Lint**: `uv run ruff check \u003Cfiles>` or via git hook tool\n3. **Type check**: Use project-configured type checker\n4. **Test**: `uv run pytest`\n\n**When using git hook tool (pre-commit or prek)**:\n\n```bash\n# Detect which tool is installed, then run it\n# Tool runs hooks in configured order (formatting first)\nuv run \u003Cdetected-tool> run --files \u003Cfiles>\n```\n\nThe `.pre-commit-config.yaml` already specifies correct ordering - trust it.\n\n### Type Checker Discovery\n\n**The model detects which type checker the project uses**:\n\n**Reason**: Projects standardize on different type checkers (basedpyright, pyright, mypy). Using the wrong one produces incompatible results.\n\n**Detection priority**:\n\n1. Check `.pre-commit-config.yaml` for `basedpyright`, `pyright`, or `mypy` hooks\n2. Check `pyproject.toml` for `[tool.basedpyright]`, `[tool.pyright]`, or `[tool.mypy]` sections\n3. Check `.gitlab-ci.yml` or GitHub Actions for type checker invocations\n\n**Common patterns**:\n\n- **basedpyright**: GitLab projects (native GitLab reporting format)\n- **pyright**: General TypeScript-style projects\n- **mypy**: Python-first type checking\n\n**Example detection**:\n\n```bash\n# Check .pre-commit-config.yaml (works with both pre-commit and prek)\ngrep -E \"basedpyright|pyright|mypy\" .pre-commit-config.yaml\n\n# Check pyproject.toml\ngrep -E \"^\\[tool\\.(basedpyright|pyright|mypy)\\]\" pyproject.toml\n```\n\nAlways detect from project configuration rather than assuming.\n\n## Quality Gates\n\n**The model follows the Linting Discovery Protocol before executing quality gates.**\n\n**Every Python task must pass**:\n\n1. **Format-first**: `uv run ruff format \u003Cfiles>` (or via git hook tool)\n2. **Linting**: `uv run ruff check \u003Cfiles>` (clean, after formatting)\n3. **Type checking**: Use **detected type checker** (`basedpyright`, `pyright`, or `mypy`)\n4. **Tests**: `uv run pytest` (>80% coverage)\n5. **Modern patterns**: `\u002Fmodernpython` (no legacy typing)\n6. **Script compliance**: `\u002Fshebangpython` (for standalone scripts)\n\n**Preferred execution method**:\n\n```bash\n# If .pre-commit-config.yaml exists (runs all checks in correct order):\n# First detect which tool is installed (pre-commit or prek), then:\nuv run \u003Cdetected-tool> run --files \u003Cchanged_files>\n\n# Else use individual tools in this exact sequence:\nuv run ruff format \u003Cfiles>           # 1. Format first\nuv run ruff check \u003Cfiles>            # 2. Lint after formatting\nuv run \u003Cdetected-type-checker> \u003Cfiles>  # 3. Type check (basedpyright\u002Fpyright\u002Fmypy)\nuv run pytest                         # 4. Test\n```\n\n**For critical code** (payments, auth, security):\n\n- Coverage >95%\n- Mutation testing: `uv run mutmut run` (>90% score)\n- Security scan: `uv run bandit -r packages\u002F`\n\n**CI Compatibility Verification**:\n\nAfter local quality gates pass, verify CI will accept the changes:\n\n1. If `.gitlab-ci.yml` exists: Check for additional validators not in pre-commit\n2. If `.github\u002Fworkflows\u002F*.yml` exists: Check for additional quality gates\n3. Ensure all CI-required checks are executed locally before claiming task completion\n\n## Standard Project Structure\n\nAll Python projects use this directory layout:\n\n**Reason**: Consistent structure enables reliable automation and clear separation between user code and dependencies.\n\n```text\nproject-root\u002F\n├── pyproject.toml\n├── packages\u002F\n│   └── package_name\u002F      # Package code (hyphens in project name → underscores)\n│       ├── __init__.py\n│       └── ...\n├── tests\u002F\n├── scripts\u002F\n├── sessions\u002F              # Optional: cc-sessions framework\n└── README.md\n```\n\n**Package Directory Naming**:\n\n- Project name: `my-cli-tool` → Package directory: `packages\u002Fmy_cli_tool\u002F`\n- Hyphens in project names become underscores in package directories\n- The `packages\u002F` directory distinguishes user code from external dependencies\n\n**Hatchling Configuration**:\n\n```toml\n[tool.hatchling.build.targets.wheel]\npackages = [\"packages\u002Fpackage_name\"]\n```\n\nThis structure is consistent across all projects and enables clear separation of concerns.\n\n## Integration\n\n### External Reference Example\n\n**Complete working example** (external): `~\u002F.claude\u002Fagents\u002Fpython-cli-demo.py`\n\nThis reference implementation demonstrates all recommended patterns:\n\n- PEP 723 metadata with correct shebang\n- Typer + Rich integration\n- Modern Python 3.11+ (StrEnum, Protocol, TypeVar, Generics)\n- Annotated syntax for CLI params\n- Async processing\n- Comprehensive docstrings\n\nThis file is not bundled with this skill and must be available in `~\u002F.claude\u002Fagents\u002F` separately. Use as reference when creating CLI tools.\n\n### Using Asset Templates\n\nWhen creating new Python projects, copy standard configuration files from the skill's assets directory to ensure consistency with established conventions:\n\n**Reason**: Templates implement proven patterns and save setup time.\n\n**Asset Directory Location**: `~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F`\n\n**Available Templates**:\n\n1. **version.py** - Dual-mode version management (hatch-vcs + importlib.metadata fallback)\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002Fversion.py packages\u002F{package_name}\u002Fversion.py\n   ```\n\n2. **hatch_build.py** - Build hook for binary\u002Fasset handling (only if needed)\n\n   ```bash\n   mkdir -p scripts\u002F\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002Fhatch_build.py scripts\u002Fhatch_build.py\n   ```\n\n3. **.markdownlint.json** - Markdown linting configuration\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.markdownlint.json .\n   ```\n\n4. **.pre-commit-config.yaml** - Standard git hooks configuration\n\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.pre-commit-config.yaml .\n\n   # Install hooks using pre-commit or prek (whichever is available)\n   # Both tools use the same configuration file and have identical interfaces\n   uv run pre-commit install  # or: uv run prek install\n   ```\n\n5. **.editorconfig** - Editor formatting settings\n   ```bash\n   cp ~\u002F.claude\u002Fskills\u002Fpython3-development\u002Fassets\u002F.editorconfig .\n   ```\n\nThese templates implement the patterns documented in [User Project Conventions](.\u002Freferences\u002Fuser-project-conventions.md) and ensure all projects follow the same standards for version management, linting, formatting, and build configuration.\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n## Common Patterns to Follow (Orchestrator Only)\n\n**Delegation Pattern**:\n\n| Instead of                             | Use this pattern                                                               |\n| -------------------------------------- | ------------------------------------------------------------------------------ |\n| Writing Python code directly           | Delegate to `@agent-python-cli-architect` with clear requirements              |\n| Skipping validation steps              | Complete workflow: implement → test → review → validate                        |\n| Pre-deciding technical implementations | Let agents determine HOW based on requirements                                 |\n| Implementing and testing in same step  | Chain agents: `@agent-python-cli-architect` → `@agent-python-pytest-architect` |\n\n**Reason**: Orchestrators coordinate workflows. Agents have specialized expertise and focused tool access for implementation.\n\nFor detailed pattern examples and corrections, see [Anti-Patterns section](.\u002Freferences\u002Fpython-development-orchestration.md#anti-patterns-to-avoid) in the orchestration guide.\n\n\u003C\u002Fsection>\n\n## Detailed Documentation\n\n### Reference Documentation\n\n**Core Orchestration Guide**: [Python Development Orchestration](.\u002Freferences\u002Fpython-development-orchestration.md) - Detailed workflow patterns for TDD, feature addition, refactoring, and code review with comprehensive agent coordination strategies\n\n**PEP 723 Specification**: [PEP 723 - Inline Script Metadata](.\u002Freferences\u002FPEP723.md) - User-friendly guide to PEP 723 inline script metadata with examples and migration patterns\n\n**Exception Handling**: [Exception Handling in Python CLI Applications with Typer](.\u002Freferences\u002Fexception-handling.md) - Critical guidance on preventing exception chain explosion in Typer applications with correct patterns for graceful error handling\n\n**Typer and Rich Examples**: [Typer and Rich CLI Examples](.\u002Fassets\u002Ftyper_examples\u002Findex.md) - Executable examples demonstrating solutions to common problems with Rich Console text wrapping in CI\u002Fnon-TTY environments and Panel\u002FTable content wrapping\n\n**Module Reference**: [Modern Python Modules](.\u002Freferences\u002Fmodern-modules.md) - Comprehensive guide to 50+ modern Python libraries with deep-dive documentation for each module including usage patterns and best practices\n\n**Tool Registry**: [Tool & Library Registry](.\u002Freferences\u002Ftool-library-registry.md) - Catalog of development tools, their purposes, and usage patterns for linting, testing, and build automation\n\n**API Documentation**: [API Reference](.\u002Freferences\u002Fapi_reference.md) - API specifications, integration guides, and programmatic interface documentation\n\n#### Navigating Large References\n\nTo find specific modules in modern-modules.md:\n\n```bash\ngrep -i \"^### \" references\u002Fmodern-modules.md\n```\n\nTo search for tools by category in tool-library-registry.md:\n\n```bash\ngrep -A 5 \"^## \" references\u002Ftool-library-registry.md\n```\n\nTo locate workflow patterns in python-development-orchestration.md:\n\n```bash\ngrep -i \"^## \" references\u002Fpython-development-orchestration.md\n```\n\n### External Commands\n\nThese slash commands are external dependencies installed in `~\u002F.claude\u002Fcommands\u002F`:\n\n- [\u002Fmodernpython](~\u002F.claude\u002Fcommands\u002Fmodernpython.md) - Python 3.11+ patterns and PEP references\n- [\u002Fshebangpython](~\u002F.claude\u002Fcommands\u002Fshebangpython.md) - PEP 723 validation and shebang standards\n\n## Summary\n\n### Python Development Skill for All Roles\n\n**For All Roles (Orchestrators and Agents)**:\n\n- Modern Python 3.11+ standards and patterns\n- Quality gates: ruff, pyright, mypy, pytest (>80% coverage)\n- Command standards: \u002Fmodernpython, \u002Fshebangpython\n- Reference documentation for 50+ modern Python modules\n- Tool and library registry\n\n\u003Csection ROLE_TYPE=\"orchestrator\">\n\n**For Orchestrators Only**:\n\n1. Read the [orchestration guide](.\u002Freferences\u002Fpython-development-orchestration.md) before delegating\n2. Choose the right agent based on task requirements\n3. Provide clear context: file paths, success criteria, scope boundaries\n4. Chain agents for complex workflows (design → test → implement → review)\n5. Instruct agents to validate with quality gates and commands\n6. Enable uv skill for package management\n\n**Orchestration = Coordination + Delegation + Validation**\n\n\u003C\u002Fsection>\n",{"name":5,"version":54,"description":7,"last_updated":55,"python_compatibility":56},"1.1.0","2025-11-04","3.11+","main","f2ec4b3b9133d34eeaf9b38e4b0a97e8e5705a7f","benchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development",0,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard","https:\u002F\u002Fgithub.com\u002FJSGforever","2026-08-29 18:27:56",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add JSGforever\u002Fskillguard --skill python3-development",{"tool":70,"command":71},"bunx","bunx skills add JSGforever\u002Fskillguard --skill python3-development",{"tool":73,"command":74},"pnpm","pnpm dlx skills add JSGforever\u002Fskillguard --skill python3-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002FSKILL.md",true,[78,84,88,92,98,102,106,110,114,118,122,126,130,134,138,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"assets\u002F.editorconfig","ASSET","资产文件",653,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002F.editorconfig",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"assets\u002F.markdownlint.json",961,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002F.markdownlint.json",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"assets\u002Fexample.pre-commit-config.yaml",3770,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fexample.pre-commit-config.yaml",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"assets\u002Fhatch_build.py","SCRIPT","脚本",4671,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fhatch_build.py",{"path":99,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":100,"sourceHtmlUrl":101},"assets\u002Fnested-typer-exceptions\u002F.gitignore",12,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002F.gitignore",{"path":103,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":104,"sourceHtmlUrl":105},"assets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_corrected_rich_console.py",6481,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_corrected_rich_console.py",{"path":107,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":108,"sourceHtmlUrl":109},"assets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_corrected_typer_echo.py",6211,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_corrected_typer_echo.py",{"path":111,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":112,"sourceHtmlUrl":113},"assets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_naive_workaround.py",7245,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion_naive_workaround.py",{"path":115,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":116,"sourceHtmlUrl":117},"assets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion.py",6521,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002Fnested-typer-exception-explosion.py",{"path":119,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":120,"sourceHtmlUrl":121},"assets\u002Fnested-typer-exceptions\u002FREADME.md",2887,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fnested-typer-exceptions\u002FREADME.md",{"path":123,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":124,"sourceHtmlUrl":125},"assets\u002Ftyper_examples\u002Fconsole_containers_no_wrap.py",6458,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Ftyper_examples\u002Fconsole_containers_no_wrap.py",{"path":127,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":128,"sourceHtmlUrl":129},"assets\u002Ftyper_examples\u002Fconsole_no_wrap_example.py",2700,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Ftyper_examples\u002Fconsole_no_wrap_example.py",{"path":131,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":132,"sourceHtmlUrl":133},"assets\u002Ftyper_examples\u002Findex.md",5384,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Ftyper_examples\u002Findex.md",{"path":135,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":136,"sourceHtmlUrl":137},"assets\u002Fversion.py",1831,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fassets\u002Fversion.py",{"path":139,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":142,"sourceHtmlUrl":143},"commands\u002Fdevelopment\u002Fconfig\u002Fcommand-patterns.yml","REFERENCE","参考文档",2229,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Fdevelopment\u002Fconfig\u002Fcommand-patterns.yml",{"path":145,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":146,"sourceHtmlUrl":147},"commands\u002Fdevelopment\u002Fcreate-feature-task.md",1759,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Fdevelopment\u002Fcreate-feature-task.md",{"path":149,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":150,"sourceHtmlUrl":151},"commands\u002Fdevelopment\u002Ftemplates\u002Fcommand-template.md",983,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Fdevelopment\u002Ftemplates\u002Fcommand-template.md",{"path":153,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":154,"sourceHtmlUrl":155},"commands\u002Fdevelopment\u002Fuse-command-template.md",2202,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Fdevelopment\u002Fuse-command-template.md",{"path":157,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":158,"sourceHtmlUrl":159},"commands\u002FREADME.md",8141,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002FREADME.md",{"path":161,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":162,"sourceHtmlUrl":163},"commands\u002Ftesting\u002Fanalyze-test-failures.md",4369,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Ftesting\u002Fanalyze-test-failures.md",{"path":165,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":166,"sourceHtmlUrl":167},"commands\u002Ftesting\u002Fcomprehensive-test-review.md",727,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Ftesting\u002Fcomprehensive-test-review.md",{"path":169,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":170,"sourceHtmlUrl":171},"commands\u002Ftesting\u002Ftest-failure-mindset.md",4891,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fcommands\u002Ftesting\u002Ftest-failure-mindset.md",{"path":173,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":174,"sourceHtmlUrl":175},"planning\u002FREADME.md",2190,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fplanning\u002FREADME.md",{"path":177,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":178,"sourceHtmlUrl":179},"planning\u002Freference-document-architecture.md",65055,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Fplanning\u002Freference-document-architecture.md",{"path":181,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":182,"sourceHtmlUrl":183},"references\u002Fapi_reference.md",1146,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fapi_reference.md",{"path":185,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":186,"sourceHtmlUrl":187},"references\u002Fexception-handling.md",15194,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fexception-handling.md",{"path":189,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":190,"sourceHtmlUrl":191},"references\u002Fmodern-modules.md",31258,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules.md",{"path":193,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":194,"sourceHtmlUrl":195},"references\u002Fmodern-modules\u002Farrow.md",18844,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Farrow.md",{"path":197,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":198,"sourceHtmlUrl":199},"references\u002Fmodern-modules\u002Fattrs.md",14538,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fattrs.md",{"path":201,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":202,"sourceHtmlUrl":203},"references\u002Fmodern-modules\u002Fbidict.md",17978,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fbidict.md",{"path":205,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":206,"sourceHtmlUrl":207},"references\u002Fmodern-modules\u002Fblinker.md",16294,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fblinker.md",{"path":209,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":210,"sourceHtmlUrl":211},"references\u002Fmodern-modules\u002Fboltons.md",15200,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fboltons.md",{"path":213,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":214,"sourceHtmlUrl":215},"references\u002Fmodern-modules\u002Fbox.md",19445,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fbox.md",{"path":217,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":218,"sourceHtmlUrl":219},"references\u002Fmodern-modules\u002Fcopier.md",22289,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fcopier.md",{"path":221,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":222,"sourceHtmlUrl":223},"references\u002Fmodern-modules\u002Fdatasette.md",20673,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fdatasette.md",{"path":225,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":226,"sourceHtmlUrl":227},"references\u002Fmodern-modules\u002Ffabric.md",20199,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Ffabric.md",{"path":229,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":230,"sourceHtmlUrl":231},"references\u002Fmodern-modules\u002FGitPython.md",15507,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002FGitPython.md",{"path":233,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":234,"sourceHtmlUrl":235},"references\u002Fmodern-modules\u002Fhttpx.md",21708,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fhttpx.md",{"path":237,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":238,"sourceHtmlUrl":239},"references\u002Fmodern-modules\u002Fpaho-mqtt.md",25631,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fpaho-mqtt.md",{"path":241,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":242,"sourceHtmlUrl":243},"references\u002Fmodern-modules\u002Fprefect.md",15075,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fprefect.md",{"path":245,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":246,"sourceHtmlUrl":247},"references\u002Fmodern-modules\u002Fpython-diskcache.md",30416,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fpython-diskcache.md",{"path":249,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":250,"sourceHtmlUrl":251},"references\u002Fmodern-modules\u002Fpython-dotenv.md",20390,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fpython-dotenv.md",{"path":253,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":254,"sourceHtmlUrl":255},"references\u002Fmodern-modules\u002Frobotframework.md",19382,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Frobotframework.md",{"path":257,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":258,"sourceHtmlUrl":259},"references\u002Fmodern-modules\u002Fshiv.md",15338,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fshiv.md",{"path":261,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":262,"sourceHtmlUrl":263},"references\u002Fmodern-modules\u002Fuvloop.md",12899,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmodern-modules\u002Fuvloop.md",{"path":265,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":266,"sourceHtmlUrl":267},"references\u002Fmypy-docs\u002Fadditional_features.rst",6310,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmypy-docs\u002Fadditional_features.rst",{"path":269,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":270,"sourceHtmlUrl":271},"references\u002Fmypy-docs\u002Fgenerics.rst",18031,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmypy-docs\u002Fgenerics.rst",{"path":273,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":274,"sourceHtmlUrl":275},"references\u002Fmypy-docs\u002Fprotocols.rst",9786,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmypy-docs\u002Fprotocols.rst",{"path":277,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":278,"sourceHtmlUrl":279},"references\u002Fmypy-docs\u002Ftype_narrowing.rst",9592,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmypy-docs\u002Ftype_narrowing.rst",{"path":281,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":282,"sourceHtmlUrl":283},"references\u002Fmypy-docs\u002Ftyped_dict.rst",6088,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fmypy-docs\u002Ftyped_dict.rst",{"path":285,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":286,"sourceHtmlUrl":287},"references\u002FPEP723.md",13444,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002FPEP723.md",{"path":289,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":290,"sourceHtmlUrl":291},"references\u002Fpython-development-orchestration.md",19160,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fpython-development-orchestration.md",{"path":293,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":294,"sourceHtmlUrl":295},"references\u002Ftool-library-registry.md",114101,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Ftool-library-registry.md",{"path":297,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":298,"sourceHtmlUrl":299},"references\u002Fuser-project-conventions.md",23949,"https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__BbgnsurfTech--python3-development\u002Freferences\u002Fuser-project-conventions.md",[301,328,343,370,392,413],{"skillNo":302,"name":303,"nameZh":6,"description":304,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":305,"categories":306,"keywords":308,"publishedAt":49},"01M71HY2SNXBA9Q00WZDTZQ31Z","skillguard-codex-scanner","Hybrid deterministic+LLM agent-skill security scanner. Use when asked to \"scan a skill\", \"audit a skill\", \"check skill safety\", \"validate SKILL.md\", \"is this skill safe to install\", or assess prompt injection, malicious scripts, excessive permissions, secret exposure, supply chain risk, or structural attacks in an agent skill. Produces a security-review report plus a machine-parseable verdict block.","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fsrc\u002Fskillguard\u002Fstatic_scanner\u002Fskillguard-codex-scanner\u002FSKILL.md",[307],{"categoryNo":26,"categoryName":27,"taxonomyType":20,"taxonomyTypeDesc":21},[309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,35],"scanner","skillguard codex scanner","skillguard","codex","chain","skill security","security-review","review report","structural","secret","prompt injection","security scanner","when","review","malicious","permissions","exposure","audit","scripts",{"skillNo":329,"name":330,"nameZh":6,"description":331,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":332,"licenseFileUrl":6,"sourceHtmlUrl":333,"categories":334,"keywords":340,"publishedAt":49},"01M71HY0SPKTT3S27BC2HPAC5M","data-exfiltrator","Analyzes data files","MIT","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Fsmoke-one-skill\u002Fasset1__cisco-ai-defense--data-exfiltrator\u002FSKILL.md",[335],{"categoryNo":336,"categoryName":337,"taxonomyType":338,"taxonomyTypeDesc":339},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[341,342,41],"data","data exfiltrator",{"skillNo":344,"name":345,"nameZh":6,"description":346,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":347,"categories":348,"keywords":349,"publishedAt":49},"01M71HXVS9EMN44BGDW215FZ72","real-time-collaboration-engine","Build real-time collaborative editing with WebSockets, OT\u002FCRDT conflict resolution, and presence awareness. Implements cursor tracking, optimistic updates, and offline sync. Use for collaborative editors, whiteboards, video editing. Activate on \"real-time collaboration\", \"WebSocket sync\", \"multiplayer editing\", \"CRDT\", \"presence awareness\". NOT for simple chat, request-response APIs, or single-user apps.","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__curiositech--real-time-collaboration-engine\u002FSKILL.md",[],[350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369],"time","real time collaboration engine","real time collaboration","collaboration","engine","real time","Video","reliability","video editing","performance","conflict resolution","presence","access","apps","updates","Bash","activate","optimizer","react","streaming",{"skillNo":371,"name":372,"nameZh":6,"description":373,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":374,"categories":375,"keywords":379,"publishedAt":49},"01M71HXP6CTY4KFN0QVMMN0V7J","react-performance-optimizer","Optimize React apps for 60fps performance. Implements memoization, virtualization, code splitting, bundle optimization. Use for slow renders, large lists, bundle bloat. Activate on \"React performance\", \"slow render\", \"useMemo\", \"bundle size\", \"virtualization\". NOT for backend optimization, non-React frameworks, or premature optimization.","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__curiositech--react-performance-optimizer\u002FSKILL.md",[376],{"categoryNo":377,"categoryName":378,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",[359,380,367,368,381,382,383,384,385,386,350,387,388,363,365,389,366,369,390,391],"react performance optimizer","react performance","performance optimizer","app","nextjs","expert","re","render","2025","code","router","strategies",{"skillNo":393,"name":394,"nameZh":6,"description":395,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":396,"categories":397,"keywords":399,"publishedAt":49},"01M71HXH7QXSQB4QTDZ7SP7YXQ","llm-streaming-response-handler","Build production LLM streaming UIs with Server-Sent Events, real-time token display, cancellation, error recovery. Handles OpenAI\u002FAnthropic\u002FClaude streaming APIs. Use for chatbots, AI assistants, real-time text generation. Activate on \"LLM streaming\", \"SSE\", \"token stream\", \"chat UI\", \"real-time AI\". NOT for batch processing, non-streaming APIs, or WebSocket bidirectional chat.","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__curiositech--llm-streaming-response-handler\u002FSKILL.md",[398],{"categoryNo":377,"categoryName":378,"taxonomyType":20,"taxonomyTypeDesc":21},[400,369,401,402,403,404,359,350,405,406,407,365,366,367,408,368,409,410,411,412],"llm streaming response handler","handler","error","processing","retry","chat ui","error recovery","critical","batch","display","text","server","read",{"skillNo":414,"name":415,"nameZh":6,"description":416,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":417,"categories":418,"keywords":424,"publishedAt":49},"01M71HXCB0E1YRKYW1Y8T0Y106","github-actions-pipeline-builder","Build production CI\u002FCD pipelines with GitHub Actions. Implements matrix builds, caching, deployments, testing, security scanning. Use for automated testing, deployments, release workflows. Activate on \"GitHub Actions\", \"CI\u002FCD\", \"workflow\", \"deployment pipeline\", \"automated testing\". NOT for Jenkins\u002FCircleCI, manual deployments, or non-GitHub repositories.","https:\u002F\u002Fgithub.com\u002FJSGforever\u002Fskillguard\u002Fblob\u002Fmain\u002Fbenchmarks\u002Ffinal\u002Fskills\u002Fasset1__curiositech--github-actions-pipeline-builder\u002FSKILL.md",[419,420,423],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":421,"categoryName":422,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":26,"categoryName":27,"taxonomyType":20,"taxonomyTypeDesc":21},[425,426,427,428,429,430,431,357,385,432,43,433,366,391,36,412,434,435,436,34],"github actions pipeline builder","actions","github actions","pipeline builder","github","builder","pipeline","testing","workflows","release","write","edit"]