-
-
Morning: the agent builds the day across four services; two drafts wait for approval.
-
Midday: 40 minutes behind. The invoice promise to Tom is at risk, so a heads-up is drafted.
-
Evening: 2 promises kept, 1 renegotiated, 0 broken silently. The preference goes to memory.
-
Day 2, new session: DayLoop speaks first and moves a call that breaks yesterday's rule.
-
Under the hood: 23 MCP tools over Streamable HTTP.
Inspiration
Freelancers rarely lose a client because one day goes wrong. They lose them when a promise breaks and the client finds out first: the proposal that was "coming today", the invoice that was "going out tonight". Calendars and assistants manage time. Nobody manages the promises.
What it does
DayLoop is a simulated Alexa+ experience.
- Morning. "Alexa, build my day." The agent reads the calendar, task board, team chat and client inbox itself, moves an internal meeting out of a client-call clash, packs tasks by priority and checks every promise made to a client against the plan. It drafts a note to a blocked teammate and a reply with a real deadline to the client who is waiting.
- Midday. "I'm 40 minutes behind." It replans from 14:40, sees that the invoice promised to Tom no longer fits today while his bug fix still lands before his 16:00 call, and drafts an honest heads-up before Tom has to chase you.
- Evening. "Close my day. Everything's done except the monthly report. And no calls before 10 tomorrow." It scores the day (2 promises kept, 1 renegotiated, 0 broken silently), carries unfinished work over and saves the preference to memory.
- Next morning. A new session with memory only. DayLoop speaks first: a client booked 09:30 overnight, which breaks yesterday's rule, so it proposes 10:00 and drafts the note. The unfinished report goes first, and the renegotiated invoice lands before the noon it promised.
Nothing leaves DayLoop without your approval: every message and calendar move waits in an approval tray.
How we built it
- One tool registry. Four simulated service adapters (calendar, tasks, team chat, client inbox) plus memory and a planner: 19 tools with zod schemas and MCP annotations (readOnly, openWorld, destructive).
- A real MCP server. Built on
@modelcontextprotocol/sdkover Streamable HTTP (stateless). It serves the 19 tools plusdayloop_ask,dayloop_action,dayloop_stateanddayloop_reset, so any MCP client, an Alexa+ agent included, can drive DayLoop. The demo video runs the web app on top of this server. - Visible orchestration. The agent never touches state directly. Every action is a tool call shown live in the Agent Steps panel, and the send tool refuses without
approvedByUser: true. - Computed, not scripted. The planner (conflict resolution, learned preferences, priority packing), the promise ledger and Day 2 are all computed from state. Be 20 or 90 minutes late, or ask for "no calls before 11", and you get a different plan, draft and Day 2. Covered by tests.
- Echo Show style UI in React + Vite. State persists in localStorage in the browser and in a JSON file on the server.
- Built with Claude Code.
Challenges we ran into
Keeping a simulation honest: every card, number and draft had to come from state that really changed. Recording the demo against the final build caught a real bug: before Day 2 was planned, the promise ledger showed a renegotiated promise as "at risk". It was fixed and covered by a test before the final recording.
Accomplishments that we're proud of
The promise ledger as a first-class object, the "tell them before they chase you" heads-up, and a Day 2 that is built from memory alone.
What we learned
Agent orchestration is easiest to trust when every step is a visible tool call and every outgoing action needs a yes.
What's next for DayLoop
Swap the simulated adapter handlers for real calendar, task and inbox APIs behind the same tool names, and connect the MCP server to Alexa+ as a real integration.
Built With
- claude-code
- github
- javascript
- model-context-protocol
- node.js
- react
- streamable-http
- vite
- web-speech-api
- zod

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