scan
Run a security scan of a project and return the result, with progress on the way; calling it while a scan runs here attaches to that scan. Writes results into .security-scan/ and never modifies your source.
freshprofilebudget_sworkspace
io.github.MaverickHQ由 GitHub 账号 MaverickHQ 发布v1.6.1更新于 Nov 1, 2026
Offline security scanning for AI-generated code: seven open-source scanners in one MCP server.
用七个内置开源扫描器对项目做离线安全扫描,并把按利用情况排序的发现结果返回给 AI 助手。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
Offline security scanning for AI-generated code.
Seven open-source scanners and AI-specific checks, in one command and one ranked report.
[PyPI] [Python 3.11+] [CI] [OpenSSF Scorecard] [Licence: Apache-2.0]
Scorecard's Code-Review, Branch-Protection and Contributors checks need a second maintainer; valvur has one (MAINTAINERS.md).
Status:
1.6.1, the version this tree declares; the PyPI badge above shows whatpip install valvurserves, and the CHANGELOG what each version changed.
In Claude Code: /plugin marketplace add MaverickHQ/valvur, then /plugin install valvur@valvur, and ask it to scan the project.
From a terminal, with Docker or Podman running: uvx valvur scan.
run.json, beside what left
the machine: nothing. One command checks it.What it checks, rule by rule, and what it cannot see: how valvur works.
.env* files and agent configuration), fetches the public data it needs, and records
each fetch.A scan ends findings, clean or inconclusive. It never says clean when stale data,
an uninspected ecosystem or a Scanner that did not finish cannot support it, and it says why.
How much of what valvur claims it finds is measured as the Score: nine tracks scored by the OWASP Benchmark's formula, with a ratchet that no change may fall more than two points under. It is 74.1 out of 100, the same on Linux and on macOS.
Track 8 is precision on maintained code, where almost nothing is a vulnerability: 3 of its
171 findings are real. Track 9 measures the rules for model output reaching a sink: they
catch 30 of 34 generated flows with no false alarm, and none of five published advisories
in LangChain, LlamaIndex and Vanna, whose flows each cross a function. Each rule's
precision is in docs/RULES.md, and the method, the gates and what
valvur does not claim are in docs/EVALUATING.md. Read that one
sceptically.
The Claude Code plugin brings the MCP server, a skill that runs the workflow, and a hook
that asks you before the agent installs a package valvur flags. Kiro takes it as a power.
Any MCP client runs the server with uvx --from valvur valvur-mcp.
The agents' guide has the configuration for eleven clients, the seven
tools, and the permissions a don't ask mode needs.
The Scanners run in a container, so the machine needs Docker or Podman; valvur doctor
says what is missing.
The command-line guide has every command, what a first scan fetches, the Results Folder, and the settings files.
The action scans, uploads results.sarif to code scanning and gates the job.
The CI guide covers the gate, the image as a step of its own, and GitLab.
valvur builds no detection engine. Seven open-source Scanners do that and deserve the
credit; valvur adds one File Set, one findings model, exploit-aware ranking, and three
Checks of its own. All of them run in one container, fed a copy of the files. run.json
records the version of each that ran, and raw/ keeps what each said.
Exploit intelligence comes from CISA KEV and FIRST EPSS: public primary sources, auditable and mirrorable. No proprietary database, and nothing to lock you in.
Air-gapped? The database, the Name Index and its malicious list, KEV, EPSS and OSV's
databases all live outside the image, and each has a mirror setting. See
docs/AIR-GAPPED.md.
valvur collects nothing: no account, no API key, no telemetry, and no part of it reports on
you or your code. The results stay in .security-scan/, which ignores itself in git. What
the host fetches is public data, each fetch recorded in run.json.
python3 scripts/verify-offline.py checks it, and on Linux unshare -rn valvur scan proves
it (how).
valvur doctor --bundle writes: versions and the last run.json, never your
source, raw output or findings.clean included, goes
privately by SECURITY.md.Apache-2.0, see LICENSE; chosen over MIT for the explicit patent grant. Bundled Scanners keep their own licences, listed above and in NOTICE. valvur adds no GPL or AGPL component; the Alpine base carries GPL userland as every Linux container does, and the published SBOM discloses all of it (ADR-0005).
来源:README.md,提交 0213001
Run a security scan of a project and return the result, with progress on the way; calling it while a scan runs here attaches to that scan. Writes results into .security-scan/ and never modifies your source.
freshprofilebudget_sworkspaceThe last scan's findings, worst first and bounded: filter by `group`, `rule`, `path` or `status`, or give a `fingerprint` for that finding in full, with its evidence, exploitation, dependency path and the Scanners that reported it.
pathrulegrouplimitstatusinventoryworkspacefingerprintinclude_suppressedWhat the last scan actually did: which scanners ran, which failed, and whether the result is complete.
workspaceStop a running scan: its containers are killed, nothing is written, and the previous results (if any) stand. What Ctrl-C does on the command line.
workspaceFetch what a scan reads, now: the image if absent, the vulnerability database, the CISA KEV catalog and the package-name index, into this machine's cache; progress on the way, and the answer is what was fetched. Public data comes in; nothing of any workspace leaves.
if_staleCheck that this machine can scan, before scanning: the container runtime, the image, the vulnerability database, the package-name index, SELinux, TLS trust, and which MCP client configuration names valvur. One line per check with the fix on any that would fail a scan. Changes nothing but the containers of scans whose process ended, which it removes.
networkworkspaceBefore adding a dependency: whether each package exists on its registry, is one edit from a far more popular one, was published as malicious, or is exposed to dependency confusion by this project's registry configuration. Answered from this machine's cache; no registry is asked, because asking about a hallucinated name tells whoever watches what to register. Never add a flagged package, or a replacement for it, without asking the human.
packages必填workspace已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
.security-scan/ ← ignores itself in git, so it is never committed├── SUMMARY.md ← start here: the verdict, anything that failed, the top groups├── REMEDIATION.md ← a ranked proposal: you choose what to apply├── findings.json ← every finding, normalised, secrets redacted├── results.sarif ← SARIF 2.1.0, for code scanning and IDEs└── run.json ← what ran, what was fetched, and what left the machine: nothingpip install valvur # or: uv tool install valvurvalvur scan # offline by default; --profile full adds the registries' answersvalvur check npm left-pad # before an install: real, a near-miss, or malicious?valvur gate . --fail-on high --no-inconclusive- uses: MaverickHQ/valvur-action@16b19e275f843419887873ed536a71f872607e24 # v0.2 with: { fail-on: high, no-inconclusive: "true" }