---
title: "openaudit: One scored audit of everything you ship."
description: "openaudit runs 37 built-in auditors and wraps 52 established open-source scanners, linters and type checkers when they're installed. Ten agent playbooks cover the judgment-heavy work no rule can do, such as authorisation review, keyboard and screen-reader journeys, and privacy data flows. Everything lands in one report with a 0–100 score and an A–F grade per area."
url: https://openaudit.se/
---

# openaudit

**One scored audit of everything you ship.** Code, websites, running apps, APIs, containers, infrastructure, cloud accounts and mobile builds, from your terminal, your CI or your AI agent.

openaudit runs 37 built-in auditors and wraps 52 established open-source scanners, linters and type checkers when they're installed. Ten agent **playbooks** cover the judgment-heavy work no rule can do, such as authorisation review, keyboard and screen-reader journeys, and privacy data flows. Everything lands in one report with a 0–100 score and an A–F grade per area.

- **One issue, one finding.** When gitleaks, TruffleHog and the built-in secret scan all find the same key, you get one finding that says who confirmed it, scored once.
- **A report people actually read.** A self-contained interactive HTML page with an overview, a tab per area and an OWASP Top 10 / CWE Top 25 view. It also comes as JSON, SARIF, Markdown and CSV.
- **Built for agents.** An MCP server, a JSON agent mode and playbooks that Claude Code, Cursor or Codex can run with their own tools.
- **Safe on hostile input.** Targets are treated as untrusted. Tools that would run project code are opt-in, and nothing builds or installs what it scans.
- **Free.** Every wrapped tool is free and open source. The only cost is tokens, if you choose to use the AI features.

## Quick start

```bash
bunx @openaudit/cli .                            # a codebase
bunx @openaudit/cli https://example.com          # a live site (add --browser for Playwright + axe-core)
bunx @openaudit/cli ./app-release.apk            # a mobile build (.apk, .aab, .ipa)
bunx @openaudit/cli image:nginx:1.27             # a container image
bunx @openaudit/cli cloud:aws --only cloud       # a live cloud account (Prowler)

bunx @openaudit/cli . -f html -o report          # write the interactive report to report/
bunx @openaudit/cli doctor                       # which optional scanners are installed
```

