{"data":{"skill":{"slug":"vercel-vercel-cli","name":"vercel-cli","icon":"📦","repo":"https://github.com/vercel/vercel/tree/84878e532142f0ac584953695658b324eb9e5b80/skills/vercel-cli","status":"approved","author":"vercel","authorVersion":null,"skillstoreRevision":1,"license":null},"licenseCorrection":null,"audit":{"id":"4b6b175a-4bb2-4f0a-88b4-4fb2f844ddb4","skill_id":"2fb54255-833c-4e45-8d5a-16479a63b2cd","version":1,"content_hash":"v3:c993c6abcbffafea2683d7748b53b3dfaf438415:e5091f0000bdf245dd1e917ed3ea4aa05ca8687abef1830c5208ee1dad8ed7b8:dc770c65242ddaf47150474ec5c9a64f630926f89f3dad95ecdb30bb9bfa6d9e:736b696c6c732f76657263656c2f76657263656c2d636c69:f1622a3303d04fcf884812d4dcfe66e1","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 28 static findings are false positives involving documentation links, Markdown formatting, or legitimate Vercel workflows with explicit safeguards. No evidence found of credential exfiltration, unauthorized reconnaissance, or prompt injection in the reviewed files. Actual operations still require appropriate credentials, verified targets, and user authorization.","remediation":[],"risk_factor_evidence":[{"factor":"filesystem","evidence":[{"file":"command/vercel.md","line_end":5,"line_start":5},{"file":"references/environment-variables.md","line_end":17,"line_start":17},{"file":"references/monorepos.md","line_end":5,"line_start":5},{"file":"SKILL.md","line_end":29,"line_start":29},{"file":"SKILL.md","line_end":30,"line_start":30}]},{"factor":"network","evidence":[{"file":"references/advanced.md","line_end":9,"line_start":9},{"file":"references/microfrontends.md","line_end":3,"line_start":3}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":3,"line_start":3},{"file":"SKILL.md","line_end":8,"line_start":8},{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":25,"line_start":25},{"file":"SKILL.md","line_end":27,"line_start":27},{"file":"SKILL.md","line_end":29,"line_start":29},{"file":"SKILL.md","line_end":30,"line_start":30}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":25,"total_lines":656,"audit_model":"codex","audited_at":"2026-11-06T15:33:27.34+00:00","created_at":"2026-11-09T15:36:38.267055+00:00","static_findings":[{"id":"filesystem:command/vercel.md:5:path-traversal-sequence","file":"command/vercel.md","pattern":"Path traversal sequence","snippet":"Read [the Vercel CLI skill](../SKILL.md) and the references relevant to the task. Discover command s","category":"filesystem","line_end":5,"severity":"high","line_start":5},{"id":"network:references/advanced.md:9:python-http-libraries","file":"references/advanced.md","pattern":"Python HTTP libraries","snippet":"Captured request traces describe individual requests. Use a request identifier from evidence; do not","category":"network","line_end":9,"severity":"low","line_start":9},{"id":"blocker:references/agent-and-ai.md:9:system-reconnaissance","file":"references/agent-and-ai.md","pattern":"System reconnaissance","snippet":"Gateway keys are credentials with billing scope. Reuse an appropriate existing key when supplied, pr","category":"blocker","line_end":9,"severity":"low","line_start":9},{"id":"blocker:references/connectors.md:5:system-reconnaissance","file":"references/connectors.md","pattern":"System reconnaissance","snippet":"Omitting scopes requests the connector's defaults, not an empty permission set. Use the requested op","category":"blocker","line_end":5,"severity":"low","line_start":5},{"id":"blocker:references/deployment.md:5:system-reconnaissance","file":"references/deployment.md","pattern":"System reconnaissance","snippet":"Inspect the exact deployment URL or alias supplied by the user. An alias need not match the project ","category":"blocker","line_end":5,"severity":"low","line_start":5},{"id":"filesystem:references/environment-variables.md:17:path-traversal-sequence","file":"references/environment-variables.md","pattern":"Path traversal sequence","snippet":"When using a linked project, verify the resolved project from the actual working directory before pu","category":"filesystem","line_end":17,"severity":"high","line_start":17},{"id":"sensitive:references/environment-variables.md:7:environment-file-access","file":"references/environment-variables.md","pattern":"Environment file access","snippet":"Environment pull writes an application env file; project pull writes settings and environment data u","category":"sensitive","line_end":7,"severity":"high","line_start":7},{"id":"sensitive:references/environment-variables.md:7:environment-variant-files","file":"references/environment-variables.md","pattern":"Environment variant files","snippet":"Environment pull writes an application env file; project pull writes settings and environment data u","category":"sensitive","line_end":7,"severity":"high","line_start":7},{"id":"network:references/microfrontends.md:3:python-http-libraries","file":"references/microfrontends.md","pattern":"Python HTTP libraries","snippet":"The default app owns `microfrontends.json` and serves unmatched requests. Child apps deploy independ","category":"network","line_end":3,"severity":"low","line_start":3},{"id":"blocker:references/monitoring-and-debugging.md:30:system-reconnaissance","file":"references/monitoring-and-debugging.md","pattern":"System reconnaissance","snippet":"In JSON Lines output, each record is under `data`, and a final `summary` reports the window searched","category":"blocker","line_end":30,"severity":"low","line_start":30},{"id":"filesystem:references/monorepos.md:5:path-traversal-sequence","file":"references/monorepos.md","pattern":"Path traversal sequence","snippet":"Use repository directory mappings when multiple applications have separate Vercel projects. Verify t","category":"filesystem","line_end":5,"severity":"high","line_start":5},{"id":"blocker:references/platform-ops.md:11:system-reconnaissance","file":"references/platform-ops.md","pattern":"System reconnaissance","snippet":"Bound usage queries to the requested window and grouping. Missing plan or permission data is not zer","category":"blocker","line_end":11,"severity":"low","line_start":11},{"id":"blocker:references/platform-ops.md:13:system-reconnaissance","file":"references/platform-ops.md","pattern":"System reconnaissance","snippet":"Token values are credentials, not ordinary account metadata. Avoid exposing them when listing or des","category":"blocker","line_end":13,"severity":"low","line_start":13},{"id":"blocker:references/projects-and-teams.md:5:system-reconnaissance","file":"references/projects-and-teams.md","pattern":"System reconnaissance","snippet":"A single page or one checked scope does not prove that no projects or deployments exist. Follow pagi","category":"blocker","line_end":5,"severity":"low","line_start":5},{"id":"sensitive:references/storage.md:27:environment-file-access","file":"references/storage.md","pattern":"Environment file access","snippet":"Credential precedence is explicit arguments, process environment, then `.env.local`. Within an envir","category":"sensitive","line_end":27,"severity":"high","line_start":27},{"id":"sensitive:references/storage.md:27:environment-variant-files","file":"references/storage.md","pattern":"Environment variant files","snippet":"Credential precedence is explicit arguments, process environment, then `.env.local`. Within an envir","category":"sensitive","line_end":27,"severity":"high","line_start":27},{"id":"blocker:references/storage.md:19:system-reconnaissance","file":"references/storage.md","pattern":"System reconnaissance","snippet":"OIDC-backed Blob connections avoid a long-lived read-write token unless it is explicitly requested. ","category":"blocker","line_end":19,"severity":"low","line_start":19},{"id":"blocker:references/storage.md:27:system-reconnaissance","file":"references/storage.md","pattern":"System reconnaissance","snippet":"Credential precedence is explicit arguments, process environment, then `.env.local`. Within an envir","category":"blocker","line_end":27,"severity":"low","line_start":27},{"id":"external_commands:SKILL.md:3:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"description: Guides deployment, configuration, and troubleshooting with the Vercel CLI. Use when ope","category":"external_commands","line_end":3,"severity":"medium","line_start":3},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use the installed CLI's help for command discovery, arguments, flags, defaults, and examples: start ","category":"external_commands","line_end":8,"severity":"medium","line_start":8},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Reuse the project's installed CLI and authenticated context. If the CLI is missing, follow the proje","category":"external_commands","line_end":14,"severity":"medium","line_start":14},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Structured errors can contain `status`, `reason`, `hint`, and suggested `next` commands. Follow a ","category":"external_commands","line_end":20,"severity":"medium","line_start":20},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`vercel ci` is repository/team-scoped and does not require a project link; follow [Vercel CI](refere","category":"external_commands","line_end":25,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"When relying on a local link, inspect the resolved owner/project from the directory where subsequent","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `<cwd>/.vercel/project.json` takes precedence over repository mappings; a root single-project link","category":"external_commands","line_end":29,"severity":"medium","line_start":29},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `<repo-root>/.vercel/repo.json` selects the deepest mapped directory containing the working direct","category":"external_commands","line_end":30,"severity":"medium","line_start":30},{"id":"filesystem:SKILL.md:29:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- `<cwd>/.vercel/project.json` takes precedence over repository mappings; a root single-project link","category":"filesystem","line_end":29,"severity":"medium","line_start":29},{"id":"filesystem:SKILL.md:30:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- `<repo-root>/.vercel/repo.json` selects the deepest mapped directory containing the working direct","category":"filesystem","line_end":30,"severity":"medium","line_start":30}],"finding_verdicts":[{"id":"filesystem:command/vercel.md:5:path-traversal-sequence","reason":"The parent-directory sequence is a Markdown link to the bundled SKILL.md file. It does not construct an untrusted filesystem path or escape the skill directory.","verdict":"false_positive","confidence":0.99},{"id":"network:references/advanced.md:9:python-http-libraries","reason":"The word requests describes captured request traces, not a Python HTTP library. This paragraph contains no network code and requires evidence-based request identifiers.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/agent-and-ai.md:9:system-reconnaissance","reason":"The paragraph protects billing-scoped Gateway keys and preserves user-controlled authentication. It does not request host reconnaissance or unrelated credential collection.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/connectors.md:5:system-reconnaissance","reason":"This guidance selects connector permissions for the requested operation and warns against exposing tokens or trigger URLs. It does not enumerate host information.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/deployment.md:5:system-reconnaissance","reason":"Inspection is restricted to the deployment URL or alias supplied by the user. Resolving its project metadata prevents incorrect targeting rather than performing unrelated reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:references/environment-variables.md:17:path-traversal-sequence","reason":"The sequence appears in a relative Markdown link to the project-targeting section of SKILL.md. The paragraph requires target verification before accessing environment data.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:references/environment-variables.md:7:environment-file-access","reason":"Environment-file creation is an intended local development workflow, not secret harvesting. The paragraph distinguishes pull formats and requires custom filenames to be excluded from source control.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:references/environment-variables.md:7:environment-variant-files","reason":"The .env.local reference explains the CLI's ignore-rule behavior and warns about custom filenames. It does not instruct disclosure, uploading, or indiscriminate inspection of secrets.","verdict":"false_positive","confidence":0.97},{"id":"network:references/microfrontends.md:3:python-http-libraries","reason":"Requests refers to traffic routed by microfrontend applications. There is no Python import, HTTP client invocation, or outbound data transfer in this paragraph.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/monitoring-and-debugging.md:30:system-reconnaissance","reason":"This paragraph explains log pagination and coverage gaps while preserving the original target, filter, and time window. It does not discover unrelated systems.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:references/monorepos.md:5:path-traversal-sequence","reason":"The parent-directory sequence is a documentation link to the bundled project-targeting guidance. It is not a file operation using attacker-controlled traversal.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/platform-ops.md:11:system-reconnaissance","reason":"Usage queries are bounded to the requested reporting window, and purchases must remain within user authorization. No host enumeration or unrelated account discovery is requested.","verdict":"false_positive","confidence":0.98},{"id":"blocker:references/platform-ops.md:13:system-reconnaissance","reason":"The sentence explicitly warns against exposing token values during account inspection. It is a credential-protection rule, not a request to harvest credentials.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/projects-and-teams.md:5:system-reconnaissance","reason":"Discovery is limited to relevant candidate scopes and explicitly avoids unrelated teams. Ambiguous targets require user selection, which constrains account enumeration.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:references/storage.md:27:environment-file-access","reason":"The paragraph documents Blob credential precedence for an intended store operation. It does not direct bulk secret collection, disclosure, or transmission to an unrelated destination.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:references/storage.md:27:environment-variant-files","reason":"The .env.local mention explains fallback precedence and partial OIDC configuration failures. Adjacent guidance prohibits secret values in logs or command examples.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/storage.md:19:system-reconnaissance","reason":"This paragraph favors OIDC over long-lived tokens and prevents implicit authentication-mode changes. It contains no system reconnaissance instruction.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/storage.md:27:system-reconnaissance","reason":"Checking stale or partial OIDC values is scoped Blob authentication troubleshooting. It does not request machine inventory or unrelated credential discovery.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:3:ruby-shell-backtick-execution","reason":"Backticks format the vercel api command name inside a YAML description. They are not shell substitution or executable Ruby code.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","reason":"Backticks mark a documented CLI help command in Markdown. Consulting installed help is ordinary command discovery, not injected shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","reason":"Inline commands describe normal installation and user-controlled login, not shell backtick evaluation. The paragraph preserves project conventions and supplies automation tokens through environment variables.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:20:ruby-shell-backtick-execution","reason":"Backticks format structured error field names. Suggested commands require task-compatible targets and actions, and cannot independently authorize mutations or authentication.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"The backticks format the vercel ci command name in documentation. The sentence clarifies repository and team scope rather than evaluating shell code.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","reason":"The inline project inspection command verifies the resolved target before later operations. Markdown backticks do not execute it, and mismatches require stopping.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","reason":"Backticks format a local project metadata path, not an executable expression. The bullet documents link precedence and performs no shell substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","reason":"Backticks format the repository mapping path in Markdown. The text explains project resolution and contains no shell or Ruby evaluation.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:29:hidden-file-access","reason":"The hidden path is standard Vercel project-link metadata. Consulting its precedence helps verify the authorized target and does not access unrelated private files.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:30:hidden-file-access","reason":"The hidden repository mapping file is legitimate Vercel configuration for monorepo targeting. The paragraph neither collects secret files nor instructs access outside this workflow.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"c993c6abcbffafea2683d7748b53b3dfaf438415","subject_content_hash":"e5091f0000bdf245dd1e917ed3ea4aa05ca8687abef1830c5208ee1dad8ed7b8","subject_tree_hash":"dc770c65242ddaf47150474ec5c9a64f630926f89f3dad95ecdb30bb9bfa6d9e","subject_plugin_path":"skills/vercel/vercel-cli","audit_payload_hash":"f1622a3303d04fcf884812d4dcfe66e1","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"c993c6abcbffafea2683d7748b53b3dfaf438415","contentHash":"e5091f0000bdf245dd1e917ed3ea4aa05ca8687abef1830c5208ee1dad8ed7b8","treeHash":"dc770c65242ddaf47150474ec5c9a64f630926f89f3dad95ecdb30bb9bfa6d9e","pluginPath":"skills/vercel/vercel-cli","auditPayloadHash":"f1622a3303d04fcf884812d4dcfe66e1"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/vercel-vercel-cli/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}