It is your agent, not a copy of it
The agent that answers on your website is the same agent you talk to inside thinqOS. Same Mind, same skills, same connected tools. There is no separate copy to keep in sync and no curated list of answers to maintain, so anything your agent learns anywhere it works is available to the person reading your site.
That direction runs both ways. Conversations on your website teach the same Mind, so the agent gets better at explaining your work the more people ask it about your work.
It knows it is talking to a stranger
Every turn tells the agent that the person on the other side is an anonymous visitor rather than you, and which page they are standing on. The page is passed as context and never as an instruction, so a visitor cannot use it to talk the agent into anything.
The agent is told plainly not to assume authority on a visitor behalf and not to reveal account specific information. Treat that as the floor rather than the whole story: an agent with access to sensitive tools should be reviewed before you put it in front of the public.
Visitors are remembered without an account
The first time somebody talks to your agent, we issue an anonymous handle and store it in your own page storage. When they come back, your agent recognises them and can pick up where the conversation left off. No login, no email, no form.
The handle is scoped to your agent and your site. The same person visiting a different company running the same feature is a completely separate visitor, and neither side can see the other.
Visitors can clear it. One call deletes what your agent learned about them, retires the handle on our side, and removes it from the browser, so your agent meets them as a stranger next time. That control is always available and cannot be turned off by the site embedding the agent.
You decide who can reach it, and what it can spend
An agent is not reachable from the internet until you switch its embed on. You then list the exact origins allowed to talk to it. The snippet is public, because anyone can read your page source, so the origin list is what stops a copy of it working on somebody else’s site.
Origins are matched exactly. There are no wildcards on purpose: a pattern like a wildcard subdomain cannot tell your own subdomain apart from a stranger who signed up for a subdomain on the same shared host.
What actually bounds your cost is the two ceilings, not the origin list. Browsers cannot lie about which site a request came from, but a script can send anything, so set the ceilings deliberately: one caps how many turns a single visitor can run, the other caps the whole agent for the day. Both are enforced before any model is called, so a refused turn costs you nothing.
How much of it looks like thinqOS is up to you
The default widget renders inside a shadow root, which means your site styles cannot break it and its styles cannot leak into your page. You set colours, type, spacing, position and the launcher through CSS custom properties.
If that is not enough, replace the launcher and header with your own markup and keep the conversation thread. If you want total control, ignore our interface entirely: the same script exposes a headless client that gives you the transport and the conversation state and renders nothing at all. At that level nothing on the screen is ours, and a visitor has no way to tell what is running underneath.
Commands
Add it to a page
<script src="https://app.thinqos.com/embed/v1.js"
data-agent="YOUR_AGENT_ID"
data-auto-mount="true"></script>Allow your site to reach the agent
PUT /api/agents/YOUR_AGENT_ID/embed
{
"enabled": true,
"allowed_origins": ["https://yoursite.com"],
"visitor_turn_limit": 50,
"daily_turn_limit": 500
}Build your own interface instead
const agent = thinqOS.createClient({
agentId: 'YOUR_AGENT_ID',
baseUrl: 'https://app.thinqos.com',
onError: (err) => report(err),
});
agent.subscribe(({ messages, busy }) => render(messages, busy));
agent.send('What do you do?');Let a visitor clear what is remembered
agent.forget();