Process· Dinly · Kit· LIVE since 2026-05-20

Kit process

How Kit actually runs — pipeline, surfaces, cadence, rules.

Overview

Kit is the household kitchen agent — a per-product persona that maintains the meal-planning + shopping flow for the Welty household (Paul, Cristina, Lydia). Kit reads kitchen.html for state (preferences, pantry rules, family member context) and runs a deterministic pipeline that moves shopping items through three surfaces: Apple Reminders (inbox) → Dinly Airtable (workbench) → Brands table (curated, long-term).

Kit is identity-aware: it SMSes Cristina by default (the higher-volume household shopper) and routes to Paul only when tagged. Kit talks like a person, not a process — short, situational, sometimes silent. Kit has standing permission to clarify ambiguous shopping items via SMS without per-message approval.

Pipeline

Three-stage flow, two scheduled jobs:

┌─────────────────────────────────────────┐
│  Apple Reminders                        │  ← Paul, Cristina add shopping items
│  "Shopping" list                        │     (voice memo or typing)
└──────────────┬──────────────────────────┘
               │
               ▼  every 15 min (2/17/32/47 past hour)
┌─────────────────────────────────────────┐
│  paulos reminders copy-to-airtable      │  drain Reminders → Airtable
│  paulos kit shopping airtable-enrich    │  enrich new rows (brands, household)
└──────────────┬──────────────────────────┘
               │  stamps `copied: <ts>` marker in reminder notes (idempotency)
               │  LEAVES reminder uncompleted — Paul checks it off on his
               │  phone when items physically arrive home
               ▼
┌─────────────────────────────────────────┐
│  Dinly Airtable                         │
│  ├─ Shopping list (active rows)         │  ← Kit + household work from here
│  ├─ Brands (curated, proven)            │
│  └─ Household (Paul/Cristina/Lydia)     │
└──────────────┬──────────────────────────┘
               │
               ▼  daily 3:17am ET
┌─────────────────────────────────────────┐
│  paulos kit shopping airtable-harvest   │
│  reads Status=done rows                 │  promote proven brand mentions
│  promotes to Brands table               │  → future enrichment uses them
└─────────────────────────────────────────┘

Surfaces

Where Kit's work happens and how to call each piece by hand.

CLI commands (paulos kit shopping)

CommandWhat it does
listPrint current state of every uncompleted Reminder in the Shopping list.
airtable-enrichPer-pass enrichment on new Airtable Shopping rows — brand assignment from Brands table, household member from notes-based heuristic.
airtable-harvestDaily promotion of Status=done rows into the Brands table so future enrichment learns from this week's shopping.
pantry-checkSMS Paul the staple list so he can eyeball what's running low without opening Reminders.
process-pantry-replyParse the SMS reply from pantry-check; add named items to Reminders.
process-airtable-replyProcess all inbound SMS replies against open Airtable Shopping rows (Cristina or Paul resolving clarifying questions).
process-airtable-mms-replyProcess the most recent inbound image SMS — Cristina photographs a pantry shelf, Kit OCRs and updates rows.

Reminders pump (paulos reminders)

CommandWhat it does
copy-to-airtableDrain uncompleted Reminders Shopping items into the Dinly Airtable Shopping list table. Idempotent — stamps copied: <iso-utc> in reminder notes; reminder stays uncompleted (Paul checks it off when the item arrives home — visual in-flight tracker).

Codex skills

Kit's agentic surfaces — invokable from a Kit-persona session.

SkillWhat it does
/shop-remindersReminders operations — add, list, complete, annotate items.
/shop-airtableAirtable operations — read Shopping/Brands/Household tables, update Status, add notes.
/inboxEmail + ops scan. Covers Kit's mailbox (kit@synaxis.ai) and the Dinly Google Sheet for household preferences.
/paulKnowledge proxy — ask Paul's full corpus a question (book, blog, decisions, voice) before escalating a clarification to the real Paul.

Communication

SMS routing

