Two decisions, one tree: what you may say — gated by the identity you can prove — and what makes them act, the play that tier permits. The router proposes; the Gate disposes — now on persuasion too.
The research is blunt: relevance you can’t verify reads as spam, and nothing else fires — which is this product’s whole thesis. So the tree runs in two passes. Pass 1 (permission): classify the identity key, score per-field confidence, route to a personalization tier — assert an industry only at high confidence, else fall to a true neutral default. Pass 2 (action): the tier hands the copy agent exactly one provable hook, and the action layer turns it into a move that drives a reply — then the Gate verifies both the claim and the persuasion hygiene before a line ships.
Unchanged spine, one rule made explicit: when the company won’t resolve, default down the identity ladder to the individual — never sideways to a guessed sector.
① Identity key: work email (first-party)· resolve_email() → domain → PDL company + person
TIER 2 · FIRMOGRAPHIC · SAYWorks for any company size. A startup’s domain IDs the company even when reverse-IP only sees a CDN (gauntletai.com → Fastly). The visitor told us — so these facts are say (recitable), not allude.
email → company (high conf) + title / seniority (PDL person). A consumer mailbox (gmail.com) → no company → drop to the individual default ↓.
② Identity key: IP only (involuntary) — classify it· reverse_ip() → ip-api.com (cached): geo + org + mobile/proxy/hosting. Everything below is allude.
+ if a competitive category is known → escalates to Tier 3 ↓
TIER 3 · FIRMOGRAPHIC + COMPETITIVEThe gauntletai.com case. Competitor-research sub-agent → a brief of provable differentiators for the visitor’s category → copy agent drafts the comparative angle → the Gate verifies every comparative claim → unproven lines fall back to category value.
Allude the edge, don’t name the enemy. No “your current tool can’t…” — that recites an inferred vendor.
company resolved, but PDL industry sparse / no bucket match
TIER 1 · NEUTRAL (company-aware)Hold the industry specialization — don’t guess a sector.
Region + company-shape tone only; backdrop stays neutral. Falls to the individual default ↓ for the hook.
Default rule (the practical fallback): can’t resolve the company → don’t guess a sector, step DOWN the identity ladder to the individual.
Firmographic (reverse-IP company) fails → try the person lane (resolve_email() → PDL person: role / seniority you can prove) →
if no person either → honest segment / neutral default (General). A confident-looking sector on a guess is the exact failure mode this removes.
Industry is opt-in by proof; identity degrades gracefully — it never fabricates upward.
Exhibit 2 — Industry needs a confidence gate — assertion is earned, not defaultedwired
ALLUDE HIGH
Clean corporate IP · PDL returns an industry · it maps to a known sector (optionally corroborated by the company domain).
Ship industry-tailored copy + backdrop. Still allude — shape to the sector, never recite that we detected it.
ALLUDE MEDIUM
Company resolved but industry is sparse/ambiguous, or a corporate-VPN netblock (not a clean office IP).
Shape tone only — region + company-aware framing, neutral backdrop. Hold the sector claim.
HOLD LOW / UNKNOWN
No company resolved (consumer ISP, mobile, VPN, bot) — nothing to attribute an industry to.
Never assert a sector. Fall to the General neutral default. ← the fix for “why is my industry mining?”
Why this matters: location is ~city-accurate on fixed-line broadband, so we treat it as generally correct (and still allude, never recite). Industry is a second-order inference (IP→company→PDL→sector) — each hop loses confidence, so it must clear a bar before it changes the page. A confident-looking sector on a guess is the failure mode we just removed.
Exhibit 3 — Pass 2 · permission × play: what drives action at each tierproposed integration
Each tier is a budget of provable facts. The play spends exactly that budget — no more (that’s creepy/unprovable), no less (that’s a wasted send). One trigger, a loss-framed implication, matched-peer proof, one soft ask. loss angle + AI-tell Gate now wired in creative.py · full play orchestration proposed
TIER 0 · NEUTRALbudget: nothing provable about this visitor
The play
Honest segment copy — don’t fake 1:1. Lead with the category pain + a matched-peer proof at segment level, label it segment-level. No merge tags pretending to be personal.
“Most RevOps leads at 200–300-person SaaS shops tell me the data’s in five tools and none of them agree.”
CTA: lowest-friction permission — “Worth a look, or not a priority?”
TIER 1 · LOCATION-AWAREbudget: region (allude) only
The play
Region framing, zero company/sector claim. Shape tone to the locale; never imply we know the employer. Region is a backdrop, not a hook.
P#2 one real anchorangle local
Example line
“Built for the way {region} teams actually run pipeline.”
CTA: soft interest — “Is that worth two minutes this quarter?”
TIER 2 · FIRMOGRAPHICbudget: industry + region + (person: role/seniority)
The play
One provable trigger → loss-frame → matched-peer proof → one personal-value line. ≤20-word opener from a public fact; convert the upside into the cost of inaction (only if the loss is real); proof from the visitor’s own segment with a sharp, non-round number; one line aimed at their standing.
P#2 triggerP#6 loss-frameP#7 personal valueP#8 sharp peer
Example line
“Saw {company} is scaling the SDR team — when outbound ramps that fast, account research usually becomes the choke point before headcount pays off.”
CTA: one soft interest question — never a calendar link cold (see Exhibit 4)
Allude the edge, loss-frame the status quo — never name the enemy. Lead with a structural differentiator of our own product (provable by construction); frame the cost of the current approach. The Gate blocks any superiority claim or recited competitor.
“Most tools personalize on guesses you can’t audit. Here, every line ships with its source — so nothing goes out you can’t defend.”
CTA: offer-based, named asset — “Want the 1-page teardown? No call needed.” (once warm)
Mapping back to your one-liner: “can’t figure out the company → default to individual” is the spine of Pass 2 too — Tier 2’s play degrades to Tier 1/0’s the instant the firmographic budget empties. The play always has a provable fallback move, so the page never blocks; it spends a smaller, honest budget.
Exhibit 4 — The ask, by temperature: drive action with one CTA, friction-matched to trustproposed integration
Rule: exactly ONE ask per message · ≤15 words · escalate commitment only as the lead warms · never a calendar link in a cold first touch.
friction ▁
Cold · 1st touch
Permission / one-word
“Worth a look, or not a priority right now?”
Max reply volume; busy senior buyers; breakup touches.
friction ▂
Cold · default
Interest question
“Is keeping ramp under 60 days on your plate this quarter?”
The default cold first ask. Costs the reader nothing = a micro-yes.
friction ▃
Hook present
Offer (named asset)
“Want the 1-page teardown? No call needed.”
When you hold a real, relevant asset + any personalization.
friction ▅
Engaged · touch 3+
Soft conversation
“Worth 15 minutes to compare notes?”
After light engagement, not before.
friction ▇
In eval · replied
Two-option time
“Tue 2pm or Thu 10am ET — or a time that’s easier?”
Only after a positive reply. Include timezone + one link.
Sequence, not single-touch: default 4–7 total touches, each carrying a new angle (never “just bumping this”), and reuse the same anchor signal across email · voicemail · call so the channels reinforce one identity. The CTA is the only place the message asks for a finite resource — so it’s the last thing to escalate. Wired: the no-cold-calendar-link veto (verify_message) and the never-single-touch / no-repeat rules (verify_sequence) are enforced; the staged escalation itself is the lead-temperature policy layered on top.
Exhibit 5 — The agent graph: a deterministic router, LLM leaves, one Gatewired spine
Every visit runs this graph. The spine is deterministic and reproducible; only two nodes call an LLM (Research · Copy agent); the Gate is the single point of disposition; and any blocked line falls back to provable copy — so the page degrades, never blocks. Drag to pan · ⌘/Ctrl-scroll to zoom · click a node for its spec · trace a tier.
Trace the path
Drag to pan · ⌘/Ctrl-scroll to zoom · click a node
det deterministiccache LLM cachellm agent (LLM)gate the Gateout render
control flow cache hit (skip LLM) Gate block → fallback loop · every navigation
Click any node — or trace a tier — to see what it reads, how it branches, what it outputs, its provable default, and the code it maps to. The full table is Exhibit 6 below.
✓ blocks comparative superiority it can’t source (better/faster than, vs)
✓ blocks reciting an inferred competitor (Clay, Apollo…)
✓ blocks a number not in the facts (\d+% / \dx / $\d)
✓ blocks reciting the company under an allude policy
+ wired Axis B — persuasion hygiene (verify_copy + verify_message)
● per-line: blocks AI-tell phrases/words (delve / leverage / “hope this finds you well” …) wired
● per-line: blocks >1 em-dash (one is fine) wired
● offers the loss cost-of-inaction angle, provable by construction wired
●message Gate — one CTA · ≤125 words · no cold calendar link · no spam-promise, in verify_message(); enforced where variants enter the action pool + on /policieswired
●sequence Gate — never single-touch · no repeated step, in verify_sequence()wired
↩ Fallback path: any line the Gate rejects — on either axis — → the deterministic angle template ships instead (angle_copy). The page never blocks; it degrades to what’s provable and clean. Only two nodes are LLM (Research, Copy); the spine is deterministic, and the Gate stays the single point of disposition. Axis B keeps Provenance’s rule intact: a line that can’t be proven OR can’t be defended as non-spam is structurally unable to ship — never hand-excluded (Constitution Art. II).
the permission budget + surface policy (say/allude/hold)
always resolves to a tier — 0 is the floor
proposedPlay select
the tier’s provable budget
segment · region · trigger+loss+peer · differentiator
the action move (Exhibit 3)
budget empties → step down a tier’s play
proposedCTA / temperature
lead stage (cold → replied)
permission · interest · offer · soft-talk · two-option time
exactly one ask, friction-matched
cold/unknown → soft interest question
wired+BThe Gate
every proposed line + facts + policy
provable & clean? → ship · else → block
verdict + reason per line
any block → deterministic angle_copy ships
Read top-to-bottom, the tree never widens a claim it can’t back and never asks for more than trust earned: identity gates permission, permission gates the play, the play gates the ask, and the Gate gates the send. Every branch has a provable default, so the worst case is always honest, never broken.