Operator Dossier · Self‑Hosted Outreach

DHURANDHAR

“Dhurandhar” — one who bears the burden; an expert, relied on to carry the operation through. Two channels, run under your own name, on your own machine — it finds people. It never contacts one without you.

CHANNELS: LinkedIn discovery + Email send LINKEDIN CONNECT: permanently off FIRST CONTACT: human‑reviewed by default

It's a discovery engine, not a spray‑and‑pray bot.

Dhurandhar searches LinkedIn, reads the profiles worth reading, and decides who actually matches a campaign — then stops. Nothing gets connected to, messaged, or emailed without a channel you turned on and, by default, a human who looked at the first draft.

two channels, one funnel

Every lead forks exactly once.

A qualified profile lands in one of two lanes — whichever one it belongs in is decided by whether a work email resolves, not by a coin flip.

LinkedIn

Discovery channel

A real, cookie-persisted LinkedIn session searches, scrapes, and qualifies profiles against a campaign's target description.

  • 01Search — LLM turns the campaign brief into People-search keywords
  • 02Scrape — profile + activity pulled through a stealthed browser session
  • 03Qualify — scored against the campaign, relevant ones move on
connection requests: never sent by default — a permanent, not a temporary, setting
Email

Send channel

A qualified lead only forks here once a real work address resolves and a mailbox exists to send from — plain SMTP, a box the operator owns, no third-party sending platform.

  • 01Resolve — a free lookup first, a paid finder second, only if needed
  • 02Draft — a first-contact email written from the campaign brief
  • 03Follow up — an agent reads replies over IMAP and keeps the thread moving
first send: held for a human's review by default
built to stay off until you say otherwise

Three switches decide what actually runs.

Every campaign starts inert. Turning one on is a deliberate act at exactly one of these three levels — nothing hides behind a fourth.

LINKEDIN_CONNECT_ENABLEDOFF

Global, permanent-by-design. Search, scrape, and qualify keep running either way — a connection request is simply never sent while this is off.

campaign.coordination_enabledOFF by default

The real activate switch, per campaign. Off means fully dormant — no discovery, no email, no follow-up — regardless of anything else below.

require_opener_reviewON by default

A first email waits for a human to clear the draft before it can send. Only the opener is gated — a live reply thread is followed up on its own.

local-first

Qualification runs on hardware we own.

The model behind search-keyword generation, lead qualification, and drafting is a self-hosted Ollama model by default — local network first, a tunnelled remote host second, a paid provider only as a last-resort fallback if both are unreachable. Nothing about a candidate profile has to leave the building for the system to work.

ai_modelollama:qwen2.5:latest
host[1]LAN — 192.168.x.x:11434
host[2]tunnelled remote, on connection loss
fallbackpaid provider — unreachable-only
primary reachable
said plainly
!

Automating a LinkedIn account is against LinkedIn's User Agreement — that's true the moment discovery/search/scrape runs, not just if connect gets switched on, and no volume is low enough to make it sanctioned. The email channel carries its own, separate obligation: whoever configures it is the data controller for addresses it resolves, and is responsible for anti-spam compliance on anything it sends. Full terms live in the project's own LEGAL_NOTICE.md and PRIVACY_NOTICE.md — this page is a pointer, not a substitute.

Everything above, with the field names, defaults, and commands to run it.

The setup guide is the operator's version of this page — install steps, every flag and its default, and the exact legal read before enabling either channel.