arrow_backBack to the overview
Adapters

Everything that varies, behind one interface.

Channels, systems, tools and skills. Plug in, do not fork.

An adapter is how the Hub reaches the world. Channels carry the conversation, systems of record hold the business, tools let a worker act, and skills package how a job is done. Every one of them sits behind a stable interface, and the single most important rule is that an adapter never owns conversation state. State, identity resolution and thread continuity stay in the Hub.

One threadper contact, spanning every channel
Bidirectionalintelligence flows back with provenance
MCPone protocol for every tool a worker reaches
Omni-channel fabric

One conversation that follows the person.

Most tools are multi channel but single channel per conversation: once a contact is engaged on a messaging app, that conversation lives and dies there. The fabric works at the server level instead, so a conversation can start in a message, shift to voice for the complex part, and return to text for scheduling, as one continuous thread.

callVoiceInbound and outbound telephony, real time streaming audio, barge-in, voicemail detection.Priority
chatWhatsApp BusinessThe official Cloud API path, with media, templates and interactive replies.Priority
mailEmailThe worker's own inbox: outreach, replies, and an ingestion point for forwarded intelligence.Priority
forumWeb chatThe same worker, same objectives, same outcome contract, in text on your own properties.Priority
smsSMSWebhook driven rather than polled, for fallback and time sensitive coordination.Roadmap
sendTelegramOn the official SDK, for markets where it is the working channel.Roadmap
groupsTeams & ChatFor internal facing workers serving colleagues rather than customers.Roadmap
addYour channelConnect, disconnect, send, receive, typing, media, delivery receipt. That is the whole interface.Open
CapabilityWhat the fabric does
Unified stateA single thread per contact spanning every channel, so the worker sees one continuous interaction regardless of where each part happened
Preference trackingLearned from response patterns, time of day behaviour and explicit statements, then used to route new outreach where a reply is most likely
Automatic fallbackUnresponsive on the primary channel escalates to alternates on configurable timing and sequencing, per account or per contact
Voicemail handlingDetect and execute a configured strategy: leave a contextual message, skip to an alternate channel, or schedule a retry
Language routingDetection and following handled server side, so the worker stays language agnostic at the logic level
Graceful degradationVoice unavailable reroutes to text, a rate limited channel queues and switches, and every degradation raises a system event rather than failing silently
Channel eligibilityThe permitted channel set is computed per contact per attempt from jurisdiction, consent and preference, then intersected with what the worker can do. A worker never picks a channel it is not allowed to use, because it never sees one

Channel availability is a property of the market, not of the worker

There is a version of this platform where voice is the product and everything else is a convenience. That version does not survive contact with the world. Some markets restrict or effectively prohibit cold outbound voice. Some restrict internet telephony specifically. Some contacts have consented to email and nothing else. Some enterprises forbid recorded calls as a matter of policy. In every one of those cases the behaviour is the same: the worker uses text, messaging or email instead, and pursues exactly the same objectives on the channel it is permitted to use.

Why this is a principle, not a workaround

A worker whose objectives are stated in terms of a channel is a bot for that channel, and every new market becomes a new build. A worker whose objectives are stated as outcomes runs wherever it is allowed to run, and a regulatory change becomes a configuration change rather than a project.

The costs, stated rather than glossed

Timing changes shape, because an asynchronous exchange reaches an outcome over days rather than in one sitting. Cue extraction degrades, because text cannot carry hesitation or tone, so a text led market yields thinner intelligence per interaction. And a voice score and an email score measure different things, so channel is a dimension of scoring rather than a footnote.

public
No market is blocked on carrier capability. A market where voice never becomes available is a market the platform serves anyway, at a different cost profile and with a different conversion curve. That is a commercial fact rather than an engineering obstacle, and it is the whole reason the channel fabric was built before the first market was chosen.
Systems of record

Bidirectional, and not only CRM.

The Hub never replaces your system of record. It enriches it. A virtual worker is only as useful as its ability to write back into the system its human colleagues actually live in, and in most industries that system is not a CRM at all.

south_west Inbound

  • Contacts, accounts, opportunities and stages
  • Ownership and activity history
  • Product and pricing catalogues
  • Entitlement and renewal data
  • Where your CRM already holds matched professional network data, it flows in through the same sync

