Claude Code plugin — browse guides

The Vera Claude Code plugin

Install the Vera plugin for Claude Code, what it is for and what it is not, its commands, and the confirmation rule it always follows.

Gives a coding agent the ability to verify UI work in a real browser, as a real logged-in user, and to keep the checks that turn out to be worth keeping.

Ships a skill (vera-testing), six commands, and the MCP server wiring.

Install

The plugin lives in this repo under integrations/claude-plugin, published through the marketplace manifest at .claude-plugin/marketplace.json.

/plugin marketplace add <owner>/<repo>
/plugin install vera

Then set the two variables the MCP server needs:

VariableValue
VERA_MCP_URLhttps://your-vera-host/api/mcp
VERA_TOKENa vera_… token from Settings → CI Tokens

Not using the plugin, or want the repo linked to a project as well? npx vera-agent init registers the same MCP server (and writes .vera/config.json + the instructions block) — see Getting started. You don't need both wirings: with the plugin installed, run init --no-mcp.

The token is a bearer credential scoped to one workspace. Mint a personal one so audit rows and usage counters name a human rather than collapsing into a shared actor.

What it is for — and what it is not

Vera is not a general browser-automation tool, and it is not trying to replace one. Reach for it when the thing you need is one of these:

  • Credentialed — runs as a captured auth role, so the logged-in app is testable and credentials never enter the agent's context.
  • Environment-scoped — a named environment binds base URL, variables and role together.
  • Persistent — every run leaves a row, artifacts, and a link a human can open.
  • Promotable — a throwaway check becomes durable coverage in one call.

If you just want to read a public page, a plain browser tool is lighter. The skill says so too.

Commands

CommandDoes
/vera:verify [what]Run a check of a change in a real browser and report the observation. Saves nothing unless asked.
/vera:cover [goal]Propose durable coverage — count first, agreement, then author.
/vera:fix [runId]Triage a red run. Decides test-wrong vs app-wrong, proposes, waits for a yes.
/vera:status [project]Read-only: what exists, what is red, what is flaky.
/vera:checkMap a diff to the tests and rules it touches, then offer the next action per finding. Read-only: it runs nothing.
/vera:repro <issueId|description>Turn a bug report into a failing regression test. Files the issue first when given a description.

The confirm rule

Reading and running a scenario are cheap and reversible, so the agent does them freely. Anything that writes is confirmed first — promoting a scenario, creating or editing a test, applying a repair, filing an issue. This is in the skill, not just in this doc, so it holds without being restated per session.

The reason is specific: apply_repair edits a durable test, and a wrong repair that makes a test green is worse than a red test, because it converts a known failure into a silent one.

"Scenario" and "journey" each mean two things

The skill leads with this, because an agent that guesses wrong here builds the wrong object and then reports success:

You sayIt meansWhat the agent reaches for
Run these steps once, nothing savedan ad-hoc scenariorun_scenario, then save_scenario_as_test only if you ask
Test A in one project, then test B in anothera chaincreate_chain / run_chain
One story, a different person at each stagean Actor Scenariocreate_scenario / run_actor_scenario
A named path through the app, for coveragea coverage-map journeycreate_journey — which never runs anything

The last row is the one that bites: a journey is a map entry, not an execution. Asking for "a journey that runs nightly" gets you a suite on a schedule instead.

Troubleshooting

401 on every tool. The reply carries a code, and two of the causes now name themselves rather than hiding behind a generic refusal:

CodeWhat happened
token_expiredThe token had an expiry and it has passed. Mint a new one.
token_owner_lostA personal token whose owner left the workspace or was disabled.
token_rejectedOne of three merged causes: Vera does not recognise the token, it was revoked, or the workspace's plan no longer includes API tokens at all.

The three behind token_rejected stay merged on purpose, so an attacker cannot use the error to probe which one applies. That is why "rotate the token" is not the automatic answer — check the plan too, especially on a workspace that was recently downgraded, where the token is still perfectly valid and simply no longer entitled. A token needs api-access (Pro) or mcp-basic (free tier) to exist at all; a fourth code, token_plan_inactive, is the narrower case where a token works on the MCP surface but not on the CI API, and it says so.

plan_required. The workspace is on cloud and has never picked a plan, so every product route refuses until it does. Nothing is wrong with the token.

scenario_cloud_only. This deployment executes tests on a queue worker, which cannot run an unsaved step list. Save the scenario as a test and run that, or point the environment at an enrolled vera-agent (runTarget: 'agent'), which runs the steps on your own machine and can reach localhost.

scenario_rate_limited / scenario_already_running / scenario_runs_disabled. Bounds, each naming itself and its limit. One scenario runs at a time per workspace, with an hourly cap an admin sets. Wait, or promote and run the test.

ai_key_required. Only generation and repair need the workspace's own AI key (Vera is BYOK). Inspecting, running, scenarios, promoting, failure details, issues, suites and chains all work without one.

Runs never finish. wait_for_run returns status: 'running' past its timeout rather than blocking forever. Call it again — do not loop instantly.

See also

  • docs/getting-started.md — linking a repo with npx vera-agent init, minting the token, and the loop these commands automate.
  • docs/mcp.md — the MCP surface itself: every tool, auth, and the permission set a token carries.
  • docs/local-agent.md — vera-agent, including vera-agent verify for running steps on your own machine against localhost.