Agent skill

Caliber Testing

by caliber-ai-org in caliber-ai-org/ai-setup

Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment…

MITAuto-check passedTesting & QA

Install Caliber Testing

skills CLI
$ npx skills add caliber-ai-org/ai-setup --skill caliber-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install caliber-ai-org/ai-setup caliber-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/caliber-ai-org/ai-setup.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/caliber-testing .claude/skills/caliber-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
caliber-testing
GitHub stars
1.3k
Token cost
~3.2k tokens
SKILL.md length
995 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment…

  • Works in 9 steps: Create the test file in the correct… → Import test framework → Set up module mocking (if needed) → …
  • User says write tests
  • SKILL.md covers Critical, Instructions, Examples and Common Issues
  • Calls pnpm; needs ANTHROPIC_API_KEY and OPENAI_API_KEY

What it does

Caliber Testing is an agent skill from caliber-ai-org/ai-setup. Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment variable save/restore in beforeEach/afterEach, vi.clearAllMocks() lifecycle, and test file organization. Use when user says 'write tests', 'add test coverage', 'test this', creates .test.ts files, or when test failures appear in CI. Do NOT use for non-test code or for debugging without writing tests.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Unit testing, Secrets management and Test coverage. It works with Vitest. The repository describes itself as: Continuously sync your AI setups with one command. Codebase tailor suited agent skills, MCPs and config files for Claude Code, Cursor, and Codex. The licence is MIT.

When your agent uses it

  • User says write tests
  • Add test coverage
  • Creates .test.ts files
  • Test failures appear in CI

Example prompts

  • “write tests”
  • “add test coverage”
  • “test this”
  • “/caliber-testing”

Requirements

  • A credential in ANTHROPIC_API_KEY
  • A credential in OPENAI_API_KEY

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Create the test file in the correct directory
  2. Import test framework
  3. Set up module mocking (if needed)
  4. Organize tests in describe blocks
  5. Manage environment and process state
  6. Manage temporary files and directories
  7. Handle mock state cleanup
  8. Test assertions
  9. Run tests

What it can do on your machine

Read from SKILL.md and the folder at commit f5dbc00. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ANTHROPIC_API_KEY
    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Caliber Testing loads about 3.2k tokens when it runs. Until then it costs about 129 tokens; SKILL.md has 995 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~129
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from caliber-ai-org/ai-setup at commit f5dbc00, republished under its MIT licence (© caliber-ai-org). 995 words, ~3,236 tokens.

Download SKILL.mdSave it as .claude/skills/caliber-testing/SKILL.md (or your agent's skills folder).
name
caliber-testing
description
Writes Vitest tests following project patterns: __tests__/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment variable save/restore in beforeEach/afterEach, vi.clearAllMocks() lifecycle, and test file organization. Use when user says 'write tests', 'add test coverage', 'test this', creates *.test.ts files, or when test failures appear in CI. Do NOT use for non-test code or for debugging without writing tests.
paths
- src/**/__tests__/*.test.ts

Caliber Testing

Critical

  • All test files MUST be placed in __tests__/ directories parallel to source files: src/[module]/__tests__/[module].test.ts
  • Register any new __tests__/ directories in vitest.config.ts's include glob (already configured: src/**/*.test.ts)
  • NEVER mock src/test/setup.ts — it is the global LLM provider mock already applied to all tests
  • Environment variable tests MUST save process.env in beforeEach, restore in afterEach, and explicitly delete env vars to test absence
  • Temporary file/directory cleanup MUST happen in afterEach, not in individual test cleanup. Use fs.rmSync(dir, { recursive: true, force: true })
  • When a test requires unmocking modules mocked in global setup, call vi.unmock('../module.js') BEFORE the import statement
  • Run pnpm test locally and pnpm test:coverage before committing to verify coverage thresholds (lines: 50, functions: 50, branches: 50, statements: 50)

Instructions

Step 1: Create the test file in the correct directory

Create src/[module]/__tests__/[module].test.ts. The parent source file is src/[module]/[module].ts.

Verify: The __tests__ directory exists at the same level as the source file being tested.

Step 2: Import test framework

At the top of every test file, import from vitest:

typescript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';

