{"id":"c36d2376-3a16-4a6d-9493-28660c989e35","shortId":"sCDLda","kind":"skill","title":"bump-deps","tagline":"This skill should be used when the user asks to \"update dependencies\", \"update npm packages\", \"bump dependencies\", \"upgrade node packages\", \"check for outdated packages\", \"update package.json\", or mentions dependency updates, npm/pnpm/yarn/bun package upgrades, or taze CLI usage.","description":"# Bump Dependencies Skill\n\nUpdate Node.js dependencies using taze CLI with smart prompting: auto-apply MINOR/PATCH updates, prompt for MAJOR updates individually, skip fixed-version packages.\n\nWhen package names are provided as arguments (e.g. `/bump-deps react typescript`), scope all taze commands to only those packages using `--include`.\n\nWhen `--dry-run` is passed (e.g. `/bump-deps --dry-run` or `/bump-deps --dry-run react`), scan for updates and present a summary table **without applying any changes**. See [Dry Run Mode](#dry-run-mode) below.\n\n## Prerequisites\n\nBefore starting, verify taze is installed by running:\n\n```bash\nscripts/run-taze.sh\n```\n\nIf exit code is 1, stop and inform the user that taze must be installed:\n\n- Global install: `npm install -g taze`\n- One-time: `npx taze`\n\n## Update Workflow\n\n### Step 1: Scan for Updates\n\nRun the taze script to discover available updates. The script auto-detects monorepo projects (`workspaces` in package.json or `pnpm-workspace.yaml`) and enables recursive mode automatically.\n\n```bash\nscripts/run-taze.sh\n```\n\n### Step 2: Parse and Categorize Updates\n\nFrom the taze output, categorize each package update:\n\n| Category  | Version Change                              | Action        |\n| --------- | ------------------------------------------- | ------------- |\n| **Fixed** | No `^` or `~` prefix (e.g., `\"1.0.0\"`)      | Skip entirely |\n| **PATCH** | `x.y.z` → `x.y.Z` (e.g., `1.0.0` → `1.0.1`) | Auto-apply    |\n| **MINOR** | `x.y.z` → `x.Y.0` (e.g., `1.0.0` → `1.1.0`) | Auto-apply    |\n| **MAJOR** | `x.y.z` → `X.0.0` (e.g., `1.0.0` → `2.0.0`) | Prompt user   |\n\nIf package arguments were provided, filter to only those packages.\n\n#### Dry Run Mode\n\nIf `--dry-run` was passed, **stop here** — do not apply any updates. Instead, present a single markdown table summarizing all available updates and exit. The table must include every discovered package (including fixed-version packages, shown as skipped):\n\n```\n| Package | Current | Available | Type | Action |\n|---------|---------|-----------|------|--------|\n| @types/node | ^20.0.0 | ^22.0.0 | major | prompt |\n| typescript | ^5.3.0 | ^5.4.0 | minor | auto-apply |\n| eslint | ^8.56.0 | ^8.57.0 | patch | auto-apply |\n| lucide-react | ^3.0.0 | ^4.0.0 | major | auto-apply |\n| lodash | 4.17.21 | 4.18.0 | minor | skip (fixed) |\n```\n\n**Column definitions:**\n\n- **Package** — package name\n- **Current** — version string as it appears in package.json (with range prefix)\n- **Available** — new version string (preserving range prefix)\n- **Type** — `major`, `minor`, or `patch`\n- **Action** — what the normal (non-dry-run) workflow would do:\n  - `auto-apply` — MINOR/PATCH updates and auto-skip major packages (e.g. `lucide-react`)\n  - `prompt` — MAJOR updates that would be prompted to the user\n  - `skip (fixed)` — fixed-version packages that would be skipped\n\nSort the table by action priority: `prompt` first, then `auto-apply`, then `skip (fixed)`. Within each group, sort alphabetically by package name.\n\nAfter presenting the table, print a one-line summary: `N updates available (M major, P minor, Q patch, F fixed-skipped)` and stop. Do **not** proceed to Step 3 or beyond.\n\n**Identifying fixed versions:** In package.json, fixed versions have no range prefix:\n\n- Fixed: `\"lodash\": \"4.17.21\"` → skip\n- Ranged: `\"lodash\": \"^4.17.21\"` → process\n\n### Step 3: Apply MINOR/PATCH Updates\n\nApply all non-major updates automatically without prompting:\n\n```bash\n# All packages\ntaze minor --write\n\n# Specific packages only (when args provided)\ntaze minor --write --include react,typescript\n```\n\nThe script auto-detects monorepo mode, but when running taze directly, detect it yourself: check for `workspaces` in package.json or `pnpm-workspace.yaml` and add `-r` if present.\n\nReport the packages that were updated.\n\n### Step 4: Prompt for MAJOR Updates\n\n**Auto-skip packages:** Never prompt for these packages—auto-apply their major updates:\n\n- `lucide-react` (icon library with frequent major bumps, backward-compatible in practice)\n\nFor each remaining package with a major update available, use `AskUserQuestion` to ask the user individually:\n\n```\nPackage: <package-name>\nCurrent: <current-version>\nAvailable: <new-version>\n\nUpdate to major version?\n```\n\n**Question format:**\n\n- header: Package name (max 12 chars, truncate if needed)\n- options: \"Yes, update\" / \"No, skip\"\n- multiSelect: false\n\nCollect all approved major updates.\n\n### Step 5: Apply Approved MAJOR Updates\n\nAfter collecting user approvals, apply the approved major updates:\n\n```bash\ntaze major --write --include <pkg1>,<pkg2>,<pkg3>\n```\n\nAdd `-r` if monorepo was detected.\n\n### Step 6: Update Bun Catalogs\n\nAfter applying all updates, check the **root** `package.json` for Bun workspace catalogs. Bun monorepos can centralize dependency versions using `catalog` and `catalogs` fields inside the `workspaces` object:\n\n```json\n{\n  \"workspaces\": {\n    \"packages\": [\"packages/*\"],\n    \"catalog\": {\n      \"react\": \"^19.0.0\"\n    },\n    \"catalogs\": {\n      \"testing\": {\n        \"jest\": \"^30.0.0\"\n      }\n    }\n  }\n}\n```\n\nWorkspace packages reference these with `\"react\": \"catalog:\"` (default catalog) or `\"jest\": \"catalog:testing\"` (named catalog).\n\n**Skip this step** if neither `workspaces.catalog` nor `workspaces.catalogs` exists in the root `package.json`.\n\nFor each package that was updated in Steps 3/5:\n\n1. Check if it appears in `workspaces.catalog` — if so, update the version there\n2. Check each named catalog in `workspaces.catalogs` — if the package appears, update the version there\n\nPreserve the existing range prefix (`^`, `~`, or none) from the catalog entry. For example, if the catalog has `\"react\": \"^19.0.0\"` and taze bumped react to `19.1.0`, update the catalog to `\"react\": \"^19.1.0\"`.\n\nUse `Edit` to apply the version changes directly to the root `package.json`.\n\n### Step 7: Install Dependencies\n\nAfter all updates are applied, run `ni` to install dependencies. It auto-detects the package manager.\n\n## Taze Output Interpretation\n\nTaze displays updates grouped by type. Example output:\n\n```\n@types/node  ^20.0.0  →  ^22.0.0   (major)\ntypescript   ^5.3.0   →  ^5.4.0    (minor)\neslint       ^8.56.0  →  ^8.57.0   (patch)\n```\n\nThe rightmost column indicates update type (major/minor/patch).\n\nPackages shown with `--include-locked` that have no `^` or `~` are fixed versions—skip these entirely.\n\n## Script Reference\n\n| Script                | Purpose                                              |\n| --------------------- | ---------------------------------------------------- |\n| `scripts/run-taze.sh` | Run taze in non-interactive mode, check installation |\n\n## Important Notes\n\n- Fixed-version dependencies (no `^` or `~`) indicate intentional pinning—never modify these\n- MAJOR updates may contain breaking changes—always prompt the user\n- MINOR/PATCH updates are backward-compatible by semver convention—safe to auto-apply\n- The `--include` flag accepts comma-separated package names or regex patterns\n- Monorepo detection is automatic—no flag needed\n- Bun catalogs (`workspaces.catalog` / `workspaces.catalogs`) are the source of truth for workspace packages using the `catalog:` protocol—always update catalog entries alongside regular deps","tags":["bump","deps","agent","skills","paulrberg","agent-skills","ai-agents"],"capabilities":["skill","source-paulrberg","skill-bump-deps","topic-agent-skills","topic-ai-agents"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/PaulRBerg/agent-skills/bump-deps","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add PaulRBerg/agent-skills","source_repo":"https://github.com/PaulRBerg/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.475","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 50 github stars · SKILL.md body (7,240 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:56:17.148Z","embedding":null,"createdAt":"2026-04-18T22:17:33.543Z","updatedAt":"2026-04-22T00:56:17.148Z","lastSeenAt":"2026-04-22T00:56:17.148Z","tsv":"'/bump-deps':76,96,101 '1':142,167,743 '1.0.0':221,228,237,246 '1.0.1':229 '1.1.0':238 '12':620 '19.0.0':701,789 '19.1.0':795,801 '2':199,756 '2.0.0':247 '20.0.0':309,847 '22.0.0':310,848 '3':469,492 '3.0.0':330 '3/5':742 '30.0.0':705 '4':557 '4.0.0':331 '4.17.21':337,485,489 '4.18.0':338 '5':638 '5.3.0':314,851 '5.4.0':315,852 '6':664 '7':815 '8.56.0':321,855 '8.57.0':322,856 'accept':936 'action':215,307,370,420 'add':546,657 'alongsid':972 'alphabet':435 'alway':915,968 'appear':352,747,766 'appli':55,115,232,241,273,319,326,335,383,427,493,496,573,639,647,669,805,822,932 'approv':634,640,646,649 'arg':515 'argument':74,252 'ask':12,603 'askuserquest':601 'auto':54,182,231,240,318,325,334,382,388,426,526,563,572,830,931 'auto-appli':53,230,239,317,324,333,381,425,571,930 'auto-detect':181,525,829 'auto-skip':387,562 'automat':195,502,948 'avail':177,284,305,358,451,599,609 'backward':587,923 'backward-compat':586,922 'bash':136,196,505,652 'beyond':471 'break':913 'bump':2,19,41,585,792 'bump-dep':1 'bun':666,677,680,952 'catalog':667,679,687,689,699,702,712,714,717,720,760,780,786,798,953,966,970 'categor':202,208 'categori':212 'central':683 'chang':117,214,808,914 'char':621 'check':24,538,672,744,757,893 'cli':39,49 'code':140 'collect':632,644 'column':342,860 'comma':938 'comma-separ':937 'command':82 'compat':588,924 'contain':912 'convent':927 'current':304,347,608 'default':713 'definit':343 'dep':3,974 'depend':15,20,32,42,46,684,817,827,900 'detect':183,527,535,662,831,946 'direct':534,809 'discov':176,293 'display':839 'dri':91,98,103,119,123,260,265,376 'dry-run':90,97,102,264 'dry-run-mod':122 'e.g':75,95,220,227,236,245,392 'edit':803 'enabl':192 'entir':223,880 'entri':781,971 'eslint':320,854 'everi':292 'exampl':783,844 'exist':729,773 'exit':139,287 'f':458 'fals':631 'field':690 'filter':255 'first':423 'fix':65,216,297,341,407,409,430,460,473,477,483,876,898 'fixed-skip':459 'fixed-vers':64,296,408,897 'flag':935,950 'format':615 'frequent':583 'g':157 'global':153 'group':433,841 'header':616 'icon':580 'identifi':472 'import':895 'includ':88,291,295,520,656,869,934 'include-lock':868 'indic':861,903 'individu':62,606 'inform':145 'insid':691 'instal':133,152,154,156,816,826,894 'instead':276 'intent':904 'interact':891 'interpret':837 'jest':704,716 'json':695 'librari':581 'line':447 'lock':870 'lodash':336,484,488 'lucid':328,394,578 'lucide-react':327,393,577 'm':452 'major':60,242,311,332,366,390,397,453,500,560,575,584,597,612,635,641,650,654,849,909 'major/minor/patch':864 'manag':834 'markdown':280 'max':619 'may':911 'mention':31 'minor':233,316,339,367,455,509,518,853 'minor/patch':56,384,494,919 'mode':121,125,194,262,529,892 'modifi':907 'monorepo':184,528,660,681,945 'multiselect':630 'must':150,290 'n':449 'name':70,346,438,618,719,759,941 'need':624,951 'neither':725 'never':566,906 'new':359 'ni':824 'node':22 'node.js':45 'non':375,499,890 'non-dry-run':374 'non-interact':889 'non-major':498 'none':777 'normal':373 'note':896 'npm':17,155 'npm/pnpm/yarn/bun':34 'npx':162 'object':694 'one':160,446 'one-lin':445 'one-tim':159 'option':625 'outdat':26 'output':207,836,845 'p':454 'packag':18,23,27,35,67,69,86,210,251,259,294,299,303,344,345,391,411,437,507,512,552,565,570,594,607,617,697,698,707,736,765,833,865,940,963 'package.json':29,188,354,476,542,675,733,813 'pars':200 'pass':94,268 'patch':224,323,369,457,857 'pattern':944 'pin':905 'pnpm-workspace.yaml':190,544 'practic':590 'prefix':219,357,364,482,775 'prerequisit':127 'present':110,277,440,549 'preserv':362,771 'print':443 'prioriti':421 'proceed':466 'process':490 'project':185 'prompt':52,58,248,312,396,402,422,504,558,567,916 'protocol':967 'provid':72,254,516 'purpos':884 'q':456 'question':614 'r':547,658 'rang':356,363,481,487,774 'react':77,105,329,395,521,579,700,711,788,793,800 'recurs':193 'refer':708,882 'regex':943 'regular':973 'remain':593 'report':550 'rightmost':859 'root':674,732,812 'run':92,99,104,120,124,135,171,261,266,377,532,823,886 'safe':928 'scan':106,168 'scope':79 'script':174,180,524,881,883 'scripts/run-taze.sh':137,197,885 'see':118 'semver':926 'separ':939 'shown':300,866 'singl':279 'skill':5,43 'skill-bump-deps' 'skip':63,222,302,340,389,406,415,429,461,486,564,629,721,878 'smart':51 'sort':416,434 'sourc':958 'source-paulrberg' 'specif':511 'start':129 'step':166,198,468,491,556,637,663,723,741,814 'stop':143,269,463 'string':349,361 'summar':282 'summari':112,448 'tabl':113,281,289,418,442 'taze':38,48,81,131,149,158,163,173,206,508,517,533,653,791,835,838,887 'test':703,718 'time':161 'topic-agent-skills' 'topic-ai-agents' 'truncat':622 'truth':960 'type':306,365,843,863 'types/node':308,846 'typescript':78,313,522,850 'updat':14,16,28,33,44,57,61,108,164,170,178,203,211,275,285,385,398,450,495,501,555,561,576,598,610,627,636,642,651,665,671,739,752,767,796,820,840,862,910,920,969 'upgrad':21,36 'usag':40 'use':8,47,87,600,686,802,964 'user':11,147,249,405,605,645,918 'verifi':130 'version':66,213,298,348,360,410,474,478,613,685,754,769,807,877,899 'within':431 'without':114,503 'workflow':165,378 'workspac':186,540,678,693,696,706,962 'workspaces.catalog':726,749,954 'workspaces.catalogs':728,762,955 'would':379,400,413 'write':510,519,655 'x.0.0':244 'x.y.0':235 'x.y.z':225,226,234,243 'yes':626","prices":[{"id":"8bd63423-d549-46b0-900e-9652378cd55a","listingId":"c36d2376-3a16-4a6d-9493-28660c989e35","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"PaulRBerg","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:17:33.543Z"}],"sources":[{"listingId":"c36d2376-3a16-4a6d-9493-28660c989e35","source":"github","sourceId":"PaulRBerg/agent-skills/bump-deps","sourceUrl":"https://github.com/PaulRBerg/agent-skills/tree/main/skills/bump-deps","isPrimary":false,"firstSeenAt":"2026-04-18T22:17:33.543Z","lastSeenAt":"2026-04-22T00:56:17.148Z"}],"details":{"listingId":"c36d2376-3a16-4a6d-9493-28660c989e35","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"PaulRBerg","slug":"bump-deps","github":{"repo":"PaulRBerg/agent-skills","stars":50,"topics":["agent-skills","ai-agents"],"license":"mit","html_url":"https://github.com/PaulRBerg/agent-skills","pushed_at":"2026-04-20T16:22:56Z","description":"PRB's collection of agent skills","skill_md_sha":"375775a026b2bba5d0c2a0448d0fb3494f21bd53","skill_md_path":"skills/bump-deps/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/PaulRBerg/agent-skills/tree/main/skills/bump-deps"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"bump-deps","description":"This skill should be used when the user asks to \"update dependencies\", \"update npm packages\", \"bump dependencies\", \"upgrade node packages\", \"check for outdated packages\", \"update package.json\", or mentions dependency updates, npm/pnpm/yarn/bun package upgrades, or taze CLI usage."},"skills_sh_url":"https://skills.sh/PaulRBerg/agent-skills/bump-deps"},"updatedAt":"2026-04-22T00:56:17.148Z"}}