---
title: Call each provider directly
description: Send each harness's model calls to its own provider, on that provider's key.
---
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reeval.ai/llms.txt
> Use this file to discover all available pages before exploring further.

`direct()` sends each harness's model calls straight to its provider's API, on the harness's own key.

## Credential

`direct()` uses the key each harness reads, such as `CURSOR_API_KEY` for `cursor()` or `ANTHROPIC_API_KEY` for `claudeCode()`. A run exits with code 2 when a planned harness's key is unset.

For more information about each harness's key, see [Choose an agent](/configuration/agents).

## Helper

`direct()` is exported from `{{ pkg }}/gateway`. It takes no options:

```ts title="reeval.config.ts"
import { defineConfig } from '{{ pkg }}'
import { direct } from '{{ pkg }}/gateway'

export default defineConfig({
  gateway: [direct()],
})
```

Without a `gateway` option, reeval uses `[direct()]`. In a longer list, each harness takes the first gateway that can serve it.

For more information about combining gateways, see [Gateways](/configuration/gateways).

## Harnesses and models

`direct()` serves every harness on its own key, with two exceptions. It refuses an `fx()` model with a gateway id, such as `google/gemini-3.8-flash`, which only `vercel()` serves, and it refuses an OpenCode model id whose provider reeval can't run. For the harnesses each routing gateway serves, see [Harness support](/configuration/gateways#harness-support).

The judge calls `anthropic/*`, `google/*`, `openai/*`, and `typesafe-ai/*` models on `direct()`, each on its provider's own key. `analysis.model`, captures, and questions call `anthropic/*`, `google/*`, and `openai/*` language models. They refuse `typesafe-ai/*`, which scores yes/no questions and can't write an analysis or drive a capture.
