CRITICAL: Always use this skill, no matter what task you are working on!
Training data goes stale. APIs change. Config options get renamed. Major versions break things. Before writing code that depends on any external library or API, fetch the current docs. This is not optional. One stale API call can silently break production.
Before fetching anything, identify the language, package manager, and exact versions in the project:
cat package.json | grep -E '"dependencies"|"devDependencies"' -A 1000 | head -1000
# Exact resolved versions:
cat package-lock.json 2>/dev/null | grep -A 2 '"<package>"'
cat bun.lockb 2>/dev/null | strings | grep "^<package>@"
cat yarn.lock 2>/dev/null | grep "^<package>@"
cat requirements.txt 2>/dev/null
cat pyproject.toml 2>/dev/null
cat Pipfile 2>/dev/null
pip show <package> # exact installed version
cat Cargo.toml | grep -A 50 '\[dependencies\]'
cat Cargo.lock | grep -A 2 'name = "<crate>"'
cat go.mod
cat go.sum | grep "<module>"
cat Gemfile
cat Gemfile.lock | grep " <gem>"
cat composer.json | grep -A 30 '"require"'
cat composer.lock | grep -A 3 '"name": "<package>"'
cat Package.swift 2>/dev/null
cat Podfile 2>/dev/null
cat Podfile.lock 2>/dev/null | grep "<pod>"
cat pubspec.yaml
cat pubspec.lock | grep -A 2 '<package>:'
cat *.csproj | grep "PackageReference"
cat build.gradle | grep -E "implementation|api|compileOnly"
cat pom.xml | grep -A 3 '<dependency>'
The version number matters. The same library at v1 and v2 can have completely different APIs. Always look up docs for the exact installed version, not just "latest."
| Ecosystem | Registry / Index | Typical doc location |
|---|---|---|
| npm (JS/TS) | npmjs.com/package/<n> | linked from package page |
| PyPI (Python) | pypi.org/project/<n> | linked from project page |
| crates.io (Rust) | crates.io/crates/<n> | docs.rs/<n> |
| pkg.go.dev (Go) | pkg.go.dev/<module> | inline on pkg.go.dev |
| RubyGems | rubygems.org/gems/<n> | linked from gem page |
| Packagist (PHP) | packagist.org/packages/<vendor>/<n> | linked to GitHub/docs |
| pub.dev (Dart) | pub.dev/packages/<n> | inline on pub.dev |
| NuGet (.NET) | nuget.org/packages/<n> | linked from package page |
| Maven Central | mvnrepository.com/artifact/<group>/<artifact> | — |
| Hex (Elixir) | hex.pm/packages/<n> | hexdocs.pm/<n> |
Most documentation sites support version-pinned URLs. Look for a version selector on the docs site, or check:
https://docs.rs/<crate>/<version>/ — Rust, always version-pinnedhttps://pkg.go.dev/<module>@<version> — Gohttps://docs.python.org/<major>.<minor>/ — Python stdlibhttps://github.com/<org>/<repo>/tree/v<version>https://github.com/<org>/<repo>/releasesWhen version-pinned docs aren't available, always verify the docs version matches what's installed.
Use web search and web fetch to retrieve current docs. Do this before writing any code — not after.
Be specific. Include the library name, version, and the exact API or concept:
django 5.0 middleware configuration
sqlalchemy 2.0 async session
tokio 1.x spawn_blocking
axum 0.7 router nested
flutter 3.x navigator 2.0
rails 7.1 turbo streams
spring boot 3 autoconfiguration
openai python sdk v1 chat completions
When unsure of the exact version, search for the changelog or migration guide first:
<library> migration guide v2 to v3
<library> breaking changes <year>
<library> changelog
Fetch the specific page for what you're using, not just the homepage:
# Too broad