Skip to main content
Paul Welty, PhD AI, WORK, AND STAYING HUMAN

2026-04-03

What shipped today

API dispatch: the ToS escape hatch is complete

The big engineering story today is the API dispatch path — the insurance policy against Anthropic’s subscription-automation ToS concern. Three issues (#671, #672, #673) shipped as a clean dependency chain: dispatch_method config in the orchestrate loop, a dev task in skopos, and skill alignment so both execution paths (interactive tmux vs API skopos) produce equivalent results. Set dispatch_method = "api" in a workspace and the orchestrate loop calls skopos.py instead of claude -p. The deterministic context injection, cost tracking, and agent runtime are all skopos’s — no new infrastructure needed.

The dev-loop skill got rewritten for direct-to-main workflow (no branches, no PRs), and the skopos dev skill now includes Discord notifications and Sentry resolution steps. Three dispatch methods documented in DECISIONS.md: tmux (default), cli (dormant), api (new).

Charlie can read email and audit docs

Two new CLI commands. paulos mail check scans the Fastmail inbox via JMAP Email/query + Email/get, categorizes messages (deploy alerts, errors, prospect replies, human messages), and displays them with age and unread markers. paulos cos audit-docs iterates context file sizes across the fleet, flags anything over 15K chars, and optionally files GitHub issues on bloated repos. Both have full test suites.

Context docs tightened by 10.5K chars

PRODUCT.md lost its redundant Features reference section (−21%), DECISIONS.md lost 4 stale entries (−29%). Total paulos context injection down from 58.7K to 48.1K. The audit command we built today was immediately dogfooded to find the bloat.

Sentry pipeline reconnected

The biggest discovery of the day: Sentry SDKs have been installed on authexis and eclectis all along, reporting errors to the synaxis-ai Sentry org. But paulos sentry triage wasn’t scanning them because the project slugs weren’t wired into paulos.project.toml (eclectis) and .scout.yml (all projects). 13 unresolved errors sitting there — nobody looking. Fixed the wiring: both projects now scanned on triage, org field added to all scout configs. The 24-hour cutoff correctly avoids filing old issues.

Infrastructure research: all four platforms mapped

Parallel research on Sentry, Vercel, Railway, and Supabase webhook/alerting capabilities. Railway and Vercel both support outgoing webhooks for deploy events with Discord/Slack integration. Sentry has full webhook + native GitHub integration. Supabase has database webhooks and a Prometheus metrics API. The fastest path: add Discord webhook URLs directly in Railway/Vercel dashboards (5 minutes, zero code).

Agency skills overhaul

Major restructuring of the agency skill system in the synaxis-ai session (reflected in paulos via symlinked skills). New architecture: agency-loop, agency-work, agency-onboard, agency-engage, agency-ask. Trina retired as a separate triage skill — her logic folded into agency-loop. Persona restructure: character.md + skills.md paths. Review flow fixed: Alex → Review (Paul) → Approved (Trina delivers).

Completed

  • #671 — Add dispatch_method config to orchestrate loop
  • #672 — Add dev-loop task to skopos for orchestrate API dispatch
  • #673 — Align skopos-skills with Claude Code skills for consistent dispatch
  • #670 — Revert orchestrate dispatch (closed: already resolved operationally)
  • #669 — Build API-key fallback for orchestrate loop (decomposed, all sub-issues shipped)
  • #668 — Add email inbox check to Charlie ops loop via Fastmail JMAP
  • #662 — Weekly context doc audit across all workspaces
  • #660 — Audit and tighten canonical docs that bloat orchestrate prompts
  • #658 — Model routing: which model for which jobs

Carry-over

  • #665 — Infrastructure sweep: research done, quick wins identified (Railway/Vercel Discord webhooks), needs Paul to configure in dashboards
  • #659 — Context loading: mostly resolved by API dispatch path, remaining question about tmux sessions
  • #657 — /start: keep for Paul or deprecate? Product direction question
  • #656 — Auto /close at 8pm: needs dispatch path decision
  • #564 — Replace call_llm(): design decision pending
  • Sentry backlog — 13 unresolved errors across authexis (11) and eclectis (2). Pipeline now catches new ones; old backlog needs manual eyeball
  • diktura Railway healthcheck — still broken (#56 in diktura repo)

Risks

  • Sentry errors accumulating silently — Pipeline is now connected, but 13 old issues are unaddressed. Most are TimeoutErrors and a 429 rate limit on authexis. None are critical but the accumulation pattern is concerning — these have been piling up since mid-March.
  • No continuous health monitoring — Railway only checks healthchecks during deployment. diktura-engine could be down right now with no alert. Webhook setup helps for deploys but not for post-deploy failures.

Flags and watch-outs

  • dispatch_method = "api" is untested in real orchestrate runs — it’s wired and tested with mocks but hasn’t been used in production yet
  • The 19 pre-existing test failures in test_orchestrate_loop.py are from a _run_cli return signature change and _notify refactor — both predate today’s work
  • Agency skills changed significantly today (synaxis-ai session) — paulos symlinks reflect these changes

Next session

  1. Configure Railway/Vercel Discord webhooks — the 5-minute quick wins from the infrastructure research
  2. Eyeball Sentry backlogsentry-cli issues list --org synaxis-ai --project authexis and --project eclectis to decide which of the 13 old issues need attention
  3. Fix diktura Railway healthcheck (#56) — three days unaddressed, production is silently broken
  4. Test API dispatch in production — run paulos orchestrate run -p <project> with dispatch_method = "api" on a real workspace
  5. Run /sum-up and /reflect for today

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.

The inbox nobody reads is the one that matters

Every organization has a monitoring system that works perfectly and reports to nobody. The gap between having information and acting on it is where most failures actually live.

The best customers are the first ones you turn against

Every subscription makes a bet that most customers won't use what they're paying for. The customer who closes that gap becomes a problem to be managed.

Delegation without comprehension is just prayer

The organizations that survive won't be the ones that automated the most. They'll be the ones that figured out what to stop delegating.