Doppelganger LabsBook a call

Self-hosted agent operations

Decisions wait for you. Work doesn't.

Your agents watch the channels you run the business through, draft the work, and hold anything consequential for your yes. On servers you control, under rules you set — yours.

operator-inbox2 pending
  • Confirm the March pallet with Sarah

    WhatsApp · reply drafted, held

    ApproveDeny
  • Chase invoice #4471 mismatch

    Observer · Gmail · correction drafted

    ApproveDeny
  • Approve calendar block for Thursday demo

    Workflows · needs your yes

    ApproveDeny

Drafted overnight. Nothing sent yet.

It reaches your tools through the marketplace. 1,000+ ready-made connections, with permissions as narrow as you want →

WhatsAppTelegramGmailSlackNotionHubSpotStripeLinearGoogle CalendarSalesforceGitHubAirtableQuickBooksShopify

how it works

One night. Three steps.

None of this happens without you. It just doesn't wait for you either.

  1. 23:41

    You close the laptop.

    Four threads still open, and every answer has to sound like you. This used to wait until morning.

    threads · 23:4112 unread
    • Sarah — supplier · whatsapp

      So can we confirm the March pallet?

      3d
    • Mike · gmail

      Sent the revised quote, let me know

      2d
    • Accounts · slack

      Invoice #4471 doesn't match the PO

      1d
    • Martin · gmail

      Contract redline — need your call on 4.2

      6h

    Every one of them needs to sound like you.

  2. 02:16

    It works the thread.

    It reads the thread, checks the invoice against the PO, and writes the reply the way you would. Nothing has been sent.

    draft · 02:16not sent

    to: Accounts · re: invoice #4471

    Checked it against the PO — the pallet count is right, the unit price isn't.We agreed 14.20, they billed 14.90.Can you reissue?

    matched: PO-2291 · march-terms.pdf · whatsapp thread with Sarah

    Written. Held. Nothing sends until you say so.

  3. 07:40

    You approve over coffee.

    The night's work sits in one queue: read, approve, it goes. Anything you don't approve simply never happened.

    operator-inbox9 pending
    • Send 14 follow-up drafts

      Observer · Gmail

      ApproveDeny
    • Reallocate $410 ad spend

      Workflows · pending your sign-off

      ApproveDeny
    • Reply to Martin re: contract

      WhatsApp · drafted

      ApproveDeny

    Work continued on 6 other threads while you were away.

what actually ran that night ↓

separation of duties

It can't grant itself more authority.

Doppelganger is software for operating AI agents. Agents get bounded capabilities, never raw credentials; every consequential action stays reviewable, attributable, and recoverable — held until you approve it. On your machines, under your rules, yours. Inside, responsibilities are deliberately separated — decisions, work, knowledge, permissions, tools and learning each live in their own module, each with its own owner. Your judgment lands exactly where it matters.

the same gate governs doing the work and getting better at it.

gate onenothing reaches your inbox until the rules pass — if it can't check, it doesn't act

operator inboxthe one filled node is you — every decision waits there for your sign-off

gate twonew routines activate only through the same gate — it can't promote its own habits

which one is you

Four ways people run agents.

One agent

You're moving one agent from experiments into work that counts. First you need the gate and the queue — rules it can't cross, and a place where its asks wait for you.

drafts · 07:403 held
  • Sarah — supplier · whatsapp

    held

    March pallet confirmed for the 9th — one change on…

  • Mike · gmail

    held

    Quote works. Two questions before we sign:…

  • Accounts · slack

    held

    The PO says 14.20 — asked them to reissue.

In your voice. Sent only when you say so.

Personal fleet

Several specialist agents, one operator — you. Each runs on its own leash, and everything consequential lands in the same queue.

operator-inbox3 agents waiting
  • Research agent: sign off on the sourcing brief

    Knowledge · summary drafted

    ApproveDeny
  • Ops agent: approve refund for order #3312

    Marketplace · flagged, awaiting you

    ApproveDeny
  • Delivery agent: publish the client preview

    Live Artifacts · queued for your yes

    ApproveDeny

Every agent, one queue — you.

Small company

Agents across operations, delivery, and support — with an audit trail. Every decision stays attributable: who asked, who approved, what ran.

operator-inbox5 waiting
  • Sign off on the revised Q3 order

    WhatsApp · supplier thread · drafted

    ApproveDeny
  • Approve refund for order #3312

    Shopify · flagged, awaiting you

    ApproveDeny
  • Post the delayed-shipment notice

    Workflows · queued for your yes

    ApproveDeny

Nothing here moves until you say so.

FDE partner

You deploy agent systems for clients. There's a toolkit for that — and a multi-deployment licence built for shipping it again and again.

fde-install · your serverengineer on it
  1. phase 3/7modules provisioned · storage split per module
  2. phase 4/7private network up · connector permissions set one by one
  3. phase 5/7memory seeded from your threads and files
  4. phase 6/7hardening pass · security report drafted

The part that stalls DIY builds is the part an engineer finishes.

The platform: Doppelganger

What it does, and what it won't.

Background agent

Works while you live

Your agents watch the threads you'd rather not babysit and draft the work themselves — replies, follow-ups, corrections — ready for your sign-off.

observer · overnight rununattended
  1. 02:14New invoice mismatch detectedtrigger
  2. 02:16Drafted correction + client emaildone
  3. 02:17Queued for your sign-offwaiting
  4. 07:40Approved by you. Shipped.shipped

Stood by overnight. Nothing shipped without you.

Human in the loop

Fail-closed, by design

Before anything consequential, it asks the rules you set. If it can't check, it doesn't act — it can't go around you.

rules-approvalsfail-closed

connector.dispatch → send_email(42 recipients)

→ rule: external sends require approval

DECISION: hold for operator

mesh.contact → peer:unknown-agent

→ rule: untrusted peers denied

DECISION: denied · logged

rules engine unreachable?

→ risky actions fail closed. No exceptions.

Model-agnostic

The engine is your choice

The harness is the layer you own. The AI engine underneath is swappable — trade it out without rebuilding anything.

engine · configswappable
engine = "claude-sonnet-5""gpt-5.2""llama-4 (local)" · swappable

A modular harness, not another chatbot.

Twelve modules, your pick

Operator Inbox, Observer, Marketplace, Workflows — each module is its own building block with its own memory. Every licence includes the control core; you pick the rest.

See the platform

Swap the engine anytime

The harness is the permanent layer; the AI engine underneath is your choice. Swap it without rebuilding anything you've set up.

Built in the open

New versions ship every two to three weeks. You see what's coming before you buy — and what you own keeps getting better.

getting started

Yours to run. Ours to set up, if you want.

Doppelganger runs on servers you control — your hardware or a cloud account that's yours. You install the licence yourself, or a forward-deployed engineer sets everything up, hands you the keys, and stays on call.

Straight answers.

Meet your doppelganger.

Book a call and we'll figure out what you need — or leave your email and follow the build.