python-type-safety — скилл для Claude Code: установка и типы
Помогает добавлять типы в Python-код, писать дженерики и протоколы, а также настраивать строгую проверку через mypy или pyright.
/plugin marketplace add wshobson/agents
/plugin install python-development@claude-code-workflowsЧто делает python-type-safety
Скилл разбирает типизацию Python на практических задачах: аннотации параметров и возвращаемых значений, современный синтаксис объединений, сужение типов через проверки и создание типобезопасных API. Он пригодится при доработке существующего кода и проектировании библиотек.
Внутри описаны дженерики для переиспользуемых классов, протоколы для структурных интерфейсов и настройка mypy --strict или pyright. Для старых проектов строгий режим предлагается включать постепенно, используя настройки для отдельных модулей.
Ставьте его, если агенту нужно работать с типами Python системно. Для небольшого скрипта без статической проверки такой скилл может оказаться лишним.
Какие задачи решает
- добавить аннотации к публичным функциям и классам
- собрать переиспользуемый generic-класс
- описать интерфейс через Protocol
- настроить строгую проверку mypy или pyright
- сузить тип после проверки на None
Примеры запросов агенту
- Добавь типы ко всем публичным API в
src/users.pyи проверь код черезmypy --strict. - Сделай generic-класс Result для значения или ошибки и сохрани типы при вызове.
- Опиши структурный интерфейс через Protocol и настрой проверку в
pyright.
Как установить python-type-safety
1Через маркетплейс плагинов
/plugin marketplace add wshobson/agents/plugin install python-development@claude-code-workflowsКоманда ставит плагин python-development целиком, со всеми его скиллами
2Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill python-type-safety -a claude-code3Вручную: положить файлы
~/.claude/skills/python-type-safety/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/python-type-safety/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill python-type-safety -a codex2Вручную: положить файлы
.agents/skills/python-type-safety/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill python-type-safety -a cursor2Вручную: положить файлы
.cursor/skills/python-type-safety/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install wshobson/agents python-type-safety2Вручную: положить файлы
.github/skills/python-type-safety/SKILL.mdКомандой платформы
gemini skills install https://github.com/wshobson/agents --path plugins/python-development/skills/python-type-safetyВручную: положить файлы
.devin/skills/python-type-safety/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора304
Весь набор →Похожие
Рядом в теме «Языки программирования»
Все скиллы по теме «Языки программирования» →Вопросы о python-type-safety
Как установить python-type-safety в Claude Code?
Добавьте marketplace командой /plugin marketplace add wshobson/agents, затем установите скилл: /plugin install python-development@claude-code-workflows. Также доступна команда npx skills add wshobson/agents --skill python-type-safety -a claude-code.
Что делает python-type-safety?
Скилл помогает добавлять аннотации, создавать дженерики и протоколы, сужать типы в условиях и настраивать строгую проверку Python-кода через mypy или pyright.
С какими платформами работает python-type-safety?
Скилл предназначен для Claude Code, Codex и Cursor. Для проверки можно использовать mypy --strict или pyright.
Исходный текст
SKILL.md · MIT
---
name: python-type-safety
description: Python type safety with type hints, generics, protocols, and strict type checking. Use when adding type annotations, implementing generic classes, defining structural interfaces, or configuring mypy/pyright.
---
# Python Type Safety
Leverage Python's type system to catch errors at static analysis time. Type annotations serve as enforced documentation that tooling validates automatically.
## When to Use This Skill
- Adding type hints to existing code
- Creating generic, reusable classes
- Defining structural interfaces with protocols
- Configuring mypy or pyright for strict checking
- Understanding type narrowing and guards
- Building type-safe APIs and libraries
## Core Concepts
### 1. Type Annotations
Declare expected types for function parameters, return values, and variables.
### 2. Generics
Write reusable code that preserves type information across different types.
### 3. Protocols
Define structural interfaces without inheritance (duck typing with type safety).
### 4. Type Narrowing
Use guards and conditionals to narrow types within code blocks.
## Quick Start
```python
def get_user(user_id: str) -> User | None:
"""Return type makes 'might not exist' explicit."""
...
# Type checker enforces handling None case
user = get_user("123")
if user is None:
raise UserNotFoundError("123")
print(user.name) # Type checker knows user is User here
```
## Fundamental Patterns
### Pattern 1: Annotate All Public Signatures
Every public function, method, and class should have type annotations.
```python
def get_user(user_id: str) -> User:
"""Retrieve user by ID."""
...
def process_batch(
items: list[Item],
max_workers: int = 4,
) -> BatchResult[ProcessedItem]:
"""Process items concurrently."""
...
class UserRepository:
def __init__(self, db: Database) -> None:
self._db = db
async def find_by_id(self, user_id: str) -> User | None:
"""Return User if found, None otherwise."""
...
async def find_by_email(self, email: str) -> User | None:
...
async def save(self, user: User) -> User:
"""Save and return user with generated ID."""
...
```
Use `mypy --strict` or `pyright` in CI to catch type errors early. For existing projects, enable strict mode incrementally using per-module overrides.
### Pattern 2: Use Modern Union Syntax
Python 3.10+ provides cleaner union syntax.
```python
# Preferred (3.10+)
def find_user(user_id: str) -> User | None:
...
def parse_value(v: str) -> int | float | str:
...
# Older style (still valid, needed for 3.9)
from typing import Optional, Union
def find_user(user_id: str) -> Optional[User]:
...
```
### Pattern 3: Type Narrowing with Guards
Use conditionals to narrow types for the type checker.
```python
def process_user(user_id: str) -> UserData:
user = find_user(user_id)
if user is None:
raise UserNotFoundError(f"User {user_id} not found")
# Type checker knows user is User here, not User | None
return UserData(
name=user.name,
email=user.email,
)
def process_items(items: list[Item | None]) -> list[ProcessedItem]:
# Filter and narrow types
valid_items = [item for item in items if item is not None]
# valid_items is now list[Item]
return [process(item) for item in valid_items]
```
### Pattern 4: Generic Classes
Create type-safe reusable containers.
```python
from typing import TypeVar, Generic
T = TypeVar("T")
E = TypeVar("E", bound=Exception)
class Result(Generic[T, E]):
"""Represents either a success value or an error."""
def __init__(
self,
value: T | None = None,
error: E | None = None,
) -> None:
if (value is None) == (error is None):
raise ValueError("Exactly one of value or error must be set")
self._value = value
self._error = error
@property
def is_success(self) -> bool:
return self._error is None
@property
def is_failure(self) -> bool:
return self._error is not None
def unwrap(self) -> T:
"""Get value or raise the error."""
if self._error is not None:
raise self._error
return self._value # type: ignore[return-value]
def unwrap_or(self, default: T) -> T:
"""Get value or return default."""
if self._error is not None:
return default
return self._value # type: ignore[return-value]
# Usage preserves types
def parse_config(path: str) -> Result[Config, ConfigError]:
try:
return Result(value=Config.from_file(path))
except ConfigError as e:
return Result(error=e)
result = parse_config("config.yaml")
if result.is_success:
config = result.unwrap() # Type: Config
```
## Detailed worked examples and patterns
Detailed sections (starting with `## Advanced Patterns`) live in `references/details.md`. Read that file when the navigation summary above is insufficient.
## Best Practices Summary
1. **Annotate all public APIs** - Functions, methods, class attributes
2. **Use `T | None`** - Modern union syntax over `Optional[T]`
3. **Run strict type checking** - `mypy --strict` in CI
4. **Use generics** - Preserve type info in reusable code
5. **Define protocols** - Structural typing for interfaces
6. **Narrow types** - Use guards to help the type checker
7. **Bound type vars** - Restrict generics to meaningful types
8. **Create type aliases** - Meaningful names for complex types
9. **Minimize `Any`** - Use specific types or generics. `Any` is acceptable for truly dynamic data or when interfacing with untyped third-party code
10. **Document with types** - Types are enforceable documentation
© Seth Hobson · MIT · wshobson/agents