Choose a model and reasoning
Strands harness runs on the latest models across Amazon Bedrock, Anthropic, OpenAI,
and Google, and uses Amazon Bedrock by default. Pass model to pick another; pass
effort to change how hard the agent reasons. Both are single arguments that work the
same across every provider.
Point Strands harness at a model
Section titled “Point Strands harness at a model”You pick a model by passing model, which accepts three forms: a provider/name
string, a bare Bedrock model id, or a ready-made Strands Model instance. The
provider/ prefix has aliases for bedrock, bedrock-mantle, anthropic, openai,
google, ollama, and litellm. A string with no provider prefix is treated as a bare
Amazon Bedrock id.
from strands_harness import create_harness
agent = create_harness(model="openai/gpt-5.6-sol")import { createHarness } from '@strands-agents/harness'
const agent = await createHarness({ model: 'openai/gpt-5.6-sol' })from strands import Agent
agent = Agent(model="global.anthropic.claude-sonnet-5")import { Agent } from '@strands-agents/sdk'
const agent = new Agent({ model: 'global.anthropic.claude-sonnet-5' })For a provider Strands harness does not have an alias for, or for a model you have already
configured (custom endpoint, credentials, request fields), build the Model instance
yourself and pass it. Strands harness uses it as-is:
from strands.models import BedrockModelfrom strands_harness import create_harness
model = BedrockModel(model_id="global.anthropic.claude-opus-4-8", region_name="us-west-2")agent = create_harness(model=model)import { BedrockModel } from '@strands-agents/sdk'import { createHarness } from '@strands-agents/harness'
const model = new BedrockModel({ modelId: 'global.anthropic.claude-opus-4-8' })const agent = await createHarness({ model })An unknown provider prefix fails at construction with the list of supported providers, so a typo surfaces immediately rather than as a request error later.
Set reasoning effort
Section titled “Set reasoning effort”effort maps one reasoning level onto whatever each provider’s API expects, so you set
it once regardless of provider:
"auto"(the default) uses each provider’s recommended level."low","medium", and"high"set it explicitly."off"(oroffon the CLI) turns reasoning off.
from strands_harness import create_harness
agent = create_harness(model="anthropic/claude-opus-4-8", effort="high")import { createHarness } from '@strands-agents/harness'
const agent = await createHarness({ model: 'anthropic/claude-opus-4-8', effort: 'high' })from strands import Agentfrom strands.models import BedrockModel
bedrock_model = BedrockModel( model_id="global.anthropic.claude-sonnet-5", additional_request_fields={ "thinking": {"type": "enabled", "budget_tokens": 4096} },)agent = Agent(model=bedrock_model)import { Agent, BedrockModel } from '@strands-agents/sdk'
const bedrockModel = new BedrockModel({ modelId: 'global.anthropic.claude-sonnet-5', additionalRequestFields: { thinking: { type: 'enabled', budget_tokens: 4096 }, },})const agent = new Agent({ model: bedrockModel })A level a provider does not accept fails at construction rather than mid-request. Some
providers accept finer levels (for example minimal or xhigh); Strands harness validates against
the resolved provider’s own set, so use the levels that provider documents.
Reasoning does not apply to a pre-built Model instance: configure reasoning on the
instance itself when you pass one.
Note on web search and caching
Section titled “Note on web search and caching”Two model-level features follow from the provider you pick. Native web_search works on
OpenAI, Anthropic, Google, and GPT-5/GPT-6 models on bedrock-mantle; prompt caching is
configured by Strands harness on Amazon Bedrock and Anthropic direct and is automatic elsewhere. Both are covered where you enable them:
web access and
manage context and caching.
For the full option list, see the configuration reference.