ONLINEcascade://samwarren.iov0.1.0
all projects
FIRING · PROD · DAILY
OPERATING SURFACE · PROD· 03 / 08

RevOps Cockpit

A unified UI for three agent engine layers.

A single-pane Next.js cockpit for the work the Marketing Ops Agent used to do as a stack of Claude skills. Three engines — Identity (dedup, title hygiene, HubSpot orphans), Attribution (24-rule LeadSource decision tree), Sync (post-merge regression detection) — share a gather → reason → review → apply → log → eval → scan pattern. Python pipeline drives state, Next.js drives the review surface, JSONL drives the audit trail and the eval harness. The continuous learning loop is the durable part: when a rule-action-confidence stratum hits >95% agreement for two weeks, it graduates from supervised to auto-apply.

3
ENGINES
6
SOURCE SYSTEMS
25
PIPELINE SCRIPTS
95%
AUTO-APPLY BAR
PROBLEM

The Marketing Ops Agent worked. It just didn't have a face.

The skill bundle ran my RevOps for months. Attribution at 95%, dedup at 35+ rules, hygiene at 54% auto-fix, a weekly refresh handling the operational tax. The numbers were real. The workflow wasn't.

Five skills meant five places to look. Five places state lived, five places audit got written. Cron-style scheduling against Claude skills is awkward in the first place, and 'what rules am I overriding the most this week' was a question I could only answer by grepping memory at the terminal. The next move — supervised to auto-apply — needed a coverage number and an eval harness, not a feeling.

The agent was the right architecture for exploration. It wasn't the right architecture for the next step.

APPROACH

One Next.js cockpit. Three engines. The same seven-stage pattern under each.

RevOps Cockpit is a local-only Next.js 14 app that consolidates the agent's work into a single review-and-apply surface. Three engines — Identity, Attribution, Sync — each follow the same shape: gather → reason → review → apply → log → eval → scan. Different domain, same skeleton.

Nothing about the agent gets rewritten. The Python pipeline is still the source of truth for anything that mutates Salesforce. The cockpit spawns scripts via child_process and streams stdout back over SSE. Rules live where they always lived — versioned Python modules, not app code. The cockpit's job is to surface what the engine proposes, let me approve or override, and write every interaction to JSONL for the learning loop downstream.

Python is the engine. Next.js is the surface that lets me steer it.
WHAT'S INSIDE

Three engines and four cross-cutting surfaces.

The engines:

  • ·Identity — dedup pair queue with live Apify NMLS + Common Room + ZeroBounce enrichment per row. Title hygiene with rule-based reasoner + Claude Haiku augmentation. HubSpot orphan classification + archival.
  • ·Attribution — 24 priority-ordered rule files (insurance, churn_winback, sponsorship, group_demo, outbound, demo_request, direct_signup, and more) drive an 8-field patch panel per opportunity. SF Apply uses a re-fetch guard so concurrent edits don't silently win.
  • ·Sync — detects five regression types (field_overwrite, dupe_recreated, master_deleted, mikasa_resurrected, hs_orphan_resurrected) that show up downstream of Hightouch syncs. Each has a tailored fix action with a confirmation gate.
  • ·Today dashboard — live engine counts, top-priority panel, scheduled-task strip showing the cron board's health at a glance
  • ·Scheduled — full launchctl introspection per registered task, with run-now / disable / enable buttons and a 5-entry status history
  • ·Continuous Learning — 7d/30d/all-time engine-vs-applied agreement, override patterns grouped by (rule, field, before → after), eval harness output when it's available
  • ·Log — append-only JSONL audit tail across every Apply across every engine
THE LEARNING LOOP

Supervised today. Auto-apply when the math says it's safe.

Every Apply logs both the engine's original suggestion (engine_proposed) and my final value. The override scanner diffs them and groups divergences by (rule, field, before → after). The Continuous Learning page shows agreement windows + the rules where the engine and I disagree most.

The graduation criterion is explicit. When a (rule, action, confidence) stratum hits >95% agreement for two consecutive weeks, that stratum becomes a candidate for auto-apply. I supervise edges. The engine handles the routine. The cockpit is what makes the graduation decision provable instead of vibes-based.

I supervise edges. Engine handles the routine.
OUTCOME

The same role's worth of work, with a surface to ship from.

The cockpit went live mid-2026 against an attribution log with 256+ historical entries — the eval baseline. Identity dedup is running through nightly batches at 50 pairs per session. Attribution runs three times a day under launchd (9am, 12pm, 3pm). Sync regression detection is live. Title hygiene and HubSpot orphan archival are queued for the same treatment.

The work didn't change. The view on it did. The work now has a coverage number, an agreement metric, and a UI my future self can reason about. The agent layer is still there — same Python, same rules, same memory. It just has a face now.

▸ components

What’s inside

Identity engineDedup pair queue, title hygiene, HubSpot orphan archival — live Apify NMLS + Common Room + ZeroBounce enrichment per row
Attribution engine24-rule LeadSource decision tree, 8-field-per-opp patch panel, SF Apply with re-fetch guard
Sync engineFive post-merge regression types — field overwrite, dupe recreated, master deleted, mikasa resurrected, HS orphan resurrected — each with a tailored fix action
Today dashboardLive counts across all three engines + scheduled cron board + top-priority panel
Continuous Learningengine_proposed vs applied diff, 7d/30d/all-time agreement windows, eval harness replays 256+ historical attribution decisions
Scheduled tasksmacOS launchd cron board — live launchctl introspection per task, run-now / disable buttons, status JSONL history
▸ stack
next.js 14typescriptpythondopplerlaunchdshadcn/ui
▸ connects to
see full graph
NEXT · 04 / 08
Customer Intelligence Hub
Customer intelligence on demand — briefings, decks, signals.