diff --git a/docs/config/coverage.md b/docs/config/coverage.md
index c282afcea..8d3f22696 100644
--- a/docs/config/coverage.md
+++ b/docs/config/coverage.md
@@ -133,6 +133,10 @@ You can also pass custom coverage reporters. See [Guide - Custom Coverage Report
You can check your coverage report in Vitest UI: check [Vitest UI Coverage](/guide/coverage#vitest-ui) for more details.
+::: tip AI coding agents
+When Vitest detects it is running inside an AI coding agent, it automatically adds the `text-summary` reporter and sets `skipFull: true` on the `text` reporter to reduce output and minimize token usage.
+:::
+
## coverage.reportOnFailure {#coverage-reportonfailure}
- **Type:** `boolean`
diff --git a/docs/guide/coverage.md b/docs/guide/coverage.md
index faaa47424..6a44c9129 100644
--- a/docs/guide/coverage.md
+++ b/docs/guide/coverage.md
@@ -508,3 +508,12 @@ This is integrated with builtin coverage reporters with HTML output (`html`, `ht
+
+## Coverage in Agent Environments
+
+When Vitest detects it is running inside an AI coding agent, it automatically adjusts the default `text` reporter to reduce output and minimize token usage:
+
+- `skipFull: true` is set on the `text` reporter, so files with 100% coverage are omitted from the terminal output.
+- The [`text-summary`](/config/coverage#coverage-reporter) reporter is added automatically, so the agent always sees a concise totals table even when `skipFull` hides all individual files.
+
+These adjustments only apply when the `text` reporter is already part of the active reporter list (it is included in the default). Explicitly configured reporters are never removed.
diff --git a/packages/vitest/src/node/config/resolveConfig.ts b/packages/vitest/src/node/config/resolveConfig.ts
index bf0056fd0..fb2569c9d 100644
--- a/packages/vitest/src/node/config/resolveConfig.ts
+++ b/packages/vitest/src/node/config/resolveConfig.ts
@@ -427,6 +427,17 @@ export function resolveConfig(
}
resolved.coverage.reporter = resolveCoverageReporters(resolved.coverage.reporter)
+ if (isAgent) {
+ // default to `skipFull` and add `text-summary` reporter when `text` reporter is used on agents
+ const text = resolved.coverage.reporter.find(([name]) => name === 'text')
+ const textSummary = resolved.coverage.reporter.find(([name]) => name === 'text-summary')
+ if (text) {
+ (text as any)[1] = { skipFull: true, ...text[1] as any }
+ if (!textSummary) {
+ resolved.coverage.reporter.push(['text-summary', {}])
+ }
+ }
+ }
if (resolved.coverage.changed === undefined && resolved.changed !== undefined) {
resolved.coverage.changed = resolved.changed
}