Test Writing Workflow
iOfficeAI/AionUi
Sets the test-writing workflow for the repository: risk-first scenario lists, behavior-focused Vitest tests, a full run before each commit and a coverage target.
A skill your agent uses when the user asks about Vitest mocking, spies, stubs, fake timers, config, or test runner behavior.
$ npx skills add confluentinc/mcp-confluent --skill vitest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install confluentinc/mcp-confluent vitest --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/vitest .claude/skills/vitest && rm -rf skills-srcUse ~/.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/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .claude/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitestType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add confluentinc/mcp-confluent --skill vitest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install confluentinc/mcp-confluent vitest --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/vitest .agents/skills/vitest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .agents/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add confluentinc/mcp-confluent --skill vitest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install confluentinc/mcp-confluent vitest --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/vitest .cursor/skills/vitest && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .cursor/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/confluentinc/mcp-confluent.git --path .claude/skills/vitest--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add confluentinc/mcp-confluent --skill vitest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install confluentinc/mcp-confluent vitest --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/vitest .gemini/skills/vitest && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .gemini/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install confluentinc/mcp-confluent vitestInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add confluentinc/mcp-confluent --skill vitest -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/vitest .github/skills/vitest && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .github/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add confluentinc/mcp-confluent --skill vitest -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install confluentinc/mcp-confluent vitest --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/confluentinc/mcp-confluent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/vitest .opencode/skills/vitest && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "vitest" agent skill from https://github.com/confluentinc/mcp-confluent/tree/main/.claude/skills/vitest into .opencode/skills/vitest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "vitest", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
vitestA skill your agent uses when the user asks about Vitest mocking, spies, stubs, fake timers, config, or test runner behavior.
Vitest is an agent skill from confluentinc/mcp-confluent. Use when the user asks about Vitest mocking, spies, stubs, fake timers, config, or test runner behavior. Triggers on questions like "vi.fn", "vi.spyOn", "vi.mocked", "Mocked<T", "mockResolvedValue", "restoreMocks", "vitest mock", "createMockInstance", "useFakeTimers", or how to accomplish test double patterns with Vitest.
Its SKILL.md is about 1.7k 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. It works with Vitest. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 76cffd5. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadBashWebFetchWebSearchFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
vitestFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
vitest.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Vitest loads about 1.7k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 534 words of instructions outside code blocks.
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.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Bash, WebFetch, WebSearchAutomated 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.
The full file from confluentinc/mcp-confluent at commit 76cffd5, republished under its MIT licence (© confluentinc). 534 words, ~1,675 tokens.
.claude/skills/vitest/SKILL.md (or your agent's skills folder).Look up Vitest APIs, patterns, and best practices via WebFetch against the official docs. Use this
skill to answer questions about vi.*, mock instances, assertions, fake timers, and config
options. Project-specific test conventions (naming, stubbing strategy, node-deps.ts pattern) live
in .claude/rules/unit-tests.md - reference that rule rather than re-deriving the conventions.
Base URL: https://vitest.dev
| Topic | Path | Use for |
|---|---|---|
| Getting started | /guide/ | General concepts, project setup, runner behavior |
| Mocking guide | /guide/mocking | Worked examples: modules, timers, dates, classes |
| Config reference | /config/ | vitest.config.ts options (restoreMocks, pool, coverage) |
vi API | /api/vi | Top-level helpers (vi.fn, vi.spyOn, vi.mocked, timers) |
| Mock instance API | /api/mock | Methods on a Mock (.mockReturnValue, .mockImplementation) |
| Assertions | /api/expect | expect() matchers, argument matchers |
| Fake timers | /api/vi#vi-usefaketimers | vi.useFakeTimers, advanceTimersByTimeAsync |
| CLI | /guide/cli | vitest run, flags, watch mode |
Determine the question type
/api/* pages/guide/mocking or /guide//config//guide/cliCheck project rules first - read .claude/rules/unit-tests.md before fetching. It already
documents: restoreMocks: true behavior, the node-deps.ts namespace pattern,
createMockInstance, constructor-stub gotchas, and the vi.mock anti-pattern. Don't re-explain
these; cite the rule and only fetch docs for anything beyond it.
Fetch the relevant page with WebFetch:
WebFetch: https://vitest.dev/api/mock
Prompt: "Find the signature and options for [specific method, e.g. mockImplementationOnce]"For cross-cutting questions (e.g. "how do I mock a class constructor"), fetch the guide page
(/guide/mocking) alongside the API page.
Look at existing project tests for pattern examples before synthesizing your own:
Grep: "vi\.spyOn|createMockInstance|vi\.useFakeTimers" --glob "**/*.test.ts"Good reference files: src/confluent/telemetry.test.ts (many spies), src/cli.test.ts
(env-proxy spying), src/confluent/oauth/token-store.test.ts (async + timers).
Cross-reference version: this project is on Vitest v4. If a WebSearch result or older
example uses vi.mock factories or pre-v1 APIs, verify against the v4 /api/* page before
recommending.
| User asks about… | Fetch |
|---|---|
| "how do I stub a class constructor?" | /guide/mocking + /api/vi |
"what's the difference between vi.fn and vi.spyOn?" | /api/vi |
| "mock returns different value on second call" | /api/mock (mockReturnValueOnce) |
| "how do I advance fake timers in an async test?" | /api/vi#vi-usefaketimers |
"what does restoreMocks do?" | /config/ (search: restoreMocks) |
| "how to type a stubbed class instance?" | unit-tests.md (project helper) + /api/vi (Mocked<T>) |
| "argument matcher for partial object" | /api/expect (expect.objectContaining) |
| "why can't I spy on this ESM import?" | unit-tests.md §Design for Stubbing (no fetch needed) |
## Vitest: [method/feature]
### Signature
[From /api/*]
### Example
[Adapted to project patterns where relevant]
### Project usage
[Reference to unit-tests.md section or a real `.test.ts` file if applicable]## Pattern: [description]
### From the docs
[Approach recommended by /guide/mocking or /api/*]
### In this project
[How existing tests implement it; cite file paths]
### Gotchas
[Edge cases - e.g. arrow-fn constructor, ESM live bindings, mock hoisting]vi.mock: it hoists above imports, loses type safety, and splits the project's
stubbing model. If a dependency can't be spied on, wrap it in a namespace object (see
src/confluent/node-deps.ts). Full rationale in .claude/rules/unit-tests.md §Why vi.mock
is not used in this project.afterEach restore blocks: restoreMocks: true in vitest.config.ts handles it.function with vi.spyOn(ns, "Ctor").mockImplementation(function () { return {...}; })./api/* pages for signature lookups, /guide/* for worked examples./api/vi covers top-level helpers (vi.fn, vi.spyOn, timers, module hooks); /api/mock
covers methods on a Mock instance. Pick the right one based on whether the user is asking
"how do I create this mock" vs. "how do I configure an existing mock".vi.mock-heavy
patterns - verify against the current API page before recommending..claude/rules/unit-tests.md, cite the rule instead of
duplicating its tables in the response.© confluentinc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/vitest of confluentinc/mcp-confluent.
Open the folder on GitHubat commit 76cffd5
Vitest 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Vitest this skillconfluentinc/mcp-confluent | 167 | — | ~1.7k | Automated safety check: Notes | MIT | |
| Test Writing WorkflowiOfficeAI/AionUi | 33k | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Vitestsupabase/supabase | 111k | 12 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Test GuardamElnagdy/guard-skills | 1.3k | 2 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Control UI E2Eopenclaw/openclaw | 392k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Adding LLM MCP ToolsTriliumNext/Trilium | 38k | — | ~2.5k | Automated safety check: Pass | AGPL-3.0 |
iOfficeAI/AionUi
Sets the test-writing workflow for the repository: risk-first scenario lists, behavior-focused Vitest tests, a full run before each commit and a coverage target.
supabase/supabase
Vitest API and config reference (Jest-compatible) — mocking with vi., spies, fake timers, coverage configuration, fixtures, snapshots, and test filtering.
amElnagdy/guard-skills
Reviews newly written or edited tests against nine rules that cut test bloat, such as mock-heavy checks and near-duplicate cases, before they are committed.
openclaw/openclaw
A skill your agent uses when designing, testing, fixing, or extending the OpenClaw Control UI GUI, including UI stress-test galleries with feedback inputs, Vitest + Playwright end-to-end checks…
TriliumNext/Trilium
A skill your agent uses when adding, changing, or reviewing an LLM/MCP tool in Trilium (the defineTools definitions under packages/trilium-core/src/services/llm/tools/ —…
leonardomso/33-js-concepts
Generates Vitest tests for every runnable code example on a JavaScript concept documentation page, following a four-phase extraction and conversion process.
confluentinc/mcp-confluent
Reviews pull requests for the Confluent MCP server. An agent skill from confluentinc/mcp-confluent.
confluentinc/mcp-confluent
A skill your agent uses when the user asks about Model Context Protocol details (protocol spec, transports, authorization, tools/resources/prompts, sampling/elicitation/roots, server/client…
Works with
Categories
A skill your agent uses when the user asks about Vitest mocking, spies, stubs, fake timers, config, or test runner behavior. Vitest is an agent skill from confluentinc/mcp-confluent. Use when the user asks about Vitest mocking, spies, stubs, fake timers, config, or test runner behavior.
Vitest fits situations like: the user asks about Vitest mocking; test runner behavior; questions like vi.fn; mockResolvedValue.
Run `npx skills add confluentinc/mcp-confluent --skill vitest -a claude-code`. Or copy the skill folder (.claude/skills/vitest in confluentinc/mcp-confluent) into .claude/skills/vitest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add confluentinc/mcp-confluent --skill vitest -a codex`. Or copy the skill folder (.claude/skills/vitest in confluentinc/mcp-confluent) into .agents/skills/vitest in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add confluentinc/mcp-confluent --skill vitest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vitest, .gemini/skills/vitest, .github/skills/vitest and .opencode/skills/vitest in your project.
Going by SKILL.md and its folder, Vitest needs the command-line tools its instructions call (vitest). Its frontmatter pre-approves these tools: Read, Bash, WebFetch, WebSearch.
SKILL.md names 1 domain. In commands or code: vitest.dev; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Vitest is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Vitest: Test Writing Workflow (iOfficeAI/AionUi, 33k stars), Vitest (supabase/supabase, 111k stars), Test Guard (amElnagdy/guard-skills, 1.3k stars) and Control UI E2E (openclaw/openclaw, 392k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
confluentinc (a GitHub organization) maintains it in confluentinc/mcp-confluent, which has 167 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.
Source: confluentinc/mcp-confluent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.