Drive a real browser with plain English via Alethia — the patent-pending zero-IPC agent-driven testing runtime. Use when the user asks to smoke-test a local app, run an accessibility (WCAG) or security (NIST SP 800-53) audit, prove the EA1 safety gate works, bootstrap test coverage on an unknown page, run parallel multi-page checks, or export a cryptographically signed evidence pack. Requires the @vitronai/alethia MCP server to be configured. Trigger patterns include "test this page," "verify the login flow," "audit accessibility," "compliance audit," "run WCAG/NIST," "check that deletes are blocked," and similar.
76
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Alethia is built for AI agents, not human test authors. You drive it in plain English. You almost never need to write a selector — say "click Submit" and Alethia finds the right button. Say "verify the dashboard is visible" and it checks. Say "type admin@example.com into the email field" and it types.
The runtime is local-only: it refuses to navigate to anything outside file://, localhost, 127.0.0.1, .local, or RFC1918 ranges. Destructive actions (delete, purchase, transfer, submit, liquidate, purge) are blocked by default under the VITRON-EA1 policy gate — not a safety feature you can turn off, a compile-time constant.
alethia_* tools aren't available yetBefore trying to use any tool in this skill, confirm it's actually available. If alethia_tell and friends are missing from your tool list, the user hasn't finished installing Alethia. Don't guess, don't hallucinate results — walk them through setup first.
Tell the user, verbatim:
Alethia isn't set up in this Claude Code session yet. Two steps to install:
1. Install the bridge (one-time):
npm install -g @vitronai/alethia2. Add to your MCP config at
~/.claude/mcp.json(create the file if it doesn't exist):{ "mcpServers": { "alethia": { "command": "alethia-mcp" } } }Then restart Claude Code. The signed headless runtime downloads automatically on first use (~100 MB, Ed25519-verified from GitHub Releases). No signup, no telemetry.
After the user confirms they've completed those steps and restarted, the alethia_* tools will be in your next session's tool list. Retry the user's original request then.
If the user says their MCP client logs show "Server transport closed unexpectedly" or the Alethia bridge appears to start and then immediately exit: they're almost certainly running a stale cached version. Tell them:
# If your client config uses `npx -y @vitronai/alethia`, clear the npx cache:
rm -rf ~/.npm/_npx
# If you installed globally, upgrade:
npm install -g @vitronai/alethia@latestThen fully quit and relaunch the MCP client (Cmd-Q on macOS). The "Server transport closed unexpectedly" symptom was fixed in bridge 0.6.1; any modern install will not hit it unless something is cached old.
alethia_tell with navigate + assertsalethia_audit_wcagalethia_audit_nistalethia_propose_testsalethia_assert_safetyalethia_tell_parallelalethia_export_sessionalethia_screenshotalethia_show_cockpitThe compiler maps plain English to action IR. Speak to it like a human tester:
navigate to http://localhost:3000
assert Dashboard is visible
click Sign In
type admin@example.com into the email field
type hunter2 into the password field
click Log in
assert Welcome back! is visible
wait 200 millisecondsEach line becomes one step. The :text(...) resolver finds elements by textContent, aria-label, placeholder, or input value — with tight-match ranking that prefers interactive elements and smaller own-text over wrapper containers.
expect block: primitive — unique to AlethiaFor destructive actions, do NOT bypass the gate. Assert that the gate correctly refuses the action:
navigate to http://localhost:3000/admin
expect block: click Delete All Users
expect block: click Purge Audit Log
expect block: click Transfer FundsEach step passes if the gate blocked the action (reason code DENY_WRITE_HIGH) and fails if the action went through. This is how you prove safety — not by avoiding destructive controls, but by exercising them and confirming the gate holds.
alethia_tell({ instructions: "navigate to http://localhost:3000\nassert the page is visible" })1. alethia_propose_tests({ url }) → returns candidate NAMED test blocks.
Each block is a cohesive multi-step
flow (page-structure verification,
safe-button interactions, EA1 safety
gate verification, table content
verification, etc.). The safety-gate
block has expect-block: lines for
every destructive action discovered.
2. For EACH block, call alethia_tell({ instructions: <that block's NLP> }).Run blocks one-at-a-time, not merged. Each block becomes its own signed PlanRun with its own integrity hash and history entry, the cockpit UI paints them as discrete runs for anyone watching live, and one block's failure doesn't sink the others. Merging is only OK for quick scratch testing where you don't care about the audit boundary.
1. alethia_tell({ instructions: "navigate to <url>" })
2. alethia_audit_wcag() → axe-core accessibility audit
3. alethia_audit_nist() → 8 NIST SP 800-53 controls
4. alethia_export_session() → signed JSON evidence pack, SHA-256 hashedalethia_assert_safety({ url }) → walks every destructive control on the
page, attempts each, reports per-action
block/allow status. Any blocked:false
row is a safety regression.1. alethia_show_cockpit() → pop the oversight window
2. alethia_serve_demo() → start the bundled demo server
3. alethia_tell({ instructions: "navigate to <demo_url>\n..." })
4. alethia_export_session()aria-label. The :text() path can't find them. Use alethia_eval for a last-resort CSS selector.On any alethia_tell failure, the response includes:
nearMatches — elements on the page whose text resembles the targetsuggestedFix — corrected NLP you can re-runpageContext — buttons, headings, inputs currently on the pageRead these before retrying. Most failures are phrasing mismatches, not real bugs — the suggested fix usually works.
During active frontend development, alethia_eval is more reliable than screenshots for catching bugs in real time. Screenshots can serve a cached frame; eval always returns live values from the current DOM.
The pattern: write code → navigate → eval the DOM → get exact values → correct → repeat.
// Did the CSS actually apply?
alethia_eval({ expression: "getComputedStyle(document.querySelector('.hero-title')).fontSize" })
// → "32px"
// Is the layout correct?
alethia_eval({ expression: "getComputedStyle(document.querySelector('.sidebar')).justifyContent" })
// → "flex-start"
// How wide is the element actually rendering?
alethia_eval({ expression: "document.querySelector('.card').offsetWidth" })
// → 320
// Count elements to verify a list rendered
alethia_eval({ expression: "document.querySelectorAll('.product-card').length" })
// → 6Use eval for ground truth (computed values, layout dimensions, element counts, React state). Use alethia_screenshot for visual verification (does it look right, are things positioned correctly on screen). When a CSS bug is suspected, reach for eval first — it returns exact values in milliseconds without any caching ambiguity.
alethia_eval({ expression }) — raw JavaScript in the page context. Runs in the target page, not the host. See "Dev feedback loop" above for the primary use case; also useful for triggering React's native input setter when NLP typing doesn't fire onChange.alethia_screenshot() — PNG of the current page, for visual verification.alethia_activate_kill_switch / alethia_reset_kill_switch — emergency halt and resume. Blocks all tool calls until reset.alethia_export_session, which produces a signed artifact you save yourself.Always call alethia_export_session(). Returns:
Tell the user the returned hash so they can record it alongside the artifact.
0ada961
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.