undertow
rung 3 · 0.5 ms4 rungs never wokenllm calls 0
From the demo thread

Traces are pre-computed by the shipped cascade. Nothing on this page calls a model.

A reply falls until a rung is certain. The rungs above it never wake.

Undertow runs the post-reply sales lifecycle — intent, objection, delegation, scheduling, recovery — as a cost ladder. Classical rungs are the default path. The LLM is the escalation. The eval harness is the arbiter.

50 / 50acted precision · by action · full cascade
25 / 25acted precision · rung ≤ 3 alone
held-out · n=75 · through rung 6 · 2026-09-03

Why a ladder at all? Because the alternative is a furnace.

02 · the problem

Six agents per reply is a furnace, not an engine.

The obvious design fires an LLM agent for every capability on every inbound reply — intent, tone, calendar, routing, objection, recovery. Six calls. It works in a demo. At volume it is a budget line nobody approves:

10,000 replies / day
  × 6 agents
  × ~2,000 tokens
─────────────────────
≈ 120,000,000 tokens / day

Tools in this space charge per seat or per send. The cascade means most replies resolve at the cheapest rung — your cost scales with complexity, not volume. Unit economics only close if the majority of traffic is resolved for nothing and the model budget is reserved for the residue that needs it. And every reply waits for the slowest agent to finish — latency is the twin of cost.

A cost ladder puts the majority in milliseconds at ~0 cost and keeps the LLM for the replies that are actually ambiguous. On the held-out set the residue that reaches the top rung is 33.3% — one reply in three, not six calls in every one. A rung-3 answer takes microseconds; the reply is answered before a human would have seen it.

Some intents must never depend on a model's mood. Unsubscribe, opt-out, bounce, auto-reply: rung 0, deterministic, compliance-safe by construction.

same 10,000 replies · left: every reply at the surface · right: 33.3% reach it
The reply black hole.
Prospects answer. Nobody follows up for hours. The window closes silently.
The delegation dead end.
"Talk to Dana in RevOps" gets logged and never pursued.

Here is that column with its rungs named.

03 · the cascade

One reply, seven rungs, one gate.

Every rung answers with a label and a confidence. Below the gate, the reply climbs. At the gate, it stops — and the rungs above it are never woken. Cost and latency are consequences of that rule, not of a cache.

rung 3 · 0.5 ms4 rungs never wokenllm calls 0
From the demo thread

Traces are pre-computed by the shipped cascade. Nothing on this page calls a model.

the ladder · cheapest certain rung wins
rungmethodhandlescostlatency
[7]Full reasoning — reads the whole threadambiguous, multi-intent, "not now vs never"expensiveseconds
[6]Meaning match — two models must agreelong-tail intents, no training data neededmoderate~21 ms
[5]Trained classifier — 15 intents, agreement rulesubtle intent the linear model missesGPU once per corpusms
[4]Similar examples — all 5 nearest matches agreeparaphrase of things already seen~5 ms embed, CPUms
[3]Pattern match — statistical classifier, gate 0.55the bulk of clear-intent replies~0µs
[2]Keyword scan — exact phrases"not interested", "remove me", "talk to X"~0µs
[0]Header check — OOO headers, MIME, bounce codesOOO, bounce, unsubscribe, calendar accept~0µs
Monday at 10am works. Best number is 415-555-0147.
[7] full reasoning     not reached · surface
[6] meaning match      not reached
[5] trained classifier not reached
[4] similar examples   not reached
[3] pattern match      confirmation 0.72 · gate 0.55            ▲ resolved
[2] keyword scan       no "not interested" · no "talk to"        silent · pass
[0] header check       no ooo header · no bounce                 silent · pass

action  schedule · slot Mon 10:00 PT · phone captured   cost ~0        llm calls 0

[3] The gate is the design

Rung 3 emits a probability. 0.55 is the gate, and it was chosen on the cross-validated train residue — the 233 training items a model that had not seen them would have escalated — never on the test split. The test split is touched once, for the table below.