north_east Outbound

  • Conversation summaries and structured outcomes
  • Qualification field updates
  • New contacts and referral chains
  • Stakeholder map changes and initiative signals
  • Meeting outcomes, tasks and activity logs
verified
Two write back disciplines are non negotiable. Every write carries provenance back to the interaction and, where the claim is material, to the warrant that sealed it. And no write ever silently overwrites a human entered field: contradictions surface as assumption corrections for review, never applied in the dark.

The Hub never speaks Salesforce. It speaks its own model, and an adapter translates.

That sentence is the whole design. The temptation in every integration project is to let the first system's vocabulary leak upwards, because the first connector is always written against a real system with real field names and it is quicker to just use them. The cost arrives with the second connector, when the platform is full of assumptions that were never true of anything but the first.

And two systems of the same brand differ more than two brands do. Two Salesforce orgs, both fifteen years old, in the same industry, will have different record types, different required fields, different validation rules and different meanings attached to the same picklist. So field and value mapping is versioned configuration per customer rather than code, diffable, because a mapping change is the most likely cause of a sync defect and "what changed" has to be answerable in seconds.

Three tiers, so a connector degrades rather than fails

Tier one, mandatory

Read organisations and people with stable identifiers, write an activity, resolve an identifier to a current record, and accept a suppression or preference change. A system that cannot do these is not a connector. That last one is non-negotiable: a person who asks not to be contacted must be honoured in your own system, not just in ours.

Tier two, declared

Opportunities, leads as a separate object, campaigns, account teams, custom objects, bulk operations, a change feed, metadata discovery, a sandbox. A connector declares what it supports and the platform adapts, so an absent change feed becomes scheduled polling with the latency reported honestly rather than hidden.

key
And a declared escape hatch. Every abstraction leaks, and an undeclared leak is worse than a declared one because somebody will eventually route around it quietly. So each adapter may expose a named, documented native operation for something only that system can do, invoked explicitly by configuration. The leak stays inside the adapter and visible in the mapping profile, instead of spreading into the engine as a special case nobody remembers.

The platforms

PlatformShapeWhat actually bites
SalesforceOAuth with a connected app and a certificate-based server flow, REST for interactive work, bulk for volume, metadata discovery rather than assumed fields, and change data capture where enabledSharing and visibility, so a connector that looks like it is missing half your accounts is usually under-permissioned rather than broken. Validation rules that reject writes. Record types changing what a field means. Person Accounts breaking the account-and-contact assumption. And an org-wide API allocation shared with every other integration you run
Dynamics 365Microsoft Entra ID with an application user scoped to what the connector actually needs, the Dataverse Web API over OData, alternate keys for clean upsert, and change tracking with delta queriesService protection limits that return a retry instruction, which must be honoured precisely rather than retried aggressively. Publisher prefixes on custom columns, so field names are not guessable and metadata discovery is mandatory. Business units and hierarchy security as the equivalent visibility trap
ZohoOAuth with a server-based application, REST over modules, and asynchronous bulk jobs that produce a file rather than an inline responseThe data centre is part of the identity: an account lives in a specific region and both the authorisation and API hosts differ accordingly, so getting it wrong produces failures that look like bad credentials and are not. And webhook subscriptions expire and must be renewed, so renewal is a scheduled job with an alert rather than something set up once
HubSpot and the mid-marketThe same contract. HubSpot's association model is closer to our graph than a classical CRM isWhich makes it a good second adapter for proving the canonical model rather than a hard one
Not a CRM at allListing platforms, origination systems, servicing systems, professional services toolsFrequently tier one and little of tier two, which the design handles by degrading rather than refusing. This is the case the contract exists for
speed
Your API allocation is a design constraint, not a footnote. Every one of these platforms limits how much you may call it, the allowance is shared with every other integration you run, and spending it is an outage in systems that have nothing to do with us. So the platform models an API budget per connector and enforces it exactly like the cost meter: declared allowance, live consumption, a projection, and thresholds that act. When it approaches the limit it sheds load in a declared order, being reconciliation sweeps first, then polling frequency, then non-urgent writes, and never suppression.
badge
The lead and contact split is a projection, not the truth. In your CRM an unconverted lead is a different object with a different identifier that cannot be related to an account. In the Hub a person is a person, holding both external identifiers during the window where your system has not yet reconciled them. Conversion is an event we react to rather than something we drive, unless you explicitly authorise it, because conversion is a process decision with consequences in your own automation and inheriting it by accident is how an integration gets blamed for a reporting anomaly.

