> ## Documentation Index
> Fetch the complete documentation index at: https://niceeval.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# defineConfig: configure project defaults

> Reference for project-wide niceeval defaults: judge, reporters, concurrency, timeout, and sandbox backend.

`defineConfig` is the default export from `niceeval.config.ts`. Keep it for project-wide defaults. Agent, model, flags, runs, and per-experiment budget live in `experiments/` files via `defineExperiment`.

```ts theme={null}
import { defineConfig } from "niceeval";
import { JUnit } from "niceeval/reporters";

export default defineConfig({
  judge: { model: "gpt-5.4-mini" },
  reporters: [JUnit(".niceeval/junit.xml")],
  maxConcurrency: 4,
  timeoutMs: 300_000,
  sandbox: "auto",
});
```

<ParamField body="judge" type="{ model: string; baseUrl?: string; apiKeyEnv?: string }">
  Default judge configuration for `t.judge.autoevals.*`. Individual evals can override this with `defineEval({ judge })`.
</ParamField>

<ParamField body="reporters" type="Reporter[]">
  Additional reporters. Built-ins include `JUnit(path)`. The CLI always writes structured `.niceeval/` artifacts.
</ParamField>

<ParamField body="maxConcurrency" type="number">
  Maximum concurrent attempts. Sandbox backends may choose a lower default when this is omitted.
</ParamField>

<ParamField body="timeoutMs" type="number">
  Per-attempt timeout in milliseconds.
</ParamField>

<ParamField body="sandbox" type="&#x22;auto&#x22; | &#x22;docker&#x22; | &#x22;vercel&#x22; | &#x22;e2b&#x22; | SandboxSpec">
  Default sandbox backend for sandbox agents. Override per experiment or with `--sandbox`.
</ParamField>

niceeval keeps environment preparation in ordinary code. Prepare files inside `test(t)` with `t.sandbox.writeFiles`, `uploadFiles`, or `uploadDirectory`; put adapter setup in the agent adapter.
