{"id":50978201,"url":"https://github.com/visa/visa-vulnerability-agentic-harness","last_synced_at":"2026-06-19T11:02:59.880Z","repository":{"id":364675743,"uuid":"1259875534","full_name":"visa/visa-vulnerability-agentic-harness","owner":"visa","description":"Visa Vulnerability Agentic Harness","archived":false,"fork":false,"pushed_at":"2026-06-14T01:01:47.000Z","size":419,"stargazers_count":281,"open_issues_count":0,"forks_count":53,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-06-14T03:07:26.040Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/visa.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-05T00:26:33.000Z","updated_at":"2026-06-14T02:27:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/visa/visa-vulnerability-agentic-harness","commit_stats":null,"previous_names":["visa/visa-vulnerability-agentic-harness"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/visa/visa-vulnerability-agentic-harness","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visa%2Fvisa-vulnerability-agentic-harness","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visa%2Fvisa-vulnerability-agentic-harness/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visa%2Fvisa-vulnerability-agentic-harness/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visa%2Fvisa-vulnerability-agentic-harness/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/visa","download_url":"https://codeload.github.com/visa/visa-vulnerability-agentic-harness/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visa%2Fvisa-vulnerability-agentic-harness/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34528144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-19T11:02:59.072Z","updated_at":"2026-06-19T11:02:59.874Z","avatar_url":"https://github.com/visa.png","language":"Python","funding_links":[],"categories":["Python","Defense \u0026 Security Controls"],"sub_categories":["AI-Assisted Defensive Security"],"readme":"\u003c!--\nCopyright 2026 Visa, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n--\u003e\n\n# Visa Vulnerability Agentic Harness — Agentic SAST Pipeline\n\n![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)\n![Python](https://img.shields.io/badge/python-%E2%89%A5%203.10-blue.svg)\n![Version](https://img.shields.io/badge/version-1.0.0-informational.svg)\n![Output](https://img.shields.io/badge/output-Markdown%20%2B%20SARIF%202.1.0-green.svg)\n\nVVAH is Visa's open-source harness for autonomous vulnerability discovery\nusing frontier AI models, built on learnings from\n[Project Glasswing](https://www.anthropic.com/glasswing) (Anthropic's\ninitiative for AI-assisted vulnerability research).\n\nThree design choices drive finding quality: threat modeling before analysis\nfocuses the attack surface; multi-agent deterministic voting reduces false\npositives; and structured triage artifacts compress the lifecycle from\nAI-discovered weakness to actionable finding. The bottleneck in AI-assisted\nvulnerability management is triage speed, not discovery — VVAH is designed\naround that constraint. The primary effectiveness metric is **Mean Time to\nAdapt (MTTA)**: time from AI-discovered weakness to a validated fix in\nproduction.\n\nMulti-model by design, VVAH works with Anthropic Claude, OpenAI, or any\ncombination. No single provider is a dependency.\n\nFor setup, see [`docs/SETUP_GUIDE.md`](docs/SETUP_GUIDE.md). This repo is not\naccepting external contributions; see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n\u003e **Authorized use only.** Run scans only against code you own or have explicit\n\u003e permission to test. Findings are LLM-generated triage candidates that require\n\u003e human review — see [Limitations](#limitations-read-before-you-trust-output).\n\n**Docs:** [SETUP_GUIDE.md](docs/SETUP_GUIDE.md) — install \u0026 configuration · [USER_GUIDE.md](docs/USER_GUIDE.md) — commands \u0026 options.\n\n---\n\n## Pipeline\n\nThree phases, nine stages. Each stage combines deterministic controls with\nfrontier-model reasoning to produce structured, exploit-validated findings.\n\n| Phase | Stages | Purpose |\n|---|---|---|\n| Discovery \u0026 Modeling | S1–S3 | Attack surface mapping, threat modeling, hunting plan |\n| Deep Dive \u0026 Verification | S4–S6 | Multi-lens research, policy gates, adversarial verification |\n| Synthesis, Chaining \u0026 Reporting | S7–S9 | Deduplication, chain construction, SARIF emission |\n\nStandardized inputs (batch repositories, GitHub Enterprise metadata, CMDB\nrecords, CVE and control feeds) flow in. Structured reports, SARIF artifacts,\nand API-ready findings flow out.\n\nSee [`docs/architecture.md`](docs/architecture.md) for stage-by-stage detail.\n\n---\n\n## Skills\n\nEach pipeline stage is implemented as a composable, reusable skill. Skills can\nbe independently tuned, versioned, and replaced without rewiring the pipeline.\n\n| Stage | Skill |\n|---|---|\n| S1 — Explore the attack surface | Attack surface mapper (code, CMDB, CVE, controls) |\n| S2 — Model threats in business context | AppSec threat modeler (STRIDE, OWASP, trust boundaries) |\n| S3 — Strategize and prioritize | Vulnerability research strategist (taint, API boundaries, authorization controls) |\n| S4 — Research by specialized lens | Language, Crypto, Logic-bug, Access-control, Batch/ETL, IaC |\n| S6 — Adversarial verification | Adversarial reviewer (exploit chain, trust boundary tracing) |\n| S8 — Chain construction and reporting | Exploit strategist (CWE, attack paths, remediation) |\n\nSee [`docs/SKILLS.md`](docs/SKILLS.md) for configuration and extension guidance.\n\n---\n\n## Requirements\n\n- **Python ≥ 3.10**\n- An LLM credential — a Claude Code login (`claude login`) for the default\n  profile, **or** an Anthropic API key (`ANTHROPIC_SDK_API_KEY`) / `OPENAI_API_KEY`\n  if you switch roles to `via: sdk` / `via: openai`; see [Configure](#configure).\n- The `claude` CLI — required for the default (`cli`) profile; optional otherwise.\n\n## Install\n\nRecommended — install into a virtual environment (keeps the install isolated).\n\n**macOS / Linux:**\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install .\n```\n\n**Windows (PowerShell):**\n\n```powershell\npython -m venv .venv\n.\\.venv\\Scripts\\Activate.ps1\npip install .\n```\n\nOr install it as an isolated global command (no venv needed) on any OS:\n\n```bash\npipx install .\n```\n\nEither way this installs one command: `vvaharness`. All three backends (Anthropic\nSDK, Claude CLI, OpenAI-compatible) are available out of the box.\n\n## Configure\n\n**macOS / Linux:**\n\n```bash\ncp .env.example .env          # then edit .env to add your credential (see below)\n```\n\n**Windows (PowerShell):**\n\n```powershell\nCopy-Item .env.example .env   # then edit .env\n```\n\n`vvaharness` loads a `.env` automatically — it is searched for starting in the\nworking directory and walking up the parent directories — so no manual `source`\nstep is needed. (Variables you export yourself still take precedence.)\n\nWhich credential you need depends on the backend each role uses:\n\n- **`via: cli`** (the default profile) — use a Claude Code session instead of an\n  API key: run `claude` then `/login`, or set `CLAUDE_CODE_OAUTH_TOKEN` (from\n  `claude setup-token`).\n- **`via: sdk`** — set `ANTHROPIC_SDK_API_KEY`. Behind a private gateway, also set\n  `ANTHROPIC_SDK_BASE_URL` (plus `ANTHROPIC_SDK_CA_CERT` /\n  `ANTHROPIC_SDK_CLIENT_CERT` for mTLS).\n- **`via: openai`** — set `OPENAI_API_KEY` (and `OPENAI_BASE_URL` for an\n  OpenAI-compatible endpoint).\n\nThe default profile (`vvaharness/config/profiles/default.yaml`) runs every stage\nthrough the `claude` CLI on `claude-sonnet-4-6` — your Claude Code login is\nenough, no SDK key required. (`cli.yaml` is the same layout with `Bash` added to\nthe agentic stages.) To use the multi-backend layout (Claude CLI + Anthropic SDK\n+ OpenAI roles), copy `vvaharness/config/profiles/full.yaml` to `./config.yaml`\nand edit it.\n\nFor a step-by-step walkthrough — picking a profile, config resolution order,\nsecrets in `.env`, and copy-then-edit customisation — see\n**[docs/configuration.md → Setting up your config](docs/configuration.md#setting-up-your-config)**.\n\n### Which setup applies to you?\n\n| You are… | What you need | Profile |\n|---|---|---|\n| **Public / subscription user** (most people) | Claude Code (`claude login`) for the default; **or** an Anthropic API key `ANTHROPIC_SDK_API_KEY=sk-ant-…` if you prefer `via: sdk` roles | `default` / `cli` (login) or `full` (key) — nothing else: no gateway, no CA cert, no extra flags |\n| **Enterprise behind a private AI gateway** | also set `ANTHROPIC_BASE_URL`, plus `NODE_EXTRA_CA_CERTS` (private CA) and `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` if the gateway needs them | `default` / `cli` or `full` — see [docs/SETUP_GUIDE.md](docs/SETUP_GUIDE.md) |\n\nRun **`vvaharness setup`** either way — it tells you exactly what (if anything)\nis missing for *your* situation. A gateway token is only flagged when you\nactually have one.\n\nSee **[docs/USER_GUIDE.md](docs/USER_GUIDE.md)** for all commands and options and\n**[docs/SETUP_GUIDE.md](docs/SETUP_GUIDE.md)** for detailed install/configuration.\n\n## Run\n\n```bash\nvvaharness doctor                                   # check credentials/backends\nvvaharness estimate --repo /path/to/target          # rough scope/cost, no spend\nvvaharness scan --repo /path/to/target --application-id 12345\n```\n\nBatch (clone + scan, one report per AppId):\n\n```bash\nvvaharness scan --repo-file repos.csv --workspace ./scans --group-by-app --keep-clones\n```\n\nA `scan` run writes `run_manifest.json` (tool version, model roles, config hash,\ntarget git SHA, timing) into the working directory. (`doctor` and `estimate`\ndo no scan and write no manifest.)\n\n## Use with an AI agent (Claude / Copilot / Gemini)\n\nSo an AI agent *runs* the tool (instead of editing its source to make it work):\n\n```bash\nvvaharness setup --install-agents\n```\nThis detects your installed agent(s) and drops the operating instructions where\neach one reads them — `AGENTS.md` (cross-tool), `.github/copilot-instructions.md`\n(Copilot), `CLAUDE.md` + a Claude skill in `~/.claude/skills/` (Claude Code),\n`GEMINI.md` (Gemini CLI). Existing files are left untouched. See\n[AGENTS.md](AGENTS.md) for the operating rules and [docs/SKILLS.md](docs/SKILLS.md)\nfor the analysis capabilities.\n\n## Output\n\nPer target, under `\u003ctarget\u003e/security-scan/`:\n- `\u003cmodule\u003e_\u003cts\u003e_report.md` — findings + dropped-findings appendix\n- `\u003cmodule\u003e_\u003cts\u003e_report.sarif` — SARIF 2.1.0\n- `\u003cmodule\u003e_\u003cts\u003e_errors.jsonl` — non-fatal errors\n\n## Limitations (read before you trust output)\n\n- **LLM-generated, non-deterministic.** Findings are triage candidates, not\n  confirmed vulnerabilities — human review is required. Two runs may differ.\n  Majority-vote FP filtering runs on the `sdk` and `openai` backends; the `cli`\n  backend (no temperature control) always runs single-pass, as do SDK/OpenAI\n  models that reject `temperature` (e.g. Opus 4.7+).\n- **Token-hungry.** Caps are per-stage / per-finding, not global. Use\n  `vvaharness estimate` and the `step*.max_budget_usd` knobs.\n- **No published accuracy numbers yet.** Precision/recall figures are not yet\n  published.\n- **Elevated Privilege** This tool runs with elevated privilege and must only be\n  used against trusted repositories by authorized operators. Running VVAH\n  against untrusted and malicious input and repositories may expose host\n  credentials, API keys, and sensitive files, or expose you to other security\n  issues.\n\nSee `docs/` for configuration, models, pipeline, and output details.\n\n---\n\n## Security\n\nReport vulnerabilities responsibly — see [SECURITY.md](SECURITY.md). Please do\nnot open security issues in a public tracker.\n\n---\n\n## License\n\nLicensed under the **Apache License, Version 2.0** — see [LICENSE](LICENSE) and\n[NOTICE](NOTICE). Copyright 2026 Visa, Inc.\n\nThird-party dependencies are installed from PyPI at install time (not bundled\nin this repository); their licenses are inventoried in\n[THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md).\n\nSee [CHANGELOG.md](CHANGELOG.md) for release history.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisa%2Fvisa-vulnerability-agentic-harness","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisa%2Fvisa-vulnerability-agentic-harness","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisa%2Fvisa-vulnerability-agentic-harness/lists"}