openaudit needs [Bun](https://bun.sh) 1.4 or newer. Scanners are optional: an auditor whose tool is missing is skipped with an install hint, and the rest of the audit runs normally. To run from source, see [Contributing](https://openaudit.se/docs/contributing/).

## openaudit audits itself

Every push audits this repository. The latest audit scored **100/100, grade A**. Read the [live report](https://openaudit.se/report/) or its [Markdown version](https://openaudit.se/report/openaudit-report.md).

| Area | Score | Grade |
| --- | --- | --- |
| Security | 100 | A |
| Accessibility | 100 | A |
| Performance | 100 | A |
| Privacy | 100 | A |
| Best practices | 100 | A |
| Reliability | 100 | A |
| Maintainability | 98 | A |
| Supply chain | 100 | A |
| Compliance | 100 | A |

## What it audits

Every finding belongs to one of ten areas, and each area gets its own score and grade.

| Area | What openaudit looks for |
|---|---|
| **Security** | Leaked secrets (also in git history), injection, XSS and other risky code, weak crypto, disabled TLS or JWT checks, security headers, TLS, DNS and email spoofing protection, exposed files and APIs, container, IaC and cloud misconfiguration, risky mobile manifests, and optional dynamic scanning |
| **Accessibility** | WCAG checks in JSX, Vue, Svelte, HTML and CSS; axe-core and pa11y on rendered pages; Android layouts; keyboard and screen-reader journeys walked by an agent |
| **Performance** | Page weight, caching, compression, Core Web Vitals, Lighthouse, image and bundle size, container image size, mobile app size and native libraries |
| **SEO** | Titles and descriptions, crawlability, canonical URLs, sitemaps, structured data, broken links |
| **Privacy** | Trackers and cookies set before consent, analytics, ad and session-replay SDKs, personal data written to logs, mobile permissions |
| **Best practices** | Repository hygiene (README, licence, security policy, CI, lockfiles), Dockerfile and IaC lint, GitHub Actions hardening |
| **Reliability** | Type errors, broken pages and redirect chains, missing Kubernetes probes and limits |
| **Maintainability** | Linting, strict typing settings, duplication, dead code, deep nesting and oversized files |
| **Supply chain** | Known-vulnerable dependencies, unpinned versions and actions, OpenSSF Scorecard, licences, SBOMs, container image CVEs |
| **Compliance** | Licence obligations, cookie consent, OWASP Top 10 and CWE Top 25 mapping, CIS cloud benchmarks |

## What it checks, by target

| Target | Built-in auditors | Wrapped tools (used when installed) |
|---|---|---|
| Codebase | secrets, static security (SAST), vulnerable dependencies (OSV.dev), lockfile integrity and install scripts, API specs (OpenAPI, GraphQL), privacy (tracking SDKs, PII in logs), accessibility, performance, quality, language strictness, repo hygiene, dependency licence policy, AI-agent config (hidden instructions in AGENTS.md and Cursor/Copilot rules, unpinned or plaintext MCP servers, over-broad agent permissions) | **Secrets:** gitleaks, TruffleHog, git history\*. **SAST:** Semgrep, Bandit, gosec, Brakeman, mobsfscan. **Types and lint:** tsc, oxlint, Biome, ruff, staticcheck, PHPStan, PMD, ShellCheck, ESLint\*, clippy\*, mypy\*, golangci-lint\*. **APIs:** Spectral, oasdiff (breaking changes, in diff mode). **Dependencies:** osv-scanner, Trivy, npm/pnpm/bun audit, pip-audit, cargo-audit, govulncheck\*, Grype\*. **Supply chain:** OpenSSF Scorecard, GuardDog (malicious packages)\*, Syft licences\*. **Quality and licences:** jscpd, knip\*, ScanCode\*. **AI review:** deepsec\* |
| URL | security headers, TLS, DNS and email (SPF, DMARC, CAA, MTA-STS, subdomain takeover), exposed APIs (OpenAPI, GraphQL introspection), SEO, accessibility, performance, reliability, exposed files, privacy and trackers | Lighthouse, pa11y, OWASP ZAP baseline\*, ZAP active scan\* (allow-listed hosts only), sslyze, testssl.sh\* |
| Running web app (`--browser`) | axe-core in Chromium, console errors, failed and mixed-content requests, Core Web Vitals, trackers and cookies set before consent | |
| Containers | Dockerfile, Compose, image (root user, age, size, secrets) | Trivy, hadolint, Dockle\* |
| Infrastructure as code | GitHub Actions, Kubernetes, Terraform | zizmor, actionlint, kube-linter, kubeconform, TFLint, Checkov, KICS\*, Kubescape\* |
| Mobile | Android manifest (incl. binary AXML in APKs), iOS Info.plist (incl. binary plists in IPAs), embedded secrets, bundled SDK versions checked against OSV, layout accessibility, size and performance | |
| Cloud (`cloud:aws`, `azure`, `gcp`, `kubernetes`) | | Prowler\* |

\* Opt-in, because it's slow, noisy, sends more traffic to the target, spends tokens, or runs project code. Select it with `--only <id>`, e.g. `--only code.clippy` or `--only agent.deepsec`.

The built-in hidden-Unicode check (`code.unicode`) flags Trojan Source bidirectional controls, zero-width and other invisible characters, hidden prompt text in Unicode tag characters, variation-selector payloads and look-alike (homoglyph) identifiers in code, docs and agent instruction files such as AGENTS.md and Cursor rules.

The opt-in `code.dependency-health` auditor looks your pinned dependencies up on [deps.dev](https://deps.dev) and flags deprecated packages, yanked releases, dependencies whose source repository is archived, and direct dependencies with no release in years.

`bunx @openaudit/cli list` shows every auditor and playbook. The [auditor catalogue](https://openaudit.se/auditors/) lists them by target and area.

## With AI agents

Some audits need judgment rather than patterns. openaudit is built so agents can drive it end to end:

- **MCP server.** `claude mcp add openaudit -- bunx @openaudit/cli mcp` (or the equivalent `mcp.json` in Cursor or VS Code) gives an agent `run_audit`, `get_finding`, `compare_reports` and more, plus the playbook tools `list_playbooks`, `get_playbook` and `submit_findings`. Your agent does the review with its own tools, and its findings merge into the same scored report. No extra API key is needed.
- **Headless agentic auditors.** `openaudit . --agentic` runs the playbooks through the Claude Agent SDK. The agent gets read-only tools, confined to the project and the target origin. It uses `ANTHROPIC_API_KEY` or an existing Claude Code login.
- **AI triage.** `--ai` turns the findings into a prioritised fix plan. Only finding metadata is sent, never file contents.
- **Agent mode CLI.** `--json` prints a single JSON report to stdout, and `openaudit schema` gives its JSON Schema.
- **Skill.** [`skills/openaudit/SKILL.md`](https://github.com/wezter96/openaudit/blob/main/skills/openaudit/SKILL.md) teaches an agent the loop: baseline, triage, playbooks, fix, then verify with `compare_reports`.
- **Read-only reference over MCP.** `https://openaudit.se/mcp` answers questions about the auditors, playbooks, docs and config schema without installing anything. It cannot run audits; the local server above does.

Details are in [`apps/cli/README.md`](https://openaudit.se/docs/cli/) (CLI, CI, MCP setup) and [`packages/agent/README.md`](https://openaudit.se/docs/agents/#playbooks) (playbooks, data handling).

## Documentation

- [Getting started](https://openaudit.se/docs/): Install openaudit, run your first audit and read the report. openaudit needs Bun 1.4 or newer; scanners are optional.
- [CLI reference](https://openaudit.se/docs/cli/): Every openaudit command and flag: targets, output formats, auditor selection, baselines, diff mode, exit codes and agent mode.
- [Configuration](https://openaudit.se/docs/configuration/): openaudit.config.json: suppressions, auditor selection and per-auditor settings, with the full key reference and what a config inside the audited target may change.
- [CI and integrations](https://openaudit.se/docs/ci/): Run openaudit in GitHub Actions, GitLab CI, pre-commit or the Docker image, upload SARIF to code scanning and fail builds on new findings.
- [MCP and agents](https://openaudit.se/docs/agents/): Connect Claude Code, Cursor, Codex or a remote agent to openaudit over MCP, run the ten judgment-heavy playbooks, or run them headless with --agentic.
- [HTTP API](https://openaudit.se/docs/api/): The self-hosted HTTP API in apps/server: URL audits and the auditor and playbook catalogue over REST, with its OpenAPI document.
- [Report and scoring](https://openaudit.se/docs/report/): How openaudit scores each area from 0 to 100, how grades and severities are defined, and what the interactive HTML, JSON, SARIF and Markdown reports contain.
- [Safety](https://openaudit.se/docs/safety/): openaudit treats every target as hostile: confined file reads, origin-scoped HTTP, opt-in for tools that run project code, and agents without a shell.
- [Contributing](https://openaudit.se/docs/contributing/): Set up the openaudit monorepo, add an auditor or wrap a scanner safely, and open a pull request that passes the full check.
- [Auditor catalogue](https://openaudit.se/auditors/): all 103 auditors.
- [Source on GitHub](https://github.com/wezter96/openaudit)
