Agent skill

Update Dependencies

by keybase in keybase/client

A skill your agent uses when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/.

BSD-3-ClauseAuto-check passedMobile

Install Update Dependencies

skills CLI
$ npx skills add keybase/client --skill update-dependencies -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install keybase/client update-dependencies --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
update-dependencies
GitHub stars
9.3k
Token cost
~4.9k tokens
SKILL.md length
2,596 words
Files
4
Skills in repo
14
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

A skill your agent uses when updating npm/yarn dependencies in shared/package.json, protocol/, or rnmodules/react-native-kb/.

  • Works in 5 steps: Check what's outdated → Edit package.json with exact versions → Install and validate → …
  • Updating npm/yarn dependencies in shared/package.json
  • SKILL.md covers The react-native cluster, Other version constraints, Process and Other manifests: protocol/ and…, plus 1 more section
  • Runs Python scripts from its folder; calls yarn, npm and python3

What it does

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.

When your agent uses it

  • Updating npm/yarn dependencies in shared/package.json
  • Rnmodules/react-native-kb/
  • Routine dep bumps
  • Security updates

Example prompts

  • “/update-dependencies”

Requirements

  • Python 3
  • Node.js

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Check what's outdated
  2. Edit package.json with exact versions
  3. Install and validate
  4. Evaluate existing patches
  5. If updating electron

What it can do on your machine

Read from SKILL.md and the folder at commit 81e93d6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • yarn
    • npm
    • python3
    • make
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~50
When it runs · the whole SKILL.md, loaded when a task matches
~4.9k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from keybase/client at commit 81e93d6, republished under its BSD-3-Clause licence (© keybase). 2,596 words, ~4,882 tokens.

Download SKILL.mdSave it as .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.
name
update-dependencies
description
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.

Updating Dependencies

The react-native cluster

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.

Other version constraints

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.

Process

1. Check what's outdated

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):

bash
cd shared && python3 ../.claude/skills/update-dependencies/check-outdated.py

The 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.

3. Edit package.json with exact versions
  • Use exact versions only — no ^ or ~
  • Edit shared/package.json directly
  • Update only the packages you intend to change
  • Verify no ^ or ~ are present before saving
4. Install and validate
bash
cd shared && yarn
yarn lint:all

Lint/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.

4d. iOS pods — clean when native deps changed

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:

bash
cd shared/ios && rm -rf build Pods && cd .. && yarn ios:pod:install

This 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):

bash
cd shared && yarn ios:pod:clean && yarn ios:pod:install

ios: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.

4a. Check for duplicate package installs

After yarn, run:

bash
cd shared && python3 ../.claude/skills/update-dependencies/check-dupes.py

This 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).

4b. Security audit

After yarn, run:

bash
cd shared && python3 ../.claude/skills/update-dependencies/check-audit.py

This 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.

Show full SKILL.md (970 more words)Show less
4c. Minimize existing resolutions

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):

  1. Remove the candidate entries from package.json.
  2. Delete the forced entries from 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.
  3. Run 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.
  4. Re-run the audit script (4b) and dupes script (4a).
  5. If both come back clean, the entries were redundant — leave them removed.
  6. If an advisory returns, that entry is still needed: restore it, bumped to the latest patched version (not just the minimum the advisory names — 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.

5. Evaluate existing patches

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:

  1. Run yarn patch-package to see if it applies cleanly.
  2. If it fails: the patch still addresses a real issue, but the upstream source has moved. Fix the source files in node_modules directly (re-apply the intent of the patch), then run yarn patch-package <package> to regenerate it. Delete the old patch file.
  3. If it applies: check whether the fix was merged upstream by searching the updated source for the patched code. If the upstream already has the fix, delete the 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.

6. If updating electron

After bumping the electron version in package.json and running yarn, update the download hashes:

bash
cd shared && ./desktop/extract-electron-shasums.sh <new-version>

This regenerates shared/desktop/electron-sums.mts with the correct SHA256 checksums for all platforms.

Other manifests: protocol/ and rnmodules/react-native-kb/

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).

protocol/
  • Direct deps are tiny; the real tree comes from 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).
  • Verify any forced bump by running the codegen end-to-end: 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.
