Kedro Babysit
kedro-org/kedro
Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…
A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .claude/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .claude/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .agents/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .agents/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .cursor/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .cursor/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/astral-sh/ruff.git --path .agents/skills/minimizing-ty-ecosystem-changes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .gemini/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .gemini/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .github/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .github/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install astral-sh/ruff minimizing-ty-ecosystem-changes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/astral-sh/ruff.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/minimizing-ty-ecosystem-changes .opencode/skills/minimizing-ty-ecosystem-changes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "minimizing-ty-ecosystem-changes" agent skill from https://github.com/astral-sh/ruff/tree/main/.agents/skills/minimizing-ty-ecosystem-changes into .opencode/skills/minimizing-ty-ecosystem-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minimizing-ty-ecosystem-changes", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
minimizing-ty-ecosystem-changesA skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…
Minimizing Ty Ecosystem Changes is an agent skill from astral-sh/ruff, published by the product's own GitHub organization. Use when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference", "investigate a mypy-primer difference", or asks to reproduce, investigate, or minimize behavior changes in ty ecosystem/primer/mypyprimer/mypy-primer projects.
Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/advanced-minimization.md`).
It sits in Development, covering Type safety and Linting and formatting. It works with Ruff and Python. The repository describes itself as: An extremely fast Python linter and code formatter, written in Rust. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9520164. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gituvjqcargopythonFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Minimizing Ty Ecosystem Changes loads about 4.6k tokens when it runs, and up to ~5.8k if it reads all its reference files. Until then it costs about 90 tokens; SKILL.md has 1,987 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from astral-sh/ruff at commit 9520164, republished under its MIT licence (© astral-sh). 1,987 words, ~4,613 tokens.
.claude/skills/minimizing-ty-ecosystem-changes/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Start each investigation from fresh artifacts. Do not trust retained memories, previous minimizations, current upstream project state, or the helper script's default lockfile.
Prefix every direct or indirect gh invocation with GH_TELEMETRY=false; each Codex tool call may start a new shell.
If the primary agent supplied an immutable TY_ECOSYSTEM_RUN_METADATA manifest, verify that its run ID and attempt match the frozen report and that it contains each assigned project and the reviewed runtime settings described below. All subagents reuse the same read-only manifest; ask the primary agent to supply missing information rather than modifying it or generating another shared manifest.
Otherwise, run the bundled helper once with the Actions run ID or URL, matching attempt, and every affected mypy-primer project name:
export TY_ECOSYSTEM_RUN_METADATA="$PWD/target/ty-ecosystem-run.json"
GH_TELEMETRY=false uv run --script scripts/collect_ty_ecosystem_run_metadata.py \
<actions-run> <project-name>... \
--attempt <actions-attempt> \
--output "$TY_ECOSYSTEM_RUN_METADATA"The helper collects the analyzed Ruff revisions, Actions EXCLUDE_NEWER, ecosystem-analyzer and mypy-primer revisions, each project's CI Python version, and the original ecosystem config as ty_config. With --output, it also saves analysis-job logs and structured job metadata in an adjacent <output filename>.evidence directory; analysis_jobs records their paths and source URLs. Stop if the helper cannot determine a unique core value; never substitute a comment timestamp or local default.
The current workflow splits compilation into Build ty (base) and Build ty (pr). The helper reads the base job, which records both the merge base and PR merge revision, and still supports historical runs with a single Build ty job.
The helper preserves runtime evidence but does not interpret it. Before publishing the manifest as immutable, the primary agent must inspect the saved analysis-job logs and runner metadata, consulting the selected workflow revision when needed. Determine the environment of the actual analysis command, including any shell overrides, rather than copying settings from an earlier setup step. Read the installed uv version, runner OS and architecture, and effective analyzer profile from the available evidence, checking the default when no profile is specified; a tool-cache hit need not have a download message. Compare the relevant shards and resolve any conflicting or missing information without guessing from the local machine.
Record the verified findings in a runtime object in the manifest: runner_os, runner_arch, default_python_platform, uv_version, analyzer_profile, and checker_env. Include TY_UV, UV_LOCKED, and RUST_BACKTRACE in checker_env, using strings for values and null only when the setting is determined to be unset. A missing or unfamiliar log line is not proof that a variable was unset. Add brief evidence notes identifying the job and log section or workflow setting supporting the findings, then freeze the completed manifest for all workers.
Use the reproduction runner below to restore runtime.checker_env for each binary, including unsetting variables whose recorded value is null, and use the recorded uv version. Ensure any UV executable override selects that version too. For runs that enable PEP 723 script environments with TY_UV=scripts, omitting that value disables script dependency discovery.
Set UV_NO_BUILD=1 and UV_NO_BINARY=0 for script preparation and checker runs, matching ecosystem-analyzer's current overrides. These prevent source-distribution builds while allowing binary distributions. Apply them in addition to the recorded Actions environment, as shown below.
The current analyzer uses a 30-second checker deadline with --profile profiling or --profile release, and 180 seconds otherwise; its default profile is dev. Script preparation has a 180-second deadline. The analyzer profile is independent of the binary's build profile, so prebuilt profiling binaries still receive the default 180-second deadline unless the invocation selects another profile. Preserve these deadlines during reproduction and minimization, and classify expiration separately from an ordinary exit code. Verify the settings when investigating a historical run whose analyzer behavior differs from these current defaults.
Install the copied ecosystem config as user-level configuration so project settings and original command-line arguments retain their precedence. Fill a missing environment.python-platform in that copy with the verified CI default before publishing it, as described below. For example, a Linux default must not override a project's explicit win32 or all setting. When moving a minimized example outside its original project configuration, preserve that project's effective target platform as well.
Choose the execution environment before building binaries or installing dependencies. A ty target-platform option affects type analysis; it does not make uv resolve Linux dependency markers, install Linux wheels, or run Linux build steps on macOS. When platform-dependent dependencies, native extensions, installation commands, or PEP 723 script environments affect the result, run project setup and both compatible ty binaries in an environment matching the selected runner's OS and architecture, such as a container or remote host. Create its virtualenvs there instead of copying virtualenvs from another platform. Local native binaries are suitable when these differences do not affect the reproduction; still preserve the effective checker target and verify the reported difference exactly. Report an unavailable matching environment as a reproduction limitation rather than claiming equivalence.
If a primary agent supplied freshly copied base and PR profiling binaries plus the PR ecosystem config, preserve their absolute paths as TY_ECOSYSTEM_BASE_BINARY and TY_ECOSYSTEM_PR_BINARY, verify they exist, and reuse them. Do not rebuild those binaries, switch shared Ruff refs, or overwrite the shared artifacts. If an exact-revision debug binary is needed to identify an ambiguous internal type, request it from the primary agent; the profiling binaries remain the behavioral oracle.
Otherwise, require a clean working tree, remember its original ref, and build both exact revisions before assigning any subagent work. Reuse the checkout's existing Cargo target directory, copy the profiling binaries and PR ecosystem config to target/ty-ecosystem-bins, and restore the original ref when finished:
Fetch the PR revision explicitly because pull-request runs usually use a synthetic GitHub merge commit that a normal clone does not contain:
set -euo pipefail
test -z "$(git status --short)" || { git status --short; exit 1; }
original_ref="$(git symbolic-ref --quiet --short HEAD || git rev-parse HEAD)"
GH_TELEMETRY=false git fetch https://github.com/astral-sh/ruff.git <pr-revision>
mkdir -p target/ty-ecosystem-bins
trap 'git checkout "$original_ref"' EXIT
artifact_dir="$PWD/target/ty-ecosystem-bins"
build_target_dir="${CARGO_TARGET_DIR:-target}"
export CARGO_PROFILE_PROFILING_DEBUG=line-tables-only
jq -er '.ty_config' "$TY_ECOSYSTEM_RUN_METADATA" > "$artifact_dir/ty-ecosystem.toml"
git checkout --detach <merge-base>
cargo build --package ty --profile profiling
cp "$build_target_dir/profiling/ty" "$artifact_dir/ty-base"
git checkout --detach <pr-revision>
cargo build --package ty --profile profiling
cp "$build_target_dir/profiling/ty" "$artifact_dir/ty-pr"After restoring the original ref, inspect vendored definitions and Rust implementations with git -C <ruff-checkout> show <exact-revision>:<repository-relative-path>, selecting the merge-base or PR revision from the immutable manifest. Never assume working-tree files match either analyzed binary or switch the shared checkout's ref.
Before using or publishing the copied target/ty-ecosystem-bins/ty-ecosystem.toml, inspect its [environment] settings. If python-platform is absent, add it with the verified runtime.default_python_platform value, creating the table if needed. Preserve an existing platform setting and all other options. Make this edit only to the reproduction copy; workers reuse the primary agent's prepared config without modifying it.
Create a unique temporary directory for each project and use its absolute path. Read its Python version and the pinned mypy-primer revision from the shared manifest. Obtain the project revision from the /blob/<commit>/ component of the original diagnostic's source permalink, and check that links for the same project agree. If no diagnostic permalink exists, inspect the matching diagnostics shard or Actions logs; if the exact revision cannot be recovered, explicitly report that limitation. Then bypass the adjacent script lockfile:
GH_TELEMETRY=false uv run \
--python <project-python> \
--with "mypy-primer @ git+https://github.com/hauntsaninja/mypy_primer@<mypy-primer-revision>" \
--no-project \
python scripts/setup_primer_project.py \
<project-name> <absolute-temporary-directory> \
--revision <report-project-revision> \
--exclude-newer <EXCLUDE_NEWER>Use the prepared ecosystem config as user-level configuration, matching CI without replacing project-level config discovery, and restore XDG_CONFIG_HOME in each new shell. If a primary agent supplied TY_ECOSYSTEM_CONFIG_HOME, reuse its installed config without modifying it; otherwise, install the prepared copy locally. Read the project's strict or non-strict label from the frozen detailed report, or its strict_settings value from the matching diagnostics shard. Preserve that mode and the original project command's platform options when running either binary; the user-level config supplies CI's platform only as a fallback.
Before timing either binary, reproduce the pinned analyzer's script-preparation phase when script integration is enabled. Follow that revision's _install_script_dependencies routine for script selection, Python environment, and warmup count; use scripts/run_ty_ecosystem_repro.py --timeout-seconds 180 for its uv commands, with the environment overrides above. Keep dependency installation and warmup outside the checker deadline. For timeout changes, use comparable resources and concurrency to CI; a faster local machine or a longer deadline does not demonstrate that the timeout is fixed.
scripts/run_ty_ecosystem_repro.py restores the recorded checker environment, enforces the supplied deadline, and writes the command's outcome as JSON. Its own successful exit means the outcome was recorded, not that the checker succeeded. Read timed_out and return_code: timeout gives true and null, matching the analyzer's classification, and partial diagnostics from timed-out runs are discarded. Capture normal diagnostics from the JSON's stdout and stderr fields.
if [[ -n "${TY_ECOSYSTEM_CONFIG_HOME:-}" ]]; then
export XDG_CONFIG_HOME="$TY_ECOSYSTEM_CONFIG_HOME"
test -f "$XDG_CONFIG_HOME/ty/ty.toml" || exit 1
else
export XDG_CONFIG_HOME="$PWD/target/ty-ecosystem-config"
mkdir -p "$XDG_CONFIG_HOME/ty"
cp "$PWD/target/ty-ecosystem-bins/ty-ecosystem.toml" "$XDG_CONFIG_HOME/ty/ty.toml"
fi
unset TY_CONFIG_FILE
export UV_NO_BUILD=1
export UV_NO_BINARY=0
project_dir="<absolute-temporary-directory>"
repro_runner="$PWD/scripts/run_ty_ecosystem_repro.py"
repro_results="$(mktemp -d "${TMPDIR:-/tmp}/ty-repro-results.XXXXXX")"
ty_base="${TY_ECOSYSTEM_BASE_BINARY:-$PWD/target/ty-ecosystem-bins/ty-base}"
ty_pr="${TY_ECOSYSTEM_PR_BINARY:-$PWD/target/ty-ecosystem-bins/ty-pr}"
test -x "$ty_base" && test -x "$ty_pr" || exit 1
ecosystem_analysis_mode="<strict-or-non-strict-from-detailed-report>"
analyzer_profile="$(jq -er '.runtime.analyzer_profile' "$TY_ECOSYSTEM_RUN_METADATA")" || exit 1
case "$analyzer_profile" in
profiling|release) checker_timeout=30 ;;
*) checker_timeout=180 ;;
esac
if [[ "$ecosystem_analysis_mode" != strict && "$ecosystem_analysis_mode" != non-strict ]]; then
echo "Unknown ecosystem analysis mode: $ecosystem_analysis_mode" >&2
exit 1
fi
run_ecosystem_ty() {
if [[ "$ecosystem_analysis_mode" == strict ]]; then
uv run --script "$repro_runner" --metadata "$TY_ECOSYSTEM_RUN_METADATA" --timeout-seconds "$checker_timeout" --output "$repro_result" -- \
<project-specific command printed by setup_primer_project.py> \
--config analysis.strict-equality-semantics=true \
--config analysis.strict-generic-narrowing=true
else
uv run --script "$repro_runner" --metadata "$TY_ECOSYSTEM_RUN_METADATA" --timeout-seconds "$checker_timeout" --output "$repro_result" -- \
<project-specific command printed by setup_primer_project.py>
fi
}
cd "$project_dir"
ty_binary="$ty_base"
repro_result="$repro_results/base.json"
run_ecosystem_ty || exit 1
base_exit_status="$(jq -r '.return_code' "$repro_result")"
ty_binary="$ty_pr"
repro_result="$repro_results/pr.json"
run_ecosystem_ty || exit 1
pr_exit_status="$(jq -r '.return_code' "$repro_result")"Confirm the detailed report's difference exactly, including duplicate diagnostics and both exit outcomes. When reproducing an intermittent severe failure, repeat each side using its reported run count and deadline. Ordinary diagnostics can produce exit status 1; do not mistake that for a failed reproduction. For panics, identify the stable fingerprint by comparing the Rust panic site or decisive causal frame and panic payload; ignore checked Python-file paths and incidental backtrace differences.
The top priority is to make the reproducer as self-contained and isolated as feasible while preserving the original difference and underlying trigger. Ideally, a reader should be able to understand the behavior from the example and its explanation without consulting typeshed's stubs or third-party library definitions. Include the relevant definitions locally wherever feasible, then minimize them along with the original code. Prefer one file, with no avoidable imports or unnecessary definitions, annotations, branches, or advanced language features. Retain a third-party import only if identified ty behavior depends on that library's identity or third-party search-path classification.
Some strangeness or artificiality is expected after minimization. Keep enough meaningful structure and context that a reader can see how the pattern could arise in real code. Avoid examples that are extremely contrived or so generic that they leave no clue about that context, but continue reducing when this connection remains clear.
Removing avoidable imports and inlining relevant library or builtin definitions takes priority over both brevity and keeping the real-world pattern recognizable. If inlining preserves the original difference and underlying trigger, accept it even when it adds lines or makes the code less recognizable. This applies equally to builtins that require no import. Explain any lost real-world context in the accompanying prose.
Before minimizing any ecosystem change, read and follow references/advanced-minimization.md. Exhaust its complete reduction loop, including third-party dependency and standard-library inlining, and retain an import only after verifying that neither removing it nor inlining its definitions preserves the underlying behavior.
Attempt to inline the relevant stub definitions for complex builtins such as zip and map, reducing those definitions to what the example needs, so readers do not need to consult typeshed to understand the trigger. Verify the inlined example against both exact-revision binaries and preserve the original cause. Retain the builtin when verified inlining cannot preserve the underlying trigger or base-to-PR difference, for example when the differing vendored stub definitions are themselves the cause. Such a retained builtin does not prevent completion of minimization; document the evidence in the final audit.
Matching diagnostics or displayed types do not establish a shared cause. When the output is ambiguous, identify and compare the original and minimized triggers using exact-revision debug output, a targeted reveal_type, or the producing Rust call site from the matching analyzed revision.
A minimization is complete only when a verified reduction chain connects the reproducer to the original ecosystem entry, the import audit passes, and an exhaustive pass finds no further reduction consistent with these priorities. If a genuine external blocker prevents completion, report the blocker and identify the minimization as incomplete; an original source excerpt is not a successfully minimized result.
Provide the original permalinked report entry, exact base and PR behavior, minimal code, full diagnostic messages and error codes or the panic fingerprint, and the manifest/commands needed to reproduce it. When called from the summary workflow, return import-audit and reduction notes separately from report-ready Markdown.
© astral-sh, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in .agents/skills/minimizing-ty-ecosystem-changes of astral-sh/ruff.
Open the folder on GitHubat commit 9520164
Minimizing Ty Ecosystem Changes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Minimizing Ty Ecosystem Changes this skillastral-sh/ruff | 50k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Kedro Babysitkedro-org/kedro | 11k | — | ~4k | Automated safety check: Pass | Custom licence | |
| Update Dependenciesalorence/django-modern-rpc | 111 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Ha Code QualityFutureTense/keymaster | 349 | — | ~462 | Automated safety check: Pass | MIT | |
| Adk Stylegoogle/adk-python | 22k | — | ~769 | Automated safety check: Pass | Apache-2.0 | |
| Cb Code QualityBlkLeg/CircuitBreaker | 201 | — | ~1.9k | Automated safety check: Pass | MIT |
kedro-org/kedro
Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…
alorence/django-modern-rpc
Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.
FutureTense/keymaster
Standards and commands for linting, code formatting, typing validation (Ruff, MyPy, Codespell, ESLint, Pre-commit/Prek, Tox), and adherence to Home Assistant Python 3.14 standards in Keymaster.
google/adk-python
Python style and codebase conventions for ADK (Agent Development Kit): private-by-default file visibility, imports, type hints, Pydantic v2 models, formatting, docstrings, logging, async I/O, file…
BlkLeg/CircuitBreaker
Circuit Breaker code conventions and the quality gates that actually block a push — ruff, mypy, eslint, the pytest coverage ratchet, and the make verify tiers.
Taoidle/plan-cascade
Python coding best practices. An agent skill from Taoidle/plan-cascade.
astral-sh/ruff
A skill your agent uses when a user says "summarise ecosystem results", "summarize this ty ecosystem report", "what changed in this ecosystem run?", or asks to summarise or summarize ty ecosystem…
astral-sh/ruff
A skill your agent uses when a user asks to wobble ty constraint ordering, check constraint-set or TDD ordering determinism, test reversed constraint/typevar IDs, or investigate nondeterministic ty…
astral-sh/ruff
A skill your agent uses when a user says "add a ty rule", "add a ty diagnostic", "write this new ty diagnostic", "change a ty error message", "review ty diagnostics", or asks to add, update, or…
Categories
A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…. Minimizing Ty Ecosystem Changes is an agent skill from astral-sh/ruff, published by the product's own GitHub organization. Use when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference", "investigate a mypy-primer difference", or asks to reproduce, investigate, or minimize behavior changes in ty ecosystem/primer/mypyprimer/mypy-primer projects.
Minimizing Ty Ecosystem Changes fits situations like: A user says minimize this ty ecosystem change; reproduce this ecosystem result; investigate a primer difference; investigate a mypyprimer difference.
Run `npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a claude-code`. Or copy the skill folder (.agents/skills/minimizing-ty-ecosystem-changes in astral-sh/ruff) into .claude/skills/minimizing-ty-ecosystem-changes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a codex`. Or copy the skill folder (.agents/skills/minimizing-ty-ecosystem-changes in astral-sh/ruff) into .agents/skills/minimizing-ty-ecosystem-changes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add astral-sh/ruff --skill minimizing-ty-ecosystem-changes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/minimizing-ty-ecosystem-changes, .gemini/skills/minimizing-ty-ecosystem-changes, .github/skills/minimizing-ty-ecosystem-changes and .opencode/skills/minimizing-ty-ecosystem-changes in your project.
Going by SKILL.md and its folder, Minimizing Ty Ecosystem Changes needs the command-line tools its instructions call (git, uv, jq, cargo and python). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Minimizing Ty Ecosystem Changes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.6k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Minimizing Ty Ecosystem Changes: Kedro Babysit (kedro-org/kedro, 11k stars), Update Dependencies (alorence/django-modern-rpc, 111 stars), Ha Code Quality (FutureTense/keymaster, 349 stars) and Adk Style (google/adk-python, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
astral-sh (a GitHub organization, an official publisher) maintains it in astral-sh/ruff, which has 49,941 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 9, 2026.
Source: astral-sh/ruff on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.