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.
Confirm the March pallet with Sarah
WhatsApp · reply drafted, held
ApproveDenyChase invoice #4471 mismatch
Observer · Gmail · correction drafted
ApproveDenyApprove 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 →
how it works
One night. Three steps.
None of this happens without you. It just doesn't wait for you either.
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- 3d
Sarah — supplier · whatsapp
So can we confirm the March pallet?
- 2d
Mike · gmail
Sent the revised quote, let me know
- 1d
Accounts · slack
Invoice #4471 doesn't match the PO
- 6h
Martin · gmail
Contract redline — need your call on 4.2
Every one of them needs to sound like you.
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 sentto: 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.
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 pendingSend 14 follow-up drafts
Observer · Gmail
ApproveDenyReallocate $410 ad spend
Workflows · pending your sign-off
ApproveDenyReply 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 one — nothing reaches your inbox until the rules pass — if it can't check, it doesn't act
operator inbox — the one filled node is you — every decision waits there for your sign-off
gate two — new routines activate only through the same gate — it can't promote its own habits
which one is you
Four ways people run agents.
Sarah — supplier · whatsapp
heldMarch pallet confirmed for the 9th — one change on…
Mike · gmail
heldQuote works. Two questions before we sign:…
Accounts · slack
heldThe PO says 14.20 — asked them to reissue.
In your voice. Sent only when you say so.
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.
Sarah — supplier · whatsapp
heldMarch pallet confirmed for the 9th — one change on…
Mike · gmail
heldQuote works. Two questions before we sign:…
Accounts · slack
heldThe 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.
Research agent: sign off on the sourcing brief
Knowledge · summary drafted
ApproveDenyOps agent: approve refund for order #3312
Marketplace · flagged, awaiting you
ApproveDenyDelivery 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.
Sign off on the revised Q3 order
WhatsApp · supplier thread · drafted
ApproveDenyApprove refund for order #3312
Shopify · flagged, awaiting you
ApproveDenyPost 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.
- phase 3/7modules provisioned · storage split per module
- phase 4/7private network up · connector permissions set one by one
- phase 5/7memory seeded from your threads and files
- 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.
- 02:14New invoice mismatch detectedtrigger
- 02:16Drafted correction + client emaildone
- 02:17Queued for your sign-offwaiting
- 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.
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.
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.
twelve modules · start with the one that hurts
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.