An agentic anti-procrastination companion built for the Vibe2Ship hackathon (Coding Ninjas × Google for Developers), Problem Statement 1 - The Last-Minute Life Saver.
Most productivity tools send reminders. The behavioral-science research is unanimous that reminders don't work, because procrastination is an emotion-regulation problem, not a memory problem - people avoid tasks to escape the negative feelings the task triggers. Kairos intervenes on why a task is stuck, not when it's due.
- App (deployed via Google AI Studio → Cloud Run): kairos-987237200927.asia-southeast1.run.app
- Demo video: youtu.be/_E-VAFExu6Y
On the empty screen, click Load demo scenario to see the agent reason in seconds, then Connect Gemini to use your own key.
- Avoidance Diagnostician - reads your interaction signals (opens without progress, snoozes, reorders, estimate inflation) and infers the latent blocker, then asks targeted unblocking questions instead of nagging. It "thinks aloud" (streamed) before committing to a verdict.
- Minimum Viable Next Action - the smallest physically-doable step + an implementation intention ("When X, then I will Y").
- Unpack & re-estimate - decomposes the task and surfaces the planning-fallacy gap (naïve vs. realistic estimate).
- Cost-of-Delay + Pre-Mortem - quantifies and dramatizes the cost of slipping, then converts each imagined failure into a preventive action.
- Future-Self dialogue + Commitment lock - chat (streamed) with your post-deadline self, then lock a self-chosen commitment (drafted, approved by you, never auto-sent).
- Multi-agent debate - an advocate, a skeptic and a judge argue "do it now vs. it can wait", citing your task's own signals.
- Replan my day - orders your tasks into time blocks for momentum + deadlines, around your real Google Calendar, with a reason per block.
- Reflexion memory - when an intervention is ignored or a task slips, the agent writes a self-critique and prepends it to future reasoning.
- Reasoning Trace + Autonomy slider - every step (plan → act → observe → reflect) streams transparently; autonomy is a visible control (suggest / confirm / auto) and the agent can act on its own with an adaptive, self-backing-off intervention threshold.
- Habits (recurring tasks + streaks), voice input, browser reminders, light/dark theme, command palette (⌘/Ctrl-K), and a landing page.
- Accounts + cross-device sync (Firebase Auth + Firestore) - off by default; the app runs fully local otherwise.
- Vite + React 19 + TypeScript, Tailwind v4
@google/genai→ Gemini 2.5 Flash + Flash-Lite, structured output + streaming, with 429/503 exponential backoff- localStorage by default; Firebase Auth + Firestore when configured
- Vitest (unit), ESLint (flat) + Prettier, GitHub Actions CI
npm install
npm run dev # http://localhost:5173
npm run build # production build → dist/
npm test # unit tests
npm run lint # eslint
npm run format # prettier --writeThen click Connect Gemini in the app and paste a key from
Google AI Studio - or copy
.env.example to .env and set VITE_GEMINI_API_KEY. No key?
The task list and instrumentation still work; only the AI reasoning needs it.
New here? Click Load demo scenario on the empty screen to try the agent immediately.
| Feature | Env | Notes |
|---|---|---|
| Google Calendar | VITE_GOOGLE_CLIENT_ID |
OAuth client ID (Web app) with your origin allowlisted. |
| Accounts + sync | VITE_FIREBASE_* |
Enable Google / Email / Anonymous in Firebase Auth; publish Firestore rules (see SECURITY.md). |
This app is built and deployed with Google AI Studio (Build Mode → Publish),
which ships it to Cloud Run - that's the live link above. The Gemini key is
injected server-side by AI Studio at deploy time; VITE_* integrations
(Firebase, Calendar) are read from the AI Studio project's environment settings.
It also runs as a plain static SPA anywhere - e.g. Firebase Hosting:
npm run build
firebase deploy --only hosting # after `firebase init hosting` (public dir: dist, SPA: yes)VITE_* vars are inlined at build time, so build with your .env in place.
Tasks stay in your browser (and your own Firestore doc if you sign in) except the text sent to Gemini for reasoning. On the free tier prompts may be used for training - keep sensitive data out (the app surfaces this caveat too).
src/
types.ts # data model
store.tsx # KairosProvider - the agent brain + plan→act→observe→reflect
lib/
gemini.ts # AI capabilities + schemas + backoff + streaming
storage.ts # localStorage persistence
firebase.ts # guarded Firebase init
auth.tsx # AuthProvider / useAuth
firestore.ts # per-user snapshot sync
gcal.ts # Google Calendar
theme.ts notify.ts useSpeech.ts toast.ts seed.ts util.ts
components/ # TaskCard, ReasoningTrace, ReplanPanel, DebateModal,
# FutureSelfModal, CommandPalette, SettingsModal, AuthModal, …
App.tsx
See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md. Licensed under MIT.