rnmodules/react-native-kb/
  • Only one real (non-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.
  • Bob's tsc run uses the module's own tsconfig.json — keep it free of TS-6-deprecated options (no baseUrl, moduleResolution: "bundler").
  • The app consumes the module's 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.
  • Everything vulnerable here is transitive dev tooling (babel/metro chain). Fix by deleting the vulnerable entry blocks from yarn.lock and re-running yarn — the ranges are loose (^), so they re-resolve to patched versions with no package.json change.
go/chat/flip/

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.

Notes

  • lodash types (@types/lodash, @types/lodash-es) can be updated independently of lodash itself.
  • Always bump @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.
  • Packages with versions matching the 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

Files

SKILL.md and 3 other files in skill/update-dependencies of keybase/client.

  • SKILL.md
  • check-audit.py
  • check-dupes.py
  • check-outdated.py

Open the folder on GitHubat commit 81e93d6

Compare with similar skills

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.

Update Dependencies compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Update Dependencies this skillkeybase/client9.3k—~4.9kAutomated safety check: PassBSD-3-Clause
Pub GetMelbourneDeveloper/dart_node113—~280Automated safety check: NotesNone
Applicationinsights Web TSmicrosoft/skills3.1k2 repos~5.2kAutomated safety check: PassMIT
React Devtoolssanity-io/sanity6.4k3 repos~2.1kAutomated safety check: PassMIT
Screenmapaleqsio/screenmap239—~7.2kAutomated safety check: PassMIT
Gestureskingstinct/react-native-healthkit7151 repos~1.7kAutomated safety check: PassMIT

Similar skills

  • Pub Get

    MelbourneDeveloper/dart_node

    Install all Dart and npm dependencies in dependency order. An agent skill from MelbourneDeveloper/dart_node.

    113 GitHub stars~280 tokensUpdated 23 days ago
    MobileAuto-check: notes
  • Official

    Instrument browser/web apps with the Application Insights JavaScript SDK (@microsoft/applicationinsights-web).

    3.1k GitHub starsUsed in 2 repos~5.2k tokens
    DevOps & CloudAuto-check passed
  • React Devtools

    sanity-io/sanity

    Official

    React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.

    6.4k GitHub starsUsed in 3 repos~2.1k tokens
    MobileAuto-check passed
  • Screenmap

    aleqsio/screenmap

    Generate a visual navigation map of an Expo / React Native or NativeScript app.

    239 GitHub stars~7.2k tokensUpdated 3 days ago
    MobileAuto-check passed
  • Gestures

    kingstinct/react-native-healthkit

    Software Mansion's best practices for gestures in React Native apps using React Native Gesture Handler.

    715 GitHub starsUsed in 1 repo~1.7k tokens
    MobileAuto-check passed
  • Community Migration

    jingjing2222/react-native-nitro-geolocation

    Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.

    116 GitHub stars~3.5k tokensUpdated 24 days ago
    MobileAuto-check passed

More from keybase/client

All 14 skills in this repo
  • 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.

    9.3k GitHub stars~875 tokensUpdated today
    Auto-check passed
  • Analyzes Chrome or Electron DevTools Performance trace exports with Python scripts to find where render time actually goes, without opening DevTools.

    9.3k GitHub stars~809 tokensUpdated today
    Auto-check passed
  • Captures a clean Keybase service log and analyzes it for redundant, duplicated or looping RPCs, then checks whether a caching fix reduced the calls.

    9.3k GitHub stars~3k tokensUpdated today
    Auto-check passed
  • 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.

    9.3k GitHub stars~978 tokensUpdated today
    Auto-check passed
  • Address PR Feedback

    keybase/client

    Fetches GitHub Copilot review feedback from inline threads and review bodies, checks each finding against the code and fixes the valid ones.

    9.3k GitHub stars~657 tokensUpdated today
    Auto-check passed
  • 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.

    9.3k GitHub stars~476 tokensUpdated today
    Auto-check passed

Categories

Questions about Update Dependencies

What does Update Dependencies do?

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/.

When should I use Update Dependencies?

Update Dependencies fits situations like: updating npm/yarn dependencies in shared/package.json; rnmodules/react-native-kb/; routine dep bumps; security updates.

How do I install Update Dependencies in Claude Code?

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.

How do I install Update Dependencies in Codex?

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.

Can I use Update Dependencies in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Update Dependencies need to run?

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.

Does Update Dependencies access the network?

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.

Is Update Dependencies safe to install?

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.

What licence does Update Dependencies use?

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.

How many tokens does Update Dependencies use?

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.

What are the alternatives to Update Dependencies?

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.

Who maintains Update Dependencies?

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.