Inspiration
Karsi started from a simple observation: people rarely struggle because they cannot create a to-do list. They struggle because they have to continuously remember, interpret, prioritize, schedule, coordinate, and follow up on dozens of small responsibilities.
That invisible work creates mental load.
We wanted to build something that feels less like another productivity tool and more like an intelligent layer on top of everyday life: tell Karsi what is on your mind, in natural language or voice, and let the agent turn it into something actionable.
Before the hackathon, Karsi already had a working foundation for personal and household task management, including authentication, PostgreSQL/Prisma persistence, shared spaces, a dashboard, and Telegram-based text and voice capture.
For the hackathon, we focused on transforming that foundation into a true agentic planning experience through a shared Agent Core, a Web Agent, multi-turn clarification, deterministic planning, conflict resolution, and a unified daily Agenda.
What Karsi does
Karsi is an AI planning agent for managing mental load and everyday coordination.
A user can say things like:
"Tomorrow I need to pick up my child. It will take 15 minutes and I need 20 minutes to get there."
Karsi understands the intent, creates the task, asks only for missing information, considers preparation and recovery time, checks the user's existing schedule, detects conflicts, proposes alternatives, and waits for confirmation before making changes.
It does not invent planning details that matter. If duration, preparation time, recovery time, or another required detail is missing, Karsi can ask a short clarification and continue the same planning flow once the user responds.
If a conflict exists, the conversation can continue naturally. For example:
"No, better at 1 PM."
Karsi evaluates the counteroffer against the user's schedule and either accepts it or proposes another valid alternative.
Users can also ask:
"What does my day look like tomorrow?"
Karsi builds a unified view of the day's commitments and provides both a conversational summary and a chronological visual Agenda.
The Web Agent is the primary experience for the submitted project. The same shared Agent Core also supports Telegram as an optional capture channel, including voice input.
Beyond planning, Karsi can capture tasks, reminders, decisions, and notes from everyday natural language.
How we built it
Karsi uses Gemini 3.7 Flash through the Google Gen AI SDK as the interpretation and conversational reasoning layer, while deterministic backend services handle scheduling, authorization, persistence, conflict detection, and state transitions.
The architecture deliberately separates the agent from its channels. Web Chat and Telegram are input/output adapters; the core agent logic lives in a shared, channel-neutral Agent Core.
The main flow is:
Natural language / voice → transcription → Gemini interpretation → clarification → deterministic planning → confirmation → action → persistent state
This separation is intentional. Gemini is used to understand what the user means and turn messy natural language into structured intent. Karsi's own scheduling engine then decides whether a proposed time is actually valid.
The Planner models real occupied time rather than only task start times. A planned task can include:
preparation → execution → recovery
This allows Karsi to reason about the complete time commitment rather than only the visible start time.
For example, if a 30-minute activity also requires 20 minutes of preparation, that preparation becomes part of the occupied interval used for conflict detection.
We also introduced a compatibility layer for older timed tasks. Instead of inventing a fake duration, Karsi treats them as uncertain temporal anchors and warns the user when a new plan may overlap them.
The planning layer is timezone-aware and handles relative temporal expressions such as "tomorrow", "this afternoon", or "next Friday" using the user's configured timezone.
The application runs on Google Cloud Run, with Cloud Scheduler supporting background processing. PostgreSQL with Prisma provides persistent state, while Next.js, React, and TypeScript power the web experience.
Challenges
The hardest part was not generating task data with an LLM. It was making an agent behave reliably across multiple conversational turns while still making deterministic, testable decisions.
We had to solve problems such as:
- preserving state across clarifications;
- distinguishing a clarification response from a completely new request;
- preventing stale sessions from intercepting new conversations;
- ensuring planning actions are only executed after the corresponding entity has actually been materialized;
- detecting hard conflicts versus uncertain scheduling conflicts;
- handling user counteroffers such as "No, better at 1 PM";
- preventing the Planner from suggesting time slots that are already in the past;
- reasoning about preparation and recovery as part of the real occupied interval;
- keeping voice and text inputs on the same Agent Core pipeline;
- making retries, reminders, and scheduling operations idempotent;
- ensuring the agent never reports success when an execution actually failed.
One important architectural challenge was deciding where AI reasoning should stop and deterministic application logic should begin.
Letting the model directly decide whether activities overlap would make scheduling less predictable and harder to test. We therefore use Gemini for understanding intent and conversation, but calculate conflicts and available time slots deterministically.
Many of these issues only appeared during real multi-turn usage, so we combined automated integration tests with repeated manual conversational testing.
What we learned
The biggest lesson was that useful agents need both probabilistic and deterministic systems.
Gemini is extremely valuable for understanding what people mean, extracting structured intent, and handling natural conversation. But operations such as scheduling, conflict detection, authorization, persistence, and state transitions benefit from explicit deterministic rules.
We also learned that clarification is a feature, not a failure.
A short question such as asking how long something will take is often much more useful than confidently inventing a value and creating the wrong plan.
Another important lesson was performance. During the final stages of the project, we found that Gemini's reasoning depth had a significant impact on interaction latency. Using a lower thinking level for the bounded interpretation step substantially reduced response times while preserving structured-output reliability in our tests.
Finally, we learned that the best experience is not necessarily replacing the tools people already use. Karsi's long-term direction is to become the intelligent coordination layer across them — understanding mental load, planning work, and connecting that intelligence to existing calendars and communication tools.
What's next
The next major step is calendar integration, starting with Google Calendar, so Karsi can reason about the user's real external schedule without requiring duplicate data entry.
We also want to expand Planner coverage so more everyday tasks can move naturally from capture into planning when appropriate, improve proactive notifications, and strengthen coordination across shared spaces.
The longer-term goal is for Karsi to become the intelligent layer that understands what needs to happen, coordinates it across the tools people already use, and reduces the amount people have to keep in their heads.
Built With
- auth.js
- gemini-3.7-flash
- google-cloud
- google-cloud-run
- google-genai-sdk
- google-oauth
- grammy
- next.js
- node.js
- postgresql
- prisma
- react
- telegram-bot-api
- typescript
- web-audio-api
Log in or sign up for Devpost to join the conversation.