Form-Check Trainer
Your AI trainer watches your form, counts your reps, and pushes you to your limits.
COSMO REALTIME HARNESS
One SDK for voice and multimodal agents on every surface. Cosmo handles the transport, model inference, and the improvement loop; you just write the agent's persona, hooks and skills.
PASTE THIS INTO YOUR CODING HARNESS
› Set up Cosmo from platform.askcosmo.ai/docs/quickstart/cli, then build me a voice agent.const client = new RealtimeClient({ token });const agent = client.agent({ instructions, skills, tools, hooks });const session = await agent.start();
BUILD APPS THAT CAN DO ANYTHING
Copy any of these prompts into your favorite coding agent harness and get an app built on the Cosmo SDK.
HOW IT WORKS
session.start()Your app keeps the experience and the business logic. The harness keeps what makes an agent shippable. Click any tile in the harness to see why it matters.
YOUR APP
mic + camera
capture & publish tracks
session.on(…)
render transcripts & state
tools + hooks
your code, with guardrails around it
audio + video · WebRTC tracks
transcripts · tool calls · errors (typed JSON)
tool results · client state
one room · sub-second round-trip
COSMO HARNESS
liveMODEL INFERENCE
full-duplex speech models
pipelined STT → LLM → TTS
voice + vision, sub-second
rotated · their API quirks never reach your code
ONE AGENT, EVERY SURFACE
This console is live: toggle capabilities on the left, switch the model provider on the right, and watch how the code changes. The application lines never move.
TypeScriptnpm install cosmo-ai
Pythonpip install cosmo-ai-sdk
SwiftCosmoRealtime · Swift Package
1import { RealtimeClient } from "cosmo-ai";2 3const client = new RealtimeClient({ apiKey: process.env.COSMO_API_KEY });4 5// Your application. Everything below composes onto this one agent.6const agent = client.agent({7 instructions: SUPPORT_PROMPT,8 // Point it at a model. This is the only provider-specific line.9 model: "gemini", // swap the model, keep the app10 tools: [getWeather], // client, server or background11 skills: [refundsSkill, schedulingSkill], // one menu line each; the prompt stays flat hooks: [scrubPii, audit], // PreToolUse rewrites/denies · PostToolUse audits12});13 14// One session. One lifecycle. One API.15const session = await agent.start(); // the mic publishes automatically // Nothing else composed. Flip a capability on; the app around it never moves.16 17// Capabilities on the live session.18await session.startScreenShare(); // same call on every surface19await session.addVideoStream(cameraStream); // any getUserMedia stream20await session.sendImage({ data: snapshot }); // base64 stills, same sessionawait session.dial("+15555550123"); // the callee joins the session21 22for await (const event of session) {23 render(event); // transcripts, tool calls, one stream24}PRICING
A realtime minute is a minute of live session: mic open, agent listening, or camera streaming. Build free, scale on usage.
$0
Everything you need to get a session live tonight.
$0.03/ minute · hosting
Cosmo hosting is metered per live minute; model inference is passthrough at provider rates.
Custom
Dedicated infrastructure and your own improvement loop.
Hosting meters only while a session is live. Model inference is billed passthrough: the provider's rates, no markup.
By signing up for Cosmo Platform, you're agreeing to the Terms of Use, Privacy Policy and Acceptable Use Policy.
A runtime for realtime voice-and-vision agents: full-duplex transport, model inference, long-term memory, and continual learning behind one API. You define the agent (instructions, skills, tools, hooks) and the harness runs the conversation.
No. Audio and video stream over WebRTC tracks and typed JSON events travel a reliable channel in the same room; the harness runs the media server and owns session negotiation, track publishing, and reconnection. You never touch the media layer.
Closed-weight frontier APIs, open-weight models, or custom Cosmo models: you pick one with a single config field, and the harness absorbs each provider's API idiosyncrasies so swapping never touches the rest of your app. Upstream model sessions rotate automatically mid-call.
Sessions are full-duplex: the agent listens while it speaks, and it yields instantly on barge-in. The harness adds up to 200 ms of overhead on top of model latency, a number that keeps going down.
You register functions with the agent; when the model decides to call one, the call arrives as a typed event, your code runs it, and the result flows back into the conversation. The contract is identical in TypeScript, Python, and Swift.
Yes: telephony is part of the harness. Attach a phone number to an agent and the same session model, tools, and events apply to a phone call as to a browser session.