Python Pro
Jeffallan/claude-skills
Writes type-annotated Python 3.11+ with async patterns, dataclasses and pytest suites, validated with mypy in strict mode, black and ruff.
Adds a runtime test anchor for backend async code that could block the asyncio event loop, and proves the anchor fails when the blocking call returns.
$ npx skills add bytedance/deer-flow --skill blocking-io-guard -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bytedance/deer-flow blocking-io-guard --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/bytedance/deer-flow.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agent/skills/blocking-io-guard .claude/skills/blocking-io-guard && 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 "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .claude/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guardType 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 bytedance/deer-flow --skill blocking-io-guard -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bytedance/deer-flow blocking-io-guard --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bytedance/deer-flow.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agent/skills/blocking-io-guard .agents/skills/blocking-io-guard && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .agents/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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 bytedance/deer-flow --skill blocking-io-guard -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bytedance/deer-flow blocking-io-guard --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bytedance/deer-flow.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agent/skills/blocking-io-guard .cursor/skills/blocking-io-guard && 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 "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .cursor/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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/bytedance/deer-flow.git --path .agent/skills/blocking-io-guard--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 bytedance/deer-flow --skill blocking-io-guard -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bytedance/deer-flow blocking-io-guard --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bytedance/deer-flow.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agent/skills/blocking-io-guard .gemini/skills/blocking-io-guard && 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 "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .gemini/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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 bytedance/deer-flow blocking-io-guardInstalls 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 bytedance/deer-flow --skill blocking-io-guard -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bytedance/deer-flow.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agent/skills/blocking-io-guard .github/skills/blocking-io-guard && 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 "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .github/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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 bytedance/deer-flow --skill blocking-io-guard -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bytedance/deer-flow blocking-io-guard --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bytedance/deer-flow.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agent/skills/blocking-io-guard .opencode/skills/blocking-io-guard && 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 "blocking-io-guard" agent skill from https://github.com/bytedance/deer-flow/tree/main/.agent/skills/blocking-io-guard into .opencode/skills/blocking-io-guard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blocking-io-guard", 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.
blocking-io-guardAdds a runtime test anchor for backend async code that could block the asyncio event loop, and proves the anchor fails when the blocking call returns.
DeerFlow's CI gate for blocking IO is a dynamic detector, which only catches blocking calls on paths a test actually runs. This skill closes the gap by pairing backend async changes with a runtime anchor under tests/blocking_io/ that is verified to fail when the blocking IO comes back. It applies to Python under backend/app, the backend harness package and backend/scripts.
In Mode A it scans your own diff against origin/main with scripts/scan_changed_blocking_io.py, run through uv, and lists candidates from added lines plus findings that are new since the merge base; work must be committed first. It notes a blind spot: a new async caller of a sync helper defined in another file is invisible, so that helper needs a manual check. Mode B runs make detect-blocking-io over the whole repo and writes findings to .deer-flow/blocking-io-findings.json.
Triage works high priority first, with one root cause per pull request while any HIGH remains, then medium and low items in batches of about five. Each candidate is routed, an anchor is drafted or extended from templates/anchor.template.py, and references/good-anchor-rules.md should be read before writing one.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5ecc1c2. 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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
makegituvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and uv, which can reach the network depending on how they are called.
From 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.
Blocking IO Guard loads about 1.7k tokens when it runs, and up to ~2.9k if it reads all its reference files. Until then it costs about 129 tokens; SKILL.md has 895 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 bytedance/deer-flow at commit 5ecc1c2, republished under its MIT licence (© bytedance). 895 words, ~1,693 tokens.
.claude/skills/blocking-io-guard/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Help a contributor ship backend async changes together with the runtime anchor that lets DeerFlow's blocking-IO CI gate actually see the new code. The dynamic detector only catches blocking IO on paths a test executes — this skill closes that gap, either for your own diff or for a repo-wide triage round.
Read references/good-anchor-rules.md before writing any anchor.
Only read references/sop-skeleton.md when generalizing this SOP to another
detector domain — it is not needed to execute the steps below.
backend/app/,
backend/packages/harness/deerflow/, or backend/scripts/ and may run on
the async event loop (Mode A). If unsure, run Step 0 — it answers
deterministically.Mode A — your own diff (default, pre-PR). From repo root:
uv run --project backend python scripts/scan_changed_blocking_io.py --base origin/mainLists blocking-IO candidates your change introduces: findings on lines the
diff added, plus findings that are new versus the merge base — the latter
catches a new async caller exposing an old sync helper whose blocking line is
not in the diff. The diff is <base>...HEAD, so commit your work first —
uncommitted lines are not selected.
If the list is empty, this change introduces no blocking-IO surface that the
static detector can see in the changed files. One residual blind spot
remains: reachability is same-file only, so a new async caller of a sync
helper defined in another file is invisible to both selections. If your
diff adds an async call into a helper that lives elsewhere, check that helper
manually (codegraph or git grep) before stopping.
Mode B — full-repo triage round. From repo root:
make detect-blocking-ioPrints a summary and writes the complete structured finding list to
.deer-flow/blocking-io-findings.json. Work HIGH priority first; do not start
MEDIUM until every HIGH is dispositioned (fixed, guarded, or recorded
NO-ACTION).
Batching policy (PR sizing). One fix unit per PR while any HIGH remains: a fix unit is one root cause — usually a single HIGH, but two HIGHs resolved by the same one-place fix belong together. Once no HIGH remains, MEDIUM/LOW may be batched (about five per round, grouped by module or by disposition) so each PR stays reviewable. A new Blockbuster rule is never batched with anything — it always ships alone (see Step 5).
Both modes emit the same JSON shape per finding: priority, location
(path/line/function), blocking_call (category/operation/symbol),
event_loop_exposure, reason, code. Priority is a deterministic review
ordering, not proof of a bug — Step 1 makes the actual call.
Read the code around each candidate and route it:
asyncio.to_thread, run_in_executor, async client) →
GUARD: add/extend an anchor that locks the offload so a future edit cannot
move it back onto the loop.ASYNC_REACHABLE_SAME_FILE). If the candidate is a sync helper, check for
async callers in other files (codegraph or git grep) before deciding
NO-ACTION.Offload the blocking call in production code, then re-run the Step 0 scan and
confirm the candidate no longer appears. If the offloaded call sits in a
finally / cleanup path, keep it best-effort and bounded (swallow-and-log,
asyncio.wait_for) so a failing or hung cleanup cannot mask the primary
exception. Match by the stable key
(path, function, symbol) — line numbers shift after edits, so never
compare by line.
This is pattern-level feedback in seconds; it complements but never replaces Step 5 — only the runtime gate proves the event loop is actually protected.
Look in backend/tests/blocking_io/ for a test that drives the production async
entry point reaching this candidate's branch.
templates/anchor.template.py.Follow references/good-anchor-rules.md. Drive the specific branch (e.g. force
the create failure that hits the cleanup shutil.rmtree). Never bypass the
blocking surface with a test-only asyncio.to_thread wrapper.
cd backend && make test-blocking-io (or target the one test). It must
go RED.A real block that stays GREEN means Blockbuster has no rule for that
primitive — that is the RULE route; see references/good-anchor-rules.md
for the admission criteria before adding one.
Commit the anchor(s) with your change; make test-blocking-io green. In the PR,
note: candidates found, each disposition, the re-scan result (Step 2), and
the teeth evidence (red→green). Include the reason for any NO-ACTION. A new
Blockbuster rule, if any, goes in its own commit with the evidence from Step 5.
© bytedance, 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 3 other files (references) in .agent/skills/blocking-io-guard of bytedance/deer-flow.
Open the folder on GitHubat commit 5ecc1c2
Blocking IO Guard 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 |
|---|---|---|---|---|---|---|
| Blocking IO Guard this skillbytedance/deer-flow | 84k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Python ProJeffallan/claude-skills | 12k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Checkav1155/houndarr | 292 | — | ~366 | Automated safety check: Pass | AGPL-3.0 | |
| Pump Testingnirholas/pump-fun-sdk | 133 | — | ~706 | Automated safety check: Pass | Custom licence | |
| Kedro Babysitkedro-org/kedro | 11k | — | ~4k | Automated safety check: Pass | Custom licence | |
| Adk Setupgoogle/adk-python | 22k | — | ~993 | Automated safety check: Notes | Apache-2.0 |
Jeffallan/claude-skills
Writes type-annotated Python 3.11+ with async patterns, dataclasses and pytest suites, validated with mypy in strict mode, black and ruff.
av1155/houndarr
Run Houndarr's full quality gate (ruff lint, ruff format check, mypy, bandit, pytest) and report results in a single table.
nirholas/pump-fun-sdk
Multi-language test infrastructure for the Pump SDK — Rust unit/integration/security/performance tests, TypeScript Jest tests, Python fuzz tests, shell test orchestration, Criterion benchmarks, and…
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…
google/adk-python
Sets up a local ADK Python development environment in a git clone of the open-source adk-python repository: a uv virtual environment, all dependency extras, pre-commit hooks, and a first unit-test…
amd/gaia
Adds a release eval scorecard to a GAIA hub agent by writing a harness adapter, running a real eval, and wiring the result into the agent's README and release gate.
bytedance/deer-flow
Deploys a project to Vercel with one script and no login, then returns a live preview URL and a claim link for moving the deployment into your own Vercel account.
bytedance/deer-flow
Picks a suitable chart type from 26 options for your data, maps the data to that chart's parameters and generates a chart image through a JavaScript script.
bytedance/deer-flow
Researches a GitHub repository over four rounds using the GitHub API and web search, then writes a structured markdown report with timeline, metrics and Mermaid diagrams.
bytedance/deer-flow
Analyzes uploaded Excel and CSV files with SQL through DuckDB, producing schema inspections, statistical summaries and exports to CSV, JSON or Markdown.
bytedance/deer-flow
Turns an image request into a structured JSON prompt and runs a bundled Python script to generate the picture, optionally guided by reference images.
bytedance/deer-flow
Walks through an end-to-end smoke test of a DeerFlow deployment: pull the latest code, deploy with Docker or locally, verify services, run health checks and write a report.
Works with
Categories
Adds a runtime test anchor for backend async code that could block the asyncio event loop, and proves the anchor fails when the blocking call returns. DeerFlow's CI gate for blocking IO is a dynamic detector, which only catches blocking calls on paths a test actually runs. This skill closes the gap by pairing backend async changes with a runtime anchor under tests/blocking_io/ that is verified to fail when the blocking IO comes back.
Blocking IO Guard fits situations like: changing backend Python that may run on the asyncio event loop; running a repo-wide triage of blocking IO findings; answering a reviewer or CI request for blocking-IO coverage.
Run `npx skills add bytedance/deer-flow --skill blocking-io-guard -a claude-code`. Or copy the skill folder (.agent/skills/blocking-io-guard in bytedance/deer-flow) into .claude/skills/blocking-io-guard in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bytedance/deer-flow --skill blocking-io-guard -a codex`. Or copy the skill folder (.agent/skills/blocking-io-guard in bytedance/deer-flow) into .agents/skills/blocking-io-guard 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 bytedance/deer-flow --skill blocking-io-guard -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blocking-io-guard, .gemini/skills/blocking-io-guard, .github/skills/blocking-io-guard and .opencode/skills/blocking-io-guard in your project.
Going by SKILL.md and its folder, Blocking IO Guard needs Python for the scripts in its folder and the command-line tools its instructions call (make, git and uv). Our summary lists: A DeerFlow checkout with the backend project and uv; The make detect-blocking-io target for full-repo scans.
SKILL.md contains no URLs. Its commands use git and uv, which can reach the network depending on how they are called. 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.
Blocking IO Guard is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.8k 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 Blocking IO Guard: Python Pro (Jeffallan/claude-skills, 12k stars), Check (av1155/houndarr, 292 stars), Pump Testing (nirholas/pump-fun-sdk, 133 stars) and Kedro Babysit (kedro-org/kedro, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bytedance (a GitHub organization) maintains it in bytedance/deer-flow, which has 83,561 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 9, 2026.
Source: bytedance/deer-flow on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.