Pub Get
MelbourneDeveloper/dart_node
Install all Dart and npm dependencies in dependency order. An agent skill from MelbourneDeveloper/dart_node.
A skill your agent uses when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/.
$ npx skills add keybase/client --skill update-dependencies -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install keybase/client update-dependencies --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/keybase/client.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skill/update-dependencies .claude/skills/update-dependencies && 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 "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .claude/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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/keybase/client/tree/master/skill/update-dependenciesType 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 keybase/client --skill update-dependencies -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install keybase/client update-dependencies --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keybase/client.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skill/update-dependencies .agents/skills/update-dependencies && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .agents/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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 keybase/client --skill update-dependencies -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install keybase/client update-dependencies --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keybase/client.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skill/update-dependencies .cursor/skills/update-dependencies && 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 "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .cursor/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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/keybase/client.git --path skill/update-dependencies--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 keybase/client --skill update-dependencies -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install keybase/client update-dependencies --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keybase/client.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skill/update-dependencies .gemini/skills/update-dependencies && 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 "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .gemini/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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 keybase/client update-dependenciesInstalls 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 keybase/client --skill update-dependencies -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/keybase/client.git skills-src && mkdir -p .github/skills && cp -r skills-src/skill/update-dependencies .github/skills/update-dependencies && 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 "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .github/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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 keybase/client --skill update-dependencies -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install keybase/client update-dependencies --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keybase/client.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skill/update-dependencies .opencode/skills/update-dependencies && 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 "update-dependencies" agent skill from https://github.com/keybase/client/tree/master/skill/update-dependencies into .opencode/skills/update-dependencies/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-dependencies", 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.
update-dependenciesA skill your agent uses when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/.
Update Dependencies is an agent skill from keybase/client. Use when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/. Use for routine dep bumps, security updates, or keeping packages current.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `check-audit.py`, `check-dupes.py` and `check-outdated.py`).
It sits in Mobile, covering Cross-platform mobile apps. It works with npm, React Native and React. The repository describes itself as: Keybase Go Library, Client, Service, OS X, iOS, Android, Electron. The licence is BSD-3-Clause.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 81e93d6. 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:
yarnnpmpython3makegitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use yarn, npm and git, 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.
Update Dependencies loads about 4.9k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 2,596 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 keybase/client at commit 81e93d6, republished under its BSD-3-Clause licence (© keybase). 2,596 words, ~4,882 tokens.
.claude/skills/update-dependencies/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.react-native is the anchor; everything else in this cluster follows it.
react-native itself is always upgradable. Take the in-line bump (0.86.0 → 0.86.2) as routine. A version-line jump (0.86 → 0.87) is a major — opt-in, and it drags the whole cluster with it. The check script reports both, and filters out react-native's 1000.0.0 main-branch sentinel.react, react-dom, react-is, react-test-renderer — pinned to whatever react-native requires, never checked against npm on their own. When react-native moves, read its peer deps (npm view react-native@<new> peerDependencies) and sync these by hand.@react-native/babel-preset, @react-native/eslint-config, @react-native/metro-config — must stay on react-native's version line (react-native 0.86.x → these stay 0.86.x), but minor bumps within it ARE fine (0.86.0 → 0.86.2) — take them on routine passes. The check script caps these to react-native's line automatically, so bumping RN's line pulls them along.Version terminology in this project (all packages, not just react-native): a version-line change like 0.86 → 0.87 is a major; the last number (0.86.0 → 0.86.1) is a minor.
expo and expo-* packages can be updated, but update them all together in one pass since they are versioned in sync.
oxc-transform-react: stay inside @vitejs/plugin-react's peer range. It is the Rust react-compiler behind react({compiler: true}) in vite.config.mts (desktop only). For a 0.x version, ^0.145.0 means 0.145.x only, so the check script's "latest" is usually outside the range — read npm view @vitejs/plugin-react@<ver> peerDependencies and pin the newest version inside it. Metro, jest and lint:bailouts still use babel-plugin-react-compiler, yarn lint:bailouts runs both and fails on any file where they memoize a different number of functions, so run it after bumping either compiler.
typescript is intentionally split into two packages — do NOT collapse them yet. TypeScript 7.x is the native (Go) rewrite: fast, but it does NOT ship the classic JS compiler API (ts.isCallExpression, ts.forEachChild, ts.Extension.*, etc.). Two consumers here still require that classic API: typescript-eslint (its @typescript-eslint/typescript-estree crashes at module-load on TS7 with Cannot read properties of undefined (reading 'Cjs'), and its peer range is >=4.8.4 <6.1.0 even on canary), and scripts/analyze-styles.mts (imports typescript and walks the AST). So:
"typescript": "6.0.3" — the classic-API package. Bare import 'typescript' resolves here (eslint parser + analyze-styles). Keep on the latest 6.x; do NOT bump to 7.x."typescript-native": "npm:typescript@7.0.2" — TS7 native, aliased so it doesn't take the bare typescript name. Used ONLY as the tsc CLI, invoked by explicit path in the tsc script (./node_modules/typescript-native/bin/tsc). This replaced the old @typescript/native-preview (tsgo) dependency. Bump this to the latest stable typescript@7.x on each pass.When typescript-eslint ships a release that accepts TS7 (peer range includes >=7, and typescript-estree no longer reads the classic API off the typescript module): bump typescript-eslint, set "typescript": "<that 7.x>", delete the typescript-native alias, and repoint the tsc script back to ./node_modules/.bin/tsc. Verify analyze-styles.mts still type-checks (it may need porting to the TS7 API). Until then the split stays.
Run the following script from shared/ — it checks all packages and derives pre-release vs stable from each package's current version automatically (no manual list to maintain):
cd shared && python3 ../.claude/skills/update-dependencies/check-outdated.pyThe script never suggests a downgrade. For packages currently on a stable version it finds the highest stable version at or below the latest dist-tag (see below). For packages currently on a pre-release version it finds the highest semver on the same major — which handles both newer pre-releases and graduation to stable (e.g. 56.0.0-preview.x → 56.0.5).
When the highest stable version is on a newer major than the current one, the script also reports the highest version reachable within the current major as a separate (in-major) line, with the major jump flagged below it:
@babel/core: 7.29.7 -> 7.30.0 (in-major)
↳ MAJOR jump available: -> 8.0.1 (major 7 -> 8)Take the (in-major) bump as the safe routine upgrade; treat the ↳ MAJOR jump as an opt-in decision (peer-dep checks, app build to verify). If no in-major upgrade exists (already on the latest minor/patch of the current major), only the single cur -> latest line prints — the jump to the next major is then the only available upgrade.
For packages on a stable version, suggestions are capped at the latest dist-tag, the same rule npm install follows. Max-semver alone is wrong here: during an Expo SDK preview, expo-* packages publish plain-looking 58.0.x versions under next while expo@latest is still 57, so an uncapped check reports the unreleased SDK as a stable upgrade. Anything above latest goes in a separate === UPCOMING === section instead, labelled with the dist-tag(s) pointing at it ([next], [beta], [alpha], [rc]; canary/nightly tags are skipped). That section is for awareness only. Tell the user what's there, but never take anything from it on a routine pass, and don't call it released or "available". A [next] tag on a stable-looking number (e.g. expo-asset: 58.0.7 [next]) still means unreleased.
Note on eslint-plugin-react-compiler rc versions: npm may have rc.1-hash variants that sort after rc.2 alphabetically but are older. Verify manually if the script suggests downgrading to a hash-tagged rc.
^ or ~shared/package.json directly^ or ~ are present before savingcd shared && yarn
yarn lint:allLint/tsc failures after a dep update are caused by the update — do not try to prove they are pre-existing. The branch is clean before the update starts, so any new errors are ours to fix. Fix them before proceeding. If the failures are large or unclear, stop and ask for guidance rather than guessing.
Plain pod install only re-integrates the Pods project; it leaves ios/build/ (stale .o, .pcm module cache, generated headers) and ios/Pods/ framework/header caches from the previous versions. Xcode's incremental build trusts those by timestamp and then compiles/links against headers and symbols that moved when a pod's source was swapped underneath it → build fails out of the box. This bites almost every time a native dependency version changes.
A native dep = anything with an iOS pod: any expo/expo-*, react-native, react-native-*, @react-native-*, lottie-react-native, react-native-kb, etc. Pure JS/tooling bumps (vite, babel, eslint, typescript, immer, lodash, zustand, @types/*) do not need a pod clean.
If any native dep changed, do the targeted clean instead of a plain install:
cd shared/ios && rm -rf build Pods && cd .. && yarn ios:pod:installThis drops both stale caches without nuking the global CocoaPods cache or re-resolving from scratch — it's the reliable fix for the "Xcode won't compile after a bump" case. Keep Podfile.lock (don't delete it) so resolution stays stable.
Escalate to a full clean only if the targeted clean still fails to build (e.g. react-native-kb codegen went stale, or a corrupted global pod cache):
cd shared && yarn ios:pod:clean && yarn ios:pod:installios:pod:clean additionally runs pod cache clean --all (global re-fetch of pod source) and wipes react-native-kb/node_modules — heavier and rarely the actual fix, so it's the fallback, not the default.
If only JS/tooling deps changed, a plain yarn ios:pod:install (or skipping pods entirely) is fine.
After yarn, run:
cd shared && python3 ../.claude/skills/update-dependencies/check-dupes.pyThis finds packages where a nested node_modules contains a newer version than what's installed at the top level — the case where bumping our pin in package.json would let yarn deduplicate. It ignores nested installs that are older (locked by their parent packages, not fixable by bumping our pins).
If duplicates are found: Update the version in package.json to the suggested version, then re-run yarn.
Why this matters: Packages that use React.createContext() or other module-level singletons break silently when installed twice — the provider uses one instance and the consumer reads a different one. Classic symptom: "Couldn't determine focus state. Is your component inside a screen in a navigator?" (useIsFocused from @react-navigation/core).
After yarn, run:
cd shared && python3 ../.claude/skills/update-dependencies/check-audit.pyThis runs yarn audit --json, dedupes the advisories, and cross-references yarn.lock to suggest the cheapest fix for each one:
DIRECT — the vulnerable package is in our package.json. Bump it there (exact version), run yarn.
LOCKFILE — transitive, and the patched version satisfies every range that requires it. Delete the listed entry block(s) from yarn.lock (the entry key line plus its indented lines), then run yarn — it re-resolves to the patched version with no package.json change.
RESOLUTION — transitive, but the patched version is outside the range the parent accepts. Bumping the direct dependency that pulls it in (first segment of the via: path) is the better fix when possible — but if you already brought direct deps current in steps 1–4, a still-flagged advisory means no released parent fixes it yet (confirm with npm view <parent> dependencies only if you skipped updating that parent). Then add the suggested resolutions entry. Prefer scoping it to the vulnerable parent (e.g. "xcode/uuid") over a blanket "**/uuid" when some installed copies are already on a safe version — forcing a major-version jump on every consumer risks breaking ones that were fine. If ALL installed versions are vulnerable (the installed: line lists every copy), a blanket **/ resolution is correct and covers them all with one entry. If multiple advisories suggest different versions for the same module, add ONE resolution entry with the highest version.
Yarn 1 gotchas for scoped resolutions: write the scope as "**/xcode/uuid" — the documented bare "xcode/uuid" form is silently ignored. And a resolution alone does NOT rewrite an existing lockfile entry: delete the stale entry block (e.g. uuid@^7.0.3:) from yarn.lock and re-run yarn so the range re-resolves through the resolution. Verify by checking the nested install (node_modules/<parent>/node_modules/<pkg>/package.json), not just the lockfile.
NO-FIX — no patched version published. Don't work around it; report it to the user with the advisory link.
After applying fixes: re-run yarn, re-run this script to confirm clean, and re-run the dupes check (4a) — resolutions can change the dedupe picture. A forced major bump via resolutions runs code the parent package never tested with. "Verify" means: yarn lint:all always; if the forced package sits under runtime app code, also build/run the app; if it sits under tooling (test runners, bundler, patch-package), run that tool once if cheap. Either way, explicitly tell the user which packages were force-bumped so they can watch for fallout.
Keep the resolutions block as small as possible — every entry overrides yarn's normal resolution forever and goes stale silently. Two failure modes of stale entries: (1) the entry is redundant because all requesting ranges now resolve to a safe version on their own; (2) the entry actively downgrades a parent's newer pin (e.g. a **/uuid: 11.1.1 left in place forced @appium/support's exact uuid@14.0.0 down to 11).
On every dep-update pass, audit each entry (except **/@types/react, which is permanent — see Notes):
package.json.yarn.lock too — find each entry whose resolved version was pinned by the resolution (e.g. serialize-javascript@7.0.7, serialize-javascript@^6.0.2:) and delete the block. This is the mirror of the "resolution alone does not rewrite the lockfile" gotcha in 4b: removing a resolution does NOT make yarn re-resolve either. The forced version lingers in yarn.lock, so the audit still sees the patched version and comes back falsely clean — then some later pass re-resolves the range down to the vulnerable version and the advisory returns.yarn, then confirm the installed version actually changed (grep -A1 '^<pkg>@' yarn.lock or check node_modules/<pkg>/package.json) — if it still shows the previously-forced version, the removal test hasn't actually run yet.npm view <pkg> version), and remember to delete the now-stale unforced lockfile entry again so the resolution takes effect (4b gotcha).Testing removal is one yarn run — always do it empirically rather than reasoning from lockfile ranges. But "empirically" means verifying the lockfile actually re-resolved (step 3), not just that yarn exited 0.
Known still-needed entries (as of 2026-09), all because a parent pins an old range: **/serialize-javascript (mocha, via @wdio/mocha-framework, still pins ^6.0.2 — GHSA-5c6j-r48x-rmvq, GHSA-qj8w-gfj5-8c6v) and **/xcode/uuid (xcode pins ^7.0.3, no release since 2021 — GHSA-w5hq-g745-h8pq). Still run the removal test each pass (a parent may finally ship a fix), but expect these to survive it.
After yarn, check whether any patches/*.patch files target a package you just updated — the filename encodes the version (e.g. @legendapp+list+3.0.0-beta.56.patch). For each such patch:
yarn patch-package to see if it applies cleanly.node_modules directly (re-apply the intent of the patch), then run yarn patch-package <package> to regenerate it. Delete the old patch file.Never rename patch files or hand-edit the .patch file itself. Let patch-package generate the correctly-named file from your source edits.
electronAfter bumping the electron version in package.json and running yarn, update the download hashes:
cd shared && ./desktop/extract-electron-shasums.sh <new-version>This regenerates shared/desktop/electron-sums.mts with the correct SHA256 checksums for all platforms.
Dependabot also watches protocol/yarn.lock and rnmodules/react-native-kb/yarn.lock. Cover them on each pass — the same scripts work there (check-outdated.py reads the cwd's package.json and skips file:/link:/github: deps automatically).
avdl-compiler (pinned to github:keybase/node-avdl-compiler#master), which exact-pins transitives (e.g. lodash "4.17.15") — LOCKFILE deletion can't help, so vulnerable transitives need resolutions. Current block: "**/lodash", "**/underscore" (underscore is pulled via jison → nomnom, which pins 1.1.x).cd protocol && make clean && make must exit 0 AND leave git status clean outside protocol/package.json+yarn.lock — the generated output (json/, go/protocol/, shared TS) must be byte-identical.file:) devDep: react-native-builder-bob. Bob ≥0.43 validates entry fields with require.resolve, which needs an explicit extension — that's why "main" is "src/index.tsx" (not "src/index"); don't "clean it up" back to extensionless or the prepare script (bob build) fails with Found incorrect path in 'main' field. The "react-native"/"source" fields stay extensionless for metro.tsconfig.json — keep it free of TS-6-deprecated options (no baseUrl, moduleResolution: "bundler").src/ directly via the file: dep + postinstall sync; bob's lib/ output is gitignored and unused. After changing the module's package.json, run yarn sync:kb-modules from shared/ then yarn lint:all.yarn.lock and re-running yarn — the ranges are loose (^), so they re-resolve to patched versions with no package.json change.Has a package.json solely so make can npm i the avdl compiler for one-off codegen. Its package-lock.json was deliberately deleted (2026-07) to kill stale dependabot alerts — don't recreate it; if npm i regenerates one during codegen, don't commit it.
lodash types (@types/lodash, @types/lodash-es) can be updated independently of lodash itself.@types/react to the latest patch the script finds, even if runtime react is unchanged. DefinitelyTyped ships type-only patches independent of the react runtime version. When you bump it, update the resolutions entry (**/@types/react) to the SAME version — multiple installed copies of @types/react cause type conflicts.@types/react-dom, @types/react-is should stay in sync with their runtime counterparts — update only if the runtime version changed.expo SDK pattern (e.g., 56.x.x) are expo-* packages and can be updated together.@react-navigation/core must track what @react-navigation/native actually resolves, not just the surface number of the other nav packages. @react-navigation/native (alpha.24) and @react-navigation/core (alpha.15/alpha.16) use different numbering — they are NOT in sync by design. Always check-outdated on @react-navigation/core and accept upgrades the script finds, even if the number looks unrelated to the other nav alpha versions. Skipping this causes duplicate installs and React context identity mismatches at runtime.© keybase, BSD-3-Clause. 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 in skill/update-dependencies of keybase/client.
Open the folder on GitHubat commit 81e93d6
Update Dependencies 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 |
|---|---|---|---|---|---|---|
| Update Dependencies this skillkeybase/client | 9.3k | — | ~4.9k | Automated safety check: Pass | BSD-3-Clause | |
| Pub GetMelbourneDeveloper/dart_node | 113 | — | ~280 | Automated safety check: Notes | None | |
| Applicationinsights Web TSmicrosoft/skills | 3.1k | 2 repos | ~5.2k | Automated safety check: Pass | MIT | |
| React Devtoolssanity-io/sanity | 6.4k | 3 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Screenmapaleqsio/screenmap | 239 | — | ~7.2k | Automated safety check: Pass | MIT | |
| Gestureskingstinct/react-native-healthkit | 715 | 1 repos | ~1.7k | Automated safety check: Pass | MIT |
MelbourneDeveloper/dart_node
Install all Dart and npm dependencies in dependency order. An agent skill from MelbourneDeveloper/dart_node.
microsoft/skills
Instrument browser/web apps with the Application Insights JavaScript SDK (@microsoft/applicationinsights-web).
sanity-io/sanity
React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.
aleqsio/screenmap
Generate a visual navigation map of an Expo / React Native or NativeScript app.
kingstinct/react-native-healthkit
Software Mansion's best practices for gestures in React Native apps using React Native Gesture Handler.
jingjing2222/react-native-nitro-geolocation
Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.
keybase/client
Analyzes V8, Chrome and Electron .heapsnapshot files with Node scripts to find memory leaks, detached DOM nodes and the retainer paths that keep objects alive.
keybase/client
Analyzes Chrome or Electron DevTools Performance trace exports with Python scripts to find where render time actually goes, without opening DevTools.
keybase/client
Captures a clean Keybase service log and analyzes it for redundant, duplicated or looping RPCs, then checks whether a caching fix reduced the calls.
keybase/client
Parses a React DevTools Profiler JSON export with Python scripts to find re-render storms, commit fan-out and why a component rendered, without opening the DevTools UI.
keybase/client
Fetches GitHub Copilot review feedback from inline threads and review bodies, checks each finding against the code and fixes the valid ones.
keybase/client
Takes a screenshot of a running Electron desktop app through playwright-cli over remote debugging, shrinks it and shows it so you can check the UI visually.
Works with
Categories
A skill your agent uses when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/. Update Dependencies is an agent skill from keybase/client.json, protocol/, or rnmodules/react-native-kb/.
Update Dependencies fits situations like: updating npm/yarn dependencies in shared/package.json; rnmodules/react-native-kb/; routine dep bumps; security updates.
Run `npx skills add keybase/client --skill update-dependencies -a claude-code`. Or copy the skill folder (skill/update-dependencies in keybase/client) into .claude/skills/update-dependencies in your project. Claude Code loads it when a task matches its description.
Run `npx skills add keybase/client --skill update-dependencies -a codex`. Or copy the skill folder (skill/update-dependencies in keybase/client) into .agents/skills/update-dependencies 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 keybase/client --skill update-dependencies -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-dependencies, .gemini/skills/update-dependencies, .github/skills/update-dependencies and .opencode/skills/update-dependencies in your project.
Going by SKILL.md and its folder, Update Dependencies needs Python for the scripts in its folder and the command-line tools its instructions call (yarn, npm, python3, make and git). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use npm and git, 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.
Update Dependencies is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Update Dependencies: Pub Get (MelbourneDeveloper/dart_node, 113 stars), Applicationinsights Web TS (microsoft/skills, 3.1k stars), React Devtools (sanity-io/sanity, 6.4k stars) and Screenmap (aleqsio/screenmap, 239 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
keybase (a GitHub organization) maintains it in keybase/client, which has 9,257 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 7, 2026.
Source: keybase/client on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.