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" --> AgenteNone 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
postMessagemessages 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.
