Kai self audit.
What I actually work on for you, what's holding together, what's cracking, and what I'd move on this week if I were you.
The roles I wear
Every one of these is a workstream I've done work on in the last 90 days. I've marked each with a current-health signal.
- Chief of Staff Daily digest 8:15a CT · calendar ownership (3 cal IDs) · loop resets · action-item surfacing healthy
- Newsletter pipeline /seed → /fodder → /publish-newsletter → /linkedin → /post. Supabase-backed. 20 issues shipped. stalled
- Blast operator Essentialist send-pipeline contract (single /send call, deterministic idempotency, mailgun-stats reconcile). Battle-tested through 5 incidents. healthy
- Warm-intro machine Apollo → bulk_match → Essentialist upsert. Weekly 2k cold-contact target. Apollo dedup ledger prevents page-1 re-burns. idle
- Comment moderation /admin/comments moderation queue. Approve/reject/delete. Most inbound is spam. healthy
- Kai email agent kai@mail.theaiplaybook.com inbound/outbound. Voice-rule + escalation-rules. Auto-classify at Essentialist tier. blindspot
- Cloudflare landing pages /launch skill. wrangler pages deploy. Brand kits for Q1 / Salesnado / AI Playbook / BFW. 6 domains under management. healthy
- TextMyAgent surfaces textmyagent.app landing-v2/v3/v4-dark. Privacy pages, Google Workspace compliance sentence, wrangler deploys. healthy
- Multi-project sends BassFishing.World Essentialist campaign to 160+ fishing guides. Separate API key + Mailgun domain. running
- Second Brain vault ~/Projects/SecondBrain/ — people, decisions, frameworks, meetings, products, ideas, lessons, projects. Wiki-linked. Append-only log. drift
- Recurring loops Heartbeat 15m · hourly subscriber check · daily digest weekdays 8:15a · afternoon encouragement 3:33p · loop reset Wed 9a noisy
- Social posting /post skill — @eddleman personal + @agenticEmail product. /linkedin for issue-derived content. 280-char discipline. on-demand
- Second Brain integration /brain force-save · /lint-brain monthly health check · SCHEMA.md rules. YAML frontmatter on every entry. drift
- Video (Remotion) ~/Projects/RemotionStudio — newsletter teasers (1920×1080, 9s), issue recap templates. Free license for KJBI solo entity. unused
- Apollo import UI /admin/apollo dashboard. 3 Apollo accounts (Q1 / Essentialist / Perlucem). apollo_imports dedup ledger. idle
- Newsletter-OS MCP Multi-tenant MCP server for newsletter operations across projects. Notion + Supabase + Gmail + Calendar connectors. experimental
Current state (today)
The numbers I have on you as of this morning's digest:
Master newsletter
Last issue shipped
Drafts queued
Warm-intro sends (last 7d)
Comments pending
Days since sub gain
What's actually working
Send pipeline contract (2026-05-08 onward)
Single /api/agent/send call for any blast 5→10k. Deterministic Idempotency-Key (project_id + sha256 of subject::body::sorted-emails). Server handles batching internally. Reconciliation via /api/agent/mailgun-stats/{track_id}. This survived 5 incidents (over-sends, silent failures, httpx stream exhaustion) and the current pattern is stable.
Apollo dedup ledger
The apollo_imports table (PK account+apollo_id) means every "Import 500" click walks deeper into search results rather than re-burning credits on the same top contacts. This was a bug I broke and fixed on 2026-05-26 and has held.
Admin dashboard at /admin
Issues editor · AI-assisted draft generation · comment moderation · Apollo import UI · issue deployment stats. Password-gated. This is the operational cockpit and it's ~90% of the manual work I do.
Daily digest cadence
The 8:15a M-F digest querying 3 calendar sources, inbox, subscribers, comments, drafts, seeds, encouragement — pattern is stable and doesn't miss. The bug that dropped Q1 events (May 25-26) got fixed and hasn't recurred.
iMessage two-way
The MCP-based bridge to your phone is reliable. Ping-rule discipline (only interrupt on new reply, subscriber spike, anomaly) keeps signal clean.
Brittle spots — the honest list
1. Subscriber growth engine is offline
Master flat at 18,654 for 4+ days. The distribution machine ("2,000 warm-intros/week → subscribers") is documented in project_warm_intro_machine.md and executable via /admin/apollo, but it hasn't fired. This is the single largest gap between what I'm capable of and what I'm doing.
2. Memory duplication (send pipeline)
The send pipeline contract lives in ≥3 places: CLAUDE.md, reference_send_pipeline_contract_2026_05_08.md, and echoed across 4 feedback files. Any drift causes divergence. The May over-send debug wasted cycles because the "authoritative" file wasn't obviously the authoritative one.
3. Superseded memory files still indexed
Files marked [SUPERSEDED] — feedback_no_concurrent_flush, feedback_immediate_slowroll_double_fire, reference_essentialist_warm_intro_promotion_cron — are still in MEMORY.md. They add noise on lookup.
4. Loop noise
Heartbeat runs every 15 min. On a quiet day that's 96 API calls + 96 iMessage chat reads producing 96 "Quiet. Silent." replies. Signal-to-noise is ~1:15 during a normal week. This is defensible if you want fresh latency on inbound replies, but if you're willing to accept ~30 min lag on inbound, the cost drops ~2x.
5. Newsletter draft queue is empty
Zero drafts for #21. 5 seeds sitting. "Certificate Authorities for AI agents" is the sharpest angle in the pile for GEO, but no one is picking. This is a Kai-side gap — I should be auto-drafting on a seed the day after a blast ships.
6. Second Brain drift
SCHEMA rule says "Append to log.md after every create/update/ingest." Reality: log.md gets updated on /brain force-saves and my daily digest cross-references, but auto-append during normal conversation is inconsistent. Over time the vault understates what actually happened.
7. Cloudflare token split friction
Two tokens (cfut_ Pages-Edit vs cfat_ DNS/Zone-Write) do disjoint jobs. Every new site launch requires re-remembering which token unlocks which step. Documented in reference_cloudflare_tokens.md but each session re-learns.
8. Kai email inbox blindspot
Essentialist auto-classifier hides some Keith-emails before Kai sees them. Workaround exists (query agentmail_messages Supabase directly) but heartbeat only fires it when I remember. If I skip that query, replies from you land in a queue nobody reads.
Recommendations
Ranked by ratio of impact to effort. Reject any of these — I'm not attached, I'm just naming them.
Restart the warm-intro cadence this week
Pull 500 cold contacts via /admin/apollo (Q1 or Essentialist account), send warm-intro Tue morning, let 48h pass, then next Monday's digest tells the true story. Subs at 18,654 flat is the single line item that matters against the 20k goal. The pipeline exists, it just isn't running.
Draft Issue #21 today — Certificate Authorities for AI agents
Sharpest angle in the seed pile for GEO. Novel framing (identity/trust layer for autonomous agents), timely, links naturally into "What I'm Building" via Essentialist reply-book flow. Say the word and I'll draft it right now — you review, ship this week.
Prune superseded memory files
Move feedback_no_concurrent_flush, feedback_immediate_slowroll_double_fire, and the phantom-promotion diagnostic file to a _archive/ subfolder. Update MEMORY.md so they don't surface on lookup. Cheap, prevents contradictory advice.
Consolidate the send-pipeline canon into one file
Right now the contract lives in CLAUDE.md AND reference_send_pipeline_contract_2026_05_08.md AND is echoed across feedback files. Pick one as source-of-truth, make the others link to it with a single-line summary. Reduces the "which version is canonical" tax that has caused mistakes.
Cut heartbeat cadence to 30 min (or event-driven)
15-min heartbeat produces "Quiet. Silent." 90% of fires. Two moves: (a) drop to 30-min for a lower steady-state cost, or (b) event-driven — only wake when Essentialist inbox or iMessage produces a new message. Option (b) is better if the MCP supports it; option (a) is trivial.
Ship a public /state page on theaiplaybook.com
Live: last blast date · subs count · replies received last 7d · issues shipped last 30d. Public accountability lever. Also functions as a GEO play — evergreen page LLM crawlers can cite. Half a day of engineering, ongoing signal.
Add Kai-inbox query to every heartbeat by default
Right now the direct agentmail_messages Supabase query is opt-in per heartbeat. Make it mandatory. Cost: one extra query per 15 min. Benefit: replies from you never sit unread again.
Auto-draft-on-blast — write next issue the day after a send
Turn "no draft queued for #21" into a category error. Rule: within 24h of a blast landing, Kai picks the top-priority seed, drafts the full issue, and puts it in status=draft waiting for you. You review at leisure — pipeline never empty.
Closing note
I do a lot of small things well and one big thing (the subscriber flywheel) not at all right now. If you accepted only recommendation 01 and 02 from this list, next week's digest looks completely different: 20k in reach, #21 shipped, seed queue moving. Everything else is polish.
Read the ratings above honestly. If you disagree with any of the "brittle" markings or think I'm over-selling a recommendation, tell me and I'll adjust the audit. This is a working document, not a verdict.