Inspiration
Customer service is one of the most common real-world use cases for AI agents, but most demos stop at a single prompt-and-response loop. We wanted to go further and build something closer to what a production system actually needs: an agent that can use tools safely, follow business rules, remember conversations, and run as a real deployed service — not just a notebook demo.
What it does
This is a customer service AI agent that can:
- Look up a customer's account by ID
- Retrieve their order history and shipment status
- Process refund requests
- Enforce a strict refund workflow (verify customer → check order → confirm before refunding) using a steering handler, even if a user tries to bypass it with a permissive prompt
- Check and maintain a professional tone in every response
- Rate-limit tool calls per request to prevent runaway or excessive tool usage
- Activate step-by-step "skills" (markdown playbooks) for specific workflows like refunds, order tracking, and account troubleshooting
- Remember conversations across restarts using file-based session persistence
- Run as a live, deployed service on Amazon Bedrock AgentCore Runtime, invocable via CLI or the AWS SDK (boto3)
How we built it
The agent is built with the Strands Agents SDK, layered incrementally:
- Agent loop + tools — Python functions decorated with
@toolthat the LLM calls based on natural language requests (lookup, order history, refunds) - Hooks — a custom
RateLimiterHookthat intercepts tool calls before they execute and blocks a tool once it exceeds a configurable call limit per request - Skills + steering — markdown-based skill files the agent loads on demand, plus a deterministic
RefundWorkflowHandlerand an LLM-based tone handler that both run as guardrails around the agent's own reasoning - Session management —
FileSessionManagerpersists conversation history to disk, combined with aSlidingWindowConversationManagerto keep the context window bounded - Deployment — packaged the same agent code (no rewrite) and deployed it to Amazon Bedrock AgentCore Runtime using the
agentcoreCLI, giving us a real, invocable production endpoint
The underlying model is Amazon Nova Pro via Amazon Bedrock.
Challenges we ran into
- Configuring the agent to run on Amazon Nova (required for the credits available during the hackathon) instead of the default model meant adjusting the model configuration across every module
- Debugging a tool registry issue with one of our steering handlers in the deployed environment, which we resolved by simplifying the plugin configuration for the production deployment while keeping the full steering logic demonstrated and working in earlier development stages
- Getting familiar with the AgentCore CLI's interactive wizard (project structure, code location, entrypoint, build type) to get from local code to a live deployed runtime
What we learned
Building an agent harness is very different from writing a single prompt. Tools, hooks, guardrails, and memory each solve a different production problem, and Strands Agents' layered design made it possible to add each capability without rewriting what came before. Deploying to Amazon Bedrock AgentCore also showed us how little needs to change to take agent code from a notebook to a real, callable production service.
Try it out
The deployed agent can be invoked directly via the AgentCore CLI:
Built With
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-nova
- python
- strands-agents-sdk
Log in or sign up for Devpost to join the conversation.