Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Drive Vercel's `deepsec` agent-powered vulnerability scanner end-to-end: installing the `.deepsec/` workspace, bootstrapping `INFO.md`, running cost-aware `scan` / `process` / `triage` / `revalidate` / `export` passes, gating PRs with `process --diff`, writing custom matchers, and triaging findings. Use whenever the user mentions deepsec, asks an agent to scan a repo for vulnerabilities, runs into `pnpm deepsec` / `bunx deepsec` commands, wants a CI-based PR security review, sees a `.deepsec/` d
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 158% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 324% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 445% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 333% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 270% | 0% |
Operate Vercel's deepsec security scanner inside a target repository safely and cost-consciously: bootstrap the .deepsec/ workspace, write a tight INFO.md, run the right scan/process/triage/revalidate/export sequence, gate PRs in CI via process --diff, and grow project-specific matchers, surfacing real, revalidated findings without runaway spend.
deepsec, "deep security scan", bunx deepsec, pnpm deepsec, npx deepsec..deepsec/ directory.process --diff, --diff-staged, --diff-working, --files-from, --comment-out.INFO.md, SETUP.md, data/<id>/files/, FileRecord, RunMeta, revalidation, triage, custom matchers, MatcherPlugin, noiseTier, priorityPaths.deepsec.config.ts, defaultAgent, AI_GATEWAY_API_KEY, VERCEL_OIDC_TOKEN, AI Gateway, Vercel Sandbox, --agent codex, --agent claude.init, INFO.md write, first calibration scan).process --diff and --comment-out.revalidate, exporting to issue tracker).oma-qa.oma-qa or oma-search.oma-architecture.oma-backend / oma-frontend / oma-mobile.oma-tf-infra (deepsec only scans the IaC; remediation lives there).oma-debug once deepsec has produced the finding.target_repo_root: absolute path of the codebase to scan (parent of .deepsec/).intent: one of setup | scan | pr-review | matchers | triage | config | troubleshoot.credential_mode: ai-gateway-key | vercel-oidc | direct-anthropic | direct-openai | subscription.agent_choice: codex (upstream default; model gpt-5.5) or claude (model claude-opus-4-8). Asked once before the first paid call if not already provided.severity_floor: lowest severity worth surfacing (typically HIGH)..deepsec/data/<id>/, deepsec.config.ts, custom matchers, CI provider..deepsec/ workspace registered against the target repo.data/<id>/INFO.md (50-100 lines, project-specific, no line numbers).scan → process (→ triage/revalidate) runs with reproducible cost notes.process --diff <base> with two-job split (no PR-write in PR-code job)..deepsec/matchers/<slug>.ts files wired through the inline plugin in deepsec.config.ts.md-dir and/or json) plus a short summary of top severities and FP-rate notes.bun / bunx (preferred in this monorepo), pnpm, npm, or yarn.AI_GATEWAY_API_KEY=vck_…, or VERCEL_OIDC_TOKEN, or direct ANTHROPIC_AUTH_TOKEN + ANTHROPIC_BASE_URL, or a logged-in claude / codex CLI subscription.revalidate and --diff modes).deepsec sandbox … distributed runs.resources/ (loaded only when the scenario requires them).intent (setup vs scan vs pr-review vs matchers vs triage vs config vs troubleshoot).--limit 50 before any large pass).process when no calibration has been done and the repo is large..deepsec/ files and CI configs, runs long-lived AI processes..deepsec/ already exists; if yes, treat the run as incremental, never re-init.intent from the user prompt; if ambiguous (e.g. "scan this repo"), default to setup then scan (calibration mode).rg --files | wc -l excluding node_modules, .git, dist) to forecast cost before any AI pass..env.local or shell env; if none, route to credential setup before any process / revalidate / triage call.agent_choice is not already in the prompt and deepsec.config.ts does not pin a defaultAgent, ask whether to run codex (gpt-5.5, the upstream default; runs in a strict sandbox, cheaper, grep-heavy) or claude (claude-opus-4-8; strongest reasoning, most expensive). The two backends can be mixed via --reinvestigate and findings dedupe across agents. Skip the question if the user has already named an agent or has explicitly delegated the decision ("just pick reasonable defaults")..deepsec/deepsec.config.ts, data/<id>/project.json, INFO.md, last runs/ entries, and target-repo signals (README, AGENTS.md/CLAUDE.md, framework configs, route directories) needed to author or verify INFO.md.scan only, a --limit 50 calibration, a full process, process --diff, a matcher-authoring loop, or troubleshoot-only. Always state cost forecast and stopping condition before AI passes..deepsec/. For matchers, write per-slug files and wire the inline plugin. For PR mode, scaffold the two-job CI workflow.deepsec status, the run's RunMeta, exit code (0 clean, 1 findings produced, other = error), candidate counts, and (when present) the --comment-out markdown to confirm output.HIGH+, write matchers for missed entry points, persist data/ between CI runs)..deepsec/ is missing and intent involves scanning → run bunx deepsec init (or npx deepsec init) and follow the printed prompt to populate INFO.md before any AI pass.INFO.md is empty or template-shaped → write it (50-100 lines, project-specific, 3-5 examples per section, no line numbers, no generic CWE enumeration).--limit 50 --concurrency 5) and report cost extrapolation before the full pass.process / revalidate run halts on quota → leave file locks intact, surface the exact remediation URL, re-run the same command after top-up.refused: true) → never silently drop; document the affected files and either retry with the other backend or add the path to config.json:ignorePaths only if reproducible.pull-requests: write, comment job has no PR code).data/<id>/files/ and the parent repo's entry points.| Failure | Recovery | |---------|----------| | Missing AI credentials for --agent claude / codex | Pick a credential mode (gateway key / OIDC / direct / subscription) per resources/config.md and write .env.local. | | 401 Unauthorized from gateway | OIDC: re-run vercel env pull (12 h expiry). API key: regenerate. Confirm .env.local is in the cwd deepsec runs from. | | Stopped: AI Gateway credits exhausted | Top up via the printed URL; re-run the same command, files already done are skipped. | | Stopped: Claude Pro/Max subscription exhausted | Switch to AI Gateway; subscriptions don't carry full scans. | | Persistent refusal on a single file (>5% of batches) | Add the path to data/<id>/config.json:ignorePaths, or run that file alone with --batch-size 1. | | FP rate too high on HIGH+ | Run revalidate --min-severity HIGH; tighten INFO.md's threat model and FP notes; bias matchers to precise. | | noisy matcher wedges scanner on a 100k-file repo | Tighten filePatterns to language- or directory-anchored globs. | | Sandbox auth fails | OIDC: re-run vercel env pull. Access-token mode: verify VERCEL_TOKEN + VERCEL_TEAM_ID + VERCEL_PROJECT_ID. | | User asks for full scan with no budget context | Halt; report file count and forecast cost band; require explicit go-ahead before the full pass. |
| Action | SSL primitive | Evidence | |--------|---------------|----------| | Detect existing workspace and credentials | READ | .deepsec/, .env.local, env vars | | Estimate repo scale | INFER | rg --files | wc -l | | Choose pass plan (calibrate vs full vs diff) | SELECT | File count, intent, budget cap | | Init workspace | CALL_TOOL | bunx deepsec init | | Write INFO.md | WRITE | data/<id>/INFO.md | | Run scan | CALL_TOOL | bunx deepsec scan | | Run AI investigation | CALL_TOOL | bunx deepsec process (--limit, --concurrency) | | Triage / revalidate | CALL_TOOL | bunx deepsec triage / revalidate --min-severity HIGH | | Export findings | CALL_TOOL | bunx deepsec export --format md-dir|json | | PR-mode review | CALL_TOOL | bunx deepsec process --diff <base> --comment-out comment.md | | Author custom matcher | WRITE | .deepsec/matchers/<slug>.ts + inline plugin in deepsec.config.ts | | Validate matcher hit rate | VALIDATE | bunx deepsec scan --matchers <slug> candidate count | | Verify and report | NOTIFY | RunMeta, severity counts, dollar cost, FP rate | | Stop on budget breach | TERMINATE | Refuse unbounded process without calibration |
bun / bunx (preferred), pnpm, npm, yarn are interchangeable.deepsec init, init-project, scan, process, process --diff, triage, revalidate, enrich, report, export, metrics, status, sandbox <cmd>.--diff <ref|range>, --diff-staged, --diff-working, --files <csv>, --files-from <path> (or - for stdin).jq over data/<id>/files/**/*.json for ad-hoc severity / TP queries.AI_GATEWAY_API_KEY, VERCEL_OIDC_TOKEN, ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL, OPENAI_API_KEY / OPENAI_BASE_URL, claude login, codex login.resources/ for setup, scanning, PR review, matchers, triage, config, load on demand.bash cd <target-repo> bunx deepsec init cd .deepsec bun install # Edit .env.local: set AI_GATEWAY_API_KEY=vck_… (or VERCEL_OIDC_TOKEN via vercel env pull) Then prompt the coding agent (this skill) to read .deepsec/node_modules/deepsec/SKILL.md and .deepsec/data/<id>/SETUP.md, skim README / AGENTS.md / CLAUDE.md and a handful of representative files, and replace each section of data/<id>/INFO.md (50-100 lines, 3-5 examples per section, no line numbers, no generic CWE rehash).
getting-started.md, vercel-setup.md, faq.md) recommend --limit 50 --concurrency 5 as the calibration starting point.bash bunx deepsec scan bunx deepsec status bunx deepsec process --limit 50 --concurrency 5 Read the per-batch cost. Extrapolate to full repo. Get the user's explicit go-ahead before the full process. If the user names different --limit / --concurrency values, use theirs.
bash bunx deepsec process --concurrency 5 bunx deepsec triage --severity HIGH bunx deepsec revalidate --min-severity HIGH bunx deepsec export --format md-dir --out ./findings bunx deepsec metrics
bash bunx deepsec process \ --diff origin/${BASE_REF} \ --comment-out comment.md Wire the two-job CI pattern from resources/pr-review.md. Never grant pull-requests: write to the job that runs PR-controlled code.
.deepsec/node_modules/deepsec/dist/config.d.ts and the samples/webapp/matchers/* examples..deepsec/matchers/<slug>.ts, wire it through the inline plugin in .deepsec/deepsec.config.ts.bunx deepsec scan --matchers <slug> should land in 1-20 hits / 1k files (precise), 5-100 (normal), or roughly the framework entry-point count (noisy)..deepsec/data/<id>/.| Scope | Resource target | |-------|-----------------| | CODEBASE | Target repo source files, framework configs, route directories, README / AGENTS.md / CLAUDE.md. | | LOCAL_FS | .deepsec/deepsec.config.ts, .deepsec/.env.local, .deepsec/matchers/, .deepsec/data/<id>/{project.json,INFO.md,config.json,files/,runs/,reports/}, generated findings/, comment.md, CI workflow files. | | PROCESS | bunx deepsec scan|process|triage|revalidate|export|metrics|status|sandbox, bun install, optional vercel link / vercel env pull. | | NETWORK | Anthropic / OpenAI via Vercel AI Gateway (default) or direct provider endpoints; optional Vercel Sandbox microVM control plane. | | CREDENTIALS | AI_GATEWAY_API_KEY, VERCEL_OIDC_TOKEN, ANTHROPIC_AUTH_TOKEN, OPENAI_API_KEY, VERCEL_TOKEN / VERCEL_TEAM_ID / VERCEL_PROJECT_ID, claude / codex subscription tokens. Consume read-only; never echo secrets back to the user or commit them. | | MEMORY | User-stated budget cap, severity floor, and stop conditions for the current session. |
revalidate and --diff).sandbox mode: Vercel auth is wired; otherwise stay local.process runs on > 500-file repos: a --limit calibration pass has produced a cost number the user has acknowledged..deepsec/ (config, lockfile, scaffolding) and .deepsec/data/<id>/ (gitignored) inside the target repo.<!-- oma-docs:ignore-start -->
.env.local (never commit) and may run vercel link / vercel env pull (writes .vercel/project.json + token).<!-- oma-docs:ignore-end -->
sandbox mode.<!-- oma-docs:ignore-start -->
.github/workflows/deepsec.yml (or analogue) when the user asks for a CI gate.<!-- oma-docs:ignore-end -->
deepsec.config.ts and adds .deepsec/matchers/*.ts when authoring matchers.oma-scm).process on a repo whose size you have not measured. Always run a calibration pass first when file count is unknown or > 500 (deepsec docs recommend --limit 50 --concurrency 5; defer to a user-named value if given).data/<id>/ to "start clean" without explicit user instruction.INFO.md stays short and project-specific. 50-100 lines, 3-5 examples per section. Name primitives but no line numbers. Skip generic CWE categories; built-in matchers cover those.pull-requests: write to a job that executes PR-controlled pnpm install / config-loading. Use the two-job pattern in resources/pr-review.md.refused: true, log it, retry with the other backend, or add the file to ignorePaths only when reproducible.precise when the bug shape is exact. Reserve noisy for entry-point coverage and tight globs.vck_…, sk-ant-…, sk-…, OIDC tokens). Treat .env.local as secret. Treat data/ as gitignored by default.sandbox for prompt-injection-prone repos (vendored code, untrusted deps).revalidate-tagged verdicts (true-positive / false-positive / fixed / uncertain) over raw process output.resources/scanning.md's flag list must be checked against --help first. Likewise, when the CLI's printed model names, defaults, or per-batch costs disagree with the values written in this skill, the CLI is right — upstream moves faster than these resources.claude vs codex) and deepsec.config.ts does not pin defaultAgent, ask once with the trade-off clearly stated. Do not also bargain over budget or severity; those are handled via the upstream calibration recommendation (--limit 50 --concurrency 5 per deepsec docs) and the user-stated severity_floor.INFO.md bootstrap: resources/setup.mdresources/scanning.mdprocess --diff (two-job pattern, exit-code semantics): resources/pr-review.mdresources/matchers.mdresources/triage.mddeepsec.config.ts reference, env vars, plugin order, AI Gateway / Vercel Sandbox auth: resources/config.mdgetting-started, reviewing-changes, writing-matchers, configuration, models, plugins, architecture, data-layout, vercel-setup, supported-tech, faq)../_shared/core/context-loading.md../_shared/core/quality-principles.mdOther measured skills in the registry, with their headline benchmark lift.