---
title: "Plugins"
description: "Extend agent-qa with plugins: auth plugins for sign-in flows such as Claude and Codex subscriptions, and provider plugins that add new model providers."
canonical_url: "https://vostride.com/docs/agent-qa/configuration/plugins"
md_url: "https://vostride.com/docs/agent-qa/configuration/plugins.md"
last_updated: "2026-10-24T01:12:08+05:30"
---

> [Documentation index](https://vostride.com/docs.md) · [Site index](https://vostride.com/llms.txt)
> Follow the Markdown links to read individual pages; the indexes list the available documentation.

# Plugins

> Extend agent-qa with plugins: auth plugins for sign-in flows such as Claude and Codex subscriptions, and provider plugins that add new model providers.

Plugins extend agent-qa from your config. Each entry is an npm package or a file, resolved from the config file's folder:

```yaml
plugins:
  auth:
    - package: "@vostride/agent-qa-subscription-auth"
  providers:
    - package: "@acme/agent-qa-provider"
    - path: ./agent-qa-provider.mjs
```

Plugins run inside agent-qa with full access to your machine: files, environment variables, credentials, run artifacts and screenshots. Use plugins you wrote or trust. agent-qa prints a warning whenever it loads a provider plugin.

## Auth plugins
An auth plugin adds a way to sign in to a model provider. The one most projects use is `@vostride/agent-qa-subscription-auth`, which adds the `anthropic-subscription` and `openai-subscription` providers for Claude and Codex subscriptions. Install it in the project and declare it, then sign in with `agent-qa auth login --config <name>`. See [Models and credentials](https://vostride.com/docs/agent-qa/configuration/models.md#subscriptions).

When a declared auth plugin is not installed, commands that need it stop and say how to install it. When it is installed but fails to load, the message says the fault is in the plugin, not a missing install.

## Provider plugins
A provider plugin adds a model provider without changing agent-qa. It exports a descriptor, as its default export or in a `providers` array:

```js
import { openaiCompatible } from '@vostride/agent-qa-model'

export default {
  id: 'acme-gateway',
  label: 'Acme Gateway',
  authModes: ['api-key'],
  needsBaseURL: true,
  adapter(transport, modelId) {
    return openaiCompatible(
      { ...transport, baseURL: rewriteBaseURL(transport), headers: signHeaders(transport) },
      modelId,
    )
  },
}
```

| Field | Required | Meaning |
| --- | --- | --- |
| `id` | Yes | The provider ID used in `registry.llms[].provider`. |
| `label` | Yes | The name shown to people. |
| `authModes` | Yes | The kinds of credentials it takes, such as `api-key`. |
| `adapter(transport, modelId)` | Yes | Returns the model client. Compose a built-in adapter from `@vostride/agent-qa-model` rather than writing streaming and parsing again. |
| `needsBaseURL` | No | Whether entries must set `baseURL`. |
| `defaultModel` | No | A model to suggest. |

Then use it like any other provider:

```yaml
registry:
  llms:
    - name: gateway
      provider: acme-gateway
      model: house-model-1
      baseURL: https://llm.acme.internal/v1
```

`agent-qa auth set` saves API keys only for the built-in providers. A provider plugin that needs a credential also needs an auth plugin with the same provider ID.

## Documentation navigation

- [All documentation](https://vostride.com/docs.md)
- Parent: [Configuration](https://vostride.com/docs/agent-qa/configuration.md)
- Previous: [agent-qa.local.yaml](https://vostride.com/docs/agent-qa/configuration/local-config.md)
- Next: [v0.1.x to v0.2.x](https://vostride.com/docs/agent-qa/migrate/v0-1-to-v0-2.md)
