Compare Python type checkers
SkillAI & modelsLets your agent compare how Python type checkers ty, pyrefly, and basedpyright infer types.
Available today. Use it from your connected AI after setup.
No other account needed.
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) andpyrefly(Meta) each have their own diagnostic style.basedpyrightis pyright-based and also emits extra diagnostics such asreportUnusedCallResult.mypyandzubanshare the same message format (zubanis 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):
| Tool | Command |
|---|---|
| ty | uvx ty check test.py |
| pyrefly | uvx pyrefly check test.py |
| basedpyright | uvx basedpyright test.py |
| mypy | uvx mypy test.py |
| zuban | uvx 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