Add additional imports based on what you're testing:

  • File system: import fs from 'fs'; import path from 'path'; import os from 'os';
  • Temporary files: Use fs.mkdtempSync(path.join(os.tmpdir(), 'caliber-prefix-'))
  • Exec: import { execSync } from 'child_process';

Verify: All required test utilities are imported before test definitions.

Step 3: Set up module mocking (if needed)

If testing a module that imports other modules you want to mock:

typescript
vi.mock('../config.js', () => ({
  loadConfig: vi.fn(),
  writeConfigFile: vi.fn(),
}));

For complex mocks with test-time factory functions (hoisted):

typescript
const { mockLoadConfig } = vi.hoisted(() => ({
  mockLoadConfig: vi.fn(),
}));

vi.mock('../config.js', () => ({
  loadConfig: () => mockLoadConfig(),
}));

For unmocking global setup mocks (e.g., to test llm/index.js itself):

typescript
vi.unmock('../index.js');

Place all vi.mock() and vi.unmock() calls BEFORE importing the module under test.

Verify: Mock declarations appear before the import of the module being tested.

Step 4: Organize tests in describe blocks

Group related tests with describe():

typescript
describe('functionName', () => {
  it('returns X when Y', () => {
    // test body
  });
});

Verify: Each it() test has a clear, complete assertion.

Step 5: Manage environment and process state

For tests that modify process.env or process.argv:

typescript
describe('config tests', () => {
  const originalEnv = process.env;
  const originalArgv = process.argv;

  beforeEach(() => {
    process.env = { ...originalEnv }; // Copy, not reference
    process.argv = [...originalArgv];
    delete process.env.SPECIFIC_VAR; // Explicitly remove vars to test absence
  });

  afterEach(() => {
    process.env = originalEnv;
    process.argv = originalArgv;
  });

  it('tests env var behavior', () => {
    process.env.MY_VAR = 'test';
    // test code
  });
});

Verify: beforeEach creates a copy of env/argv; afterEach restores originals; unused env vars are explicitly deleted with delete process.env.VAR.

Step 6: Manage temporary files and directories

For file system tests, create temporary directories and clean them up:

typescript
describe('file tree', () => {
  const dirs: string[] = [];
  
  afterEach(() => {
    for (const d of dirs) {
      try { fs.rmSync(d, { recursive: true, force: true }); } catch {}
    }
    dirs.length = 0;
  });

  it('processes files', () => {
    const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'caliber-test-'));
    dirs.push(tmp);
    // use tmp directory
  });
});

Verify: All temporary directories are pushed to a cleanup array and removed in afterEach.

Step 7: Handle mock state cleanup

Before each test, clear mock call history to avoid pollution between tests:

typescript
beforeEach(() => {
  vi.clearAllMocks(); // Reset all mock call counts and return values
});

afterEach(() => {
  vi.restoreAllMocks(); // Restore original implementations
  vi.resetModules(); // Reset cached module imports (if you reload modules)
});

Verify: beforeEach calls vi.clearAllMocks() for providers and afterEach calls vi.restoreAllMocks().

Step 8: Test assertions

Write assertions using expect(). Match the patterns from existing tests:

typescript
// Simple checks
expect(value).toBe(expected);
expect(array).toContain(item);
expect(fn).toThrow('error message');

// Instance checks
expect(obj).toBeInstanceOf(ClassName);

// Mock checks
expect(mockFn).toHaveBeenCalledTimes(1);
expect(mockFn).toHaveBeenCalledWith(arg);

// File system checks
expect(fs.existsSync(path)).toBe(true);

Verify: Each test has at least one assertion and uses appropriate expect() matchers.

Step 9: Run tests

Run tests locally before committing:

bash
pnpm test                # Run all tests in watch mode
pnpm test:coverage       # Check coverage thresholds
pnpm test -- src/my/path/__tests__/my.test.ts  # Run single test file

Verify: All tests pass and coverage thresholds are met (lines: 50%, functions: 50%, branches: 50%).

Examples

Example 1: Testing a module with environment variables (config.test.ts pattern)

User asks: "Write tests for my config loader that reads from env vars and a config file."