[5][6] Two weak signals that concur

Rungs 5 and 6 do not get to overrule rung 3. They may only promote it: accept when their argmax equals the classifier's and their own score clears a floor. Raw entailment thresholds were measured first and refuted — 55% precision at the highest confidence. Agreement is what reached the bar.

[5] Cheaper-first is a comparison rule, not a prohibition

Rung 5 is a classifier head fine-tuned on our corpus. It is the most expensive classical rung shipped, and it shipped because the measurement said so: the only lever after rung 4 that stayed at 100% precision while widening coverage. The ladder ranks options. The eval picks them. Expensive rungs are taken when measured to be needed — never reflexively avoided, never reflexively used.

Classical rungs are the default path. The LLM is the escalation. That sentence is the whole doctrine; everything else on this page is evidence for it.

That word — schedule — is not a classification. It's the next move in a pursuit that has an objective and does not stop until it's met.

04 · pursuit engine

Classify once. Pursue until the objective closes.

A pursuit has one objective and does not stop until it is met — meeting_booked, referral_captured, objection_handled. Every reply enters the cascade, and the resulting action moves the pursuit. Silence moves it too. So does the clock.

Pursuits / Meridian Works / Alex Moranobjective meeting_booked · tick every 15m
Alex Moran · Meridian Works
1 reply · 1 attempt
active
  1. day 1 · 08:15
    Not interested. We're already on Salesforce and it's working fine for us.
    [2] keyword scan objection · competitor · 0.72 respond playbook angle competitor_complement
  2. day 4 · 14:37
    Separate — we use Marketo. The two don't always talk to each other great, honestly.
    [3] classifier 0.17 < gate 0.55 [4] 2/5 · not unanimous [5][6] disagree escalate a human reads the pain, qualifies by hand
  3. day 9 · 11:20
    Appreciate it, but that's not really my call. That'd be a RevOps conversation.
    [3] classifier 0.14 < gate 0.55 escalate qualification gate: not reachable with this contact · asked for a name
  4. day 9 · 16:02
    That'd be Dana Ferreira — dana@meridianworks.io. She runs RevOps.
    [2] keyword scan delegation · 0.85 delegate referral extracted · child pursuit spawned
  5. day 12 · 09:41
    Monday at 10am works. Best number is 415-555-0147.
    [3] classifier confirmation · 0.72 schedule slot Mon 10:00 PT · ICS drafted · phone captured
Facts extracted
Cost of this thread
llm calls 0
1 reply · rungs 2 · 0 llm calls
Alex Moran's pursuit at Meridian Works: five replies across twelve days, resolved on rungs two and three, two of them read by a human, zero LLM calls.

Qualification gate

A rule layer over the generic decision: is the objective still reachable with this contact? Alex's "not my call" fails it and the pursuit asks for a name instead of proposing a slot.

Slot proposal

Availability window ∩ the prospect's phrasing, pure calendar math, .ics attached. Natural-language date parsing reads "Monday at 10am"; nothing reasons.

Completion rules

meeting_booked closes on a confirmed slot; referral_captured on an extracted contact. The child pursuit for Dana closes the parent's objective when it closes its own.

autonomy
assist
respond
autopilot · rung ≤ 3 · playbook angle
schedule
autopilot · slot inside availability
delegate
autopilot · referral with email
recover
manual · new channel needs approval
escalate
always human

The tick loop runs on a clock. A pursuit in waiting past its window gets one recovery draft, then another, then a withdraw — state and clock, no model. A no-show is an operator signal that re-opens scheduling. Priscila Nunes at Tidewater went quiet for three days after "send me a case study"; her recovery is the one draft awaiting approval in the console below.

Autonomy is set per action, not per system. What goes out on its own and what waits for you live in the same view — "fully autonomous" is a slider you decide the position of. The system proposes; a human confirms where the stakes require it.

Day 1 was an objection. It got a playbook answer at rung 2, not an improvisation. Every specialist in the engine has a ladder of its own.

05 · specialist agents

