∑ The algorithm

Eight stages, two model calls, one number.

Every relationship is a probability. A chain of intros multiplies them. The search finds the chain with the largest product, infers the last hop from shared affiliations, and learns from every answer.

O(E log V)
per search, bounded to 3 hops · ~50 ms for 5,000 people
2
model calls per search: model the target, pick the path
4
edge families: observed, co-occurrence, inferred, learned
14
papers wired into the weights and the search
the whole thing in one line

best connector = argmaxu  [ maxchain ≤ 3 ∏ w(edge) ] · [ 1 − ∏k (1 − pk) ] · bridging(u) · φhops−1

0

Observe

persons = ∪ mailboxes (key = SHA-256(salt‖email) | LinkedIn URL | name)
you→u: f = #touches, r = #replies, Δ = days since last, span = last − first
co-occurrence (bipartite projection): s(a,b) = Σ_threads 1/(k−1)
costO(M·k²) over M threads with k people; k ≤ 15, so linear in mail volume

Headers only. Team inboxes, lists, newsletters and mass mails are dropped before they become people.

1

Edge probabilities

w(you,u) = 0.35·log(1+f)/log 41 + 0.30·2^(−Δ/120)·d + 0.20·(r/f)·d + 0.15·channel·d, d = min(1, f/3)
decay (Navarro 2017): gap = span/(f−1); if silence > 8.33·gap then w ← w·(1 − ½·min(1, silence/(8.33·gap) − 1))
overlap (Onnela 2007): w ← w + 0.15·Jaccard(N(u), N(you))
co-occurrence (Crandall 2010): w(a,b) = 1 − e^(−0.6·s(a,b)), keep only s ≥ 0.34 (backbone)
LinkedIn floor 0.12 · pending invite 0.05 · non-person 0
costO(E)

Every weight is a probability: the chance u makes a warm intro if asked.

2

Infer missing edges

employer overlap: w = clamp(1.5/|company|, 0.05, 0.35), 2 ≤ |company| ≤ 60
Adamic-Adar: AA(a,b) = Σ_{z∈N(a)∩N(b)} 1/log(1+deg z); keep AA ≥ 0.9, w = min(0.3, 0.12·AA)
Katz: K(a,b) = Σ_{ℓ≤3} β^ℓ · paths_ℓ(a,b), β = 0.005; w = min(0.25, 400·K)
members: if u has an account, its own observed edges join the graph at 0.9×
referral: a connector's “someone else” → new node, edge 0.6
costAA: O(Σ_z deg(z)²) capped at deg ≤ 40 · Katz: O(V·d³) capped at deg ≤ 60

No model calls here. Pure graph arithmetic, cached per build.

3

Model the target

ask → { name?, company, domains, role, keywords, affiliations A = {(org_k, p_k)}, peer roles, industry words }
one structured Claude call, low effort
cost1 model call · ~4 s

Kleinberg: greedy routing only converges when nodes carry coordinates. Affiliations, industry and role are those coordinates.

4

Reach(u)

Reach(u) = max over chains you→…→u, ≤ 3 hops, of ∏ w_eff(edge)
w_eff = posterior(w, attempts, successes) · kind_factor, posterior = (4w + successes)/(4 + attempts)
= Dijkstra on cost −log w, bounded to 3 relaxations
costO(E log V) worst case; bounded hops make it O(E) in practice, ~50 ms for 5k people

Chains multiply. Dodds measured ~37% forwarding per hop, so success ≈ p^L and 3 hops is the ceiling.

5

Knows(u, target)

Knows(u) = 1 − ∏_{k∈A(u)} (1 − p_k)
p: is the person 1 · same company & role 0.95 · same company 0.55·s · investor / board / ex-employer / alumni 0.7·strength·s · industry & role 0.25 · industry 0.08
s = 1.25 if the title is senior (C-level, partner, head, director…)
costO(V·|A|)

This is the inferred last hop. It is replaced by an observed edge the moment a member's mailbox shows the tie.

6

Score & rank

score(u) = Reach(u) · Knows(u) · bridging(u) · (φ/0.37)^(hops−1)
bridging(u) = 1 + 0.15·exp(−((c−0.45)/0.2)²) (Rajkumar 2022: moderately weak ties transmit the most)
φ = forwarding rate = Beta(3.7, 6.3) prior updated by your answered asks
P(any chain works) = 1 − ∏_{distinct connectors} (1 − score_i)
diversify: ≤ 3 paths per reason; one Claude call picks the best, writes the reason and the ask
costO(V log V) sort · 1 model call

Two model calls per search in total. Everything else is arithmetic.

7

Ask, learn, grow

intro ask if Knows ≥ 0.6, else routing ask: “do you know X, or who is one step closer?”
answer ∈ {yes, no, someone else} → attempts+1, successes+[yes]; w′ = (4w + successes)/(4 + attempts)
someone else → new node + referral edge 0.6 → next search routes one hop closer
every answer page invites the connector to join: each ask recruits a node
costO(1) per answer

Milgram-style forwarding, with incentives from the DARPA challenge and calibration from Flynn & Lake: people say yes about twice as often as askers expect.

10 For a ten-year-old

Everyone you know has friends you don't. Luckgraph looks at who you really talk to, guesses which of their friends know the person you want, and tells you the one friend to ask.