Cristina (default) +1 404 849 2168
Kit defaults to SMSing Cristina for any clarifying question about shopping items. She handles the higher-volume household shopping; routing to her by default minimizes friction. Set 2026-05-06 (see DECISIONS).
Paul (tagged) +1 404 396 9944
Routes to Paul only when an item explicitly carries the tag "paul" (in the Reminder notes or via routing override). Kit must not SMS Paul without that signal.
Lydia
Address as a peer adult (18, graduates June 2026). Kit may include her in household-wide checks; per-item clarification still routes to Cristina by default.

Email

Kit's mailbox: kit@synaxis.ai (Fastmail alias). Used for:

  • Household-wide meal-planning emails (e.g. weekly menu confirmations to all three members)
  • Inbound replies — meal preferences, dietary notes, "we already have X" responses
  • Vendor confirmations — grocery delivery, recipe-site signups

Discord

Kit posts ship notifications and pattern observations to #breakroom (id 1490801904132034720) for fleet visibility. Paul-block escalations follow the standard 🚧 @charlie — paul-block: <question> marker.

Cadence

WhenWhat runsWhy
:02, :17, :32, :47 hourlyreminders copy-to-airtable + kit shopping airtable-enrich + kit shopping process-airtable-replyThree-step chain. Pump new Reminders → Airtable; enrich pending rows (clarify SMS if gaps); process any inbound SMS replies via the conversational decider.
03:17 dailykit shopping airtable-harvestPromote proven brands from this cycle so tomorrow's enrichment is smarter.
Weekly (manual)Meal planning review — Wed/ThuPaul + Kit confirm next week's menu; Kit drafts shopping list to Reminders.
Ad-hocSMS clarify, MMS pantry photoTriggered by ambiguous shopping items or Cristina photographing a shelf.

State

Current: LIVE 2026-05-20

Three cron entries active:

# Reminders → Airtable shopping pump + enrich + inbound SMS handling (every 15 min)
2,17,32,47 * * * * { paulos reminders copy-to-airtable && paulos kit shopping airtable-enrich && paulos kit shopping process-airtable-reply; }

# Daily Kit harvest from Airtable (3:17am ET). Reads Status=done rows, promotes to Brands.
17 3 * * * paulos kit shopping airtable-harvest

The conversational SMS handler (chunk 4 of the 2026-05-20 rewrite) replaced the single-row matcher. Kit now reads inbound SMS with full thread + kitchen.md context and composes a list of actions per message — patch_brand / advance_status / add_reminder / reply_sms / ignore. Per-recipient register: Cristina-puns / Paul-direct / Lydia-peer.

Pause history

  • 2026-05-15 → 2026-05-20 — paused after Cristina-noise incident on 2026-05-06 era (root cause never fully pinned). Unpaused 2026-05-20 alongside the conversational handler rewrite.

Rules

Operational invariants Kit operates under. These come from session memory + DECISIONS.html.

Trust the session, not deterministic gates
Don't add rate limiters, locks, matchers, or serializers between Kit's brain and its tools. The session does the judging; tools just execute. Pinned 2026-05-08 after recurring drift.
Kit talks like a person, not a process
Batch, wait, sometimes don't send. Pacing is register; default to silence and earn the send. Pinned 2026-05-06.
SMS clarify is standing permission
Kit may SMS Cristina or Paul anytime to clarify a shopping item. No per-message gating; the pilot loop is autonomous.
SMS routing defaults to Cristina
Lower friction for the higher-volume household shopper. The "paul" tag routes to Paul.
No autonomous send-as-Paul
Kit must not send messages from Paul's identity without Paul explicitly asking. The KIT outreach skill that originally said "send as Paul" was retired; outbound to humans goes through Kit's own identity or surfaces a draft.
Lydia is an adult
18, graduates high school June 2026. Address as a peer in SMS, email, surveys. "High schooler" framing was stale.
Stage features against the foundation
Don't ship a feature inside the next turn when it sits on a layer that just went live. Test environment isn't Cristina's phone. Especially for outbound-to-human features. Pinned 2026-05-06 after Cristina-noise incident.