Every specialist has its own ladder. Most never leave the seabed.

Each agent is a specialist cascade with its own cost ladder. Most ship LLM-free — not as a constraint, but because the measurement closed the gap at a cheaper rung.

[2][3] type · [1] angle · playbook engine

Objection — 15 types, 30 approved angles

Alex's first reply — "Not interested. We're already on Salesforce and it's working fine for us." — hits the competitor keyword scan at rung 2 (already on, working fine). Type → angle is a direct mapping into the playbook; the angle rotates per thread so a prospect never reads the same reframe twice. Shipped: type at [2][3], angle at [1]. No LLM in the loop.

The fifteen shipped types — select one
competitor · 2 approved angles

Calendar [1]

Natural-language date parsing + timezone from contact metadata + slot intersection against availability, .ics out. Rung 4 (LLM extraction) exists for "sometime after my trip" and has not been needed.

Routing [1][2]

Regex for emails and phones, dependency patterns for "talk to X" / "she runs RevOps", a pronoun guard so "she" binds to Dana and not to the rep. Dana Ferreira was extracted from one sentence.

Tone [1]

Sentence length, contraction rate, formality hits, greeting form. Pure statistics. Style mirroring is feature extraction, not reasoning — this ladder has an LLM rung on paper and it is marked likely never.

Recovery [0]

State + clock. Silence timers, no-show signals, attempt counts. Detection is temporal, not linguistic — no model is consulted to notice that someone went quiet.

Every one of those rung numbers is a claim. Here is what backs them.

06 · the eval harness

The metric is precision on what the system acts on. One wrong email is a fire.

Accuracy on classification is the wrong bar for a system that sends. The bar is acted precision: of the replies the cascade resolves on its own, how many got the right action. Coverage and escalation come second — they only count if precision holds.

thresholds
chosen on the cross-validated train residue · 233 of 303 train items
test split
75 items · touched once per stage · never tuned on
refutations
logged with numbers · kept so nobody re-tries them by intuition
Cascade stages — enable rungs to rebuild the table
Held-out results by cascade stage · n=75 · 2026-09-03
enabled throughacted precisioncoverageescalation to rung 7
rung ≤ 325 / 2533.3%66.7%
+ rung 435 / 3546.7%53.3%
+ rung 547 / 4762.7%37.3%
+ rung 6 shipped50 / 50 by action49 / 50 by intent66.7%33.3%
Escalation to rung 7 · shore profile

successive cascade stages, not a time series · lower is deeper · held-out n=75

The miss — it stays in the table

The one miss by intent: "This really isn't something I'm involved in." Expected wrong_person; rung 3 and the meaning match both said not_interested at 0.93. Both intents map to withdraw, so the action was right and the email that went out would have been the same. Three other meaning-match models miss the same sentence under the same protocol — a ceiling of the method on this residue, not of the model.

Refuted — a selection from the ledger

levermeasurementverdict
word + char n-gram TF-IDFraw 57/75 vs 54/75, but acted precision 91–94% at every gate; word-only 100% at 0.55. Char features flattened the probability distribution — better argmax, worse calibrationrefuted · 2026-08-31
per-intent gates, 5-seed repeated CV24/26 at +0 margin; never 100% at coverage ≥ the global gate's 25/25. ~20 out-of-fold samples per class underestimate the wrong tailrefuted · 2026-09-02code kept, OFF
rung 5 as a fine-tuned NLI headbest residue argmax of any judge (208/233) but agreement never above 97.4%; held-out 52/55 — three wrong acceptsrefuted · 2026-09-03the 15-way head shipped instead (44/44)

A rung is placed by a number, kept by a number, and removed by a number. The refuted rows are the same discipline pointed the other way.

Run the eval harness against any dataset. The protocol is the same one that produced these numbers. See every refuted experiment →

That table was measured on 303 training examples. It will be measured again on more — and the ladder gets cheaper each time, not more expensive.

07 · learning loop

Every verdict is a labeled example. The cheap rungs are what retrain.

