Inspiration
Shift changes are a surprisingly fragile point in operational work. Important context gets scattered across messages, notes, photos, and verbal updates, while the incoming team has to reconstruct what happened and decide what still matters. We wanted to build an agent that follows the work itself across the shift, rather than generating another summary at the end.
What it does
Shift Handoff maintains an append-only operational event history throughout a shift. Reports become structured events, deterministic logic derives the current state, and resolved work is filtered out of the final handoff. When reports conflict, the agent refuses to decide on behalf of a human and instead surfaces the disagreement for explicit review. Human decisions are attributed and recorded as new events, and can later be reopened without deleting or rewriting previous history. The next shift receives only unresolved work, blockers, and conflicts that still need attention.
How we built it
The application is built in TypeScript around a deterministic event-sourced domain model. AWS Strands provides the agent/tool layer, while Amazon Bedrock powers natural-language interpretation. The deployed agent runs on Amazon Bedrock AgentCore Runtime. Operational events are persisted in DynamoDB, and current state is reconstructed by folding the event history rather than storing mutable derived state. The frontend exposes current state, event history, tool traces, human-review conflicts, evidence, and the generated handoff.
How AI is used
The model interprets natural-language requests and selects structured tools, but it is deliberately not the source of operational truth. Validation, lifecycle transitions, conflict detection, human-authority checks, persistence, and handoff generation remain deterministic. The model cannot silently resolve a conflicting claim or fabricate who authorized a human decision.
Challenges we ran into
The hardest part was drawing a clear boundary between agent reasoning and operational authority. We also had to make persistence safe across AgentCore sessions, prevent durable test runs from contaminating one another, handle explicit human decision/reopen semantics, and keep the UI auditable without overwhelming the user. Bedrock throttling and model tool-use reliability also forced us to make the surrounding system resilient rather than depending on perfect model behavior.
Accomplishments that we're proud of
We ended with a deployed AgentCore application backed by DynamoDB, a deterministic append-only history, explicit human-authority gates, attributed decision and reopen events, durable state across sessions, and isolated remote smoke tests. The project currently has 321 passing automated tests, clean TypeScript checks across both the root project and AgentCore package, and a reproducible demo/video pipeline.
What we learned
The main lesson was that reliable agents benefit from having less authority, not more. The LLM is most useful at the boundary where messy human language needs to become structured intent. Once that intent enters the operational system, deterministic code is much better suited to deciding what is valid, what changed, and what can safely be handed to the next shift.
What's next for Shift Handoff
The next steps would be authenticated user identity and role-based authorization, durable cloud storage for photo evidence, richer multimodal evidence interpretation, retention/backups for operational history, and integrations with existing warehouse, maintenance, facilities, and incident-management systems.
Built With
- amazon-dynamodb
- amazon-web-services
- bedrock
- strand
- typescript
Log in or sign up for Devpost to join the conversation.