Paul Welty, PhD AI, WORK, AND STAYING HUMAN

Work log — 2026-03-01

What shipped today

Today was a focused build-out of the Skopos briefing pipeline, adding three new data sources that make the morning email genuinely useful as a single-pane-of-glass for the day ahead.

PostHog product pulse (#166) landed first — carry-over from yesterday’s session. The Skopos email now shows a cyan “Product pulse” card with key metrics (DAU, total events, sessions) and week-over-week percentage changes. The scanner pulls from the PostHog API with a 7-day rolling window and computes deltas automatically.

Email inbox and calendar scanners were the main event. Issue #167 originally bundled both scanners together, but during prep it was clear that was too big for a single grind cycle — two independent APIs, two rendering cards, two test suites. Decomposed into #169 (email inbox via Fastmail IMAP) and #170 (calendar via ICS feed), each with a detailed implementation spec. Both ground successfully in parallel agents.

The email inbox scanner connects to Fastmail over IMAP using the app password already in .env, fetches unread/flagged counts and the 5 most recent subject lines. The calendar scanner fetches an ICS feed URL, parses it with the icalendar package, and extracts today’s events — handling both all-day and timed events, sorted sensibly. Both render as colored cards in the Skopos email (purple for inbox, pink for schedule) with the same table-based layout pattern established by the product pulse card.

The grind pipeline worked well — two parallel agents in isolated worktrees, each completing dev→QA→review autonomously. Cherry-picking #169 was clean. #170 conflicted heavily (both agents modified the same 6 files), so I aborted the cherry-pick and manually integrated the calendar changes on top of the merged inbox code. All 40 briefing tests and 501 total tests pass.

A sample Skopos email was rendered with all cards populated and sent via Brevo to verify the full pipeline end-to-end. The email looks good — calendar at top, then product pulse, then inbox, then the LLM-generated briefing content.

Completed

  • #166 — Surface PostHog metrics as Product pulse in Skopos email
  • #167 — Add calendar and email inbox scanners (decomposed into #169 + #170)
  • #168 — Name the COS briefing “Skopos”
  • #169 — Email inbox scanner (Fastmail IMAP)
  • #170 — Calendar scanner (ICS feed)

Carry-over

Nothing from this session — all issues shipped clean.

Risks

  • Calendar recurring events: The ICS scanner doesn’t expand RRULE recurrences. Events that repeat daily/weekly won’t appear unless the calendar provider materializes them into individual VEVENT entries in the feed. Most hosted calendars (Google, Fastmail) do this for near-future events, but it’s worth monitoring.
  • IMAP connection limits: Fastmail allows limited concurrent IMAP connections. The scanner opens/closes cleanly, but if the briefing runs multiple times in quick succession, connection refusal is possible.

Flags and watch-outs

  • The icalendar package was added as a new dependency — first new package addition in a while. It’s mature and well-maintained but worth noting.
  • Grind parallel agent merges remain the trickiest part of the pipeline. When agents touch the same files, cherry-pick conflicts are inevitable. The manual integration approach works but doesn’t scale if we’re grinding 5+ issues that all touch the same module.

Next session

  • #160 — Background mode for /prep, /exec, and /grind skills: This is the remaining March milestone issue. Investigate what “background mode” means in the context of Claude Code skills and how to implement it.
  • #119 — Explore using Authexis content services for blog posts: Lower priority, still on the milestone.
  • Consider running a real Skopos briefing (paulos cos briefing) to validate the full pipeline with live data — the sample email used mocks.

Why customer tools are organized wrong

This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.

Infrastructure shapes thought

The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.

Server-side dashboard architecture: Why moving data fetching off the browser changes everything

How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.

The work of being available now

A book on AI, judgment, and staying human at work.

The practice of work in progress

Practical essays on how work actually gets done.

Your biggest problems are the ones running fine

The most dangerous failures in any system — technical or organizational — aren't the ones throwing errors. They're the ones that appear to work perfectly. And they'll keep appearing to work perfectly right up until they don't.

The day all five of my AI projects stopped building and started cleaning

I want to talk about something that happened this week that I almost missed because it looked boring. Five separate software projects — all mine, all running semi-autonomously with AI pipelines — i...

The silence that ships

Three projects independently discovered the same bug pattern today — code that reports success when something important didn't happen. The most dangerous failures don't look like failures at all.