[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBA824J5S9SV3YJSSTGC31":3,"skill-same:01M6CBA824J5S9SV3YJSSTGC31":60},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M6CBA824J5S9SV3YJSSTGC31","python",null,"Python best practices with type hints, structure, and testing conventions","shahboura\u002Fagents-opencode","shahboura","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F210767?v=4","01M6C6WKTBT0NH92BEPQRHQSYM","Shehab El Hadidy","01M6C6WKYXG8AE68MCGBNE5ZFR",2,"MIT","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[5,19,20,21,22,23],"testing","development","best practices","python best practices","opencode","2026-11-10 10:12:30",false,"---\nname: python\ndescription: Python best practices with type hints, structure, and testing conventions\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  author: shahboura\n  version: \"2.0.0\"\n  audience: developers\n  workflow: development\n---\n\n## What I do\n- Enforce type hints and docstring standards on all Python code\n- Guide proper async patterns, resource management, and error handling\n- Apply naming conventions and import organization rules\n\n## When to use me\nUse this when working on Python projects that require strict typing and code quality standards.\n\n## Key Rules\n- Type hints are REQUIRED on ALL function signatures — no exceptions\n- Use Google-style docstrings for all public APIs (Args, Returns, Raises sections)\n- Always use context managers (`with`) for file handles, DB sessions, and resources\n- Prefer list\u002Fdict comprehensions over equivalent for-loops\n- Use `async\u002Fawait` for I\u002FO-bound operations where async libraries are available; prefer `asyncio.TaskGroup` (3.11+) for structured concurrency\n- Prefer typed data models (`@dataclass`, Pydantic models, or `TypedDict`) as appropriate for domain boundaries\n- Import order: standard library → third-party → local application (blank line between groups)\n- Use `pathlib.Path` over `os.path` for file operations\n- Prefer `Optional[T]` (or `T | None` on 3.10+) — never leave nullable returns untyped\n- Custom context managers via `@contextmanager` for resource lifecycle patterns\n- Use `pytest` fixtures with type annotations; for async tests, use the project's async test setup (for example `@pytest.mark.asyncio` with `pytest-asyncio`)\n- Use a verify-fix-verify loop: run the validation commands below, fix any failures, and rerun until all checks pass\n\n## Naming Conventions\n- `snake_case` for functions\u002Fvariables\u002Fmodules\n- `PascalCase` for classes and exceptions\n- `UPPER_SNAKE_CASE` for constants\n- Prefix internal helpers with `_` when they are not part of public API\n\n## Common Pitfalls\n- Unannotated public APIs that silently degrade type safety\n- Resource leaks from missing context managers (`with`)\n- Overusing broad `except Exception` without preserving context\n- Async functions called without awaiting in tests or orchestration logic\n\n## Example Patterns\n```python\nfrom dataclasses import dataclass\nfrom pathlib import Path\n\n@dataclass\nclass User:\n    id: int\n    email: str\n\ndef load_email(path: Path) -> str:\n    with path.open(\"r\", encoding=\"utf-8\") as handle:\n        return handle.read().strip()\n```\n\n## Validation Commands\nPrefer project scripts when present; use defaults below otherwise.\n\n```bash\nruff check .\nruff format .\nmypy .\npytest\n```\n","## What I do\n- Enforce type hints and docstring standards on all Python code\n- Guide proper async patterns, resource management, and error handling\n- Apply naming conventions and import organization rules\n\n## When to use me\nUse this when working on Python projects that require strict typing and code quality standards.\n\n## Key Rules\n- Type hints are REQUIRED on ALL function signatures — no exceptions\n- Use Google-style docstrings for all public APIs (Args, Returns, Raises sections)\n- Always use context managers (`with`) for file handles, DB sessions, and resources\n- Prefer list\u002Fdict comprehensions over equivalent for-loops\n- Use `async\u002Fawait` for I\u002FO-bound operations where async libraries are available; prefer `asyncio.TaskGroup` (3.11+) for structured concurrency\n- Prefer typed data models (`@dataclass`, Pydantic models, or `TypedDict`) as appropriate for domain boundaries\n- Import order: standard library → third-party → local application (blank line between groups)\n- Use `pathlib.Path` over `os.path` for file operations\n- Prefer `Optional[T]` (or `T | None` on 3.10+) — never leave nullable returns untyped\n- Custom context managers via `@contextmanager` for resource lifecycle patterns\n- Use `pytest` fixtures with type annotations; for async tests, use the project's async test setup (for example `@pytest.mark.asyncio` with `pytest-asyncio`)\n- Use a verify-fix-verify loop: run the validation commands below, fix any failures, and rerun until all checks pass\n\n## Naming Conventions\n- `snake_case` for functions\u002Fvariables\u002Fmodules\n- `PascalCase` for classes and exceptions\n- `UPPER_SNAKE_CASE` for constants\n- Prefix internal helpers with `_` when they are not part of public API\n\n## Common Pitfalls\n- Unannotated public APIs that silently degrade type safety\n- Resource leaks from missing context managers (`with`)\n- Overusing broad `except Exception` without preserving context\n- Async functions called without awaiting in tests or orchestration logic\n\n## Example Patterns\n```python\nfrom dataclasses import dataclass\nfrom pathlib import Path\n\n@dataclass\nclass User:\n    id: int\n    email: str\n\ndef load_email(path: Path) -> str:\n    with path.open(\"r\", encoding=\"utf-8\") as handle:\n        return handle.read().strip()\n```\n\n## Validation Commands\nPrefer project scripts when present; use defaults below otherwise.\n\n```bash\nruff check .\nruff format .\nmypy .\npytest\n```\n",{"name":5,"license":15,"metadata":29,"description":7,"compatibility":23},{"author":9,"version":30,"audience":31,"workflow":20},"2.0.0","developers","main","9b951b5b2e5d07d427baff330db5deb2a8c67511",".opencode\u002Fskills\u002Fpython",0,"https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode","https:\u002F\u002Fagnts.elkodr.com\u002F","https:\u002F\u002Fgithub.com\u002Fshahboura","2026-11-05 13:30:42",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add shahboura\u002Fagents-opencode --skill python",{"tool":46,"command":47},"bunx","bunx skills add shahboura\u002Fagents-opencode --skill python",{"tool":49,"command":50},"pnpm","pnpm dlx skills add shahboura\u002Fagents-opencode --skill python","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",true,[54],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"agents\u002Fopenai.yaml","REFERENCE","参考文档",269,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fmcp-server-patterns\u002Fagents\u002Fopenai.yaml",[61,66,75,80,85,90],{"skillNo":62,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":24},"01M6CBBX1C6NV7VY8XK21DV5FW","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Fvalid\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[5],{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":24},"01M6CBBVB7W6ABJH8XP3Z8PPMK","docs-validation","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Fvalid\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[72,73,74],"docs","validation","docs validation",{"skillNo":76,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":24},"01M6CBBT2WC781609MH5RN7KM7","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Funknown-skill\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[5],{"skillNo":81,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":24},"01M6CBBRNY6TDRZ5627GC8436D","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Funknown-skill\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[72,73,74],{"skillNo":86,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":24},"01M6CBBQDS170GBYA1CVW3DC5D","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Finline-skill\u002F.opencode\u002Fskills\u002Fpython\u002FSKILL.md",[],[5],{"skillNo":91,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":24},"01M6CBBP222WAW802YHY37F48A","https:\u002F\u002Fgithub.com\u002Fshahboura\u002Fagents-opencode\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fvalidate-agents\u002Finline-skill\u002F.opencode\u002Fskills\u002Fdocs-validation\u002FSKILL.md",[],[72,73,74]]