-
-
CrewOps: legal crew cover, with four eyes on every change
-
Only legal cover, ranked by cost
-
Both sick calls on the Fire TV wall board
-
A captain reports himself sick; the speaker announces it
-
Untouched for 10 minutes: escalated
-
Approved by a second person; the room is told
-
Kiro uses the CrewOps Agent Skill, and asks before it acts
-
An unsafe question, refused and logged
Inspiration
When a pilot calls in sick before an early flight, someone in crew control has to find a replacement fast. That person must be rested, rated for the aircraft, inside their duty and flight-hour limits, holding valid certificates, and ideally at the right base. Today that check is mostly done by hand across rosters and spreadsheets while the clock runs, and one mistake either grounds the flight or puts an illegal crew on it. I wanted something a controller could simply ask, and trust the answer.
What it does
CrewOps runs crew control for three airlines (Deccan Express, Konkan Skyways and Nilgiri Connect, all synthetic data) from one ops room.
- Anyone can report: crew mark themselves sick, the reporting desk files sick calls, delays, gate closures, gate changes, station closures and aircraft faults, and admins book planned leave.
- Within a minute it's analysed: affected flights and passengers, a severity, and cover that passes all seven legality rules, ranked by cost. When several seats are out together it builds a joint plan at the lowest total cost, never giving one person two seats.
- Human in the loop, four eyes on every change: the disruption lands on the least busy controller's desk. They submit a plan, a different person approves or sends it back, and the rules are checked again at approval.
- Nothing gets forgotten: if a disruption sits untouched for 10 minutes it escalates and the duty supervisor is emailed.
- The whole room hears about it: an Alexa+ assistant in the web app (talk or type, answers in Amazon Polly), a CrewOps Alexa skill, an ops-room speaker that reads every disruption aloud, a Fire TV wall board, desktop alerts, and emails to each role and operational team that has to act.
- Roles are enforced on the server: crew see only their own trips, admins can tighten a rule but only a super admin can relax one, and unsafe questions are blocked and logged for the admin.
How I built it
- A deterministic rules engine in Python decides legality and cost. Amazon Nova 2 Lite on Bedrock only helps route unusual questions and word the answer, and a verifier checks every number against the tool results before anything is spoken.
- Everything is exposed as an MCP server (spec 2025-11-25, Streamable HTTP) with 35 tools on Amazon Bedrock AgentCore Runtime, behind a Cognito JWT authoriser, with AgentCore Memory for follow-ups.
- An Agent Skill teaches any agent to use those tools safely; I used it in Kiro, which asks before it changes anything.
- The web app (Next.js on AWS Amplify) is an MCP client of that server. The Alexa skill, the speaker and the Fire TV board go through the same server and the same role checks.
- Reports flow through SQS to DynamoDB; DynamoDB Streams trigger the analysis Lambda; EventBridge Scheduler handles escalation; SNS sends role and team emails; AppSync Events pushes live updates. Bedrock Guardrails screen every question, and rule search uses Titan embeddings in S3 Vectors.
- The Fire TV app is React Native on Vega OS and keeps the last board on screen if a read fails.
- All infrastructure is AWS CDK. 958 Python tests, 35 web tests, 7 TV tests.
Challenges I ran into
- Alexa+ add-ons are partner-only for now, so I built the MCP server to the spec and showed it through an Alexa+ experience on the web, an Alexa skill and Kiro.
- Free-form Alexa questions kept getting the help reply, because Alexa's free-text slot only works after fixed opening words. I gave each opening word its own intent and put the word back in the skill.
- The model sometimes added numbers no tool returned. That's why nothing goes out unless the verifier can trace every figure.
- Every other bump (Vega networking, account linking, short-lived tokens) is written up in my friction log.
Accomplishments that I'm proud of
A sick call goes from report to approved, legal cover with two people signing off, and the whole room hears about it on Alexa, the speaker and the TV without anyone refreshing a page. I trust the numbers because no model invents them.
What I learned
Voice changes the design. Answers have to be short enough to hear, ids have to survive speech ("C 1042" becoming C-1042), and the assistant has to ask instead of guessing. Most of the safety work turned out to be about who may do what, not only the rules.
What's next for CrewOps
Connecting to Alexa+ directly when the MCP Toolkit opens, reading real roster feeds instead of synthetic data, and a crew mobile view for accepting callouts.
Built With
- agent-skills
- alexa-skills-kit
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-cognito
- amazon-dynamodb
- amazon-eventbridge
- amazon-nova
- amazon-polly
- amazon-s3-vectors
- amazon-sns
- amazon-sqs
- aws-amplify
- aws-appsync
- aws-cdk
- aws-lambda
- bedrock-guardrails
- fire-tv
- kiro
- model-context-protocol
- next.js
- python
- typescript
- vega
Log in or sign up for Devpost to join the conversation.