An open-source AI-agent skill that automates compliance evidence collection for Vanta audits. Give it a control ID, a framework, or just say "process the backlog" — it researches your infrastructure, captures the right screenshots via Playwright CDP, generates auditor-facing explainer PDFs, and uploads everything to Vanta as drafts for human review.
It runs as a skill inside AI coding assistants (Claude Desktop, Claude Code,
Cursor) and is organization-agnostic: everything specific to your company lives
in config.yaml and the knowledge/ files, which you fill in after forking.
Not affiliated with Vanta. This is an independent, community-built tool that talks to the public Vanta API. "Vanta" is a trademark of Vanta Inc., used here only to describe compatibility. See Trademarks.
/collect-evidence CC8.1 → captures change management evidence
/collect-evidence soc2 → processes all pending SOC 2 items
/collect-evidence → processes the entire pending backlog
For each pending Vanta document, the agent:
- Reads the auditor ask from the Vanta API
- Researches how your org handles it (knowledge base + playbook base document)
- Navigates to source systems via your existing Chrome sessions (CDP)
- Screenshots the relevant pages with full-page capture
- Generates an explainer PDF connecting evidence to the control
- Audits the package through a two-layer QA gate (deterministic checks + a skeptical, framework-tailored evaluator sub-agent)
- Uploads to Vanta as a draft (never auto-submits)
Before anything reaches Vanta, every package goes through a quality gate. The policy is annotate, with blocking only on hard deterministic failures:
- Deterministic layer —
scripts/evidence_audit.pyruns cheap, reproducible checks: provenance/checksum integrity, "did we capture a login wall?", evidence-within-the-audit-period, blank/corrupt images, and expected-system coverage. Ablockverdict here is the only thing that stops an upload. It writesaudit.jsonnext to the evidence. - Semantic layer — a separate evaluator sub-agent adopts a skeptical auditor
persona from
knowledge/rubrics/<framework>.yaml(SOC 2 Type II operating-effectiveness, ISO 27001 ISMS process+records, HITRUST PRISMA maturity) and returnspass | revise | escalatewith a confidence score. Its findings never hard-block — they annotate the draft (qa_report.md) so the human reviewer knows where to look.
On revise, the gate loops back to capture/explain with specific deltas
(bounded to 2 passes). The named-human gate is unchanged — drafts only, a human
submits.
Every run writes a manifest.json next to the captured files recording, per
item: the source URL, the capture time (UTC), the operator, and a
SHA-256 checksum of the exact bytes. The explainer PDF embeds this as a
Provenance table and is itself hashed into the manifest. Any export can be
traced to its source, and re-hashing proves it is unchanged since capture.
├── CLAUDE.md # Agent instructions (the pipeline)
├── SKILL.md # Thin entry point for skill loaders
├── config.example.yaml # Org config template (copied to config.yaml by install.sh)
├── install.sh # Interactive setup + symlink into skill dirs
├── scripts/
│ ├── config.py # Loads config.yaml (sso_url, region, playbook backend)
│ ├── screenshot_capture.py # Playwright CDP screenshot capture
│ ├── vanta_client.py # Vanta REST API client
│ ├── evidence_report.py # Explainer PDF generator
│ ├── evidence_audit.py # Deterministic QA gate (verdict: pass|warn|block)
│ └── provenance.py # Per-item manifest: source, timestamp, operator, SHA-256
└── knowledge/ # Shared learning layer (git-tracked)
├── README.md # Schema documentation
├── infrastructure.yaml # System URLs, accounts, service map (template)
├── access-issues.yaml # Known blockers + workarounds (grows over time)
├── sso-tiles.yaml # SSO/IdP tile URL mapping (template)
├── rubrics/ # Per-framework QA rubrics (framework-general)
│ ├── soc2.yaml
│ ├── iso27001.yaml
│ └── hitrust.yaml
└── playbooks/ # Local playbook base document (default backend)
├── index.yaml # control → systems + playbook_ref routing table
└── *.md # per-category evidence strategies
The knowledge/ directory is the key idea. It splits into a static index
(git-tracked YAML: system map, access issues, SSO tiles, control→playbook
routing) and a detailed playbook layer — the "base document" — whose
location you choose (local markdown, Notion, Confluence, Google Doc, or a URL).
After every run the agent updates these with what it learned: discovered URLs, access issues, narrative framing that worked. This means each run gets smarter, knowledge is shared via Git, and learnings are code-reviewable in PRs.
This project is designed to be forked. The
knowledge/files andconfig.yamlare your organization's rules and live in your copy of the repo on GitHub, so your whole team shares the same knowledge and it stays reviewable via pull requests.
Fork this repository on GitHub (click Fork), then:
git clone https://github.com/<your-org>/<your-fork>.git
cd <your-fork>
./install.shinstall.sh is interactive. It checks prerequisites (Python, Playwright,
Chrome, optional MCP servers), then asks you for:
- your IdP / SSO dashboard URL (
sso_url), - your Vanta API region (
us/eu/gov), - where your playbook base document lives (local markdown / Notion / Confluence / Google Doc / URL).
It writes these to config.yaml and symlinks the repo into
~/.claude/skills/ and/or ~/.cursor/skills/.
mkdir -p ~/.vanta
cat > ~/.vanta/credentials.json << 'EOF'
{
"client_id": "vci_...",
"client_secret": "vcs_..."
}
EOFGet these from Vanta → Settings → API → OAuth Clients. This file is never committed.
Edit the templates in knowledge/ for your environment:
knowledge/infrastructure.yaml— your systems, URLs, accountsknowledge/sso-tiles.yaml— your IdP tile URLsknowledge/playbooks/index.yaml— map your Vanta controls to systems + playbooks- Playbooks — write them in your chosen base document (the
knowledge/playbooks/*.mdfiles are examples for thelocalbackend) knowledge/access-issues.yaml— starts nearly empty; grows as the agent learns
Commit these to your fork so your team shares them.
Open Claude Desktop / Claude Code / Cursor and say:
/collect-evidence <a Vanta document or test URL>
The agent prepares a Chrome CDP instance (copying your existing Chrome profile for SSO sessions), verifies IdP connectivity, and starts processing.
The detailed, frequently-updated playbooks live in a base document whose
backend you pick at install time (config.yaml → playbook.backend):
| Backend | playbook_ref in index.yaml means |
Needs |
|---|---|---|
local (default) |
a markdown filename under knowledge/playbooks/ |
nothing extra |
notion |
a Notion page ID | Notion MCP server |
confluence |
a Confluence page ID/URL | Confluence access/MCP |
google_doc |
a Google Doc URL/ID | Google access/MCP |
url |
any full URL | network access |
local is the zero-dependency default and keeps playbooks versioned in Git
alongside the index. Choose an external backend if your team already maintains
runbooks there.
After an evidence run, the agent updates knowledge/ files. To share:
git checkout -b knowledge/add-firewall-urls
git add knowledge/
git commit -m "knowledge: add firewall URL discovery pattern"
git push -u origin HEAD
# open a PR for team reviewSee knowledge/README.md for the schema of each file.
- Python 3.10+
- Google Chrome (the CDP screenshot capture copies your profile for SSO)
pip install -r requirements.txtthenplaywright install chromium- A Vanta account with API OAuth credentials
- An AI assistant that loads skills (Claude Desktop, Claude Code, or Cursor)
- Credentials live only in
~/.vanta/credentials.jsonand are never committed (.gitignorealso blockscredentials.json,*.png,*.pdf, evidence dirs). - The agent uploads to Vanta as drafts only and never submits — a named human reviews and submits.
- Never kill the CDP Chrome process — it destroys all live SSO sessions.
- Review captures for secrets/PII before submitting to an auditor (the evaluator rubric flags obvious exposures, but the human review is the backstop).
Licensed under the GNU General Public License v3.0 — see LICENSE. Its strong copyleft means derivative works that are distributed must also be released under GPL-3.0 with source, which keeps this tool and its improvements open.
This project is not affiliated with, endorsed by, or sponsored by Vanta Inc. "Vanta" and the Vanta logo are trademarks of Vanta Inc. All other product names, logos, and brands are the property of their respective owners. Any references to Vanta (or to other services in the templates) are for identification and compatibility purposes only and do not imply endorsement.