AWS Builder Center

Weekend Agent Challenge: Serverless Customer Service Agent with Strands & AgentCore

I built a production-ready customer service agent using the open-source Strands SDK and Amazon Bedrock AgentCore Runtime. By leveraging custom tools, hooks, and session memory, this serverless agent provides highly readable, contextual support via a seamless CLI experience.

Vision & What the Agent Does

Customer service shouldn't feel like talking to a brick wall, nor should it require a massive engineering team to stand up a simple, helpful AI. For the AWS Weekend Agent Challenge, I wanted to build an agent that feels human, acts securely, and actually resolves problems instead of just routing users to an FAQ page.
I built the Customer Service Agent, designed specifically for e-commerce platforms. The target audience is everyday shoppers who need immediate, accurate information about their accounts, recent orders, and refunds. Instead of a clunky UI, this agent operates seamlessly from a CLI interface, pulling real-time mock data and delivering it in a highly readable, conversational format.

How I Built It

I developed this project within the AWS Builder Center Sandbox, moving from a local Jupyter notebook environment all the way to a fully managed serverless deployment.
The architecture relies heavily on Amazon Bedrock and the Strands Agents SDK. Rather than just writing a prompt, I used Strands to build a complete agent harness—controlling the orchestration loop, custom tools, and memory end-to-end. I built mock tools simulating a customer database, defining users like "Sarah Johnson" and "Mike Chen" using Python dictionaries.
To ensure the agent behaves safely in a production-like environment, I implemented:
  • Hooks: A rate limiter that caps runaway tool calls to control costs.
  • Steering & Skills: Handlers that enforce a strict workflow for processing refunds and acting as a guardrail to guarantee a polite tone.
  • Session Managers: To persist conversation memory across restarts.
The biggest leap was deploying this to Amazon Bedrock AgentCore Runtime. Using the agentcore CLI, I wrapped my Python agent logic with an @app.entrypoint decorator. With a simple deployment command, the CLI packaged my code via Direct Code Deploy (zipping it to an Amazon S3 staging bucket) and automatically provisioned the managed runtime via AWS CloudFormation. There were no servers or containers to manage manually.
1
agentcore deploy

The Delightful Detail

When dealing with customer support, raw JSON or unformatted text dumps are frustrating to read. The delightful detail of this agent is its combination of contextual memory and clean, formatted outputs.
I wanted the user experience to feel both personalized and highly organized. When invoking the agent, I passed a specific session ID and prompted it: "Hi, I'm customer C-1001. What are my recent orders?"
Instead of just spitting out an order number, the agent cross-referenced the customer database, warmly greeted the user by name ("Hi Sarah!"), and dynamically rendered her orders—Wireless Headphones and a USB-C Hub—into a beautiful, easy-to-read Markdown table right in the terminal. It even proactively noted that the USB-C Hub was on its way and asked if further help was needed.
I know this worked perfectly because the session manager retained the exact state of the conversation. The CLI output immediately generated a reusable Session ID, proving that Sarah could return later and seamlessly continue the exact same support ticket without starting over.

Proof it Works

Below is the screenshot of my working agent in the AWS environment:
This screenshot shows a successful agentcore invoke call. You can clearly see the agent running in the terminal, greeting the user by name, rendering the Markdown table of orders, and generating the persistent session ID.

What I Learned

Building this showed me the massive difference between a simple LLM wrapper and a true agent harness. Deploying to AgentCore proved that you can have auto-scaling, serverless AI infrastructure without the headache of managing the underlying compute. It was incredibly satisfying to take a local script, add a single entry point, and watch AWS transform it into a robust, observable production service!
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article