Skip to content

On-screen assistant SDK

What the copilot is and how it connects

The copilot lets your platform’s AI assistant do more than reply with text: it can take a person to a screen, highlight where everything is and, if you allow it, fill in and tap buttons on their behalf — always in full view, always with their own session, always with their own confirmation before saving anything. It rests on three pieces:

  • The brain is the tenant’s AI agent, on the Platform’s backend. It decides what to do, but it never acts directly against your site: it only proposes a plan.
  • The hands are the copilot SDK: a library with no AI and no network of its own that you install alongside your chat widget. It decides nothing — it runs the plan the brain proposed, in full view, with its own confirmation dialog.
  • The manifest is a JSON document you write: the closed catalog of screens, fields and buttons on your site the copilot can ever use. If something isn’t in the manifest, it doesn’t exist for the assistant — it never invents a screen or a button.
flowchart LR
subgraph Backend["Platform backend"]
Agente["Tenant agent(the brain)"]
end
subgraph Tuweb["Your site"]
Widget["Your chat widget"]
SDK["Copilot SDK(the hands, no network of its own)"]
DOM["Your real formsand buttons"]
end
Manifiesto["Your v1 manifest(screens and anchors)"]
Agente -- "1. validated plan" --> Widget
Widget -- "2. postMessage" --> SDK
SDK -- "3. navigate / highlight / fill in / tap" --> DOM
SDK -. "declared against" .-> Manifiesto
DOM -- "4. real result" --> Widget
Widget -- "5. result" --> Agente

None of this happens unless you explicitly turn it on: having the widget on your site does not give you the copilot. All three things are needed at once — (1) the copilot turned on for that channel on the Platform, (2) the SDK installed on your site with its manifest and (3) that manifest approved — and if any one is missing, the widget behaves exactly like a normal chat.

Note — The SDK never talks to any server

The copilot SDK makes no network call of its own or anyone else’s — all it does is read your manifest, listen for postMessage messages from your own widget (with the origin verified) and touch your page’s DOM. The conversation with the Platform’s backend always goes through your widget, never through the SDK directly.