A working zoo for learning real AI agents.
Agent Zoo is a live DrQ AI teaching lab: real agents, a serverless AWS backbone, and enough product polish to test the workflows like actual tools.
Small enough to understand, real enough to matter: each agent is built one at a time, with its own workflow, storage, and permissions, free to try while traffic stays low.
Real agents
Every surface is connected to working infrastructure, not a static demo.
Serverless first
The platform keeps the stack small, observable, and cheap to run while traffic is low.
Built to teach
Each agent doubles as a concrete example for architecture, product, and AI workflow lessons.
One shared platform, three different workflow shapes.
Every agent sits behind the same Cognito user pool and API Gateway, and reports into the same tables — nothing per-agent here except which routes and knowledge bases an agent's own IAM role is allowed to touch. This is drawn with Busy Beaver's own diagramming engine and real AWS icons, pointed at this platform instead of a user's spec.
Not pictured, to keep this to the request path: every run also writes its output to S3 and an AuditLog row to DynamoDB via EventBridge, whether it succeeds or is rejected — and AppConfig feeds model IDs/thresholds to every Lambda here as a runtime config push, never a redeploy.
Busy Beaver
diagram-agent · Step FunctionsIntake → CheckEntitlement → {AssistantEdit | RecognizeImage | GenerateSpec} (Bedrock Converse) → ValidateSpec (deterministic) → Report
Minute Parrot
meeting-agent · Step Functions with a real poll loopIntake → CheckEntitlement → StartTranscriptionJob → Wait/Poll against Amazon Transcribe → ExtractUtterances (deterministic) → AssignSpeakers (Bedrock, forced tool use) → Summarize (Bedrock) → ValidateSummary (deterministic) → Report
Know-It-Owl
rag-agent · synchronous, no state machineAPI Gateway → Lambda-per-request → Bedrock Knowledge Bases retrieve_and_generate against a shared S3 Vectors index, filtered per request by user_id/visibility
Northstar Elephant
northstar-elephant · one state machine, task_type-branchedTaskTypeDecision → {IngestIntake → ExtractExperiences (Bedrock) → ValidateExtraction (deterministic) → IngestReport | AnalyzeIntake → ParseJd (Bedrock) → CalculateMatch (deterministic) → SelectPriorityGap (deterministic) → SuggestNextAction (Bedrock) → ValidateNextAction (deterministic) → [GenerateResume (Bedrock) → ValidateResume (deterministic)] → AnalyzeReport} · deck_chat, a separate sync Lambda outside this state machine, reads/writes Bedrock AgentCore Memory directly for the persistent "talk to your deck" AI companion
RELIABILITY
Step Functions execution_id dedupes agent metering; Stripe webhooks dedupe on event.id. Any LLM output touching a stored result is re-validated by a deterministic Lambda before it lands anywhere — a rule engine, never the model's own word, decides what's valid.
SECURITY
Each agent gets its own least-privilege IAM role and can't call a tool or reach a knowledge base it doesn't declare. Admin sign-in reuses the same Cognito user pool but a separate App Client, so a user-facing token can't pass the admin API's authorizer.
COST
No standing compute or database — everything here is billed per invocation. DynamoDB + S3 + Athena for analytics, S3 Vectors instead of a standing OpenSearch cluster for RAG.
Start with the agents themselves, then use the lab notes and videos to unpack how they work.
Open the zoo