Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add zakariaf/Flutter-Skills --skill async-safetygit clone --depth 1 https://github.com/zakariaf/Flutter-SkillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/zakariaf/flutter-skills/async-safety)<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/async-safety"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/async-safety/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/async-safety"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/async-safety.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00189 | $0.03686 |
| Opus 5 | $0.00095 | $0.01843 |
| Sonnet 5 | $0.00038 | $0.00737 |
| Haiku 4.5 | $0.00019 | $0.00369 |
Grade A, and why
async-safety scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 250 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Async safety: no failure may be silent
Async bugs are silence. A dropped Future swallows its error; a dead BuildContext throws into a void; a leaked subscription fires into a disposed widget. An app with no telemetry has exactly two feedback loops — the analyzer and the test suite — and the analyzer has one hole big enough to drive the product through. Close it structurally, not with discipline. This skill applies whenever you write async/await, wire a callback, or hold a subscription, timer, or sink.
Non-negotiable rules
- A callback must never touch a
Future. EveryonTap/onPressed/onSubmitted/VoidCallbackhandler returnsvoid.onTap: () => vm.save(x)wheresaveis async is caught by NO lint (see below) — the fix is shape, not vigilance. - A
mounted/ref.mountedguard goes after EVERY await, immediately before the nextBuildContextuse — never once at the top, never before the await where it proves nothing. Or capture the object you need before the gap. - Multiple awaits ⇒ the guard sits after the LAST one. A guard only certifies the interval since the most recent suspension point.
unawaited(x)is legal only ifxprovably cannot fail silently — it ends in a.catchError(...)or is total. Bareunawaited(f)routes errors toPlatformDispatcher.onError, detached from the UI. That is silence with a permission slip.- Every
StreamSubscription,StreamController,Timer, and sink is released indispose()/ref.onDispose. Prefer not owning it: a provider gives teardown for free. - Every timer/stream callback that calls
setStateguardsmountedfirst. ATimerholds a strong reference to its closure and fires happily after the widget is gone. - No empty catch, no bare catch, no swallow. Every
catchhas anonclause (except the crash logger's own write), logs with its stack, and surfaces the failure. Userethrow, neverthrow e— the latter resets the stack trace. - Never
asserta platform/plugin return value. Asserts are stripped in release: green in every test, absent on the device — the perfect silent-failure bug. - Nothing unbounded runs before
runApp. No migration, no plugin warm-up. Show a usable first frame, then warm up inaddPostFrameCallback, unawaited. - No
runZonedGuarded. Two error handlers suffice —app-startup-and-bootstrapowns installing them, their pre-runAppordering, thePlatformDispatcher.onErrorreturn truerule, and never letting a handler throw. Don't restate that machinery here.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 250 lines · 0 tokens per session scan A 019e75754449
async-safety is a skill published in the GitHub repository zakariaf/Flutter-Skills (2 stars, last pushed 11d ago), licensed MIT. It adds 189 tokens to every session and 3,686 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
rust-check
Run cargo check on the current Rust project to find compile errors.
pi-loop-forensics
Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases. Discriminates genuine model repetition collapse from a race, a tool-parse failure, or a too-low guard, and A/B replays a seed session across providers.
nightly-session-watch
Nightly sweep of the last 24h of pi-go sessions — anomalous runs, loop aborts, tool error rates, token waste, real prompt-token spend, and whether the observation and palace pipelines are still recording. Triages each finding to the specialist skill that diagnoses it. Use for an unattended daily health check, or on…
native-runtime-debug
Diagnose native C/C++ crashes, hangs/deadlocks, bad runtime state, and crash dumps with qwen-dap-mcp and DAP. Use for crashes, minidumps/core dumps, processes that stop making progress, lock/wait triage, unexpected variable changes, differential good-versus-bad runtime comparison, bounded value/write tracing…
debug-go
Systematic 5-step debugging flow for Go 1.22+ services. Load when a test fails, a goroutine leaks, a downstream provider hangs, errors lose context, or production logs are unhelpful. Forces layer isolation (handler vs service vs repo vs provider) and runs the 5 most common Go antipattern greps before any code change …
python-debugpy
Debug Python with pdb, breakpoint(), post-mortem inspection, and debugpy remote attach.