-
-
System architecture: simulated inputs, shared incident processing and authenticated conversational reads.
-
Self-hosted MCP: 2025-11-25 Streamable HTTP, Cognito authentication and shared incident tools.
-
AWS AI: AgentCore hosting, request-local Strands agents and Bedrock structured inference.
-
Incident workflow: prepare, trigger, validate, assign, assess, brief, review and resolve.
Inspiration
A household can have smoke detectors, leak sensors, cameras, door contacts and other alarms, yet each report usually arrives as a separate notification. During an incident, the person affected should not have to become the system integrator: switching screens, matching room names and deciding whether a later alert belongs to the same situation.
Aenea explores a simpler role for Alexa+: a calm conversational front door to a shared, continuously updated incident picture. The question is not just “Which alarm rang?” but “What changed, where did it happen, and what is still uncertain?”
What it does
Aenea provides a complete simulated-input household coordination workflow:
- Settings: a furnished Maple House with 24 simulated safety/security sensors across 10 rooms; device add, edit, duplicate and delete.
- Simulation Studio: reusable single alerts and multi-device scenarios, supported signal types and finite repeat intervals. Saving a definition does not send it.
- Command Center: trigger one or several saved definitions; inspect room/device state, duplicate-selection warnings, cloud run progress and incident status.
- Automatic incidents: trusted location and hazard rules create or join a named open incident. Related reports accumulate; unrelated hazard groups remain separate.
- Live assistance: automatically refreshed briefings, active signals, optional browser speech and incident questions. A signal opens its device on the map.
- History: evidence, assessment revisions, cited inputs, uncertainty, human review, rename, resolution and guarded deletion.
A repeat run continues in the cloud when the browser closes. New evidence can invalidate an older assessment and cause reassessment. A repeated copy of the same detector does not count as another independent detector. Human resolution closes the incident; a fresh later alert can start a new one.
How we built it
The React/Vite interface is hosted through private S3 and CloudFront, with Cognito authorization-code sign-in and PKCE. API Gateway and Lambda expose the workspace and incident APIs.
Simulation replaces the event producer, not the processing result. The durable worker sends registered device reports into ingestion. IncidentBridge normalizes the embedded event; Aenea checks source capability, ownership, trusted location, state and retry identity. Source evidence is retained in versioned S3, while DynamoDB stores incidents, device state, runs, receipts, assessments, briefings and audits.
EventBridge delivers normalized incident events to Step Functions. The workflow records evidence, obtains or reuses an eligible assessment, and publishes a briefing only for the matching incident revision. Terraform and GitHub Actions deploy changed components instead of rebuilding everything for every edit.

Alexa+ experience: self-hosted MCP and our frontend
Aenea implements a self-hosted MCP server using MCP Python SDK 1.30.0, protocol 2025-11-25 and Streamable HTTP. The browser's status, timeline and acknowledgment shortcuts call this server:
Browser → API Gateway MCP proxy → AgentCore MCP runtime → private tools Lambda → shared incident records.
The verified Cognito subject determines the household. Tokens are checked for signature, issuer, expiry, client, resource audience and scope. Acknowledgment records receipt; it does not resolve the incident or declare anybody safe.
Natural-language incident questions use a separate authenticated application endpoint. An agent classifies supported questions about status, devices, changes, uncertainty, assessment freshness or timeline; the application builds the reply from saved evidence. This is a constrained incident assistant rather than an unrestricted chatbot.
Speech recognition and spoken briefings use the browser. Spoken updates require the page to remain open. There is no native Alexa backend registration or physical Echo connection in this implementation.

AWS Builder: AgentCore, Strands and Bedrock
The AI integration has three distinct responsibilities:
- Assessment: current evidence and aggregates produce a structured incident type, severity, summary, confidence, evidence references and uncertainties.
- Routing names and explanations: the model receives an allowed create/join decision and trusted candidate context. Deterministic application rules own the location/hazard assignment boundary; the model supplies a constrained title and rationale.
- Question intent: a short question is classified into an allowed incident topic or operation.
Bedrock AgentCore hosts the reasoner entry point. Each request constructs a fresh Strands Agent using BedrockModel; the configured Terraform default is Amazon Nova Lite. The application validates schema and references, checks evidence revisions, and applies a deterministic severity floor.
The model sees at most 32 representative evidence events plus aggregates. That is a context bound, not a lifetime limit: accepted evidence remains stored. Unchanged evidence can reuse an eligible assessment. Routing reuse, explicit assignment and model-outage fallback may avoid the routing inference call. Errors remain visible rather than becoming fabricated success.

