Skip to main content
Tendril has two kinds of relationship, and it keeps them separate:
Inferred connections are never turned into links automatically. The kind of a link is your judgement, and guesses don’t belong in data you curated. You make a suggestion a link yourself, and choose its kind when you do.

How a connection is inferred

Every source produces co-occurrences: occasions when several people other than you showed up together. Tendril looks at each pair of contacts in a co-occurrence and adds weight to the connection between them.

The weight

Each pair in a co-occurrence gets:
Here n is the number of other people present. This is the weighting used for co-authorship networks. A three-way thread is good evidence that two people know each other, and a twelve-way thread is very weak evidence.n includes people who don’t have a card. A twelve-person meeting is still weak evidence even if only two of the attendees are in your address book.
Weight halves every 15 months. Without decay, a project that ended in 2019 would outrank your current work forever. Shared work domains are dated at rebuild time and don’t decay, because working somewhere is an ongoing fact, not a single event.
For a sense of scale: a recent meeting with two other people scores 1.0 for that pair. A twelve-way cc thread scores about 0.05. Both halve every 15 months.

Confidence

A raw score only means something next to other scores, and showing “0.83” on a contact card would suggest more precision than the evidence has. So Tendril shows three levels instead: A pair seen together on only one occasion is hidden. Two people cc’d on one thread haven’t been shown to know each other. Shared work domains are the exception, since working somewhere doesn’t happen twice. A shared domain alone is enough if its score reaches 0.15, which in practice only a small employer does. Five addresses on a domain give 0.175, which passes. Six give 0.14, which doesn’t. Larger shared domains, up to 12 addresses, still add weight to pairs that have other evidence. Being cc’d once and working at the same company counts for more than either one alone. Personal email providers and ISPs never count as a shared domain. See Sources.

Introduced by

If two people’s earliest shared occasion was started by a third person, Tendril shows that person as having introduced them (via …).
  • Only mail threads and meetings have someone who started them. Group chats and shared domains never produce an introduction.
  • Threads you sent and meetings you organized don’t count. You connected those people, not a third party.
  • Converting a suggestion into an introduced by link doesn’t keep who made the introduction yet. See Limits.

Where connections appear

On a contact

The Connections card shows counts first, so you can see how many of your contacts someone knows without opening anything: linked, then strong, likely and possible. Click a count to see the people in it. Each inferred row shows the other person, who introduced them if known, and how they are connected: met, cc, same company or group.

The Connections screen

A 3D force-directed graph of everyone involved in a link or suggestion. Stronger connections pull people closer together. Selecting a contact highlights them and their neighbours and shows their faces.
  • The graph draws up to 160 suggestions, with stronger ones drawn more boldly. The layout supports up to 400 contacts.
  • The Suggested list below the graph shows the top 12 suggestions that aren’t links yet, each with a menu to make it a link.
  • Uncheck Suggested to see only the links you drew.

Checking the weighting

Your own links are the only ground truth available, so Tendril checks against them after every rebuild. The Connections screen shows a line like:
If your own links don’t rank near the top, the weighting is wrong. Use this line when tuning the numbers. They’re all defined together in EdgeScore in Interactions.swift.

Duplicates

The Duplicates screen groups cards that share any of these: Cards are joined transitively (union-find). If A and B share an email and B and C share a name, all three are in one cluster. A cluster that shares an email or phone is high confidence and listed first. A shared name alone isn’t. Turn on Only high-confidence to hide name-only clusters. Merging happens in Contacts.app. Tendril only finds the duplicates.