Done means checked.
Visp Code is a harness for your coding agent. It works one slice at a time inside an authorized file scope, runs the checks each slice declares, and has an independent reviewer judge the result against your original request.
npm install -g visp-coder@beta
agentThe retry button is in, and the tests pass. Done.
- C001node --test test/save.test.mjspassed
- C002browser journey · 390×844 · 2 capturespassed
- Criticread-only · sees the request, source, results and screenshots, not the claimreviewed
- F001A second failed save leaves the retry button disabled.required
- nextreopen T001 · repair F001 · rerun C002
Start from the real request.
Visp Code keeps the request verbatim. Under Claude Code and Codex it reads it from your recorded prompt, so the agent’s paraphrase can’t replace it. With the Codex reviewer configured, an independent tester starts writing acceptance tests from the request alone.
Authorize one slice.
A slice needs an outcome, a bounded write scope and a runnable check. Without a check, work stops and hands back a patch that adds one. Small changes take the light path: the whole request as one slice, checked by your tests.
Build inside the scope.
The agent edits only the slice’s files. Host hooks refuse out-of-scope writes, a Git pre-commit hook checks every commit, and an optional CI job checks the pull request against the committed brief.
Run what was declared.
Visp Code runs the slice’s checks itself: commands without a shell, and browser journeys in an isolated Chrome with screenshots. A blocked sandbox is an environment failure, not a product failure.
Review it independently.
When every check passes, a separate read-only reviewer judges the work against the verbatim request. It sees source, results and screenshots, never the agent’s verdicts. Required findings reopen the slice and go back as the next repair.
Check the assembled product.
Acceptance reruns every check against the whole product, including the pinned independent tests, and needs a current assessment of every mandatory outcome. Passing commands alone don’t satisfy it.
Hand a person the evidence.
The loop always ends: in acceptance, or, once the review budget is spent, in a handoff. Either way the reviewer document collects the request, outcomes, executed results, findings and every intent change.
The reviewer sees
- Your original request, verbatim
- The brief’s outcomes
- The current source
- Check results and screenshots
It never sees
- The agent’s verdicts
- Earlier approvals
- The workflow history
- Checks
visp workwon’t authorize a slice until a runnable check exercises it. Commands run without a shell; browser journeys run in an isolated Chrome with screenshots.- Scope
- Edits stay inside the slice’s files. Host hooks, a Git
pre-commitcheck and an optional CI job all callvisp guard. - Tests
- On new projects, an independent tester writes acceptance tests from the request alone. They are pinned only if they fail before the work starts.
- Hand-off
visp prprints the request, outcomes, executed results, findings and every intent change for the person who reviews the pull request.- Hosts
- Claude Code, Codex, Cursor, Copilot, OpenCode, or any MCP client. Claude Code and Codex get the fullest hooks. Release 0.5 is a beta.
Get started
From install to a checked change.
Node.js 22.16 or newer, inside a Git repository. Swap claude-code for codex, cursor, copilot, opencode or generic.
-
1
Install the CLI.
One package, three executables:
visp,visp-migrateand the optionalvisp-runner.npm install -g visp-coder@beta -
2
Set up your coding host.
initwritesvisp.ymland.visp/.installadds the host’s instructions, MCP registration and hooks. Commit the setup before feature work.visp init --harness claude-code visp install --harness claude-code visp doctor -
3
Start a feature.
From here your agent runs the loop itself. The installed hooks send it back when it stops early.
visp feature "Add a retry button to the failed-save banner" visp work --check "npm test"
Results
Measured, with limits.
Hidden checks passed on Visp Code’s own benchmark, with Claude Haiku 4.5 as the coding agent. Each dot is one run.
Visp Code Other workflows · dashed line: every check passed
Show as a table, with wall time
| Task (hidden checks) | Visp Code | Bare | Spec Kit | BMAD |
|---|---|---|---|---|
| Reservations API (44) | 44, 44, 44 · 8–10 min | 38, 39, 40 · 2–4 min | 39, 40, 37 · 10–13 min | 38, 38, 39 · 3–6 min |
| Spreadsheet engine (38) | 36, 35, 37 · 10–16 min | 28, 32, 26 · 5–8 min | 28, 28, 27 · 12–15 min | 33, 32, 35 · 3–22 min |
| Bundles on an existing service (60) | 60, 60, 60 · 5–9 min | 60, 60, 60 · 2–3 min | 60, 59, 59 · 8–11 min | 60, 60, 60 · 3–5 min |
| Extending an existing engine (63) | 57, 62, 63 · 14–16 min | 51, 53, 53 · 9–11 min | 56, 59, 41 · 11–13 min | 56, 51, 50 · 7–13 min |
Visp Code matched or beat every other arm on every task and took about as long as Spec Kit, longer than bare coding. The runs are few, the tasks are Visp Code’s own, and the reviewer was a stronger model than the worker. With a strong coding agent the differences were within noise, including on SWE-bench Verified Mini in October. Every number and its limits.
Keep going
Next in the lab · 04
Visp DB Access
A self-hosted gateway that checks, limits, masks and audits every statement before it reaches production.
Explore