{"data":{"skill":{"slug":"vercel-labs-vercel-cli-with-tokens","name":"vercel-cli-with-tokens","icon":"📦","repo":"https://github.com/vercel-labs/agent-skills/tree/1a2c79d4e6c4a2283dc2c614b6538cbe1ed5ca62/skills/vercel-cli-with-tokens","status":"approved","author":"vercel-labs","authorVersion":"1.0.0","skillstoreRevision":2,"license":null},"licenseCorrection":null,"audit":{"id":"adbb8ec6-3057-45e0-ae8d-3fe3693e5234","skill_id":"ecd76e8c-52d9-4224-8898-a0bd98f44752","version":6,"content_hash":"v3:1f79e59ae427a74eab604c013e03b61f04634721:c06bea99e75eab07fde4fae26069baa002f82f39b53f07981704c2901551dd4c:bf095a5f697aa6d8ebc970efb600ef206a4aca09b55256be3891f965ff6ccc9b:736b696c6c732f76657263656c2d6c6162732f76657263656c2d636c692d776974682d746f6b656e73:39d60cb4a092ed72a0e13705acfbd98a","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Most alerts identify Markdown formatting, local parsing, official Vercel links, or authorized CLI operations rather than malicious execution or reconnaissance. Credential lookup commands expose token values in captured output, while deployment guidance omits important commit, production-branch, and destructive-action safeguards. No evidence found of prompt injection or deliberate external credential exfiltration.","remediation":[{"issue":"Token discovery and troubleshooting print raw credentials into command output.","severity":"high","suggestion":"Replace token-printing printenv and grep examples with presence-only checks and silent loading of explicitly selected variables. Never include secret values in transcripts."},{"issue":"The Git deployment flow stages the entire working directory before committing and pushing.","severity":"medium","suggestion":"Review working and staged changes, check ignored secret files, and stage only approved paths. Request push approval for the reviewed commit and destination."},{"issue":"Git deployment does not verify whether the current branch triggers production.","severity":"medium","suggestion":"Check the destination branch and Vercel production-branch configuration before pushing. Require explicit production approval or use a verified preview branch."},{"issue":"The blanket recommendation to bypass prompts also applies to destructive environment-variable removal.","severity":"medium","suggestion":"Allow noninteractive confirmation only after explicit approval of the exact project, environment, and destructive action. Preserve prompts otherwise."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":11,"line_start":11},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":21,"line_start":19},{"file":"SKILL.md","line_end":25,"line_start":21},{"file":"SKILL.md","line_end":25,"line_start":25},{"file":"SKILL.md","line_end":29,"line_start":27},{"file":"SKILL.md","line_end":33,"line_start":29},{"file":"SKILL.md","line_end":35,"line_start":33},{"file":"SKILL.md","line_end":37,"line_start":35},{"file":"SKILL.md","line_end":39,"line_start":37},{"file":"SKILL.md","line_end":41,"line_start":39},{"file":"SKILL.md","line_end":43,"line_start":41},{"file":"SKILL.md","line_end":45,"line_start":43},{"file":"SKILL.md","line_end":47,"line_start":45},{"file":"SKILL.md","line_end":49,"line_start":47},{"file":"SKILL.md","line_end":57,"line_start":49},{"file":"SKILL.md","line_end":57,"line_start":57},{"file":"SKILL.md","line_end":66,"line_start":59},{"file":"SKILL.md","line_end":70,"line_start":66},{"file":"SKILL.md","line_end":72,"line_start":70},{"file":"SKILL.md","line_end":79,"line_start":72},{"file":"SKILL.md","line_end":81,"line_start":79},{"file":"SKILL.md","line_end":83,"line_start":81},{"file":"SKILL.md","line_end":86,"line_start":83},{"file":"SKILL.md","line_end":88,"line_start":86},{"file":"SKILL.md","line_end":88,"line_start":88},{"file":"SKILL.md","line_end":93,"line_start":90},{"file":"SKILL.md","line_end":95,"line_start":93},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":104,"line_start":101},{"file":"SKILL.md","line_end":112,"line_start":104},{"file":"SKILL.md","line_end":112,"line_start":112},{"file":"SKILL.md","line_end":116,"line_start":114},{"file":"SKILL.md","line_end":118,"line_start":116},{"file":"SKILL.md","line_end":118,"line_start":118},{"file":"SKILL.md","line_end":122,"line_start":120},{"file":"SKILL.md","line_end":126,"line_start":122},{"file":"SKILL.md","line_end":128,"line_start":126},{"file":"SKILL.md","line_end":132,"line_start":128},{"file":"SKILL.md","line_end":134,"line_start":132},{"file":"SKILL.md","line_end":142,"line_start":134},{"file":"SKILL.md","line_end":148,"line_start":142},{"file":"SKILL.md","line_end":154,"line_start":148},{"file":"SKILL.md","line_end":156,"line_start":154},{"file":"SKILL.md","line_end":158,"line_start":156},{"file":"SKILL.md","line_end":158,"line_start":158},{"file":"SKILL.md","line_end":164,"line_start":162},{"file":"SKILL.md","line_end":166,"line_start":164},{"file":"SKILL.md","line_end":170,"line_start":166},{"file":"SKILL.md","line_end":172,"line_start":170}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":81,"line_start":81},{"file":"SKILL.md","line_end":84,"line_start":84},{"file":"SKILL.md","line_end":85,"line_start":85},{"file":"SKILL.md","line_end":297,"line_start":297}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":28,"line_start":28},{"file":"SKILL.md","line_end":42,"line_start":42},{"file":"SKILL.md","line_end":78,"line_start":78},{"file":"SKILL.md","line_end":144,"line_start":144},{"file":"SKILL.md","line_end":147,"line_start":147},{"file":"SKILL.md","line_end":318,"line_start":318}]}],"critical_findings":[],"high_findings":[{"title":"Environment file access","locations":[{"file":"SKILL.md","line_end":28,"line_start":28}],"confidence":0.99,"description":"grep '^VERCEL_TOKEN=' .env 2>/dev/null","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"The grep command prints the complete VERCEL_TOKEN assignment, exposing the access token to captured command output and assistant transcripts."},{"title":"Environment file access","locations":[{"file":"SKILL.md","line_end":42,"line_start":42}],"confidence":0.99,"description":"grep -i 'vercel' .env 2>/dev/null","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"Broad grep prints every matching environment assignment, including Vercel credentials, into captured output instead of silently selecting the authentication variable."},{"title":"Environment file access","locations":[{"file":"SKILL.md","line_end":78,"line_start":78}],"confidence":0.99,"description":"grep -i 'vercel' .env 2>/dev/null","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"Although this step seeks project identifiers, its broad grep also prints token assignments, unnecessarily disclosing credentials in tool output."},{"title":"Environment file access","locations":[{"file":"SKILL.md","line_end":318,"line_start":318}],"confidence":0.99,"description":"grep -i vercel .env 2>/dev/null","review_kind":"security","source_category":"sensitive","source_severity":"high","confidence_reasoning":"The troubleshooting command prints matching environment values, including access tokens, into captured output without redaction."}],"medium_findings":[{"title":"Deployment Commits the Entire Working Directory","locations":[{"file":"SKILL.md","line_end":188,"line_start":182}],"confidence":0.96,"description":"The Git deployment recipe runs git add . before committing and pushing. Unreviewed changes or unignored secrets can enter the approved deployment commit.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The recipe explicitly stages all current-directory changes without reviewing the diff or selecting paths. Push approval does not establish approval for every staged file."},{"title":"Git Deployment Omits Production Branch Verification","locations":[{"file":"SKILL.md","line_end":108,"line_start":108},{"file":"SKILL.md","line_end":195,"line_start":178},{"file":"SKILL.md","line_end":304,"line_start":303}],"confidence":0.95,"description":"The preferred Git flow pushes without checking the destination branch. A production-branch push can deploy production without the separate approval required elsewhere.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The document acknowledges branch-dependent deployments but supplies no branch check before git push. General push consent does not necessarily authorize production."},{"title":"Blanket Prompt Bypass Lacks Destructive Action Approval","locations":[{"file":"SKILL.md","line_end":248,"line_start":247},{"file":"SKILL.md","line_end":308,"line_start":308}],"confidence":0.95,"description":"The working agreement recommends -y for confirmation prompts, and the environment-variable removal example uses it. Destructive removal has no explicit user-approval requirement.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"Both instructions explicitly bypass confirmation, while approval requirements only cover Git pushes, production deployment, and paid or destructive plan changes."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":354,"audit_model":"codex","audited_at":"2026-11-09T12:27:28.636+00:00","created_at":"2026-11-10T01:31:58.242158+00:00","static_findings":[{"id":"external_commands:SKILL.md:11:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Deploy and manage projects on Vercel using the CLI with token-based authentication, without relying ","category":"external_commands","line_end":11,"severity":"medium","line_start":11},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### A) `VERCEL_TOKEN` is already set in the environment","category":"external_commands","line_end":17,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":21,"severity":"medium","line_start":19},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":25,"severity":"medium","line_start":21},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### B) Token is in a `.env` file under `VERCEL_TOKEN`","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":"```bash","category":"external_commands","line_end":29,"severity":"medium","line_start":27},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":33,"severity":"medium","line_start":29},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":35,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":37,"severity":"medium","line_start":35},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### C) Token is in a `.env` file under a different name","category":"external_commands","line_end":39,"severity":"medium","line_start":37},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Look for any variable that looks like a Vercel token (Vercel tokens typically start with `vca_`):","category":"external_commands","line_end":41,"severity":"medium","line_start":39},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":43,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":45,"severity":"medium","line_start":43},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Inspect the output to identify which variable holds the token, then export it as `VERCEL_TOKEN`:","category":"external_commands","line_end":47,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":49,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":57,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Important:** Once `VERCEL_TOKEN` is exported as an environment variable, the Vercel CLI reads it n","category":"external_commands","line_end":57,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":66,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":70,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Similarly, check for the project ID and team scope. These let the CLI target the right project witho","category":"external_commands","line_end":72,"severity":"medium","line_start":70},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":79,"severity":"medium","line_start":72},{"id":"external_commands:SKILL.md:79:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":81,"severity":"medium","line_start":79},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**If you have a project URL** (e.g. `https://vercel.com/my-team/my-project`), extract the team slug:","category":"external_commands","line_end":83,"severity":"medium","line_start":81},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":86,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":88,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**If you have both `VERCEL_ORG_ID` and `VERCEL_PROJECT_ID` in your environment**, export them — the ","category":"external_commands","line_end":88,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":93,"severity":"medium","line_start":90},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":95,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Note: `VERCEL_ORG_ID` and `VERCEL_PROJECT_ID` must be set together — setting only one causes an erro","category":"external_commands","line_end":95,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":104,"severity":"medium","line_start":101},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":112,"severity":"medium","line_start":104},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"When `VERCEL_TOKEN` and `VERCEL_PROJECT_ID` are set in the environment, deploy directly:","category":"external_commands","line_end":112,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:114:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":116,"severity":"medium","line_start":114},{"id":"external_commands:SKILL.md:116:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":118,"severity":"medium","line_start":116},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"With a team scope (either via `VERCEL_ORG_ID` or `--scope`):","category":"external_commands","line_end":118,"severity":"medium","line_start":118},{"id":"external_commands:SKILL.md:120:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":122,"severity":"medium","line_start":120},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":126,"severity":"medium","line_start":122},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":128,"severity":"medium","line_start":126},{"id":"external_commands:SKILL.md:128:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":132,"severity":"medium","line_start":128},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":134,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:134:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":142,"severity":"medium","line_start":134},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":148,"severity":"medium","line_start":142},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":154,"severity":"medium","line_start":148},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":156,"severity":"medium","line_start":154},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":158,"severity":"medium","line_start":156},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Reads the git remote and connects to the matching Vercel project. Creates `.vercel/repo.json`. More ","category":"external_commands","line_end":158,"severity":"medium","line_start":158},{"id":"external_commands:SKILL.md:162:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":164,"severity":"medium","line_start":162},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":166,"severity":"medium","line_start":164},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Creates `.vercel/project.json`.","category":"external_commands","line_end":170,"severity":"medium","line_start":166},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":172,"severity":"medium","line_start":170},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":174,"severity":"medium","line_start":172},{"id":"external_commands:SKILL.md:174:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If the project is already linked, check `orgId` in `.vercel/project.json` or `.vercel/repo.json` to ","category":"external_commands","line_end":174,"severity":"medium","line_start":174},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":188,"severity":"medium","line_start":184},{"id":"external_commands:SKILL.md:188:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":191,"severity":"medium","line_start":188},{"id":"external_commands:SKILL.md:191:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":194,"severity":"medium","line_start":191},{"id":"external_commands:SKILL.md:194:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":195,"severity":"medium","line_start":194},{"id":"external_commands:SKILL.md:195:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Find the latest entry in the `deployments` array.","category":"external_commands","line_end":199,"severity":"medium","line_start":195},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":201,"severity":"medium","line_start":199},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":205,"severity":"medium","line_start":201},{"id":"external_commands:SKILL.md:205:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":207,"severity":"medium","line_start":205},{"id":"external_commands:SKILL.md:207:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":212,"severity":"medium","line_start":207},{"id":"external_commands:SKILL.md:212:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":215,"severity":"medium","line_start":212},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":217,"severity":"medium","line_start":215},{"id":"external_commands:SKILL.md:217:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":219,"severity":"medium","line_start":217},{"id":"external_commands:SKILL.md:219:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":222,"severity":"medium","line_start":219},{"id":"external_commands:SKILL.md:222:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### About `.vercel/` Directory","category":"external_commands","line_end":225,"severity":"medium","line_start":222},{"id":"external_commands:SKILL.md:225:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `.vercel/project.json` — from `vercel link`. Contains `projectId` and `orgId`.","category":"external_commands","line_end":225,"severity":"medium","line_start":225},{"id":"external_commands:SKILL.md:226:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `.vercel/repo.json` — from `vercel link --repo`. Contains `orgId`, `remoteName`, and a `projects` ","category":"external_commands","line_end":226,"severity":"medium","line_start":226},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Not needed when `VERCEL_ORG_ID` + `VERCEL_PROJECT_ID` are both set in the environment.","category":"external_commands","line_end":228,"severity":"medium","line_start":228},{"id":"external_commands:SKILL.md:230:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Do NOT** run `vercel project inspect` or `vercel link` in an unlinked directory to detect state — ","category":"external_commands","line_end":230,"severity":"medium","line_start":230},{"id":"external_commands:SKILL.md:234:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":249,"severity":"medium","line_start":234},{"id":"external_commands:SKILL.md:249:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":253,"severity":"medium","line_start":249},{"id":"external_commands:SKILL.md:253:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":265,"severity":"medium","line_start":253},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":269,"severity":"medium","line_start":265},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":278,"severity":"medium","line_start":269},{"id":"external_commands:SKILL.md:278:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":284,"severity":"medium","line_start":278},{"id":"external_commands:SKILL.md:284:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"First run `stripe projects status --json` to confirm the Vercel resource's local name. The examples ","category":"external_commands","line_end":284,"severity":"medium","line_start":284},{"id":"external_commands:SKILL.md:286:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Upgrade to Pro:** `stripe projects add vercel/pro` (or `stripe projects upgrade vercel-plan pro`","category":"external_commands","line_end":286,"severity":"medium","line_start":286},{"id":"external_commands:SKILL.md:287:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Downgrade to Hobby:** `stripe projects downgrade vercel-plan hobby`","category":"external_commands","line_end":301,"severity":"medium","line_start":287},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Never pass `VERCEL_TOKEN` as a `--token` flag.** Export it as an environment variable and let th","category":"external_commands","line_end":301,"severity":"medium","line_start":301},{"id":"external_commands:SKILL.md:302:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Check the environment for tokens before asking the user.** Look in the current env and `.env` fi","category":"external_commands","line_end":305,"severity":"medium","line_start":302},{"id":"external_commands:SKILL.md:305:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Do not modify `.vercel/` files directly.** The CLI manages this directory. Reading them (e.g. to","category":"external_commands","line_end":305,"severity":"medium","line_start":305},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Use `--format json`** when structured output will help with follow-up steps.","category":"external_commands","line_end":308,"severity":"medium","line_start":307},{"id":"external_commands:SKILL.md:308:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Use `-y`** on commands that prompt for confirmation to avoid interactive blocking.","category":"external_commands","line_end":314,"severity":"medium","line_start":308},{"id":"external_commands:SKILL.md:314:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Check the environment and any `.env` files present:","category":"external_commands","line_end":316,"severity":"medium","line_start":314},{"id":"external_commands:SKILL.md:316:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":319,"severity":"medium","line_start":316},{"id":"external_commands:SKILL.md:319:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":323,"severity":"medium","line_start":319},{"id":"external_commands:SKILL.md:323:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If the CLI fails with `Authentication required`:","category":"external_commands","line_end":325,"severity":"medium","line_start":323},{"id":"external_commands:SKILL.md:325:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Verify: `vercel whoami` (uses `VERCEL_TOKEN` from environment).","category":"external_commands","line_end":325,"severity":"medium","line_start":325},{"id":"external_commands:SKILL.md:332:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":334,"severity":"medium","line_start":332},{"id":"external_commands:SKILL.md:334:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":340,"severity":"medium","line_start":334},{"id":"external_commands:SKILL.md:340:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":342,"severity":"medium","line_start":340},{"id":"external_commands:SKILL.md:342:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":345,"severity":"medium","line_start":342},{"id":"external_commands:SKILL.md:345:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Missing dependencies — ensure `package.json` is complete and committed.","category":"external_commands","line_end":346,"severity":"medium","line_start":345},{"id":"external_commands:SKILL.md:346:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Missing environment variables — add with `vercel env add`.","category":"external_commands","line_end":347,"severity":"medium","line_start":346},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Framework misconfiguration — check `vercel.json`. Vercel auto-detects frameworks (Next.js, Remix, ","category":"external_commands","line_end":347,"severity":"medium","line_start":347},{"id":"external_commands:SKILL.md:351:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":353,"severity":"medium","line_start":351},{"id":"external_commands:SKILL.md:34:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"export VERCEL_TOKEN=$(grep '^VERCEL_TOKEN=' .env | cut -d= -f2-)","category":"external_commands","line_end":34,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:48:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"export VERCEL_TOKEN=$(grep '^<VARIABLE_NAME>=' .env | cut -d= -f2-)","category":"external_commands","line_end":48,"severity":"medium","line_start":48},{"id":"external_commands:SKILL.md:33:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"```bash","category":"external_commands","line_end":35,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:47:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"```bash","category":"external_commands","line_end":49,"severity":"medium","line_start":47},{"id":"network:SKILL.md:81:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"**If you have a project URL** (e.g. `https://vercel.com/my-team/my-project`), extract the team slug:","category":"network","line_end":81,"severity":"low","line_start":81},{"id":"network:SKILL.md:84:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"# e.g. \"my-team\" from \"https://vercel.com/my-team/my-project\"","category":"network","line_end":84,"severity":"low","line_start":84},{"id":"network:SKILL.md:85:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"echo \"$PROJECT_URL\" | sed 's|https://vercel.com/||' | cut -d/ -f1","category":"network","line_end":85,"severity":"low","line_start":85},{"id":"network:SKILL.md:297:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Full details: https://vercel.com/docs/plans/pro-plan","category":"network","line_end":297,"severity":"low","line_start":297},{"id":"filesystem:SKILL.md:28:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"grep '^VERCEL_TOKEN=' .env 2>/dev/null","category":"filesystem","line_end":28,"severity":"low","line_start":28},{"id":"filesystem:SKILL.md:42:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"grep -i 'vercel' .env 2>/dev/null","category":"filesystem","line_end":42,"severity":"low","line_start":42},{"id":"filesystem:SKILL.md:78:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"grep -i 'vercel' .env 2>/dev/null","category":"filesystem","line_end":78,"severity":"low","line_start":78},{"id":"filesystem:SKILL.md:144:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"git remote get-url origin 2>/dev/null","category":"filesystem","line_end":144,"severity":"low","line_start":144},{"id":"filesystem:SKILL.md:147:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"cat .vercel/project.json 2>/dev/null || cat .vercel/repo.json 2>/dev/null","category":"filesystem","line_end":147,"severity":"low","line_start":147},{"id":"filesystem:SKILL.md:318:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"grep -i vercel .env 2>/dev/null","category":"filesystem","line_end":318,"severity":"low","line_start":318},{"id":"sensitive:SKILL.md:25:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"### B) Token is in a `.env` file under `VERCEL_TOKEN`","category":"sensitive","line_end":25,"severity":"high","line_start":25},{"id":"sensitive:SKILL.md:28:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"grep '^VERCEL_TOKEN=' .env 2>/dev/null","category":"sensitive","line_end":28,"severity":"high","line_start":28},{"id":"sensitive:SKILL.md:34:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"export VERCEL_TOKEN=$(grep '^VERCEL_TOKEN=' .env | cut -d= -f2-)","category":"sensitive","line_end":34,"severity":"high","line_start":34},{"id":"sensitive:SKILL.md:37:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"### C) Token is in a `.env` file under a different name","category":"sensitive","line_end":37,"severity":"high","line_start":37},{"id":"sensitive:SKILL.md:42:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"grep -i 'vercel' .env 2>/dev/null","category":"sensitive","line_end":42,"severity":"high","line_start":42},{"id":"sensitive:SKILL.md:48:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"export VERCEL_TOKEN=$(grep '^<VARIABLE_NAME>=' .env | cut -d= -f2-)","category":"sensitive","line_end":48,"severity":"high","line_start":48},{"id":"sensitive:SKILL.md:77:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"# Or check .env","category":"sensitive","line_end":77,"severity":"high","line_start":77},{"id":"sensitive:SKILL.md:78:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"grep -i 'vercel' .env 2>/dev/null","category":"sensitive","line_end":78,"severity":"high","line_start":78},{"id":"sensitive:SKILL.md:244:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"# Pull env vars to local .env.local file","category":"sensitive","line_end":244,"severity":"high","line_start":244},{"id":"sensitive:SKILL.md:302:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"- **Check the environment for tokens before asking the user.** Look in the current env and `.env` fi","category":"sensitive","line_end":302,"severity":"high","line_start":302},{"id":"sensitive:SKILL.md:314:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"Check the environment and any `.env` files present:","category":"sensitive","line_end":314,"severity":"high","line_start":314},{"id":"sensitive:SKILL.md:318:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"grep -i vercel .env 2>/dev/null","category":"sensitive","line_end":318,"severity":"high","line_start":318},{"id":"sensitive:SKILL.md:244:environment-variant-files","file":"SKILL.md","pattern":"Environment variant files","snippet":"# Pull env vars to local .env.local file","category":"sensitive","line_end":244,"severity":"high","line_start":244},{"id":"blocker:SKILL.md:230:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"**Do NOT** run `vercel project inspect` or `vercel link` in an unlinked directory to detect state — ","category":"blocker","line_end":230,"severity":"low","line_start":230},{"id":"blocker:SKILL.md:282:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"If this project is managed by Stripe Projects. **Ask the user before running any paid or destructive","category":"blocker","line_end":282,"severity":"low","line_start":282},{"id":"blocker:SKILL.md:295:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Paid add-ons available: SAML SSO, HIPAA BAA, Flags Explorer, Observability Plus, Speed Insights, W","category":"blocker","line_end":295,"severity":"low","line_start":295},{"id":"blocker:SKILL.md:308:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- **Use `-y`** on commands that prompt for confirmation to avoid interactive blocking.","category":"blocker","line_end":308,"severity":"low","line_start":308},{"id":"blocker:SKILL.md:325:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Verify: `vercel whoami` (uses `VERCEL_TOKEN` from environment).","category":"blocker","line_end":325,"severity":"low","line_start":325},{"id":"blocker:SKILL.md:333:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"vercel whoami --scope <team-slug>","category":"blocker","line_end":333,"severity":"low","line_start":333}],"finding_verdicts":[{"id":"external_commands:SKILL.md:11:ruby-shell-backtick-execution","reason":"Backticks format the CLI name in Markdown prose; no Ruby or shell backtick execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"The heading formats an environment variable with Markdown backticks, not executable shell syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","reason":"These backticks delimit a Markdown Bash example, not a backtick expression. Credential-output concerns are separate from this syntax alert.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","reason":"This closes a Markdown code fence; it does not execute the intervening prose.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"Inline Markdown backticks identify the environment file and token variable in a heading.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","reason":"The match is a Markdown code fence, not shell backtick execution. The enclosed credential lookup is evaluated under sensitive access.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","reason":"A closing Markdown fence and subsequent prose were mistaken for executable backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"A Markdown fence encloses a grep-and-cut assignment; no Ruby or shell backtick operator is used.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","reason":"This is a closing Markdown fence followed by a section heading, not execution syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","reason":"Markdown backticks mark the environment filename in a descriptive heading.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","reason":"The backticks format a token prefix in explanatory prose; they do not execute code.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"These are Markdown fence delimiters. The enclosed grep output risk is retained under sensitive access.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The match begins at a closing Markdown fence and includes explanatory prose, not shell backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The variable name is inline Markdown formatting in credential-loading instructions, not an executable expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"The backticks delimit a Bash example containing a local assignment, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"A closing code fence and following documentation were matched as backticks; no executable backtick construct exists.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"Inline backticks label a token variable and flag in advice against exposing secrets through command arguments.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"The Markdown fence shows contrasting authentication examples with a dummy token; it is not backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"This closes a Markdown example and precedes project-selection prose, not executable shell syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","reason":"The CLI command is named using inline Markdown formatting in project-selection documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","reason":"The match is a Markdown code fence, not executable backticks. The broad credential lookup has a separate sensitive-access verdict.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:79:ruby-shell-backtick-execution","reason":"This is a Markdown closing fence followed by a project URL example.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","reason":"The URL is formatted as inline Markdown; no command is evaluated by those backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"Markdown fences surround a local URL-parsing pipeline, not a Ruby or shell backtick expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The match starts at a closing Markdown fence and continues into environment-variable documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"Inline backticks label project identifiers and the CLI metadata directory in prose.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:90:ruby-shell-backtick-execution","reason":"A Markdown Bash fence encloses placeholder project identifier assignments, not executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"This closes a Markdown code example and precedes a configuration note.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"The project identifier names are inline Markdown in a configuration requirement.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","reason":"The Markdown fence documents installation of the named Vercel CLI; it is not a shell backtick operator.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","reason":"A closing Markdown fence separates setup examples from deployment documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"Backticks format token and project variable names in deployment instructions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:114:ruby-shell-backtick-execution","reason":"These Markdown fences contain an ordinary preview deployment example, not executable backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:116:ruby-shell-backtick-execution","reason":"A closing Markdown fence precedes team-scope documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","reason":"Inline Markdown identifies a scope variable and CLI option; it does not execute them.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:120:ruby-shell-backtick-execution","reason":"The backticks delimit a team-scoped preview deployment example in Markdown.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"This closes a code fence before instructions limiting production deployment to explicit requests.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","reason":"Markdown fences enclose a production command explicitly restricted to user requests; no backtick execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:128:ruby-shell-backtick-execution","reason":"A Markdown closing fence and status-check heading were mistaken for executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"The fence documents deployment inspection, an expected read operation for this skill.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:134:ruby-shell-backtick-execution","reason":"A closing Markdown fence is followed by project-linking documentation, not executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","reason":"The Markdown fence documents reading the Git remote and CLI project metadata; it is not backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","reason":"This is a Markdown closing fence preceding a linking section.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","reason":"Markdown fences show a repository-linking command consistent with the stated project-management purpose.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","reason":"A closing Markdown fence and explanatory prose are not a shell backtick expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:158:ruby-shell-backtick-execution","reason":"Inline Markdown formats a CLI metadata path and command in a description of linking behavior.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:162:ruby-shell-backtick-execution","reason":"The Markdown fence surrounds a normal team-scoped project-linking example.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","reason":"This closes a Markdown example and precedes metadata documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","reason":"The metadata filename is inline Markdown formatting, not a command to execute.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:170:ruby-shell-backtick-execution","reason":"The Markdown fence encloses a project-specific linking example with placeholder identifiers.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","reason":"This is a closing Markdown fence followed by advice to verify the intended team.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:174:ruby-shell-backtick-execution","reason":"Backticks format project metadata keys and paths in a team-verification instruction.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","reason":"The syntax is a Markdown fence, not backtick execution. Commit-scope and production-branch risks are addressed as semantic findings.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:188:ruby-shell-backtick-execution","reason":"This closes the Git example and begins deployment-status prose; it is not executable backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:191:ruby-shell-backtick-execution","reason":"Markdown fences show waiting and listing deployment metadata, not shell backtick evaluation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:194:ruby-shell-backtick-execution","reason":"A closing Markdown fence precedes a deployment-result selection instruction.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:195:ruby-shell-backtick-execution","reason":"Backticks format an output field name in prose; no code is evaluated.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","reason":"The Markdown fence contains a preview deployment example within the declared workflow.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","reason":"A closing Markdown fence separates deployment and inspection examples.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:205:ruby-shell-backtick-execution","reason":"Markdown fences surround an ordinary deployment inspection command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:207:ruby-shell-backtick-execution","reason":"A closing Markdown fence is followed by remote-repository deployment documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:212:ruby-shell-backtick-execution","reason":"The Markdown fence documents cloning a user-selected repository; it is not backtick evaluation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:215:ruby-shell-backtick-execution","reason":"This closes a Markdown clone example and precedes a linking step.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:217:ruby-shell-backtick-execution","reason":"Markdown fences enclose a repository-linking example, not an executable backtick expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:219:ruby-shell-backtick-execution","reason":"A closing Markdown fence and deployment guidance are not shell backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:222:ruby-shell-backtick-execution","reason":"The directory name is inline Markdown formatting in a section heading.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:225:ruby-shell-backtick-execution","reason":"Markdown formats a metadata path, CLI command, and identifier keys; none are backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:226:ruby-shell-backtick-execution","reason":"Inline backticks identify repository-linking metadata fields in documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","reason":"Backticks format two project-selection environment variables, not executable shell expressions.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:230:ruby-shell-backtick-execution","reason":"Inline Markdown names commands in advice against unintended linking; no Ruby or shell backtick evaluation occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:234:ruby-shell-backtick-execution","reason":"A Markdown fence encloses environment-management examples. Destructive confirmation handling is evaluated separately as a semantic risk.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:249:ruby-shell-backtick-execution","reason":"This closes the environment-management Markdown example and precedes deployment-inspection documentation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:253:ruby-shell-backtick-execution","reason":"Markdown fences document expected deployment listing, inspection, and log commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","reason":"The closing Markdown fence is followed by domain-management documentation, not shell backtick syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","reason":"The fence contains domain-management examples consistent with the declared Vercel workflow.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:278:ruby-shell-backtick-execution","reason":"This closes a Markdown domain example and precedes conditional Stripe Projects guidance.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:284:ruby-shell-backtick-execution","reason":"Inline Markdown identifies a Stripe resource-status command and example resource names, not backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:286:ruby-shell-backtick-execution","reason":"Inline Markdown formats plan-upgrade commands; the preceding instruction explicitly requires approval before paid changes.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:287:ruby-shell-backtick-execution","reason":"The downgrade command is inline Markdown, with approval required by the section introduction.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:301:ruby-shell-backtick-execution","reason":"Inline backticks name a credential variable and flag in advice to avoid token exposure.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:302:ruby-shell-backtick-execution","reason":"The backticks format an environment filename in prose; no executable backtick expression exists.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:305:ruby-shell-backtick-execution","reason":"Markdown formats a metadata directory and key in advice against editing CLI-managed files.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:307:ruby-shell-backtick-execution","reason":"The CLI formatting option is inline Markdown, not command execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:308:ruby-shell-backtick-execution","reason":"The flag is inline Markdown rather than executable backticks. Its broad confirmation-bypass recommendation is evaluated separately.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:314:ruby-shell-backtick-execution","reason":"The environment filename is Markdown formatting in troubleshooting prose, not executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:316:ruby-shell-backtick-execution","reason":"This is a Markdown code fence. Credential disclosure by the enclosed commands is a separate sensitive-access concern.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:319:ruby-shell-backtick-execution","reason":"A closing Markdown fence separates token-discovery examples from authentication troubleshooting.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:323:ruby-shell-backtick-execution","reason":"Inline Markdown formats an error message; there is no executable expression.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:325:ruby-shell-backtick-execution","reason":"Inline Markdown names an account-verification command and token variable, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:332:ruby-shell-backtick-execution","reason":"Markdown fences contain a scoped account-verification example, not executable backticks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:334:ruby-shell-backtick-execution","reason":"A closing Markdown fence precedes build-failure troubleshooting.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:340:ruby-shell-backtick-execution","reason":"The Markdown fence encloses a build-log inspection command, an expected diagnostic operation.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:342:ruby-shell-backtick-execution","reason":"This closes a Markdown example before a list of common build-failure causes.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:345:ruby-shell-backtick-execution","reason":"Backticks format a dependency manifest filename in troubleshooting prose.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:346:ruby-shell-backtick-execution","reason":"Inline Markdown names the expected environment-variable command; no backtick execution occurs.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","reason":"Markdown formats project configuration filenames in framework troubleshooting guidance.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:351:ruby-shell-backtick-execution","reason":"Markdown fences document installing the Vercel CLI, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:34:shell-command-substitution","reason":"Fixed grep and cut commands capture a selected token into an environment assignment without eval or executing the extracted value.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:48:shell-command-substitution","reason":"The placeholder selects a local variable through grep and cut; captured file contents are assigned as data, not evaluated as shell code.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:33:template-literal-with-command-substitution","reason":"This is a fenced Bash example, not a JavaScript template literal. Its fixed pipeline only loads a credential.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:47:template-literal-with-command-substitution","reason":"Markdown fences were mistaken for a template literal; the Bash assignment does not execute the extracted secret.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:81:hardcoded-url","reason":"The official Vercel URL is an illustrative project-address format, not an exfiltration endpoint.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:84:hardcoded-url","reason":"The URL appears only in a comment explaining team-slug extraction.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:85:hardcoded-url","reason":"The pipeline parses a URL locally using echo, sed, and cut; it makes no network request.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:297:hardcoded-url","reason":"This is a public Vercel plan-documentation link with no credential-bearing request or upload instruction.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:28:standard-device-file-access","reason":"The device access only discards stderr through /dev/null. Credential disclosure on stdout is retained under the separate sensitive finding.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:42:standard-device-file-access","reason":"Redirecting errors to /dev/null is benign; the separate sensitive-access verdict retains the credential-output risk.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:78:standard-device-file-access","reason":"Only standard error is redirected to /dev/null, with no dangerous device operation. The matching sensitive finding covers stdout disclosure.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:144:standard-device-file-access","reason":"Reading the Git remote and discarding missing-remote errors through /dev/null is ordinary local project discovery.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:147:standard-device-file-access","reason":"The command reads CLI project metadata and suppresses missing-file errors; /dev/null is only an error sink.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:318:standard-device-file-access","reason":"The /dev/null redirection is harmless error suppression. The separate sensitive finding retains credential leakage through stdout.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:SKILL.md:25:environment-file-access","reason":"This heading identifies the intended authentication source; merely naming a local environment file is not credential disclosure.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:SKILL.md:28:environment-file-access","reason":"The grep command prints the complete VERCEL_TOKEN assignment, exposing the access token to captured command output and assistant transcripts.","verdict":"confirmed","confidence":0.99},{"id":"sensitive:SKILL.md:34:environment-file-access","reason":"The selected token is captured directly into an environment assignment for intended authentication, without printing it or executing file contents.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:SKILL.md:37:environment-file-access","reason":"The heading describes an alternative token variable, not an unauthorized file operation. The unsafe lookup command is separately retained.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:SKILL.md:42:environment-file-access","reason":"Broad grep prints every matching environment assignment, including Vercel credentials, into captured output instead of silently selecting the authentication variable.","verdict":"confirmed","confidence":0.99},{"id":"sensitive:SKILL.md:48:environment-file-access","reason":"This loads an explicitly selected authentication variable into VERCEL_TOKEN without emitting its value or uploading it to an unrelated destination.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:SKILL.md:77:environment-file-access","reason":"The match is only a comment naming the environment file; the actual unsafe output operation is retained at line 78.","verdict":"false_positive","confidence":0.99},{"id":"sensitive:SKILL.md:78:environment-file-access","reason":"Although this step seeks project identifiers, its broad grep also prints token assignments, unnecessarily disclosing credentials in tool output.","verdict":"confirmed","confidence":0.99},{"id":"sensitive:SKILL.md:244:environment-file-access","reason":"The comment describes the documented Vercel env pull workflow for local development, not unrelated secret collection or external disclosure.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:SKILL.md:302:environment-file-access","reason":"Locating existing authentication for the requested Vercel workflow is legitimate; unsafe value-printing commands are retained separately.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:SKILL.md:314:environment-file-access","reason":"The prose describes local authentication troubleshooting, not an unauthorized destination. Its unsafe grep command is retained at line 318.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:SKILL.md:318:environment-file-access","reason":"The troubleshooting command prints matching environment values, including access tokens, into captured output without redaction.","verdict":"confirmed","confidence":0.99},{"id":"sensitive:SKILL.md:244:environment-variant-files","reason":"The named local development file is the intended output of Vercel env pull; no unrelated environment-file harvesting is shown.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:230:system-reconnaissance","reason":"The text discourages side-effectful project detection and recommends ordinary deployment listing and account verification, not host reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:282:system-reconnaissance","reason":"This is an explicit user-approval requirement for paid or destructive plan changes, not system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:295:system-reconnaissance","reason":"A list of commercial plan add-ons contains no system inspection or reconnaissance instruction.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:308:system-reconnaissance","reason":"The recommendation concerns CLI confirmation flags, not system reconnaissance. Its overly broad authorization implications are retained as a semantic finding.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:325:system-reconnaissance","reason":"Vercel whoami verifies the authenticated service account during troubleshooting; it does not enumerate the host system.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:333:system-reconnaissance","reason":"The scoped Vercel account check is relevant authentication troubleshooting, not operating-system reconnaissance.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Deployment Commits the Entire Working Directory","severity":"medium","locations":[{"file":"SKILL.md","line_end":188,"line_start":182}],"confidence":0.96,"description":"The Git deployment recipe runs git add . before committing and pushing. Unreviewed changes or unignored secrets can enter the approved deployment commit.","confidence_reasoning":"The recipe explicitly stages all current-directory changes without reviewing the diff or selecting paths. Push approval does not establish approval for every staged file."},{"title":"Git Deployment Omits Production Branch Verification","severity":"medium","locations":[{"file":"SKILL.md","line_end":108,"line_start":108},{"file":"SKILL.md","line_end":195,"line_start":178},{"file":"SKILL.md","line_end":304,"line_start":303}],"confidence":0.95,"description":"The preferred Git flow pushes without checking the destination branch. A production-branch push can deploy production without the separate approval required elsewhere.","confidence_reasoning":"The document acknowledges branch-dependent deployments but supplies no branch check before git push. General push consent does not necessarily authorize production."},{"title":"Blanket Prompt Bypass Lacks Destructive Action Approval","severity":"medium","locations":[{"file":"SKILL.md","line_end":248,"line_start":247},{"file":"SKILL.md","line_end":308,"line_start":308}],"confidence":0.95,"description":"The working agreement recommends -y for confirmation prompts, and the environment-variable removal example uses it. Destructive removal has no explicit user-approval requirement.","confidence_reasoning":"Both instructions explicitly bypass confirmation, while approval requirements only cover Git pushes, production deployment, and paid or destructive plan changes."}],"subject_marketplace_commit_sha":"1f79e59ae427a74eab604c013e03b61f04634721","subject_content_hash":"c06bea99e75eab07fde4fae26069baa002f82f39b53f07981704c2901551dd4c","subject_tree_hash":"bf095a5f697aa6d8ebc970efb600ef206a4aca09b55256be3891f965ff6ccc9b","subject_plugin_path":"skills/vercel-labs/vercel-cli-with-tokens","audit_payload_hash":"39d60cb4a092ed72a0e13705acfbd98a","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"1f79e59ae427a74eab604c013e03b61f04634721","contentHash":"c06bea99e75eab07fde4fae26069baa002f82f39b53f07981704c2901551dd4c","treeHash":"bf095a5f697aa6d8ebc970efb600ef206a4aca09b55256be3891f965ff6ccc9b","pluginPath":"skills/vercel-labs/vercel-cli-with-tokens","auditPayloadHash":"39d60cb4a092ed72a0e13705acfbd98a"},"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-labs-vercel-cli-with-tokens/audits/6/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":7,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}