Agent skill

python3-typing

Selects and applies the strongest valid Python typing strategy for the current project. Use when designing models, validating external data, addressing type checker failures, reducing Any usage, defining boundaries, or choosing between stdlib typing, Pydantic, and Hypothesis-based boundary testing.

Stars 33
Forks 4

Install this agent skill to your Project

npx add-skill https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/python-engineering/skills/python3-typing

SKILL.md

Python Typing

Choose the strongest valid lane automatically. Do not ask the user to pick a typing philosophy.

Consult references/typing-policy.md for the full policy document.

Required Policy

  • Forbid Any, broad object, and unchecked cast() in normal internal code
  • Allow them only at explicit boundaries where unknown-shape data enters
  • Isolate boundary code in dedicated validator, parser, adapter, or boundary modules
  • Validate immediately and return strongly typed internal objects
  • Do not let raw payloads cross into the typed core
  • Allow narrow lint exceptions for Any only in approved boundary modules

Lane Selection

1. Python 3.10 Constrained or stdlib-only

  • Use only compatibility-safe stdlib typing features
  • Prefer dataclasses, TypedDict, Protocol, Literal, TypeGuard, NewType
  • Validate with explicit runtime checks in dedicated boundary wrappers
  • No third-party type assumptions

2. Python 3.11+ stdlib-only

  • Use modern stdlib typing features supported by the interpreter
  • Use Self, assert_type, and reveal_type where useful during refactoring
  • TypedDict with NotRequired

3. Python 3.11+ with Pydantic

  • Use Pydantic models for ingress contracts
  • Prefer strict mode where coercion would hide upstream errors
  • Use TypeAdapter for annotated types that do not need full models
  • See references/pydantic-boundaries.md

4. Python 3.11+ with Hypothesis

  • Property-test boundaries, validators, parsers, and invariants
  • Prefer from_type() where practical
  • See references/hypothesis-boundaries.md

5. Python 3.12+

  • Use type statement for explicit type aliases: type JSONValue = str | int | ...
  • Use PEP 695 generic parameter syntax for new generic helpers

6. Python 3.13+

  • Use TypeIs for clearer custom narrowing helpers (replaces TypeGuard where bidirectional narrowing needed)
  • Use ReadOnly in TypedDict fields that must not mutate after validation

7. Python 3.14+

  • Keep annotation-reading infrastructure compatible with deferred evaluation (PEP 649)
  • Use annotationlib.get_annotations() in infrastructure that inspects annotations at runtime

Boundary Implementation Standard

Use dedicated wrappers named like:

  • parse_*
  • validate_*
  • decode_*
  • coerce_*
  • *_from_raw

Boundary modules should return typed objects only.

Example: stdlib-only boundary

python
from typing import TypedDict, NotRequired
from dataclasses import dataclass

class _RawIncoming(TypedDict):
    user_id: int
    email: str
    metadata: NotRequired[dict[str, str]]

@dataclass(frozen=True, slots=True)
class IncomingPayload:
    user_id: int
    email: str
    metadata: dict[str, str]

def parse_incoming(data: _RawIncoming) -> IncomingPayload:
    return IncomingPayload(
        user_id=data["user_id"],
        email=data["email"],
        metadata=data.get("metadata", {}),
    )

Example: Pydantic boundary

python
from pydantic import BaseModel, TypeAdapter

class IncomingPayload(BaseModel):
    user_id: int
    email: str
    metadata: dict[str, str] = {}
    model_config = {"strict": True}

def parse_incoming(data: dict[str, object]) -> IncomingPayload:
    return IncomingPayload.model_validate(data)

References

  • references/typing-policy.md — full boundary validation policy
  • references/pydantic-boundaries.md — Pydantic model and TypeAdapter patterns
  • references/hypothesis-boundaries.md — property-based testing for validators

Expand your agent's capabilities with these related and highly-rated skills.

Jamie-BitFlight/claude_skills

ccc

This skill should be used when code search is needed (whether explicitly requested or as part of completing a task), when indexing the codebase after changes, or when the user asks about ccc, cocoindex-code, or the codebase index. Trigger phrases include 'search the codebase', 'find code related to', 'update the index', 'ccc', 'cocoindex-code'.

33 4
Explore
Jamie-BitFlight/claude_skills

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.

33 4
Explore
Jamie-BitFlight/claude_skills

delegate

Quick delegation template for sub-agent prompts. Use when assigning work to a sub-agent, before invoking the Agent tool, or when preparing prompts for specialized agents. Provides the WHERE-WHAT-WHY framework. For comprehensive delegation guidance, activate the agent-orchestration how-to-delegate skill.

33 4
Explore
Jamie-BitFlight/claude_skills

swarm-spawning

Spawn agents and teammates in Claude Code swarms. Use when choosing between subagents vs teammates, selecting agent types (Explore, Plan, general-purpose, plugin agents), configuring spawn backends (in-process, tmux, iterm2), or setting environment variables for spawned agents.

33 4
Explore
Jamie-BitFlight/claude_skills

knowledge-explorer

Manage the research/ knowledge base (KB) of tool and library research entries. Use when browsing KB topics, adding new research entries, updating existing entries with dated revisions, fetching GitHub repo metadata into a draft KB entry, or migrating old-format entries to skill-spec frontmatter. Triggers on tasks like "what do we have on X", "add this to the KB", "update the KB entry for Y", "fetch github info for owner/repo", or "migrate old entries".

33 4
Explore
Jamie-BitFlight/claude_skills

design-anti-patterns

Enforce anti-AI UI design rules based on the Uncodixfy methodology. Use when generating HTML, CSS, React, Vue, Svelte, or any frontend UI code. Prevents "Codex UI" — the generic AI aesthetic of soft gradients, floating panels, oversized rounded corners, glassmorphism, hero sections in dashboards, and decorative copy. Applies constraints from Linear/Raycast/Stripe/GitHub design philosophy: functional, honest, human-designed interfaces. Triggers on: UI generation, dashboard building, frontend component creation, CSS styling, landing page design, or any task producing visual interface code.

33 4
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results