Workforce systems, under much tighter rules

A worker can connect to Workday or a comparable system for one narrow purpose: keeping the account team accurate. A rep who leaves should stop being routed escalations, their instructions should expire, their pairings should close, and nobody should be offered a meeting in a calendar nobody is watching. Availability and leave matter for the same reason.

The purpose determines the field set

A sales worker keeping its team roster accurate reads employment status, role, manager, work contact details, location and leave windows, and nothing else, because nothing else is needed. A recruiting or onboarding worker reads offer terms, compensation, benefits elections and beneficiary designations, because that is the job. The field set is derived from the declared purpose and enforced at the adapter, so data outside it never enters the platform rather than being filtered later. Sensitive classes are off by default and granted deliberately, with a named grantor, a stated basis and a review interval.

Read only about humans, structurally excluded from outbound

The Hub never writes to a human being's record in a workforce system. Employees are a distinct class of person with their own classification, and they are excluded from outbound list resolution in the query layer rather than by a filter somebody remembers. There is no configuration that puts a colleague on a prospecting list. Two further controls matter more here than anywhere: identity verification before disclosure, to a standard set by the data class, and directional disclosure, because discussing someone's leave balance with them and with their manager are two different grants.

Provisioning virtual workers through HR

The reverse direction, and the more interesting one. A workforce system is not only a source of facts about people. It is where your approval, budget and lifecycle machinery already lives, and a virtual worker can be provisioned and managed through it rather than beside it.

As an entity

A role holder with a position, a manager, a start date, a job family and a cost centre, managed by HR through the same processes as a person, and appearing in headcount and the org chart. This is what makes fleet supervision feel natural to the people doing it.

As an asset

A licensed capability with an owner, a lifecycle and a renewal cycle, managed by IT or procurement through a service catalogue and an asset register. Keeps headcount metrics clean and avoids a set of questions some organisations would rather not open.

Neither is more correct, so it is configuration rather than an assumption. And the questions are worth naming: representing virtual workers as personnel records affects headcount ratios and the metrics built on them, may attract employee representation interest where co-determination regimes apply, and in some regulated contexts raises disclosure questions about who or what performed a function. Choosing the asset model to avoid all of that is a legitimate decision rather than an evasion.

approval
Reusing your approval chain is the point, not a convenience. If a virtual worker can only exist through a requisition somebody with budget authority approved, a fleet cannot quietly grow outside the governance you already trust. That is a stronger control than anything we could invent, because it is the control you already believe in. The lifecycle then mirrors an employee's more closely than expected: requisition, approval, provisioning of identity, numbers, channels, entitlements and the worker pack, onboarding with knowledge scope and a simulation run, a supervised period, active service under review, change, suspension, and termination.
trending_up
The supervised period is the authority scale, not a separate mechanism. A new hire shadows before going live, and so should a new worker. It enters service proposing rather than acting, graduates to acting with approval when its simulation results and early supervised conversations support it, and reaches acting within limits on a deliberate decision by somebody with the standing to grant it. Promotion is a decision with evidence attached rather than a date in a plan.
logout
Termination is the stage that gets done badly. Identity revoked in the directory. Channel identities released or reassigned, including telephone numbers, which carry their own regulatory registration in several markets and cannot simply be dropped. Pairings closed, instructions expired, authority revoked. Accounts and work lists reassigned to a named successor rather than orphaned. The pack version archived so what the worker was is reconstructable. And the one that gets missed: a decommissioned worker may still owe somebody a callback on Thursday. Every open obligation is transferred to a named successor or explicitly discharged, because silently dropping one is a broken promise your organisation will never know it made.
edit_note
Which refines the write rule rather than breaking it. The Hub may write to a workforce or asset system about the virtual worker itself, since that register is where you track your own capacity. It never writes about a human. The rule is enforced by subject type rather than by field, which makes it testable rather than aspirational.
schedule
HR systems are scheduled, not event driven, and a design that assumes otherwise will be wrong. So a leaver is detected by comparing snapshots rather than by receiving a leaver event, which is the same derivation the platform already runs to detect absence. And for the leaver case specifically, your identity provider is faster and more authoritative than your HR system, because access is cut at the directory sometimes days before the HR record updates. So we watch both: the directory for immediate deactivation, the HR system for the richer roster.
cloudSalesforceContacts, opportunities, activities and custom qualification fields.
hubHubSpotFull bidirectional sync against the standard object model.
businessDynamics 365Enterprise CRM with role scoped write back.
calendar_monthWorkspace & calendarThe worker's own account, inbox, storage and scheduling.
storefrontListing platformsEnquiry, offer and viewing workflows for property operations.
account_balanceCore banking & servicingPortfolio, entitlement and collections platforms.
support_agentService deskTickets and case history for success and support workers.
addYoursOne vendor agnostic interface, an explicit direction of flow, and a steward who admits what comes back.
Tools

