Introduction
I recently attended an AWS event where we built our first AI agent using the Strands Agents SDK and Amazon Bedrock. The quickstart guide looked simple enough — a few lines of Python, some tools, and a running agent. But the real learning happened in the errors. This article walks you through what I built, every error I hit, and exactly how I fixed them.
What We Built
A simple AI agent that can:
- Tell you the current time
- Perform calculations
- Count letters in a word
Three tools. One agent. Sounds easy. It wasn't — but that's what made it worth writing about.
Project Structure
Here's the folder structure I used:
Agent/
├── .venv/
├── agent.py
└── requirements.txt
Setting Up the Environment
First, create and activate a virtual environment:
python -m venv .venv
.venv\Scripts\Activate.ps1 # Windows PowerShell
Then install the required packages:
pip install strands-agents strands-agents-tools
The Agent Code (Starting Point)
The quickstart gave us this agent.py:
from strands import Agent, tool
from strands_tools import calculator, current_time
@tool
def letter_counter(word: str, letter: str) -> int:
"""
Count occurrences of a specific letter in a word.
Args:
word (str): The input word to search in
letter (str): The specific letter to count
Returns:
int: The number of occurrences of the letter in the word
"""
if not isinstance(word, str) or not isinstance(letter, str):
return 0
if len(letter) != 1:
raise ValueError("The 'letter' parameter must be a single character")
return word.lower().count(letter.lower())
agent = Agent(tools=[calculator, current_time, letter_counter])
message = """
I have 3 requests:
1. What is the time right now?
2. Calculate 3111696 / 74088
3. Tell me how many letter R's are in the word "strawberry" 🍓
"""
agent(message)
Simple and clean. Then I ran it. And the errors began.
Error 1: Anthropic Use Case Form Not Submitted
botocore.errorfactory.ResourceNotFoundException:
Model use case details have not been submitted for this account.
Fill out the Anthropic use case details form before using the model.
└ Model id: global.anthropic.claude-sonnet-4-6
What happened: The Strands SDK defaults to Amazon Bedrock with Claude Sonnet 4. But Anthropic requires first-time users to submit a use case form before accessing their models on Bedrock.
How I fixed it:
- Went to the AWS Bedrock Console in us-east-1
- Navigated to Model Catalog and searched for Claude Sonnet 4.6
- Clicked the model and hit "Submit use case details"
- Filled out the form:
- Company name, website, industry
- Intended users: Internal
- Use case: "Building an AI agent for learning and demonstration purposes at an AWS event using the Strands SDK and Amazon Bedrock"
- Submitted and waited ~15 minutes
Once the "Submit use case details" button disappeared and "Open in playground" appeared, I knew it was approved.
Error 2: Missing Dependency for AWS Login
botocore.exceptions.MissingDependencyException:
Using the login credential provider requires an additional dependency.
You will need to pip install "botocore[crt]" before proceeding.
What happened: The AWS credential provider I was using needed an extra C extension package called awscrt.
How I fixed it:
pip install "botocore[crt]"
That installed awscrt-0.32.2 and resolved the issue immediately.
Error 3: Wrong Model ID — ValidationException
botocore.errorfactory.ValidationException:
The provided model identifier is invalid.
└ Model id: us.anthropic.claude-sonnet-4-6-20251031-v1:0
What happened: I had added a BedrockModel to my code with a guessed model ID, but it wasn't valid for my account.
How I fixed it: I ran this command to list all valid inference profile IDs available to my account:
aws bedrock list-inference-profiles --region us-east-1 --profile tidding --query "inferenceProfileSummaries[?contains(inferenceProfileId, 'anthropic')].inferenceProfileId"
It returned a list including:
"us.anthropic.claude-sonnet-4-6"
That was the correct ID. No version suffix needed.
The Final Working Code
After all the fixes, here is the final agent.py:
from strands import Agent, tool
from strands.models import BedrockModel
from strands_tools import calculator, current_time
# Define a custom tool using the @tool decorator
@tool
def letter_counter(word: str, letter: str) -> int:
"""
Count occurrences of a specific letter in a word.
Args:
word (str): The input word to search in
letter (str): The specific letter to count
Returns:
int: The number of occurrences of the letter in the word
"""
if not isinstance(word, str) or not isinstance(letter, str):
return 0
if len(letter) != 1:
raise ValueError("The 'letter' parameter must be a single character")
return word.lower().count(letter.lower())
# Specify the Bedrock model explicitly using the correct inference profile ID
model = BedrockModel(
model_id="us.anthropic.claude-sonnet-4-6",
region_name="us-east-1"
)
# Create the agent with tools
agent = Agent(model=model, tools=[calculator, current_time, letter_counter])
# Ask the agent to handle multiple tasks
message = """
I have 3 requests:
1. What is the time right now?
2. Calculate 3111696 / 74088
3. Tell me how many letter R's are in the word "strawberry" 🍓
"""
agent(message)
Run it with:
$env:AWS_PROFILE = "tidding"
python agent.py
Key Lessons Learned
1. Always submit the Anthropic use case form first. It's a one-time requirement per AWS account and blocks everything until done.
2. Don't guess model IDs. Use aws bedrock list-inference-profiles to get the exact valid ID for your account.
3. The default Strands model ID may not match what your account supports. Always specify the model explicitly using BedrockModel.
4. botocore[crt] is required when using the AWS login credential provider on Windows. Install it early.
5. Set your AWS profile before running the agent:
$env:AWS_PROFILE = "yourprofile"
What the Agent Loop Looks Like
Once running, the Strands agent follows this loop:
Input → Reasoning (LLM) → Tool Selection → Tool Execution → Back to Reasoning → Response
The agent automatically decides which tools to use based on your message. For our three requests, it fired current_time, calculator, and letter_counter — all in one go.
Conclusion
The Strands SDK makes building AI agents genuinely simple — once you get past the AWS setup hurdles. The errors I faced were all configuration-related, not code-related. Once the environment was right, the agent worked beautifully in just a few lines of Python.
If you're attending an AWS event and hitting these same errors, I hope this saves you time. Drop a comment if you're stuck — happy to help!
Built at an AWS Event · Strands Agents SDK · Amazon Bedrock · Claude Sonnet 4.6





Top comments (0)