The clearing layer for autonomous work · GoClear any work.
Prove every dollar.
Price a task, route it to the best worker — human or agent — run it to completion, settle the money, and sign a receipt of what happened and what it cost. Headless, durable, no silent failures.
engine onlineRoutes: leads · AI · tickets · eventsDecides: scored & assignedTriggers: sync or asyncConnectors: 800+Headless
Declare the work. We clear it.
Match with CEL, score with a strategy, assign, then trigger a workflow — approvals, AI agents, connector actions, durable multi-channel notifications — sync or in the background. Write it in Go, or declare it in YAML and ship with GitOps.
go get github.com/ductor/ductorroute.goengine := ductor.New(store, queue)// score and pick the destination with a pluggable strategyengine.Strategy("weighted", strategy.Weighted())// match anything with CEL, score a pool, then run a workflowengine.Route(ductor.Route{Match: `routable.type == "lead" && attrs.tier == "enterprise"`,Strategy: "weighted",Pool: "ae-west",Then: ductor.Workflow{Mode: ductor.Async, // or ductor.Sync — the caller waitsSteps: ductor.Steps{ductor.Approval("sales-lead"), // human-in-the-loopductor.Connector("salesforce", "create_opportunity"),ductor.Connector("slack", "notify"),},},})// durable, observable, exactly-once — settlement and signed receipts opt-indecision, err := engine.Dispatch(ctx, routable)
How it works
A decision you can see.
Clear any work
One generic Routable — a lead, an AI task, a support ticket, a webhook event — runs the same pipeline. The cargo changes; the machine doesn’t.
Decide, don’t guess
Filter with CEL rules, then score and select with a pluggable strategy: weighted round-robin, consistent-hash, least-loaded, priority, or a learning bandit.
Execute, then settle
Assignment kicks off a sync or async workflow — approvals, event waits, subworkflows, and AI agents — on a durable Postgres event log, with governed notifications that track every provider attempt. Metered settlement and signed receipts ship as opt-in surfaces.
Strategies
How it decides is yours.
Selection is the intelligence of a route. Pick a strategy per pool — from round-robin to learning bandits to clearing markets — or compose and bring your own.
0 built-in strategies · implement Strategy for your own
Action inventory
Every connector. Both ends.
Triggers and destinations. Start a route from a webhook, a poll, a schedule, an event, or a direct API call — finish it with any action. Every action carries typed semantics — and, once enabled, a resolved price, a certified-or-community assurance tier, and a signed record of what it did. Credentials are AEAD-encrypted: usable, never readable.
Work that can’t lie to you.
No silent drops. No double-sends. Every route lands or fails where you can see it — and, with receipts enabled, closes with a signed receipt.