From open-python-skills
Python type checking expertise using ty - the extremely fast type checker by Astral. Use when: (1) Adding type annotations to Python code, (2) Fixing type errors reported by ty, (3) Migrating from mypy/pyright to ty, (4) Configuring ty for projects, (5) Understanding advanced type patterns (generics, protocols, intersection types), (6) Setting up ty in editors (VS Code, Cursor, Neovim, PyCharm).
npx claudepluginhub jiatastic/open-python-skills --plugin open-python-skillsThis skill uses the workspace's default tool permissions.
Master Python type checking with [ty](https://docs.astral.sh/ty/) - the extremely fast type checker written in Rust by Astral (creators of uv and Ruff).
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Master Python type checking with ty - the extremely fast type checker written in Rust by Astral (creators of uv and Ruff).
# Install
uv tool install ty
# or: pip install ty
# Check current directory
ty check
# Check specific files
ty check src/
# Full diagnostics
ty check --output-format full
Configure via pyproject.toml:
[tool.ty.environment]
python-version = "3.12"
python = "./.venv"
python-platform = "linux"
root = ["./src"]
extra-paths = ["./typings"]
[tool.ty.rules]
# error: fail CI, warn: report, ignore: disable
possibly-unresolved-reference = "error"
invalid-argument-type = "error"
division-by-zero = "warn"
unused-ignore-comment = "warn"
[tool.ty.src]
include = ["src", "tests"]
exclude = ["src/migrations/"]
# Per-file overrides
[[tool.ty.overrides]]
include = ["tests/**"]
[tool.ty.overrides.rules]
possibly-unresolved-reference = "warn"
| Rule | Default | Description |
|---|---|---|
possibly-unresolved-reference | error | Variable might not be defined |
invalid-argument-type | error | Argument type mismatch |
incompatible-assignment | error | Assigned value incompatible |
missing-argument | error | Required argument missing |
unsupported-operator | error | Operator not supported for types |
invalid-return-type | error | Return type mismatch |
division-by-zero | warn | Potential division by zero |
unused-ignore-comment | warn | Suppression not needed |
redundant-cast | warn | Cast has no effect |
possibly-unbound-attribute | warn | Attribute might not exist |
index-out-of-bounds | warn | Index might be out of range |
ty has first-class intersection type support:
def output_as_json(obj: Serializable) -> str:
if isinstance(obj, Versioned):
reveal_type(obj) # reveals: Serializable & Versioned
return str({
"data": obj.serialize_json(), # From Serializable
"version": obj.version # From Versioned
})
return obj.serialize_json()
# Suppress single rule
x: int = "hello" # type: ignore[incompatible-assignment]
# Suppress multiple
y = risky() # type: ignore[possibly-unresolved-reference, invalid-argument-type]
For detailed information, see:
| Document | Content |
|---|---|
references/ty_rules_reference.md | All rules with examples and fixes |
references/typing_cheatsheet.md | Python typing module quick reference |
references/advanced_patterns.md | Protocols, generics, type guards, variance |
references/migration_guide.md | mypy/pyright → ty migration |
references/common_errors.md | Error solutions with examples |
references/editor_setup/ | VS Code, Cursor, Neovim setup |