The first testing framework built for AI-driven development. Write tests in YAML. Get structured output with actual/expected values and hints. Let your AI fix the code autonomously.
"player starts with correct health":
confidence: 0.95
when:
- "player = createPlayer(100, 100)"
then:
- "expect: player.health == 100"
"critical hit doubles damage":
confidence: 0.99
when:
- "damage = applyCritical(15, true)"
then:
- "expect: damage == 30"summary:
total: 1
passed: 0
failed: 1
tests:
- name: player starts with health
status: fail
actual: 50
expected: 100
failed_step: then
hints:
- The equality check failed
confidence_note: Very high confidenceAI writes code 10x faster—but without tests, you're debugging 10x more code. Tests aren't just verification. They're the feedback loop that tells AI what failed and how to fix it.
Traditional test output is designed for humans. Stack traces, diff formatting, ANSI colors—your AI has to guess what went wrong.
Structured YAML output with actual/expected values, failure location, and pattern-matched hints. AI parses it instantly.
Write tests. Run. AI reads failures. AI fixes code. Repeat. No human debugging. Just results.
Every feature designed to make AI-assisted development faster, smoother, and more autonomous.
Simple, readable syntax that LLMs write correctly on the first try. No boilerplate.
Default structured output with actual/expected values. Token-efficient, instantly parseable.
Pattern-matched suggestions for common errors. Zero LLM API cost—just smart pattern matching.
Express uncertainty (0.0-1.0). High confidence failures = bug in code. Low = check the test.
Auto-rerun on file changes. Instant feedback loop for rapid TDD iteration.
Full TypeScript support. Call your functions directly. Works with ES modules and CommonJS.
Traditional testing vs AI-native testing. Same test. Completely different output.
describe('Player', () => {
it('should start with correct health', () => {
const player = createPlayer(100, 100);
expect(player.health).toBe(100);
});
it('should double damage on critical', () => {
const damage = applyCritical(15, true);
expect(damage).toBe(30);
});
});FAIL src/player.test.js
✕ should start with health (5 ms)
expect(received).toBe(expected)
Expected: 100
Received: undefined
14 | const player = createPlayer(100, 100);
15 | expect(player.health).toBe(100);
| ^
at Object.<anonymous> (src/player.test.js:15:25)AI must: Parse unstructured text, extract test names from prose, figure out what line failed, guess at context
"player starts with correct health":
confidence: 0.95
when:
- "player = createPlayer(100, 100)"
then:
- "expect: player.health == 100"
"critical hit doubles damage":
confidence: 0.99
when:
- "damage = applyCritical(15, true)"
then:
- "expect: damage == 30"summary:
total: 1
passed: 0
failed: 1
tests:
- name: player starts with health
status: fail
actual: 50
expected: 100
failed_step: then
hints:
- The equality check failed
confidence_note: Very high confidenceAI gets: Structured YAML, actual/expected values, failure step, pattern-matched hints, confidence guidance
The complete test-driven development cycle. Your AI handles it all.
Claude Code reads the YAML output, sees actual: 50, expected: 100, and the hints. It fixes the code and reruns. You just watch the tests go green.
1# Install
2npm install -g vybtest
3
4# Run your first test
5vyb run tests/