Open Source: IncidentBridge
IncidentBridge is a separate Apache-2.0 Python toolkit for canonical, provenance-aware incident events. It provides a strict Pydantic contract, normalization adapters, idempotency keys, conflict digests, conservative metadata, JSON Schema and an offline validate/emit/replay CLI.
Aenea imports and calls IncidentBridge during ingestion. The toolkit can also be installed and used independently without Aenea or an AWS account. Source provenance still requires consumer authentication; the package does not turn sensor text into proof of safety.
Repository: https://github.com/tanvir4hmed/incidentbridge
Contribution: https://github.com/tanvir4hmed/incidentbridge/commit/34724972e3fff30555da63ecb025722108dbe7ea
GitHub username: tanvir4hmed
Challenges we ran into
The hardest work was keeping asynchronous reports trustworthy: duplicate deliveries, overlapping scenario selections, late events, concurrent first alerts and assessments finishing after newer evidence had arrived. Stable identities, conditional writes, revision checks and explicit lifecycle states address those boundaries.
Cloud deployment also exposed permissions that are easy to miss in least-privilege policies: resource tagging, default-bus scheduler rule ARNs, AgentCore runtime/endpoint creation and IAM role-cleanup reads. Cognito resource binding and browser token refresh needed careful alignment with MCP authentication. These issues shaped the deployment templates and recovery instructions.
Accomplishments
The result is one connected workflow rather than disconnected mock pages. Saved device definitions inject inputs into durable processing; incident state, the map, conversational reads and history use the same records. Model outputs are validated and traceable to evidence.
The implementation has offline regression coverage for ownership, retries, concurrency, state ordering, stale publication, resolution, cleanup, MCP transport and authentication. These checks are distinct from native-device integration or a production safety certification.
What we learned
Incident coordination needs explicit uncertainty and clear state transitions. “No active signal shown,” “sensor reported clear,” “I have seen this,” and “incident resolved” mean different things. A comfortable interface depends on preserving those distinctions while keeping the user's interaction short.
AgentCore hosting, Strands orchestration and Bedrock inference are complementary layers. MCP makes shared incident operations reusable; deterministic application boundaries keep routing, identity and freshness accountable.
What's next
Future work includes broader incident-question understanding, measured hosted performance and accessibility improvements, and authenticated real-device adapters entering the same event contract. Physical actuation and emergency-service integration are outside the current scope.
Aenea currently uses simulated device inputs and a browser representation of Alexa+ interaction. It does not control physical devices, verify occupancy or call emergency services.
Cost and operational feasibility
For a defined light workload—20 test users, 3,000 reports, 1,600 model calls and 100,000 API requests per 30-day month—our illustrative AWS budget is $4–8/month before credits/free allowances, taxes, domain registration and development subscriptions. The calculated gross subtotal is approximately $4.21–4.41 under explicit token, CPU/memory, duration, storage and logging assumptions. This is not a measured account bill or a production guarantee.
The minute simulation rule and five-minute cleanup rule total 51,840 scheduled Lambda invocations/month. Empty ticks do not invoke Bedrock; under 256 MB/0.1-second and small DynamoDB lease/query assumptions, their incremental overhead is approximately $0.14/month before logs/storage. Active delivery and model inference add usage.
The model accounts for runtime v1/v2 consumption-rate sensitivity and does not assume CloudFront flat-rate plans. We preserve bounded model input, unchanged-evidence reuse, hidden-tab polling suppression, finite runs and selective deployment. Larger workloads require measured request units, tokens and runtime consumption.
Full assumptions, calculations and official pricing references: https://github.com/tanvir4hmed/aenea/blob/main/docs/operations.md#cost-estimate
Try it
Application: https://aenea.qleam.com
User guide: https://aenea.qleam.com/guide
Source and setup: https://github.com/tanvir4hmed/aenea
The welcome screen displays shared guest access. Use fictional test data: users of that guest identity share the same test workspace.
Built With
- amazon-bedrock
- amazon-cloudfront
- amazon-cognito
- amazon-dynamodb
- amazon-eventbridge
- amazon-web-services
- aws-lambda
- aws-step-functions
- bedrock-agentcore
- github-actions
- incidentbridge
- javascript
- mcp
- python
- react
- strands-agents
- terraform
- vite

Log in or sign up for Devpost to join the conversation.