Compare Python type checkers

SkillAI & models

Lets your agent compare how Python type checkers ty, pyrefly, and basedpyright infer types.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Compare Python type checkers skill

About this capability

Compare Python type inference with ty, pyrefly, and basedpyright.

What this skill tells your AI

The instructions your AI receives, as published by jetbrains/intellij-community in .agents/skills/compare-python-typecheckers/SKILL.md and read by ahel’s review.

When reasoning about how PyCharm should infer a type or whether something ought to be a type error, cross-checking against the real third-party checkers is the fastest way to gain insight — and to see where they disagree. This skill runs them all on a scratch file or snippet and collates the output into a single report.

Run it

${CLAUDE_SKILL_DIR}/scripts/compare_typecheckers.py invokes each checker through uvx (fetched on demand — no install; the network is used on first run) and prints a Markdown report: a summary table (exit code / verdict / timing per tool) followed by each tool's raw output.

# Inline snippet:
uv run ${CLAUDE_SKILL_DIR}/scripts/compare_typecheckers.py -c 'def f(x: int) -> int:
    return x

f("a")'

# An existing file:
uv run ${CLAUDE_SKILL_DIR}/scripts/compare_typecheckers.py path/to/test.py

# A subset, written to a file:
uv run ${CLAUDE_SKILL_DIR}/scripts/compare_typecheckers.py test.py --tools ty,mypy -o /tmp/report.md

Flags: -c/--code (inline snippet), -t/--tools ty,mypy,… (subset), -o/--output (write to file), --timeout (per-checker seconds, default 180). The script exits 0 whenever it produced a report — findings live in the report, not the exit code.

Reading the result

  • The summary table shows each tool's exit code (0 = nothing flagged, non-zero = the checker reported an issue or failed to run), a verdict, and time.
  • Output formats differ per tool, so read each section, not just the table:
    • ty (Astral) and pyrefly (Meta) each have their own diagnostic style.
    • basedpyright is pyright-based and also emits extra diagnostics such as reportUnusedCallResult.
    • mypy and zuban share the same message format (zuban is mypy-compatible).
  • The checkers track their latest releases through uvx, so behaviour can shift over time — record the date when capturing results in a YouTrack issue or test.

Manual one-offs

The exact per-tool invocations, if you want to run just one by hand (note basedpyright takes the file positionally — no check subcommand):

ToolCommand
tyuvx ty check test.py
pyreflyuvx pyrefly check test.py
basedpyrightuvx basedpyright test.py
mypyuvx mypy test.py
zubanuvx zuban check test.py

Signals

GitHub stars
21k
Forks
6k
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
compare-python-typecheckers
Source
github.com/jetbrains/intellij-community