Skip to content

Telegram UI batch, 2026-06-10

Justin asked for app-style productivity UI inside Telegram (Todoist/TickTick/Notion affordances without opening the app), approved the full menu, and wants to try everything then give feedback.

Shipped (commits 14b4d64, cfe19b1, a08f145, 8795a19 + housekeeping)

Feature Surface Files
Checklist forms (toggle + Submit + table links) /todos [brand], /tasks, brain tool tasks_form scripts/forge_telegram_checklist.py (engine, chk prefix)
Quantity-aware habit counters (➕ per tap, ✓ all, progress 3→5/15) /habits, brain tool habits_form same engine; goals from Habit Definitions Goal qty/Unit
Unified Today (calendar block + mixed due-tasks + habits form) /today, brain tool today_form push_today_form(); per-item kind override
Inline date picker (month grid, quick picks) setting Notion Due 📅 button on task rows scripts/forge_telegram_datepick.py (cal prefix, action registry)
Focus timer (detached self-editing countdown) /timer [min] [label] scripts/forge_telegram_timer.py
Quick-bar reply keyboard /keyboard on\|off coordinator fast-path
Slash-command menu registration BotFather-free, re-runnable scripts/forge_telegram_set_commands.py
Tap-lag fixes: keep-alive session in shared tg(), answer-first, keyboard-only edits, batch coalescing fleet-wide forge_telegram_format.py, coordinator

Latency measured: single toggle 1.0s to 0.5s; 5-tap burst ~5s to 1.4s. Form/pick state JSON under data/telegram_checklists/ + data/telegram_datepicks/ (gitignored, auto-pruned at 7d). Full mechanics: memory topic reference_telegram_checklist_forms.md (Claude project level).

Probed and closed

  • Native sendChecklist (Bot API 9.1): returns PREMIUM_ACCOUNT_REQUIRED on this bot. Inline-keyboard forms stay canonical.

Blocked on Justin

  • Inline mode (search Notion from any chat via @forge_lifeos_coordinator_bot query): owner must run BotFather /setinline on the coordinator bot. Handler not yet built; build after he enables it.

Staged next round (waiting on his feedback from this batch)

  1. Wellness polls: native Telegram poll (energy 1-5) feeding the wellness log; needs poll_answer handling in the poller.
  2. Undo buttons on destructive actions (60s reverse window).
  3. Status-cycling task buttons (Backlog → Doing → Done) as a new checklist kind.
  4. List templates: /list grocery style throwaway checklists, no Notion backing.
  5. Habit streak charts as images (data already in forge_habits_streaks.py).
  6. Eisenhower triage cards for the capture inbox.
  7. Mini App: web_app keyboard button opening tasks.justinsforge.com inside Telegram; the long-term play for kanban/charts.
  8. Tool catalog prune + tg()-consolidation follow-ons from the 2026-06-09 fleet audit remain open.

Gotchas for the next session

  • One long-poller per token; never test by starting a second poller.
  • Coordinator must be restarted after editing any module it imports (checklist, datepick, format); capture/notify/general/bridge only consume forge_telegram_format, restart them on shared-module changes.
  • chk/cal prefixes register at import time in the coordinator; the toggle batcher in the coordinator loop matches chk:t:/chk:f: literally.
  • Counter Submit writes Quantity ABSOLUTE (base + staged); never convert to delta.

[Claude Code, telegram UI batch session, 2026-06-10]