
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
Verirun — execution-grounded verification runtime for AI coding agents on Windows. The agent may propose; only evidence may prove.
Execution-grounded verification runtime for AI coding agents on Windows. The agent may propose; only evidence may prove.
Verirun gives a coding agent an agent-independent way to prove that the software it just built actually behaves correctly — by launching the app, driving it, and collecting its own evidence (UI tree, filesystem, SQLite, process state, logs), then producing a verdict-of-record the agent cannot fabricate through the MCP/API surface.
The agent connects to Verirun as an MCP (stdio) client. It is treated as an
untrusted planner: it may request actions and relay requirements, but every
receipt, observation, and verdict is stamped by Verirun itself. A requirement
the agent relays carries no authority — a CONFIRMED verdict comes only from
Verirun's own invariants (e.g. "the target must not crash or hang") or from a
requirement the user authored directly.
receipt ≠ effect).# Run the MCP server (stdio). Point your coding agent's MCP config at this.
npx verirun mcp
# Environment self-check.
npx verirun doctor
Before publishing a release, run a manual pre-publish smoke: npm ci → npm test → npm pack → install the tarball on a clean prefix → verirun doctor. Publish by hand with npm publish --provenance and 2FA.
Register it with your agent (see examples/):
.mcp.jsonmcp.jsonverify_begin — declare the workspace + the scope paths this run may touch,
and for a web app the declared_endpoints it may read. Over-broad scope
(drive root, user profile, workspace root, wildcard hosts) is refused.target_launch — Verirun launches the app and starts a supervised watcher.ui_inspect, ui_search, ui_act (tiered input), wait_until.
ui_inspect walks the full depth by default and bounds the reply by node
count instead — truncatedNodes says how many it left out, and max_nodes
raises the budget when you want the whole tree. Chromium-backed UIs (Electron
apps, web pages) build their tree lazily, so the walk repeats until two
passes agree across a real pause — settle_gap_ms tunes that pause and
treeSettled reports whether they ever agreed, with the whole settle capped
at six seconds. Starting a Chromium target with --force-renderer-accessibility
makes its tree complete from the first query, and Verirun says so when the
flag is missing rather than adding it for you: changing how the app under
test runs is not a runtime's call. For a targeted lookup at any depth, use
ui_search.observe_filesystem, observe_sqlite,
observe_logs, observe_http, assert_evaluate — the evaluator collects
its own evidence; cherry-picked agent references cannot steer the result.
A web app keeps its effect on a server, so observe_http reads the endpoint
itself: GET/HEAD only, no ambient credentials, and redirects are reported
rather than followed, so a 3xx cannot carry the read outside what you
declared. It needs the net_read capability, which is never granted by
default. Declare a host by IP and no name resolution is involved at all;
declare it by name and it is pinned to the addresses it resolved to when
scope was granted, so a later DNS change refuses the read instead of
following it elsewhere. A deployment that legitimately rotates addresses
(a proxy or CDN) can be allowed to move with
VERIRUN_ALLOW_ENDPOINT_REPIN=1 — a user-side setting, never agent-declarable
— and every move is recorded in the run.verify_finalize — Verirun writes the verdict-of-record (report.md +
verdict.json) and tears the run down. A run whose scripted action came back
other than EXECUTED cannot tell a wrong app from a scenario that never
happened, so a missing effect is reported INCONCLUSIVE with the unexecuted
steps named — never as a suspected app defect.Inspect any run's evidence chain, trust-tagged by origin:
npx verirun show <run-id>
An agent cannot know which account you test with and must never hold your
secret, so auth lives on your side. Write http-auth.json in the run store
(verirun doctor prints the path and the exact shape):
{
"staging-api": {
"header": "Authorization",
"secret": "Bearer <token>",
"endpoint": "https://staging.example.com/api"
}
}
A short-lived token (OAuth, a signed session cookie) goes in as a command
instead of a value — its stdout is the secret, cached for ttl_seconds:
{
"oauth-api": {
"header": "Authorization",
"secret_command": "gcloud auth print-identity-token",
"ttl_seconds": 300,
"endpoint": "https://api.example.com/v1"
}
}
The agent then passes auth: "staging-api" to observe_http or an
http_response assertion — a name, never a value. Each profile is bound to the
endpoint prefix it may be sent to, so an agent cannot point your token at a
server of its choosing; cleartext http is accepted for loopback only; if the
endpoint echoes the secret back, it is scrubbed out of the body before the agent
or the run record sees it; and when an auth command fails, the agent is told the
exit status and nothing more — run the command yourself to see why.
VERIRUN_ALLOW_INPUT_INJECTION=1 (a user-side
setting, never agent-declarable), with a focus pre-check and abort-on-focus-loss.Opt-in only. Nothing is collected or transmitted by default. verirun telemetry on starts local metric capture you can inspect with verirun telemetry show; V0 has no network sink.
V0, under active development. See the implementation plan and evidence trail in
plans/.
Apache-2.0.
FAQs
Verirun — execution-grounded verification runtime for AI coding agents on Windows. The agent may propose; only evidence may prove.
We found that verirun demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.