Install
$ agentstack add skill-first-fluke-oh-my-agent-oma-deepsec ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Deepsec: Agent-Powered Vulnerability Scanner Driver
Scheduling
Goal
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.
Intent signature
- User mentions
deepsec, "deep security scan",bunx deepsec,pnpm deepsec,npx deepsec. - User asks an agent to scan a repository for vulnerabilities, security issues, or CVEs and the project has (or should have) a
.deepsec/directory. - User asks how to add a deepsec PR / CI security gate, or about
process --diff,--diff-staged,--diff-working,--files-from,--comment-out. - User mentions deepsec artefacts:
INFO.md,SETUP.md,data//files/,FileRecord,RunMeta,revalidation,triage, custom matchers,MatcherPlugin,noiseTier,priorityPaths. - User asks about deepsec configuration:
deepsec.config.ts,defaultAgent,AI_GATEWAY_API_KEY,VERCEL_OIDC_TOKEN, AI Gateway, Vercel Sandbox,--agent codex,--agent claude. - User asks how to lower deepsec cost, cut false-positive rate, or interpret severity / triage / revalidation verdicts.
When to use
- First-time deepsec install in a repo (
init,INFO.mdwrite, first calibration scan). - Running a full or scoped scan and processing findings.
- Setting up a per-PR CI gate with
process --diffand--comment-out. - Writing a project-specific matcher to cover entry points the default set misses.
- Triaging a backlog of findings (severity bucketing, FP cuts via
revalidate, exporting to issue tracker). - Diagnosing deepsec failures: missing credentials, AI Gateway quota stops, refusals, sandbox auth.
When NOT to use
- Generic OWASP / lint-style review without deepsec → use
oma-qa. - Generic CVE / dependency advisories → use
oma-qaoroma-search. - Architecting a brand-new SAST pipeline that is not deepsec → use
oma-architecture. - Writing or auditing application code itself → route to
oma-backend/oma-frontend/oma-mobile. - Cloud / IAM / Terraform hardening → use
oma-tf-infra(deepsec only scans the IaC; remediation lives there). - Pure reasoning about a finding's fix in product code → use
oma-debugonce deepsec has produced the finding.
Expected inputs
target_repo_root: absolute path of the codebase to scan (parent of.deepsec/).intent: one ofsetup|scan|pr-review|matchers|triage|config|troubleshoot.credential_mode:ai-gateway-key|vercel-oidc|direct-anthropic|direct-openai|subscription.agent_choice:codex(upstream default; modelgpt-5.5) orclaude(modelclaude-opus-4-8). Asked once before the first paid call if not already provided.severity_floor: lowest severity worth surfacing (typicallyHIGH).- Optional: existing
.deepsec/data//,deepsec.config.ts, custom matchers, CI provider.
Expected outputs
- A working
.deepsec/workspace registered against the target repo. - A populated
data//INFO.md(50-100 lines, project-specific, no line numbers). - One or more completed
scan→process(→triage/revalidate) runs with reproducible cost notes. - For PR mode: a CI workflow file using
process --diffwith two-job split (no PR-write in PR-code job). - For matchers: new
.deepsec/matchers/.tsfiles wired through the inline plugin indeepsec.config.ts. - A findings export (
md-dirand/orjson) plus a short summary of top severities and FP-rate notes. - Explicit, dollar-and-time-bounded plan before any pass that may cost more than ~$25.
Dependencies
- Node.js 22+, plus a package manager:
bun/bunx(preferred in this monorepo),pnpm,npm, oryarn. - A working AI credential:
AI_GATEWAY_API_KEY=vck_…, orVERCEL_OIDC_TOKEN, or directANTHROPIC_AUTH_TOKEN+ANTHROPIC_BASE_URL, or a logged-inclaude/codexCLI subscription. - Git (history is consulted by
revalidateand--diffmodes). - Optional: Vercel Sandbox auth for
deepsec sandbox …distributed runs. - Reference resources under
resources/(loaded only when the scenario requires them).
Control-flow features
- Branches by
intent(setup vs scan vs pr-review vs matchers vs triage vs config vs troubleshoot). - Branches by repo size (calibrate with
--limit 50before any large pass). - Branches by credential source (gateway key, OIDC, direct, subscription).
- Stops on quota / credit exhaustion and resumes the same command after top-up.
- Refuses to launch an unbounded
processwhen no calibration has been done and the repo is large. - Reads codebase, writes
.deepsec/files and CI configs, runs long-lived AI processes.
Structural Flow
Entry
- Confirm whether
.deepsec/already exists; if yes, treat the run as incremental, never re-init. - Resolve
intentfrom the user prompt; if ambiguous (e.g. "scan this repo"), default tosetupthenscan(calibration mode). - Estimate scale: count source files (rough
rg --files | wc -lexcludingnode_modules,.git,dist) to forecast cost before any AI pass. - Check for an AI credential in
.env.localor shell env; if none, route to credential setup before anyprocess/revalidate/triagecall. - Confirm agent choice with the user before the first paid call. If
agent_choiceis not already in the prompt anddeepsec.config.tsdoes not pin adefaultAgent, ask whether to runcodex(gpt-5.5, the upstream default; runs in a strict sandbox, cheaper, grep-heavy) orclaude(claude-opus-4-8; strongest reasoning, most expensive). The two backends can be mixed via--reinvestigateand 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").
Scenes
- PREPARE: Resolve intent, repo root, credential, budget cap, severity floor, agent choice. Refuse to run blind on a repo of unknown scale.
- ACQUIRE: Read
.deepsec/deepsec.config.ts,data//project.json,INFO.md, lastruns/entries, and target-repo signals (README,AGENTS.md/CLAUDE.md, framework configs, route directories) needed to author or verifyINFO.md. - REASON: Pick the smallest pass that answers the user's question. Options include
scanonly, a--limit 50calibration, a fullprocess,process --diff, a matcher-authoring loop, or troubleshoot-only. Always state cost forecast and stopping condition before AI passes. - ACT: Run the planned commands from inside
.deepsec/. For matchers, write per-slug files and wire the inline plugin. For PR mode, scaffold the two-job CI workflow. - VERIFY: Use
deepsec status, the run'sRunMeta, exit code (0clean,1findings produced, other = error), candidate counts, and (when present) the--comment-outmarkdown to confirm output. - FINALIZE: Summarize findings by severity and verdict, list dollar cost and wall time, name files written, and call out follow-ups (revalidate
HIGH+, write matchers for missed entry points, persistdata/between CI runs).
Transitions
- If
.deepsec/is missing and intent involves scanning → runbunx deepsec init(ornpx deepsec init) and follow the printed prompt to populateINFO.mdbefore any AI pass. - If
INFO.mdis empty or template-shaped → write it (50-100 lines, project-specific, 3-5 examples per section, no line numbers, no generic CWE enumeration). - If repo is > 500 files and no calibration has run → run a calibration pass first (deepsec docs recommend
--limit 50 --concurrency 5) and report cost extrapolation before the full pass. - If a
process/revalidaterun halts on quota → leave file locks intact, surface the exact remediation URL, re-run the same command after top-up. - If the agent reports a refusal (
refused: true) → never silently drop; document the affected files and either retry with the other backend or add the path toconfig.json:ignorePathsonly if reproducible. - If the user wants a CI gate → emit the two-job pattern (PR-code job has no
pull-requests: write, comment job has no PR code). - If the user wants more matcher coverage → run the matcher-authoring workflow against
data//files/and the parent repo's entry points.
Failure and recovery
| 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//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. |
Exit
- Success: planned passes ran, findings exist with verdicts (or no findings produced), files written are listed, residual cost / followups are explicit.
- Partial success: some passes blocked on credentials/quota/refusal; the blocker, the safe-resume command, and the recommended next step are reported.
- Failure: nothing destructive happened, the user has the exact next command to unblock the work.
Logical Operations
Actions
| 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//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 --comment-out comment.md | | Author custom matcher | WRITE | .deepsec/matchers/.ts + inline plugin in deepsec.config.ts | | Validate matcher hit rate | VALIDATE | bunx deepsec scan --matchers candidate count | | Verify and report | NOTIFY | RunMeta, severity counts, dollar cost, FP rate | | Stop on budget breach | TERMINATE | Refuse unbounded process without calibration |
Tools and instruments
- Package manager:
bun/bunx(preferred),pnpm,npm,yarnare interchangeable. - CLI commands:
deepsec init,init-project,scan,process,process --diff,triage,revalidate,enrich,report,export,metrics,status,sandbox. - Diff sources for PR mode:
--diff,--diff-staged,--diff-working,--files,--files-from(or-for stdin). - Inspection:
jqoverdata//files/**/*.jsonfor ad-hoc severity / TP queries. - Credentials:
AI_GATEWAY_API_KEY,VERCEL_OIDC_TOKEN,ANTHROPIC_AUTH_TOKEN/ANTHROPIC_BASE_URL,OPENAI_API_KEY/OPENAI_BASE_URL,claude login,codex login. - Resource files under
resources/for setup, scanning, PR review, matchers, triage, config, load on demand.
Canonical workflow path
- Bootstrap (one time per repo):
``bash cd 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//SETUP.md, skim README / AGENTS.md / CLAUDE.md and a handful of representative files, and replace each section of data//INFO.md` (50-100 lines, 3-5 examples per section, no line numbers, no generic CWE rehash).
- Calibrate before any full pass. The deepsec docs (
getting-started.md,vercel-setup.md,faq.md) recommend--limit 50 --concurrency 5as 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.
- Full investigation, triage, revalidate, export:
``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 ``
- PR mode (CI gate, scoped to changed files, exit code = 0/1):
``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.
- Custom matchers (close entry-point gaps surfaced in step 3):
- Read the contract in
.deepsec/node_modules/deepsec/dist/config.d.tsand thesamples/webapp/matchers/*examples. - Write
.deepsec/matchers/.ts, wire it through the inline plugin in.deepsec/deepsec.config.ts. - Verify hit rate:
bunx deepsec scan --matchersshould land in 1-20 hits / 1k files (precise), 5-100 (normal), or roughly the framework entry-point count (noisy).
- Resume after any quota stop, network blip, or Ctrl-C: re-run the same command. State is on disk under
.deepsec/data//.
Resource scope
| 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//{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. |
Preconditions
- Node.js 22+ is available.
- Repo is a git checkout (deepsec uses git history for
revalidateand--diff). - For any AI command: at least one credential mode is configured before the call, or the call is held until one is.
- For
sandboxmode: Vercel auth is wired; otherwise stay local. - For unbounded
processruns on > 500-file repos:
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: first-fluke
- Source: first-fluke/oh-my-agent
- License: MIT
- Homepage: https://firstfluke.com/oh-my-agent/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.