The clearing layer for autonomous work · Go

Clear 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.

ValidateEnrichFilterScore0AssignROUTETriggerDURABLEexactly-once · syncSalesforceSlackHubSpotAnthropicOpenAIZendeskPagerDutyStripeKafkaWebhook
engine online
Routes: 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/ductor
route.go
engine := ductor.New(store, queue)
 
// score and pick the destination with a pluggable strategy
engine.Strategy("weighted", strategy.Weighted())
 
// match anything with CEL, score a pool, then run a workflow
engine.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 waits
Steps: ductor.Steps{
ductor.Approval("sales-lead"), // human-in-the-loop
ductor.Connector("salesforce", "create_opportunity"),
ductor.Connector("slack", "notify"),
},
},
})
 
// durable, observable, exactly-once — settlement and signed receipts opt-in
decision, 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.

TriggersWebhookPollingScheduleEventAPISDK
Salesforce
HubSpot
Slack
Stripe
Twilio
Zendesk
OpenAI
Anthropic
Freshdesk
Pipedrive
SendGrid
Segment
PagerDuty
Kafka
Shopify
Jira
Mailchimp
Klaviyo
Intercom
Discord
Notion
QuickBooks
Square
Brevo

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.