Actions taken:

  1. Create src/lib/__tests__/config.test.ts
  2. Import test framework and fs module
  3. Mock fs and os
  4. Save/restore process.env in beforeEach/afterEach
  5. Delete specific env vars to test absence
  6. Test each branch: env vars set, file exists, both, neither

Result:

typescript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import fs from 'fs';

vi.mock('fs');
vi.mock('os', () => ({ default: { homedir: () => '/home/user' } }));

import { loadConfig } from '../config.js';

describe('config', () => {
  const originalEnv = process.env;

  beforeEach(() => {
    vi.clearAllMocks();
    process.env = { ...originalEnv };
    delete process.env.ANTHROPIC_API_KEY;
    delete process.env.OPENAI_API_KEY;
  });

  afterEach(() => {
    process.env = originalEnv;
  });

  it('returns env config when ANTHROPIC_API_KEY is set', () => {
    process.env.ANTHROPIC_API_KEY = 'sk-ant-test';
    const config = loadConfig();
    expect(config?.provider).toBe('anthropic');
  });

  it('returns null when no env vars set', () => {
    expect(loadConfig()).toBeNull();
  });
});
Example 2: Testing file system operations with temp cleanup (file-tree.test.ts pattern)

User asks: "Write tests for file tree analysis."

Actions taken:

  1. Create src/fingerprint/__tests__/file-tree.test.ts
  2. Set up a cleanup array for temp directories
  3. Create temp dirs in each test and push to cleanup array
  4. Clean up all temp dirs in afterEach
  5. Test with various file mtimes and directory structures

Result:

typescript
import { describe, it, expect, afterEach } from 'vitest';
import fs from 'fs';
import path from 'path';
import os from 'os';
import { getFileTree } from '../file-tree.js';

const dirs: string[] = [];
afterEach(() => {
  for (const d of dirs) {
    try { fs.rmSync(d, { recursive: true, force: true }); } catch {}
  }
  dirs.length = 0;
});

describe('getFileTree', () => {
  it('returns files sorted by mtime descending', () => {
    const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'caliber-ft-'));
    dirs.push(tmp);

    fs.writeFileSync(path.join(tmp, 'a.ts'), 'a');
    fs.writeFileSync(path.join(tmp, 'b.ts'), 'b');
    const tree = getFileTree(tmp);
    expect(tree).toHaveLength(2);
  });
});
Show full SKILL.md (426 more words)Show less
Example 3: Testing with module mocking and factory functions (index.test.ts pattern)

User asks: "Write tests for the provider factory that instantiates different providers based on config."

Actions taken:

  1. Create src/llm/__tests__/index.test.ts
  2. Use vi.unmock('../index.js') to test the real module
  3. Create mock classes in vi.hoisted()
  4. Mock dependencies (config, provider classes)
  5. Test provider selection logic
  6. Use resetProvider() between tests to clear cached instances

Result:

typescript
import { describe, it, expect, vi, beforeEach } from 'vitest';

vi.unmock('../index.js');

const { mockLoadConfig, MockAnthropicProvider } = vi.hoisted(() => {
  class MockAnthropicProvider {
    config: unknown;
    call = vi.fn();
    constructor(c: unknown) { this.config = c; }
  }
  return {
    mockLoadConfig: vi.fn(),
    MockAnthropicProvider,
  };
});

vi.mock('../config.js', () => ({
  loadConfig: () => mockLoadConfig(),
}));

vi.mock('../anthropic.js', () => ({
  AnthropicProvider: MockAnthropicProvider,
}));

import { getProvider, resetProvider } from '../index.js';

describe('getProvider', () => {
  beforeEach(() => {
    vi.clearAllMocks();
    resetProvider();
  });

  it('creates AnthropicProvider for anthropic config', () => {
    mockLoadConfig.mockReturnValue({
      provider: 'anthropic',
      model: 'claude-sonnet-4-6',
      apiKey: 'sk-test',
    });
    const provider = getProvider();
    expect(provider).toBeInstanceOf(MockAnthropicProvider);
  });
});

Common Issues

"Cannot find module" when running tests

  • Cause: vi.mock() called after the import statement
  • Fix: Move all vi.mock() and vi.unmock() calls to the TOP of the file, before any import statements

