
Building a Multi-Agent Executive AI Assistant on AWS with Strands Agents SDK and Amazon Bedrock
A C-suite executive deals with hundreds of emails, a packed calendar, countless decisions, and the constant pressure to stay ahead of strategic developments — all while being present for their team. A personal Chief-of-Staff AI can handle the cognitive load of orchestration, giving executives back the one resource they cannot manufacture: time.
Building a Multi-Agent Executive AI Assistant on AWS with Strands Agents SDK and Amazon Bedrock
GitHub: https://github.com/its-me-sweta/Executive_AI_Assistant.git
Introduction
A C-suite executive deals with hundreds of emails, a packed calendar, countless decisions, and the constant pressure to stay ahead of strategic developments — all while being present for their team. A personal Chief-of-Staff AI can handle the cognitive load of orchestration, giving executives back the one resource they cannot manufacture: time.
In this post I'll walk through a production-ready, eight-agent AI pipeline that acts as a personal executive assistant — managing calendar intelligence, email triage, meeting preparation, decision support, daily briefings, task delegation, and communication drafting — using:
- Strands Agents SDK with
@tooldecorators - Amazon Bedrock Nova Pro for natural-language understanding, brief generation, and communication drafting
- Amazon SES for brief delivery, delegation messages, and approved communications
- Amazon DynamoDB for context profiles, decisions, commitments, and communications audit trail
- Amazon S3 with KMS encryption for meeting briefs and executive documents
- Amazon EventBridge Scheduler for daily briefs, meeting reminders, and commitment tracking
- AWS Lambda for calendar, email, Jira, Slack, and CRM integrations
- AgentCore Runtime for serverless deployment
Architecture Overview
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
┌──────────────────────────────────────────────┐
│ Natural Language Interface │
│ "Prep me for the board meeting at 2pm" │
│ "Triage my inbox" · "Should I approve this?" │
└──────────────────┬───────────────────────────┘
│ Slack · Email · Voice · Web
┌──────────────────▼───────────────────────────┐
│ Orchestrator Agent │
│ Context Profile · Intent Classification │
│ Priority Routing · Daily Brief Scheduling │
└──────────────────┬───────────────────────────┘
│
┌───────────────────────────┼────────────────────────────┐
│ │ │
┌───────▼────────┐ ┌─────────────▼──────────┐ ┌────────────▼───────┐
│ Calendar │ │ Email Triage Agent │ │ Meeting Prep Agent │
│ Intelligence │ │ Tier 1-4 Priority │ │ Participant Profiles│
│ Agent │ │ Action Extraction │ │ RAG Context │
│ Conflict Detect │ │ Route / Draft / Archive│ │ Agenda + Talking Pts│
│ Deep Work Guard │ │ Inbox Zero │ │ 1-Page Brief │
└───────┬────────┘ └─────────────┬──────────┘ └────────────┬───────┘
└───────────────────────────┼────────────────────────────┘
│
┌───────────────────────────┼────────────────────────────┐
│ │ │
┌───────▼────────┐ ┌─────────────▼──────────┐ ┌────────────▼───────┐
│ Decision │ │ Strategic Briefing │ │ Task Delegation │
│ Support Agent │ │ Agent │ │ Agent │
│ 3-Option Frame │ │ Business Metrics │ │ Action Capture │
│ Risk & Tradeoff │ │ Industry News │ │ SMART Delegation │
│ Recommendation │ │ OKR Status │ │ Commitment Tracker │
│ Decision Record │ │ Daily 5-min Brief │ │ Status Rollup │
└───────┬────────┘ └─────────────┬──────────┘ └────────────┬───────┘
└───────────────────────────┼────────────────────────────┘
│
┌──────────────────▼───────────────────────────┐
│ Communication Drafting Agent │
│ Context Analysis · Relationship History │
│ Nova Pro Draft · Voice Adaptation │
│ Risk Review · Approve & Send │
└──────────────────────────────────────────────┘Executive Context Profile
Every agent reads the executive's context profile to personalise outputs:
1
2
3
4
5
6
7
8
9
10
DEFAULT_CONTEXT_PROFILE = {
"communication_style": "direct_and_concise",
"top_priorities": ["revenue_growth", "product_excellence", "team_health"],
"deep_work_blocks": ["08:00-10:00", "14:00-16:00"],
"no_meeting_days": ["friday"],
"email_response_sla": {"tier1": "same_day", "tier2": "48_hours"},
"delegation_rules": {"max_value_to_delegate": 50000},
"voice_style": "collaborative_and_data_driven",
"preferred_brief_time": "06:30",
}Stage 1 — Calendar Intelligence Agent
Conflict detection flags three risk types:
- Back-to-back meetings with < 10-minute buffer
- Calendar overload (> 6 hours of meetings in a day)
- Preparation conflicts (meeting at 2pm, prep not ready until 3pm)
Optimal slot finding respects executive preferences:
1
2
3
4
5
# Scores each slot (0.0–1.0) based on:
# - Post-deep-work timing (+0.95 for 10am)
# - All attendees available
# - Not on a no-meeting day
# - Energy level at that time of dayDeep work protection — the most valuable feature:
1
2
3
4
5
protected_blocks = [
{"time": "08:00-10:00", "reason": "Morning focus block — non-negotiable"},
{"time": "Friday 14:00-17:00", "reason": "Weekly strategy & reflection"},
]
# Exception: CEO/Board requests bypass protectionStage 2 — Email Triage Agent
Four-tier email classification:
| Tier | Action | Who |
|---|---|---|
| 1 — Board/Investor/Top Customer | Executive personal response today | Executive |
| 2 — Direct reports/Media/Partners | Executive reviews, assistant drafts | Executive + EA |
| 3 — FYI/CC/Non-priority requests | Delegate entirely to EA | EA |
| 4 — Newsletters/Marketing | Auto-archive, weekly digest | System |
1
2
3
4
5
6
priority_signal_map = {
"BOARD": 1, "INVESTOR": 1, "TOP_CUSTOMER": 1,
"MEDIA": 2, "DIRECT_REPORT": 2,
"TEAM": 3, "VENDOR": 3,
"LOW": 4, "NEWSLETTER": 4,
}Action extraction from Tier 1 emails using Nova Pro:
1
2
prompt = "Extract: action_needed, decision_required, deadline, stakeholders from this email."
# Returns structured JSON for commitment trackingStage 3 — Meeting Preparation Agent
For every meeting the executive has, a 1-page brief is generated:
Participant profiles built from:
- Internal: role, projects, recent wins, communication style
- External: company news, LinkedIn background, prior interaction history
RAG context retrieval surfaces:
1
2
3
4
5
context_retrieved = {
"previous_meeting_notes": "Last meeting: agreed Q4 delivery and pricing",
"relevant_data": {"account_arr": "$180K", "nps_score": 62},
"relevant_documents": ["Q3 Account Review Deck", "Product Roadmap H2"],
}Talking points generated by Nova Pro with three layers:
- Key messages with supporting data (max 3 per message)
- Anticipated objections with responses
- Questions to ask the other party
- Red lines: what the executive will not agree to
Stage 4 — Decision Support Agent
Every decision is framed with exactly 3 options (never just 2):
1
2
3
4
5
options = {
"A": "Status quo / conservative", # Baseline comparison
"B": "Recommended path", # AI recommendation
"C": "Bold / aggressive path", # For risk appetite context
}Strategic alignment scoring:
1
2
alignment_scores = {"A": 0.40, "B": 0.85, "C": 0.70}
# Checks: OKR alignment, board-approved strategy, no conflictsDecision record stored in DynamoDB with DACI framework:
1
2
3
4
5
{
"Driver": "Executive", "Approver": "Executive",
"Contributors": [...], "Informed": [...],
"rationale": "...", "review_date": "90 days",
}Stage 5 — Strategic Briefing Agent
The daily brief is delivered at 6:30 AM via SES email and Slack:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
☀️ Executive Brief — Monday, January 13 2025
📊 Business Pulse
Revenue MTD: $4.2M (+8%) ↑ | Pipeline: $18M | NPS: 68 (+3) ↑
⚡ Urgent Actions (Today)
- Customer QBR needs prep: Acme Corp meeting at 11am
- OKR off track: "Launch in 3 new markets" at 33% — needs attention
📅 Today's Schedule
09:00: Leadership Sync (60 min)
11:00: Customer QBR — Acme Corp ⚡ NEEDS PREP
📰 Industry & Competitive
- Competitor X raised $50M Series C
- Competitor Y launched new product line
💡 One Thing to Think About
Review OKR progress with your direct reports this week.Stage 6 — Task Delegation Agent
Tracks every commitment the executive makes across all channels:
1
2
3
4
5
def track_commitments(commitment, recipient, due_date) -> dict:
# Stored in DynamoDB commitments table
# Weekly rollup: open (N), overdue (N), on-track (N)
# Reminder sequence: 48h → 24h → same-day → overdue alert via EventBridgeDelegation messages written in the executive's voice:
1
2
3
prompt = f"Write a delegation message from an executive to {owner}.
Task: {action}. Deadline: {deadline}.
Be specific about what 'done' looks like. Under 100 words."Stage 7 — Communication Drafting Agent
Every draft is reviewed for four risk types before sending:
1
2
3
4
5
6
7
risk_checks = {
"LEGAL": ["guarantee", "warrant", "commit to", "legally binding"],
"POLITICAL": ["off the record", "between us", "don't quote me"],
"TONE": detect_aggressive_or_dismissive_language(),
"OMISSION": check_for_required_elements(communication_type),
}
# If ANY risk flagged → present to executive for review before sendingVoice adaptation ensures every draft sounds like the executive:
1
2
3
4
5
6
style_rules = {
"never_start_with_I": True, # Leads with recipient or topic
"sentence_length": "short_and_punchy",
"formality_by_recipient": {"board": "FORMAL", "team": "INFORMAL"},
"signature": "Executive's preferred sign-off",
}AWS Infrastructure Summary
| Resource | Purpose |
|---|---|
| Amazon Bedrock Nova Pro | Brief generation, decision analysis, drafting, delegation messages |
| Amazon DynamoDB (7 tables) | Context profile, requests, decisions, commitments, tasks, comms, briefings |
| Amazon S3 (KMS encrypted) | Meeting briefs, daily briefs, executive documents |
| Amazon SES | Daily brief delivery, delegation emails, approved communications |
| Amazon SNS | Delegation notifications, urgent alerts |
| Amazon EventBridge Scheduler | 6:30 AM brief, commitment reminders (48h/24h/same-day) |
| AWS Lambda (8 functions) | Calendar, email, Jira, Slack, CRM, news scan, metrics pull, reminders |
| AgentCore Runtime | Serverless agent deployment |
Try It Yourself
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
git clone https://github.com/its-me-sweta/Executive_AI_Assistant.git
cd executive-ai-assistant
pip install -r requirements.txt
uvicorn main:app --reload
# Morning brief
curl -X POST http://localhost:8000/executive/request \
-d '{"executive_id":"EXEC-001","raw_request":"Give me my morning brief","channel":"slack"}'
# Triage inbox
curl -X POST http://localhost:8000/executive/request \
-d '{"executive_id":"EXEC-001","raw_request":"Triage my inbox","channel":"web"}'
# Prep for a meeting
curl -X POST http://localhost:8000/executive/request \
-d '{"executive_id":"EXEC-001","raw_request":"Prep me for the Acme QBR at 11am","channel":"slack"}'
# Decision support
curl -X POST http://localhost:8000/executive/request \
-d '{"executive_id":"EXEC-001","raw_request":"Should I approve the $500K marketing budget request?","channel":"web"}'Built with Strands Agents SDK · Amazon Bedrock Nova Pro · AgentCore Runtime
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article