# Coding agents

Use Vultr Serverless Inference in Codex CLI, OpenCode, OpenClaw, pi and Hermes Agent, with the live model list, context windows and reasoning levels.

Each of these agents has a Vultr provider of ours: install it, set `VULTR_INFERENCE_API_KEY`, and pick a `vultr/...` model. Claude Code needs no plugin at all.

| Agent | Package | Speaks |
| --- | --- | --- |
| [Codex CLI](/docs/integrations/codex) | `@vultr/model-provider-codex` (npm) | Responses |
| [OpenCode](/docs/integrations/opencode) | `@vultr/model-provider-opencode` (npm) | Chat completions |
| [OpenClaw](/docs/integrations/openclaw) | `@vultr/model-provider-openclaw` (ClawHub) | Chat completions |
| [pi](/docs/integrations/pi) | `@vultr/model-provider-pi` (npm) | Chat completions |
| [Hermes Agent](/docs/integrations/hermes) | `vultr/model-provider-hermes` (GitHub) | Chat completions |
| [Claude Code](/docs/workflows/claude-code) | None: four environment variables | Messages |

## What every provider does

- It reads the model list from [`GET /v1/models`](/docs/reference/list-models) when the agent starts, so a new model shows up without an update. Listing needs no key.
- It offers the models an agent can drive: text output, ready, tool calling and a known context window. Embedding, image and other models are left out. [Models](/docs/models#text) lists them.
- It gives the agent each model's context window, output limit and reasoning levels, and its prices where the agent shows them.
- It keeps the last good list on disk and uses it when the network is down.
- `VULTR_INFERENCE_API_KEY` is the key. `VULTR_INFERENCE_BASE_URL` replaces `https://api.vultrinference.com/v1`.

Each agent's page has its install. The providers are open source, MIT licensed, at `github.com/vultr/model-provider-<agent>`. To build an integration of your own, start from the [model catalog libraries](/docs/integrations/model-catalog) they share.

## Pick a model

Every provider names models as `vultr/<id>`, with the ids [`GET /v1/models`](/docs/reference/list-models) lists. A reasoning level is the model's `reasoning.effort`: each agent offers the levels the model accepts, plus off where the model can answer without thinking. [Reasoning](/docs/concepts/reasoning) has what each level does.