Environment variable persists across tests

  • Cause: beforeEach assigns by reference instead of copying: process.env = originalEnv
  • Fix: Create a copy in beforeEach: process.env = { ...originalEnv }; delete process.env.VAR

Temporary files not cleaned up, filling disk

  • Cause: afterEach not called or temp paths not tracked
  • Fix: Use centralized cleanup array: dirs: string[] = [] pushed to in tests, cleaned in afterEach with fs.rmSync(..., { recursive: true, force: true })

Mock return value from previous test bleeds into next test

  • Cause: vi.clearAllMocks() not called in beforeEach
  • Fix: Add vi.clearAllMocks() as first statement in beforeEach

"vi.mocked() is not a function" when accessing mock calls

  • Cause: Trying to use vi.mocked() on a non-mocked module
  • Fix: Ensure the module is mocked with vi.mock() before importing, then cast: const mockFn = vi.mocked(importedFn)

Test passes locally but fails in CI

  • Cause: Tests rely on real file system or network (not mocked)
  • Fix: Check if temp files are being created in real directories instead of mocked ones. Verify all external calls use vi.mock() for fs/http/exec

Coverage threshold failures: "lines not covered", "statements not covered"

  • Cause: Branches or error paths not tested
  • Fix: Run pnpm test:coverage locally to see untested lines. Add it() tests for error cases, edge conditions, and branches that return different values
  • Example: If if (x) return 'a'; else return 'b'; has 0% branch coverage, add tests: one with x=true, one with x=false

"expected 1 error but got 0" when testing error throws

  • Cause: Error not actually thrown, or thrown asynchronously
  • Fix: For sync functions: expect(() => fn()).toThrow('message'). For async: expect(async () => { await fn() }).rejects.toThrow('message') or use await expect(promise).rejects.toThrow()

Mock factory returns undefined

  • Cause: vi.hoisted() variables used before definition in the same block
  • Fix: Ensure vi.hoisted() block returns all factories, and vi.mock() blocks use them after the hoisted definition

Test flakes (sometimes passes, sometimes fails)

  • Cause: Timing issues or file system race conditions in cleanup
  • Fix: For file cleanup, use { force: true } in rmSync. For timing, avoid setTimeout; use vi.useFakeTimers() and vi.runAllTimers() if needed. Check for leftover files from previous test runs in beforeEach

© caliber-ai-org, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/caliber-testing of caliber-ai-org/ai-setup.

Open the folder on GitHubat commit f5dbc00

Compare with similar skills

Caliber Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Caliber Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Caliber Testing this skillcaliber-ai-org/ai-setup1.3k—~3.2kAutomated safety check: PassMIT
LobeHub Testing Guidelobehub/lobehub83k—~1.6kAutomated safety check: PassCustom licence
TDD Guidealirezarezvani/claude-skills28k—~3.4kAutomated safety check: PassMIT
TDD GuideLeoYeAI/openclaw-master-skills2.2k—~1.4kAutomated safety check: PassMIT
Test Suite Curationpetrkindlmann/qa-skills168—~6.3kAutomated safety check: PassMIT
Qe Test Executionproffesor-for-testing/agentic-qe495—~1.2kAutomated safety check: PassMIT

Similar skills

  • LobeHub Testing Guide

    lobehub/lobehub

    Explains how to write and run Vitest tests in the LobeHub monorepo: single-file commands, mocking rules, database model tests and regression tests for fixes.

    83k GitHub stars~1.6k tokensUpdated today
    Testing & QAAuto-check passed
  • TDD Guide

    alirezarezvani/claude-skills

    Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…

    28k GitHub stars~3.4k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • TDD Guide

    LeoYeAI/openclaw-master-skills

    Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…

    2.2k GitHub stars~1.4k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • Test Suite Curation

    petrkindlmann/qa-skills

    Audit a whole regression suite and prune/restructure it with evidence: per-test coverage fingerprinting, AST near-duplicate clustering, CI-history mining for never-failing and flaky tests, prune…

    168 GitHub stars~6.3k tokensUpdated 4 mo ago
    Testing & QAAuto-check passed
  • Qe Test Execution

    proffesor-for-testing/agentic-qe

    Orchestrates test suite execution with parallel sharding, intelligent retry, and real-time reporting across Jest, Vitest, and Playwright.

    495 GitHub stars~1.2k tokensUpdated 4 days ago
    Testing & QAAuto-check passed
  • Qe Test Generation

    proffesor-for-testing/agentic-qe

    Generates durable-first tests — invariants, contracts, and property-based tests at boundaries that survive a reimplementation — plus unit, integration, and e2e coverage.

    495 GitHub stars~1.9k tokensUpdated 4 days ago
    Testing & QAAuto-check passed

