BrowserStack AI Evals

Agent Endpoints

Manage agents — HTTP webhook and voice endpoints the platform calls during dataset runs — with the aievals CLI.

Agent Endpoints

aievals agent manages agents — the deployed API you want to test. You register the endpoint (URL, method, headers, auth, body) and evals calls out to it as the target of experiments, dataset runs, and the Conversation Simulator.

Not the same as an AI coding agent. To configure Claude Code or Cursor to drive this CLI, use aievals skill install — see AI Agents. The old aievals agent setup spelling for that was renamed to aievals skill.

CommandWhat it does
agent listList agents in the current project
agent getFetch a single agent by ID
agent createCreate a new agent
agent updatePartially update an agent (PATCH)

There is no delete verb in the CLI. Deleting an agent is still available from the dashboard (Manage Agents) and through the SDK — it is the CLI that deliberately omits it.

List and read

aievals agent list --format json
aievals agent list --api-environment-id env123 --format json
aievals agent get agt_123 --format json

list accepts --api-environment-id to filter by API environment. Unlike most list commands in the CLI, it is not paginated — it returns the full array, so there are no --page / --limit flags.

Create

--name, --type, --method, and --url are required.

aievals agent create --name "Support bot" --type HTTP \
  --method POST --url https://api.example.com/chat

With headers, query parameters, and a body template:

aievals agent create --name Bot --type HTTP --method POST --url https://api.example.com/chat \
  --header X-Api-Key=secret \
  --query-param locale=en-US \
  --body '{"prompt":"{{input}}"}'

Update

update is a PATCH — only the flags you pass are sent. --method and --url are required on every update; the server validates this.

aievals agent update agt_123 --method POST --url https://api.example.com/v2/chat
aievals agent update agt_123 --method POST --url https://api.example.com/v2/chat --header X-Api-Key=rotated

Flags

create and update share the same body flags.

Scalars

FlagNotes
--nameAgent name
--descriptionAgent description
--typeAgent type (e.g. HTTP)
--methodGET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
--urlEndpoint URL
--content-typeRequest content type
--include-credentialsSend platform credentials with the request
--purposeDATASET_RUN, S3_SIGNING
--channelHTTP, VOICE
--directionOUTBOUND, INBOUND
--simulator-numberSimulator number (voice agents)
--api-environment-idAPI environment ID

Name=Value pairs — repeatable, one occurrence per entry:

FlagNotes
--headerRequest header, Name=Value
--display-headerDisplay-only header, Name=Value
--query-paramQuery parameter, Name=Value
--path-variablePath variable, Name=Value
--header X-Api-Key=secret --header X-Trace-Id=abc

Nested JSON — these have no flat flag equivalent, so they take inline JSON:

FlagShape
--bodyRequest body template, JSON object
--body-containerBody container, JSON object
--responseResponse config, JSON object
--variable-configVariable config, JSON object
--callback-configCallback config, JSON object
--api-webhooksAsync completion webhooks, JSON array

--api-webhooks is write-only in v1. It is accepted on create, but it is absent from every get and list response — so a round-trip will not show it back. That is expected, not a lost write.

Use --format json to read an agent back. The table view truncates the nested config objects.