Primary OS · Internal

The platform
under everything.

One context layer instead of five silos — the three-pillar build that gets us there, and the bets it requires.

Logan NashJuly 2026Press → to begin

Why now

Five tools,
zero context.

Every team built its own answer to the same question this spring. None of them talk to each other.

We don't have a
tools problem.
We have a silo problem.

People search, three times over

Ours, Annabelle's, and Alex Giles's — three separate tools answering the same question.

Two deal hubs, built in parallel

Zach and Adam's version, and everyone else's — built without knowing the other existed.

Sourcing, cut off from everything

Disconnected from Lovelace, from Affinity, from pipeline management, from portfolio intelligence.

The network lives in a Slack thread

Our most valuable asset — who-knows-whom — has no durable home.

We kept building the same tool five different ways.
Context layer working session — June 2026

The mandate

One platform,
three pillars.

Not a rewrite — a context layer the whole firm builds on, chunked into three workstreams for one summer.

The build

Three workstreams, one summer

  • 01CRM — the data foundationTwenty, replacing Affinity. Every person, company, and deal lives in a database we own.
  • 02Glass — the connectorsGoogle, Notion, GitHub and more, wired in once — auth handled centrally, tokens never touched twice.
  • 03Routines — the agent schedulerBuilt into the chat interface, not bolted on. V1 ships as a scheduler; it won't stay one.

Solve our
problem first.
Then open it up.

Investing, end to end

CRM, sourcing, pipeline, and portfolio intelligence — one context layer, built for how Primary invests.

Then other verticals self-serve

Recruiting, GTM, and whatever comes next build on the same rails without waiting on us.

Built before the next hire arrives

Brian's plan is two or three more engineers. We want them building on a platform, not starting from zero.

The CRM

Twenty,
not rented.

Open source, self-hosted, sitting in the same database as Lovelace — the one piece of this stack we fully own.

A real CRM,
not a blank
database.

Five standard objects

People, Companies, Opportunities, Notes, and Tasks — pre-linked, ready on day one.

Unlimited custom objects

Model Funds, LPs, Deals — whatever Primary-specific shape we need, at no added cost.

Table, kanban, and calendar views

Every pod gets its own filtered, sorted, saved view of the same underlying data.

GraphQL and REST, auto-generated

Every object and custom field is instantly queryable the moment we create it — no API to hand-write.

Built to be
forked, not just
configured.

A workflow engine with real triggers

Record created, updated, or deleted; on a schedule via cron; inbound webhook — the exact substrate our agents need.

A native MCP server

Claude, ChatGPT, and Cursor can already read and write the CRM directly — no custom integration to build.

An app platform, shipped in April

52,000+ GitHub stars, a release every 4–5 days — but a breaking SDK change hit a month after launch. Expect churn.

AGPLv3, ours to run forever

Free to self-host and fork. Only SSO and audit logs sit behind a paid key, even self-hosted.

Not hypothetical

We've already forked it

  • 01Hannah's already building on TwentySMS-to-CRM intake — text a contact or deal, it logs itself. Built this month, not planned for someday.
  • 02The pattern is just: fork it, extend itTwenty's own CLI scaffolds a custom app in minutes — objects, logic functions, and UI, all in TypeScript.
  • 03Ship to our instance, or the marketplacePublish privately to just our workspace, or list it publicly — our call, not theirs.

The economics

$9/seat

for Twenty hosted — or self-host for a flat fee and stop counting seats.
~$200/mo to self-host the whole firm
0sync lag — Lovelace reads Twenty directly
seats at no extra cost, self-hosted

The open question

What we lose
leaving Affinity.

Affinity and Ring's real product was never the CRM — it's the shared network sitting inside it.

Their moat is
the network,
not the software.

Affinity

Every client firm's logged interactions enrich the shared contact graph automatically.

Ring

Backfills 20–30 years of email and maps cap tables, boards, and advisors — enriched by a vendor waterfall.

Twenty

Isolated by design — “you own your data” means no signal ever crosses workspaces. The opposite philosophy from Affinity's.

Build it ourselves —
probably an *order
of magnitude* cheaper.

Crustdata

Real-time company and people data via API — already running in our enrichment pipeline.