More from caliber-ai-org/ai-setup

All 8 skills in this repo
  • Adding A Command

    caliber-ai-org/ai-setup

    Creates a new CLI command following the Commander.js pattern in src/commands/.

    1.3k GitHub stars~2k tokensUpdated 15 days ago
    Auto-check passed
  • Find Skills

    caliber-ai-org/ai-setup

    Discovers and installs community skills from the public registry.

    1.3k GitHub stars~593 tokensUpdated 15 days ago
    Auto-check passed
  • LLM Provider

    caliber-ai-org/ai-setup

    Adds a new LLM provider implementing LLMProvider interface with call() and stream() methods.

    1.3k GitHub stars~2.7k tokensUpdated 15 days ago
    Auto-check passed
  • Save Learning

    caliber-ai-org/ai-setup

    Saves user instructions as persistent learnings for future sessions.

    1.3k GitHub stars~626 tokensUpdated 15 days ago
    Auto-check passed
  • Scoring Checks

    caliber-ai-org/ai-setup

    Add a new deterministic scoring check in src/scoring/checks/ that evaluates config quality.

    1.3k GitHub stars~3k tokensUpdated 15 days ago
    Auto-check passed
  • Setup Caliber

    caliber-ai-org/ai-setup

    Sets up Caliber for automatic AI agent context sync. An agent skill from caliber-ai-org/ai-setup.

    1.3k GitHub stars~1.9k tokensUpdated 15 days ago
    Auto-check passed

Works with

Categories

Questions about Caliber Testing

What does Caliber Testing do?

Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment…. Caliber Testing is an agent skill from caliber-ai-org/ai-setup.clearAllMocks() lifecycle, and test file organization.

When should I use Caliber Testing?

Caliber Testing fits situations like: user says write tests; add test coverage; creates .test.ts files; test failures appear in CI.

How do I install Caliber Testing in Claude Code?

Run `npx skills add caliber-ai-org/ai-setup --skill caliber-testing -a claude-code`. Or copy the skill folder (skills/caliber-testing in caliber-ai-org/ai-setup) into .claude/skills/caliber-testing in your project. Claude Code loads it when a task matches its description.

How do I install Caliber Testing in Codex?

Run `npx skills add caliber-ai-org/ai-setup --skill caliber-testing -a codex`. Or copy the skill folder (skills/caliber-testing in caliber-ai-org/ai-setup) into .agents/skills/caliber-testing in your project. Codex loads it when a task matches its description.

Can I use Caliber Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add caliber-ai-org/ai-setup --skill caliber-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/caliber-testing, .gemini/skills/caliber-testing, .github/skills/caliber-testing and .opencode/skills/caliber-testing in your project.

What does Caliber Testing need to run?

Going by SKILL.md and its folder, Caliber Testing needs the command-line tools its instructions call (pnpm) and credentials named ANTHROPIC_API_KEY and OPENAI_API_KEY. Our summary lists: A credential in ANTHROPIC_API_KEY; A credential in OPENAI_API_KEY.

Does Caliber Testing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Caliber Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Caliber Testing use?

Caliber Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Caliber Testing use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Caliber Testing?

Skills that share tags, products or a category with Caliber Testing: LobeHub Testing Guide (lobehub/lobehub, 83k stars), TDD Guide (alirezarezvani/claude-skills, 28k stars), TDD Guide (LeoYeAI/openclaw-master-skills, 2.2k stars) and Test Suite Curation (petrkindlmann/qa-skills, 168 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Caliber Testing?

caliber-ai-org (a GitHub organization) maintains it in caliber-ai-org/ai-setup, which has 1,301 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on September 24, 2026.

Source: caliber-ai-org/ai-setup on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.