# CAAC Go — install reference for AI agents and developers > How to put the CAAC Go AI chat agent on a website. This document is written to > be read by a coding agent. Everything here is stable and public; the only > per-account value is the widget key, which the site owner supplies. Product: CAAC Go, an AI agent that answers website visitors from the business's own content. Docs: https://caacgo.cresclab.com/developers · Dashboard: https://caacgo.cresclab.com/app ## The key Every workspace has a widget key (`data-key`). The owner copies it from https://caacgo.cresclab.com/app/channels/website. It is a **public** embed key — it ships in the HTML of every installed site, so it is not a secret and does not need to go in an env var or a server-side proxy. Never invent or guess a key: if you do not have one, stop and ask the owner for it. ## Option 1 — chat bubble, site-wide (this is what almost everyone wants) ```html ``` Paste it **once**, immediately before the closing `` tag, in the file that renders the shared layout for the whole site. It then appears on every page automatically. A floating launcher button is added; nothing else on the page is touched. Attributes: | Attribute | Required | Meaning | |---|---|---| | `src` | yes | Must be `https://caacgo.cresclab.com/widget.js`. Do not self-host or proxy it — it is served with `max-age=0` so fixes reach installed sites immediately. | | `data-key` | yes | The workspace's public widget key. | | `data-color` | no | Accent colour as a 6-digit hex, e.g. `#5090FF`. Falls back to the colour saved in the dashboard. | | `async` | recommended | The widget never blocks rendering. | Do not add the snippet more than once — a second copy renders a second launcher. ## Option 2 — inline frame, one specific page ```html ``` Use this only when the chat should sit **inside** a page's content rather than float. It does not belong in the shared layout. Size it with the width/height or with your own CSS. ## Framework notes - **Plain HTML / static site** — the shared footer partial or template, before ``. If pages are separate files with no shared include, add it to each one. - **Any framework** — prefer the framework's standard site-wide script hook over inventing a wrapper component, but keep `src` and the `data-*` attributes byte-identical and keep it loading on every route. - **Single-page apps** — a plain `