VerisKit
The fastest way to prove your software works.
- Platform
- Node.js 20+, macOS, Linux, Windows
- Pricing
- Free CLI, MIT
Overview
- Version
- 0.8.0
- Downloads
- 1.9k total
- Updated
- 20 Jul 2026
- Category
- Developer Tools / Verification
- Platform
- Node.js 20+ (macOS, Linux, Windows)
- Distribution
- npm / npx
- CLI
- veris
- MCP server
- veriskit-mcp
- License
- MIT
VerisKit answers one question: is this change safe enough to trust? Run npx veriskit init and it detects the tools your project already has, TypeScript, Vitest, Jest, node:test, ESLint, and Biome, then veris verify runs them in parallel and returns one honest verdict. There is no config to write and no new test framework to learn.
The verdict has three states, not two. verified means every configured check ran and passed. failed means at least one check failed. partial means nothing failed but a check was skipped or its result is unknown. A partial verdict is not a pass, and VerisKit never folds a skipped check into verified. It reads the real exit codes and output of the tools you already run, then writes a Markdown report you can paste straight into a pull request.
Since 0.6.0 an agent can ask for the verdict itself. veriskit-mcp is a Model Context Protocol server that exposes VerisKit over stdio as seven tools, so a coding agent verifies its own change and reads the evidence without you relaying the output. Five tools are read-only (veris_doctor, veris_scan, veris_plan, veris_log, veris_evidence_verify); veris_verify and veris_affected run the project's own test tooling. Each one returns the same structured, honest verdict the CLI returns.
In the Baseframe Labs family, each tool answers one question. ProjScan asks whether the repository is healthy, AgentLoopKit decides what the agent should do next, AgentFlight records what the agent actually did, and VerisKit answers the last one: can we trust the result? Now the agent can ask it directly. Each works on its own, and VerisKit needs none of the others to verify a change. Everything runs locally, with no cloud, no telemetry, no source upload, and no LLM.
Part of Baseframe Labs
Four tools, four questions.
Baseframe Labs is four developer tools, each answering a different question about your work, in the order the work happens. Each one stands on its own.
- 01
ProjScanIs the repository healthy?
- 02
AgentLoopKitWhat should the agent do next?
- 03
AgentFlightWhat did the agent actually do?
- 04
VerisKitCan we trust the result?
Three of them, ProjScan, AgentLoopKit, and AgentFlight, also hand off through versioned JSON under .baseframe/. VerisKit verifies a change on its own and needs none of the others.
Features
What it does well.
Agents
03- veriskit-mcp
- A Model Context Protocol server over stdio, so an AI agent verifies its own change and reads the evidence as tool calls. Seven tools, each returning the same honest verdict the CLI returns.
- Read-only by default
veris_doctor,veris_scan,veris_plan,veris_log, andveris_evidence_verifyonly read.veris_verifyandveris_affectedrun the project's own test tooling, and nothing else executes.- A library, too
- 0.6.0 adds a programmatic API,
verifyProject,affectedProject, and the core detect, graph, history, and evidence functions, so you can build VerisKit into your own tooling.
Zero config
02- npx veriskit init
- Detects your stack, the package manager, TypeScript, Vitest, Jest, or node:test, ESLint or Biome, and Playwright, then writes
.veris/config.json. Detection is read-only and never overwrites an existing config. - Nothing new to learn
- VerisKit runs the tools you already have and reads their real output. No new test framework, no new assertions, no rewrite of your suite.
The verdict
04- One honest verdict
veris verifyruns every configured check in parallel and returns verified, failed, or partial, with exit codes 0, 1, and 2 so a pull request or CI job reads the result correctly.- Three states, not two
- verified means every check ran and passed, failed means at least one failed, and partial means a check was skipped or its result is unknown. A partial is never a pass, and a skipped check is never folded into verified.
- A report for the pull request
veris reportwrites a Markdown summary of the run, the verdict, each check with its timing, and the git commit and tree state, so you paste the evidence into the PR instead of a screenshot.- veris verify --browser
- Runs your Playwright suite as part of the verdict, opt in so a normal
veris verifystays fast. If VerisKit cannot parse the results, it reports the check as unknown rather than claiming it passed.
Publish
03- veris verify --github
- Posts the verdict to the pull request as one sticky comment and a GitHub Check Run. Re-runs edit the same comment instead of adding another. Reads
GITHUB_TOKENfrom the environment and never stores it. - Publishing never moves the verdict
- A missing token or PR prints a notice, and the exit code still reflects the verdict. VerisKit reports a GitHub API error with GitHub's own message and leaves the result alone.
- veris badge
- Writes a shields.io endpoint JSON so a README badge shows the last verdict. GitHub API calls go over Node's built-in fetch, so publishing adds no dependency.
Developer loop
04- veris affected
- Runs only the checks, and only the test files, your changes actually reach, using an import graph built from the project's own TypeScript. Pass
--base <ref>for a PR or CI diff. - veris watch
- Re-runs the affected checks as files change, using native fs.watch with a
--pollfallback, so the verdict keeps up with your edits. - Conservative narrowing
- When it cannot prove a smaller set is safe, it runs the full suite. An affected test is never skipped, so a fast run is still an honest one.
- veris log
- Lists past runs newest first, each with its verdict, checks, and commit, read from the stored evidence records.
veris log --flakyflags checks that both passed and failed across recent runs.
Project intelligence
02- veris scan
- Maps the import graph from the project's own TypeScript, with a dependency-free scanner fallback, and surfaces the high-impact files with no tests behind them. Read-only, no code generation.
- veris plan
- Recommends what to test next from the scan: high-impact untested files, weak verification, risky changes. Analysis only, no code generation.
Evidence
04- Git-anchored evidence.json
- Every verify and affected run writes a canonical evidence.json (schema veriskit/evidence@1) with a sha256 integrity digest over the whole record and a sha256 of each check log.
- veris evidence
evidence verifyrecomputes and checks a record or bundle,evidence bundlepackages a run into one portable proof file, andevidence showprints the record's key facts.- Signed evidence
evidence keygencreates an Ed25519 keypair,evidence signwrites a detached signature over the record's integrity digest, andevidence verifychecks a sibling signature on its own. Node's built-in crypto, so no new dependency.- Honest about what it proves
- A digest detects edits and corruption. A signature proves a key vouched for the record, not who holds the key, unless you assert the expected signer with
--pubkeyor--key-id. Keyless signing is still planned.
Trust
02- Two dependencies
- The
veriskitCLI ships with exactly cac and picocolors. Everything else is Node built-ins, so it installs light and stays auditable. The MCP SDK lives only in the separateveriskit-mcppackage. - Local and quiet
- No cloud, no telemetry, no source upload, no account, and no LLM. VerisKit reads your tools' output and writes local files under
.veris/.
New in 0.6.0
Let the agent verify its own work.
Wire veriskit-mcp into an MCP-aware client and your coding agent runs the same checks you run, then reads back the same honest verdict as tool calls. It verifies its own change against your real tooling instead of reporting that the work is done. Seven tools, five of them read-only, and the verdict still comes from your tools' exit codes.
- Seven tools
veris_doctor,veris_scan,veris_plan,veris_log, andveris_evidence_verifyread only.veris_verifyandveris_affectedrun the project's own test tooling. Each returns a structured, honest verdict, so a partial still reads as a partial to the agent.- Wire it into a client
- Point any MCP-aware client at the package and the tools appear. Nothing to install first, and no key.
{ "mcpServers": { "veriskit": { "command": "npx", "args": ["-y", "veriskit-mcp"] } } } - The CLI stays light
veriskitkeeps its two runtime dependencies. The official MCP SDK lives only in the separateveriskit-mcppackage, so wiring up an agent never grows the CLI you install in CI.- Also a library
- 0.6.0 exposes a programmatic API:
verifyProject,affectedProject, and the core detect, graph, history, and evidence functions, for building the verdict into your own tooling. - Where it sits in the family
- AgentLoopKit decides what the agent should do next and AgentFlight records what it did. VerisKit answers whether you can trust the result, and now the agent can ask it directly rather than wait for a human to run the suite.
Publish
Put the verdict where reviewers look.
Pass --github and VerisKit posts the verdict to the pull request itself, as one sticky comment and a Check Run, where the reviewer already is rather than in your terminal. Publishing is a side channel: it reports the verdict and never changes it.
- veris verify --github
- Posts and updates one sticky PR comment carrying the verdict and report, and creates a GitHub Check Run whose conclusion follows the verdict: verified passes, failed fails, partial is neutral. Re-runs edit the same comment, so a busy PR gets no comment spam.
- Your token, your environment
- VerisKit reads
GITHUB_TOKENfrom the environment and never stores it. The workflow needspull-requests: writeandchecks: write. Since 0.5.1 a failed publish carries GitHub's own message, for example "Resource not accessible by integration" when those permissions are missing, and the token never appears in an error. - It cannot rescue a bad run
- A missing token or a run outside a PR prints a notice, and the exit code still reflects the verdict. VerisKit reports a GitHub API error and then ignores it. A publish can fail without turning a failed run green.
- veris badge
- Writes a shields.io endpoint JSON so a README badge shows the last verdict. The GitHub API calls go over Node's built-in fetch, so none of this adds a dependency.
Evidence
An evidence trail you can recompute, and sign.
Every verify and affected run writes a canonical, git-anchored evidence.json, and the evidence command recomputes it, bundles it, prints it, or signs it. The verdict stays honest, and now it carries a digest and, if you want, a signature.
- Git-anchored evidence.json
- Each run writes
.veris/runs/<id>/evidence.json(schema veriskit/evidence@1) with a sha256 integrity digest over the whole record and a sha256 of each per-check log. It replaces the older metadata.json, and no new runtime dependency comes with it. - veris evidence verify, bundle, show
evidence verify <file>recomputes and checks a record or bundle,evidence bundlepackages the latest run (record, report, and logs, each digested) into one portable proof file under.veris/evidence/, andevidence showprints the record's key facts.- Signing, since 0.4.1
evidence keygencreates an Ed25519 keypair with Node's built-in crypto, andevidence sign <evidence.json>writes a detached signature over the record's integrity digest.evidence verifypicks up a sibling signature on its own, and bundles carry it. Signing is opt-in, unsigned evidence still verifies for integrity, andVERISKIT_SIGNING_KEYsupplies the key in CI.- What it proves, and what it does not
- A digest detects later edits and corruption. A signature proves that a key vouched for the record, not who holds that key, unless you assert the expected signer with
--pubkeyor--key-id. VerisKit says so plainly rather than overselling the proof. Keyless signing through sigstore is still planned. - Commit and tree state, on the record
- The report and terminal show the git commit and whether the working tree was clean, and the report carries the evidence digest, so a verdict is tied to an exact point in history.
The verdict
One honest verdict, three states.
A green wall of checkmarks does not tell you whether a change is safe. veris verify runs the configured checks in parallel, reads their real exit codes and output, and returns one verdict. There are three states, not two, and a partial is never a pass.
- verified (exit 0)
- Every configured check ran and passed. This is the only state that means the change cleared the bar you set.
- failed (exit 1)
- At least one check failed. VerisKit shows which one and preserves its output, so you fix the cause rather than hunt for it.
- partial (exit 2, or 0 with --partial-ok)
- No check failed, but one was skipped or its result is unknown. A partial verdict is not a pass. VerisKit never folds a skipped check into verified, and
--partial-oklets you accept a partial on purpose, in the open. - A report you can paste
veris reportwrites a Markdown summary, the verdict, each check with timing, and the git commit and tree state, so the evidence goes straight into the pull request.- Browser tests, when you ask
veris verify --browserruns your Playwright suite and folds it into the same verdict (abrowserentry in.veris/config.jsondoes the same). It is opt-in, so a normal verify stays fast, andveris doctorlists browser as an available capability once it detects Playwright. If VerisKit cannot parse the results, it reports the check as unknown rather than claiming it passed.
Developer loop
Re-run only what your change reached.
A full suite on every keystroke is slow enough to skip. VerisKit narrows the run to the checks and test files your changes actually reach, built from an import graph, and keeps it honest with a conservative fallback.
- veris affected
- Runs only the checks, and only the test files, reached by your changes, using an import graph from the project's own TypeScript. Pass
--base <ref>to scope it to a PR or CI diff. - veris watch
- Re-runs the affected checks as files change, with native fs.watch and a
--pollfallback for editors and filesystems that need it. - Never a false-fast run
- Narrowing is conservative: when VerisKit cannot prove a smaller set is safe, it runs the full suite. An affected test is never skipped, and affected or watch never report a bare Verified.
- veris log
- Every run leaves an evidence record, so VerisKit can show the trend.
veris loglists past runs newest first with the verdict, checks, and commit, andveris log --flakynames the checks that both passed and failed across recent runs. History is local to the machine:.veris/runsis gitignored.
Project intelligence
Find the untested code that matters.
Coverage percentages hide the risk. VerisKit maps how the code connects, then points at the high-impact files with no tests behind them. It reads and recommends; it never writes code.
- veris scan
- Maps the import graph from the project's own TypeScript, with a dependency-free scanner fallback, writes
.veris/graph.json, and surfaces untested high-impact files. - veris plan
- Turns the scan into prioritized recommendations: high-impact untested files, weak verification, and risky changes. Analysis only, no code generation.
Trust
Local, light, and honest.
VerisKit runs the checks you already run and writes local files. Nothing uploads, nothing phones home, and the dependency list is short enough to read.
- Two dependencies
- The
veriskitCLI ships with exactly cac and picocolors. Everything else is Node built-ins, including the crypto behind evidence signing and the fetch behind GitHub publishing, so it installs light and stays auditable. The MCP SDK lives only inveriskit-mcp. - Nothing leaves the machine, unless you ask
- No cloud, no telemetry, no source upload, no account, and no LLM calls. VerisKit reads your tools' output and writes under
.veris/. The one outbound path is--github, which you opt into, which talks only to the GitHub API, and which posts the verdict and report you already have. - What it does not do yet
- No framework route or endpoint detection, no test generation, one project root (monorepos are not modeled yet), a scanner fallback on plain-JS or TS 7.x-native projects, and no keyless signing. VerisKit names its edges rather than hiding them.
Prove it works, then paste the proof.
Install once, verify the change, post the verdict to the pull request, then narrow to only what you touched. npx veriskit init detects your stack, veris verify returns one honest verdict, veris verify --github puts it on the PR as a sticky comment and a Check Run, veris affected keeps later runs fast, and veris log --flaky names the checks you cannot trust. Wire veriskit-mcp into your agent and it verifies its own work. Local-first, MIT, no cloud.
Detect the stack
Prove the change
Post the verdict to the PR
Narrow to your change
Find the flaky checks
Let an agent verify it
More from the studio
ProjScan
ProjScan tells reviewers when to bootstrap, prove, or stop. Review Gate returns one decision; bootstrap is explicit. Local proof, no code upload.
ViewAgentLoopKit
The local control plane for low-token, verifiable agent loops. It owns scope, gates, and completion decisions, with a token receipt on every step.
ViewAgentFlight
agentflight guard watches local trust while your coding agent works; agentflight finish writes the Review Passport that proves the result.
View