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 dependency-hygienegit 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/dependency-hygiene)<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/dependency-hygiene"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/dependency-hygiene/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/dependency-hygiene"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/dependency-hygiene.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.00165 | $0.02849 |
| Opus 5 | $0.00082 | $0.01425 |
| Sonnet 5 | $0.00033 | $0.00570 |
| Haiku 4.5 | $0.00016 | $0.00285 |
Grade A, and why
dependency-hygiene 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 — 131 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Dependency hygiene
Every dependency is a permanent liability someone else may have to service. Optimise for resolves and builds years from now, not for latest. This skill governs pubspec/lock mechanics, the gate a new package must pass, and the escape hatch when a critical package rots.
Read the reference for the task at hand:
references/dependency-gate-and-audit.md— the refuse/accept gate, transitive auditing, licence recording, upgrade discipline.references/sdk-pin-and-lint-include.md— recording the SDK version and the silent-lint-disable trap on any SDK bump.references/vendoring-behind-an-interface.md— vendoring a bus-factor-1 native plugin intothird_party/without touchinglib/.
Run scripts/audit-deps.sh before a PR that changes pubspec.yaml.
Non-negotiable rules
- Caret ranges in
pubspec.yaml, exact pins only inpubspec.lock.drift: ^2.31.0, neverdrift: 2.31.0. The lock pins; ranges only keep resolution solvable. Exact pins in a pubspec manufacture unsolvable conflicts on the next SDK bump and buy nothing the lock is not already delivering. - Commit
pubspec.lock. This is an application, not a package — the asymmetry that flips the rule. The default Dart.gitignoretemplate listspubspec.lock; delete that line. The committed lock is the only thing that makes a stranger'sgit cloneresolve the exact versions that were tested on a real device. - A
pubspec.yamldiff without itspubspec.lockdelta is incomplete. Runflutter pub getand stage the lock in the same commit — add, upgrade, and remove alike. - Record the SDK version separately from the tool. Keep
environment: sdk:a real range sopubcan solve; pin the exact tested Flutter version in a committed record CI reads (see reference). The record is what a stranger and CI read; do not confuse a version-manager tool with the file. - The lint include filename is coupled to the resolved SDK. A version-pinned
include:that names a file absent from the resolved linter package emitsinclude_file_not_found— fatal to defaultdart analyze/flutter analyze, so standard CI catches it. It only goes silent-and-green where warnings are made non-fatal, and even then it is your ruleset's added/promoted rules that stop applying, not the analyzer's built-ins. Verify it after any SDK bump (see reference). - Audit the transitive tree before adding, not the pubspec. The second hop is exactly where a banned SDK arrives. Run
scripts/audit-deps.sh(ordart pub deps --json+ the audit script) before committing a new dependency. - Refuse by policy anything that opens a network path, reports crashes/usage, drags in a telemetry core, or collects device identifiers for an unshipped feature — directly or transitively. Green CI is not evidence a native capability works. See the gate reference.
- Grep
lib/after removing a dependency. A package deleted frompubspec.yamlbut still transitively resolvable keeps compiling today and breaks on the clone that matters. The analyzer catches an unresolved import, not one that resolves by accident. - Wrap a bus-factor-1 native plugin behind an interface now, vendor later. The interface is cheap insurance; pre-emptive vendoring is a maintenance burden against a break that has not happened. See the vendoring reference.
What ships with it
6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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 · 131 lines · 165 tokens per session scan A fb4e0b3c82a2
dependency-hygiene is a skill published in the GitHub repository zakariaf/Flutter-Skills (2 stars, last pushed 11d ago), licensed MIT. It adds 165 tokens to every session and 2,849 once invoked, about $0.0008 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
cw-gates
Use before claiming any Codewhale change is done, green, or ready to land: the focused-to-broad verification ladder, the budget checks CI enforces, and the rules for what counts as a passing test.
writing
A writing guide for turning verified facts and calculations into finished text for a specific audience. It follows the requested language, structure, and length.
feishu
Work with Feishu or Lark bots, docs, sheets, bitables, approval flows, and OpenAPI/MCP setup without hardcoding credentials.
mcp-scripting
Write mcpScript JavaScript for discovering, inspecting, and calling MCP tools.
implementation-readiness
Verify BRD-lite, PRD, SRS/FRS, UX, and test prerequisites before implementation starts.
skill-benchmark
Benchmark AI skill effectiveness by measuring implementation quality against legacy constraints.