One protocol for everything a worker can do.

The Hub standardises on the Model Context Protocol as the interface through which workers reach tools. That is not a preference about protocols. It is the decision that removes a category of integration work from every future worker.

forum
Family one

Conversation tools

End the interaction and file the outcome contract, transition to another channel, hand off to a human with full context.

bolt
Family two

Action tools

Schedule a meeting, deliver an asset, raise a request onto the board, send a follow up, update a task.

workspace_premium
Family three

Knowledge tools

Search, ask, browse the topic graph, run deep research, retrieve a premise chain, seal a warrant.

database
Family four

System of record tools

Read and write contacts, opportunities, activities, entitlements, listings and tickets, normalised per system.

admin_panel_settings
The security model is deliberately simple to administer. A manager configuring a worker sees a short list of capability groups, being read, write, transact and administer, each with a scope of assigned accounts or the whole territory, and a value ceiling where money is involved. That fits on one screen. Where an organisation genuinely needs fine grained attribute or relationship policy, that belongs in their own policy infrastructure.
Skills

Portable procedures, admitted deliberately.

A tool is a single capability. A skill is a packaged procedure: how to carry out a kind of work, which tools to use, in what order, with what judgement at each step. The ecosystem has converged on a portable format, which means a large body of published skills is already in a shape the Hub can read.

Import Inspect Declare tools & safety class Adapt Trust score Test in simulation Manager approves Grant

An imported skill is a candidate, not a capability

Skills written for a coding assistant or a desktop chat agent assume a filesystem, a shell, a patient user who can be asked a clarifying question, and no regulator. A worker on a live phone call has none of those.

  • Filesystem and shell steps are replaced by tool calls or removed
  • Interactive clarification becomes a defined default or a request onto the board
  • Output is bound to the worker's structured schemas rather than free prose
  • A skill that degrades regression scores does not proceed, however useful it looks

When a skill may run

Skills are bound to task classes, and the default is deny in conversation. Most are far too slow for a live turn, where the budget is a few hundred milliseconds.

  • Their natural home is the deliberative classes: research, analysis, extraction, drafting and coaching
  • A smaller set of short, bounded procedures is marked in-turn safe with an explicit latency budget and a hard timeout
  • The result is that a worker can be deeply skilled without ever sounding like it is thinking
  • Administration is a manager function, not self service
Transactions

A worker that can only talk is a research assistant.

Booking a ticket, confirming attendance, registering a contact, converting an anonymous visitor to a signed in user, upgrading a member tier, extending content access. These are what make a virtual worker commercially load bearing. They are also what can do real damage, so they form their own safety class.

RuleRequirement
IdempotencyA key generated once at intent and reused across every retry. Agentic systems retry, so without a key a retry becomes a second charge. The most consequential requirement in the class
Explicit confirmationThe worker states back exactly what is about to be committed, and requires an unambiguous affirmative. Consent is never inferred from conversational momentum
Two phase executionReserve or hold first, then confirm. A dropped call between the two leaves a reservation that expires, not a half completed sale
Authority boundsValue ceilings and permitted transaction types per worker and per scope. Above the ceiling, escalate to a named human rather than proceed
Compensation pathEvery type declares its reversal: cancel, refund, downgrade, release. The worker knows the path before it commits
No credentials in conversationNever card numbers by voice or message. A hosted payment or verification link instead, which keeps the platform out of credential scope entirely
WarrantedEvery commitment sealed with a signed, replayable record of what was offered, agreed, known and authorised

The conversion ladder and the meeting ladder are the same object. Only the rungs and their scores differ, and those live in the worker definition rather than in the runtime.

Next

Adapters give a worker reach. Calibration gives it competence.

Every conversation is scored, failures are classified as defects with an owner, and nothing reaches production until it passes regression against a saved suite.