When a draft goes out on assist, the operator's approve, edit or reject becomes a labeled example. The learning cycle appends it to the corpus, retrains the rung-3 model, and reports the before/after on the same harness that produced the table above. Approval rates per intent become autonomy hints: an action that has been approved unedited often enough is proposed for autopilot. The system becomes less dependent on the top rungs with use, because the rungs at the bottom are the ones that learn.

  1. Draft for Alex's "Not interested. We're already on Salesforce…" — [2] competitor, angle competitor_complement, autonomy assist.
  2. Operator edits one clause and approves. Feedback entry records rung · angle · corrections.
  3. Learning cycle — example appended, classifier retrained, before/after reported.
  4. competitor → respond approval rate crosses the floor at n ≥ 5 → hint: eligible for autopilot.

The guard against label contamination

Labels from rungs 4, 5 and 6 never enter the corpus on their own. They are copies of exemplars or a judge's opinion, and training on them would teach the cheap rungs to agree with the expensive ones. They enter only with an explicit human correction. The expensive rungs are auditors, not teachers.

That's the whole system: a ladder, a state machine, a harness, a loop. Here is the screen it all lands on.

08 · the console

This is what your team sees.

One screen. Every pursuit, the rung that resolved it, and the drafts waiting for a human. Nothing goes out that you cannot see here first.

  • The pursuit trackerEvery open thread with its state — active, waiting, delegated, recovering — and the objective it is chasing.
  • The cascade resultWhich rung answered, at what confidence, and what action it produced. The same trace you saw in the probe above, on your own replies.
  • The draft queueWhat is waiting for approval, what went out on autopilot, and one click to approve, edit or withdraw.
  • The precision numbersActed precision and escalation rate, measured on your data, refreshed on every retrain.
demo workspace · four pursuits · Priscila Nunes awaiting approval

Three planes underneath — knowledge, state, interface. Read the architecture →

09 · how you start

From signup to first pursuit in under an hour.

No install. No API keys to configure. Four steps, and the fourth one happens on its own.

Connect your channel

Point Undertow at the mailbox your prospects reply to. Inbound replies start falling through the cascade immediately.

Configure your playbook

Start from the fifteen shipped objection types and thirty approved angles, or bring your own. Set availability for scheduling.

Review on assist

Every draft waits for your approve, edit or reject. Each verdict is a labeled example; the cheap rungs retrain on it.

Earn autopilot

When an action's approval rate clears the floor, the console proposes autopilot for it — per action, never per system. You decide.

10 · security

Your replies stay yours.

  • Data isolationEach workspace is isolated. Your threads, playbook and corpus are never visible to another tenant.
  • No cross-tenant trainingModels retrain only on your own verdicts. Nothing you approve teaches anyone else's cascade.
  • Audit log on every actionEvery send, every rung, every human verdict is recorded with who, when and why.
  • GDPR-readyData residency in the EU on request, export and deletion on demand, opt-out honored at rung 0.
  • SOC 2plannedControls in place; audit scheduled. Ask us for the current posture.

11 · pricing

Scale the ladder to your volume.

Managed infrastructure. No API keys to juggle. The eval harness runs on every deploy. Start free, scale as replies grow.

Early access

Undertow is not yet available for purchase. Join the waitlist to be notified when we launch.

Request early access

Starter

$49/mo

For teams getting started with the cascade.

  • Up to 1,000 replies/month
  • Full cascade
  • Email support
  • Eval dashboard
Start free trial

Scale

$599/mo

High-volume teams with full control.

  • Up to 50,000 replies/month
  • Full cascade
  • Dedicated support
  • Full autonomy controls
Start free trial

Enterprise

Custom

On-demand for large-scale operations.

  • Custom reply volume
  • SLA
  • SSO
  • Audit log
  • Dedicated account manager
Contact us

Cloud-hosted. Managed infrastructure. Every plan includes the eval harness, the learning loop, and the full agent suite. The cascade decides what runs where — you pay for volume, not for rungs. Overages are billed at the per-reply rate of your plan.