Clay

Waterfalls dozens of vendors per record — the tool we already reach for on messy sourcing data.

PDL

Person and company profiles at API scale — already wired into the sourcing agents.

The honest caveat

None of these replicate a crowd-sourced graph that updates itself. This is the least-proven bet in the plan — worth more scrutiny before we commit.

The connectors

Glass: plug in
once, everywhere.

Auth and data plumbing for every tool the firm already uses, so agents can act without us rebuilding OAuth each time.

V1 scope

Start as a web page, not an app

  • 01A connector page on LovelaceThe proof of concept — web-first, purely for speed.
  • 02A client-agnostic backendSame API powers web today, desktop or mobile later, without a rebuild.
  • 03Reuse where it's sufficientNotion and similar tools plug into existing connectors — no need to rebuild what already works.
  • 04Custom-hosted by defaultEverything else — GitHub, Obsidian, Ashby — judged case by case on value versus build cost.

Every agent call
runs through
our token.

A token vault, not per-tool auth

One purpose-built service keeps every connection alive, so users never re-auth per agent.

The platform pays, at API pricing

Every agent call runs through the Anthropic Agent SDK, billed like any other API usage.

A subscription loophole, for now

Agent SDK usage currently rides subscription pricing instead of metered API cost — likely closes within 6–12 months.

Routines

V1 is a
scheduler.
It won't stay one.

Ship the boring cron version first. The real unlock is agents that react to what's happening, not just what time it is.

V1

Ship the boring version first

  • 01Built into the chat interfaceNot a separate product — create and manage a routine from the same place you talk to the platform.
  • 02Caps at ~24 runs a dayA real constraint today; overages cost more, and that's fine for V1.
  • 03Ours, not rentedThird-party routine infra kept breaking — a shared-token race took down several teammates' setups in one week.

The event-driven
version already
half-exists.

Two routines, hand-wired

A morning cron scans the calendar; a second routine is supposed to fire the moment a meeting ends.

It pulls the Granola notes

And posts a founder read-out to Slack — today's version of the post-meeting brief.

But it can't schedule itself

No Lovelace endpoint exists to fire a routine off a calendar event — so it's still stitched together by hand.

Give every agent
an *event to
listen for*.

Step one

Replace the hand-wired hack with a real Google Calendar listener — a meeting ends, the routine fires, no manual plumbing.

Step two

Don't stop at one bespoke case — let the agent builder subscribe any agent to any event it cares about.

A record changing in Twenty. A webhook. A calendar event.

Once the scheduler is solid, the trigger stops being time — it becomes whatever's actually happening.

Where this goes

The carrot
Ring is dangling.

Ring's real pitch isn't the CRM. It's Ring-to-Ring — every fund on their platform sharing deals with each other.

Two teams are
building the same
feature.

Ring-to-Ring

In design now, targeting end of summer — but it only works if the other fund is on Ring too.

Union

Theo's fund-of-funds deal-sharing project — internal diligence tracking is already live.

The difference

Ring's version is a feature they sell us. Ours is infrastructure we'd own outright, on a CRM we control.

The forcing function

End of summer

Affinity's contract renewal — and Ring's own deal-sharing feature — both land around the same deadline.
20–30 yrsof email Ring backfills on signup
50–60MCP tools + a REST API Ring exposes
2 fundsminimum needed before Ring-to-Ring works at all

Where we land

Ship the
foundation
first.

Twenty as the database. Glass as the plumbing. Routines as the nervous system. Then open it up.

What's left to decide

One direction, four open questions

  • 01CRM: Friday decisionTwenty vs. Affinity vs. Ring vs. Zero — presented to Brian, Tom, and Toni this week.
  • 02Enrichment: unresolvedCrustdata, Clay, and PDL can approximate Affinity's network — but nobody's proven it yet.
  • 03Glass V1: the connector listWhich integrations we build, reuse, or skip — due before the app platform can ship.
  • 04Routines V1: the schedulerShips first as cron. Event-driven agents come once the foundation holds.

Next

Decision Friday.

Jordan's CRM write-up lands Thursday. We present the full platform — CRM, Glass, and Routines — to Brian, Tom, and Toni Friday morning.

Primary