I want to use it
Try an assistant in your browser or connect your phone, speaker, or computer. Start with what Thalovant is if the word “hub” is new to you, then follow the voice setup guide when you want spoken replies.
Thalovant hubs run skills and return text, speech, or structured output to connected clients. Voice is one way in; your client can also be an app, an agent, a service, or a device. Try a public hub, then use a private workspace for your own skills, clients, and access rules.
I want to use it
Try an assistant in your browser or connect your phone, speaker, or computer. Start with what Thalovant is if the word “hub” is new to you, then follow the voice setup guide when you want spoken replies.
I want to build on it
Teach a hub something new with a skill, or talk to one from your own code: Python, Node.js, Go, Rust, Kotlin, Swift, .NET or C. Connect agents through MCP, and use MQTT where your hub and SDK support it. The developer pages start with a first request.
You don’t need an account, an app, or a hub of your own to try it. Open a public hub in your browser, pick one of its starter questions, and read the answer. That takes about thirty seconds and costs nothing.
Everything below is for when you want it in a room, on a phone, or in your own code.
Before choosing a device, see what runs locally and what needs a hosted hub. Local voice features do not make the whole assistant an offline service.
For the voice setup path, the first goal is a spoken reply. Apps and agents can start with a request from code instead.
If you get an answer out loud, your setup works. If you don’t, start from what you can see — that page begins with symptoms, not causes.
You
Your hub
It hears the question and decides the answer.
What it answers from
| Word | What it means |
|---|---|
| Hub | Runs skills to handle requests and return responses. One hub can serve many clients. |
| Client | Connects to a hub to send requests and receive responses: a phone, a speaker, an app, a script, an agent. |
| Access rules | What a client is allowed to do on its hub. Narrow is better. |
Nothing else is required to finish the first setup.
The same first request in three of the eight SDKs. Each one signs in, creates a client identity on a public hub, connects over WSS and asks one question.
from thalovant import ThalovantClient, ThalovantControlPlane
api = ThalovantControlPlane()
hub = api.list_public_hubs(limit=1)["data"][0]print(hub["title"], hub["slug"])
result = api.create_client_identity( hub["id"], name="python-demo-client", preferred_protocols=("wss", "https", "mqtt"),)
with ThalovantClient(result.identity, protocol="wss") as client: reply = client.ask("Tell me a short clean joke.") print(reply.text)import { ThalovantClient, ThalovantControlPlane } from "@thalovant/sdk";
const api = new ThalovantControlPlane();
const publicHubs = await api.listPublicHubs({ limit: 1 });const [hub] = publicHubs.data as Array<{ id: string; slug: string; title: string }>;console.log(hub.title, hub.slug);
const result = await api.createClientIdentity(hub.id, { name: "node-demo-client", preferredProtocols: ["wss", "https", "mqtt"],});
const client = new ThalovantClient(result.identity, { protocol: "wss" });try { const reply = await client.ask("Tell me a short clean joke."); console.log(reply.text);} finally { await client.close();}import ThalovantSDK
let api = ThalovantControlPlane()
let result = try await api.createClientIdentity( hubId: "hub-id", options: CreateClientIdentityOptions(name: "swift-demo-client"))
let client = try ThalovantClient(identity: result.identity)do { try await client.connect() let reply = try await client.ask("Tell me a short clean joke.") print(reply.text) await client.close()} catch { await client.close() throw error}Go, Rust, Kotlin, .NET and embedded C make the same calls in their own idiom, and the MCP server does it for an agent without any code at all.