vercel-labs/agent-skills · error · Error
VERCEL_CLI_TOO_OLD
VERCEL_CLI_TOO_OLD
Error message
VERCEL_CLI_TOO_OLD: have ${v.join('.')}, need >= ${MIN_CLI_VERSION.join('.')}. Upgrade with `npm i -g vercel@latest`. What it means
Thrown by checkCliVersion() after parsing the CLI version and comparing component-by-component against MIN_CLI_VERSION=[53,0,0]. The skill requires v53+ because pre-v53 lacks the `vercel metrics`, `vercel contract`, and `vercel api` subcommands the collector depends on (per the file comment). When any component is below the floor at the first differing index, the run aborts with the have/need versions.
Source
Thrown at skills/vercel-optimize/lib/vercel.mjs:107
const MIN_CLI_VERSION = [53, 0, 0];
// Pre-v53 lacks `vercel metrics` and `vercel contract`.
export async function checkCliVersion() {
let raw;
try {
const { stdout } = await runVercel(['--version']);
raw = stdout.trim();
} catch (err) {
throw new Error('VERCEL_NOT_INSTALLED: `vercel` CLI not found in PATH. Install with `npm i -g vercel@latest`.');
}
const m = raw.match(/(\d+)\.(\d+)\.(\d+)/);
if (!m) throw new Error(`VERCEL_VERSION_UNPARSEABLE: ${raw}`);
const v = [Number(m[1]), Number(m[2]), Number(m[3])];
for (let i = 0; i < 3; i++) {
if (v[i] > MIN_CLI_VERSION[i]) return v;
if (v[i] < MIN_CLI_VERSION[i]) {
throw new Error(
`VERCEL_CLI_TOO_OLD: have ${v.join('.')}, need >= ${MIN_CLI_VERSION.join('.')}. Upgrade with \`npm i -g vercel@latest\`.`
);
}
}
return v;
}
export async function checkAuth() {
try {
await runVercel(['whoami']);
} catch {
throw new Error('NOT_AUTH: run `vercel login`.');
}
}
export async function getCliIdentity() {
const r = await runVercelJson(['whoami', '--format', 'json']);
return r.ok ? r.data : null;View on GitHub (pinned to b8caa260a4)
Solutions
- Upgrade: `npm i -g vercel@latest`, then re-run after confirming `vercel --version` reports >= 53.0.0.
- If a project pins an old CLI in devDependencies, bump that pin to `vercel@latest` and reinstall.
- Rebuild any Docker/CI image that bakes the CLI version in, so stale images stop circulating.
Example fix
// before (package.json or global install pinning an old CLI) "vercel": "^28.0.0" // after "vercel": "^53.0.0" // then: npm i -g vercel@latest (or npm i for the devDependency)
Defensive patterns
Strategy: validation
Validate before calling
import { execFileSync } from 'node:child_process';
const MIN = [53, 0, 0];
function assertVersionOk() {
const v = execFileSync('vercel', ['--version'], { encoding: 'utf-8' })
.match(/(\d+)\.(\d+)\.(\d+)/).slice(1).map(Number);
for (let i = 0; i < 3; i++) {
if (v[i] > MIN[i]) return;
if (v[i] < MIN[i]) throw new Error(`vercel ${v.join('.')} < ${MIN.join('.')}; upgrade`);
}
}
assertVersionOk(); Try / catch
try {
await checkCliVersion();
} catch (err) {
if (err.message.startsWith('VERCEL_CLI_TOO_OLD')) {
console.error('Upgrade the CLI and rerun: npm i -g vercel@latest');
}
throw err;
} Prevention
- Pin `vercel@^53` in devDependencies so a too-old version cannot resolve.
- Rebuild Docker/CI images periodically so they carry a current CLI.
- Assert the CLI version in a precheck step before collect-signals.
When it happens
Trigger: An installed CLI at v52.x or earlier (lacks metrics/contract subcommands); a system with an old pinned `vercel` from a lockfile or system package manager; a Docker image baked with an older CLI.
Common situations: Long-lived CI image that ships vercel v42; a team pinning `vercel@^28` in package.json; an OS package (Homebrew/snap) lagging behind npm; local install forgotten after a machine migration.
Related errors
AI-assisted analysis of vercel-labs/agent-skills@b8caa260a4 (2026-08-13).
Data as JSON: /api/errors/0b467e204e9b3480.
Report an issue: GitHub.