Daily Journal Check-In (AI Coaching check-in nudge)
An opt-in ritual inside AI Coaching: a gentle inbox nudge inviting you to journal with your coach — a short daily check-in, and a longer weekly review. Covers what the two interviews are, where the nudge time and weekly day are set, how the entries accumulate as versions of one artifact, and how they stay private to coaching.
What it is
Daily Journal Check-In is an opt-in ritual inside AI Coaching: a gentle inbox nudge that invites you to journal with your AI coach. Two kinds:
- Daily Check-in — a short (~5 minute) "unload your day" conversation: what happened, how you feel, what mattered, and anything to carry into tomorrow.
- Weekly Review — a longer, more reflective look back over the whole week: the wins, the hard parts, the patterns underneath, and an intention for next week.
The point is twofold: a place to get things out of your head, and — because it runs as a real coaching interview — a way to build context your coach can draw on later.
Your entries stay private to coaching. They enrich future coaching sessions (and your Core Profile), but they are never folded into the "Things to know about the user" block that ordinary sessions (like a coding session) receive. Journal in, and it informs coaching only.
Where to find it
Daily Journal Check-In rides on AI Coaching, so AI Coaching must be on for it to do anything.
- Set your nudge time and weekly review day in Settings → AI Coach. Default: 8:00 PM, weekly review on Sunday.
- To turn it off, toggle "Daily Journal Check-In" in Settings → Features.
The two interviews also show up on the AI Coaching Dashboard the moment they're seeded, so you can run a check-in anytime without waiting for a nudge.
How it behaves
- At your chosen time each day, a friendly card appears in your inbox: "Time for your daily check-in" (or, on your weekly day, "Time for your weekly review" — you never get both in one day).
- The card's "Start check-in" button launches the actual coaching interview. When you finish, your coach writes a dated entry, saved as a coaching artifact.
- Each day's entry accumulates as a new version of the same artifact ("Daily Check-in" / "Weekly Review"), so you build a browsable journal over time.
- The nudge only fires when it can actually succeed — AI Coaching on, the feature on, and a working API key present — so it never nudges toward a dead end. If the app was asleep at your nudge time, it catches up once on the next check and never double-fires.
- Snooze or dismiss the card like any inbox item; turn the whole thing off anytime in Settings.
Cost & privacy
Running an interview is a normal coaching session (you click to start it), plus the usual Haiku artifact-summary generation — it rides the existing AI Coaching cost caps, with no new spend path; the nudge itself is free. Entries are stored locally like every coaching artifact, and stay private to coaching (see above).
For agents
Under the hood
- Single source of truth:
src/shared/daily-journal.ts— the builtin interview ids, the artifact titles, the inbox dedup keys, theCOACHING_ONLY_ARTIFACT_TITLESset, and the pure scheduling decision (resolveCheckinKindForDay+shouldFireCheckin, both unit-tested with frozen clocks). - The two interviews live in
resources/ai-coaching-seed-prompts/ongoing.json(Daily Check-in,Weekly Review;sessionCategory: 'ongoing'), auto-seeded like every other coaching interview. - The nudge is raised by a small scanner,
src/main/services/ai/ai-coaching/session/checkin-scanner.ts(a 5-minutecreatePeriodicTasktick, modeled onfeature-nudge-scanner-service), gated ondailyJournalEnabled+aiCoachingEnabled+ a usable key + the interview being seeded. The once-per-period gate is the nudge's own inbox row (findLatestCreatedAtByDedupKey) — no extra table. Registered instartup/registry.ts, stopped inapp/shutdown.ts. - The nudge → interview launch is an
AlertInboxViewercarve-out (like the gmail-reconnect / stuck-task custom buttons): the "Start check-in" button calls the existingAI_COACHING_START_INTERVIEWIPC with a fixed constant promptId resolved from the dedup key — never user input. - Coaching-only is a persisted flag (
ai_coaching_artifacts.coaching_only, migration20260705220309) stamped at save from the artifact title, and excluded from the profile block at exactly ONE chokepoint —buildSessionProfileContextpasseslistLatestArtifacts({ includeCoachingOnly: false }). The Core Profile is itself coaching-session-only, so journals may safely feed it. - Contract + invariants:
daily-journal-contract.mdlocks the stamp/filter, the scanner gating, and the nudge carve-out — each to a named test.
Related
The coaching side of this — what a coaching session is, the interview library it draws on, and the Core Profile your journal entries feed — is on the AI Coaching page, with a practical walkthrough on the AI Coaching getting started page. If you would rather keep a journal that is not tied to a coaching interview, the plain Journal page covers that separate feature, and what this costs to run sits with the rest of the app's spending controls on the cost control page.
Last verified 2026-09-28