What you get:
  • A character with a persona and a voice that players talk to out loud, in any language, cutting in whenever they like.
  • Your API key stays on your server. Each player’s client gets a one-use secret that opens a session already set up as your character, and it cannot change what you lock.
  • Live game state the character reads before every reply, tools your game runs, and memories kept per player.
  • Audio goes straight from the player’s client to EESI. Your server never relays it.

Run it

Your server mints a secret for each player:
server.mjs
The player’s client asks for it and starts talking:
game.js
Kael greets the player first. session.on("transcript.final", ...) and session.on("response.completed", ...) give you both sides as text, for subtitles. session.close() ends the conversation. secret.join holds the session’s address and how replies are asked for. It never holds your key. A secret opens one session and expires after a minute unless you set expiresInSeconds (up to ten minutes).

In an engine

Unity, Unreal, Godot or anything else with a WebSocket opens join.url and speaks the realtime protocol: 16-bit PCM in, the character’s voice out, events as JSON. The same secret also opens a WebRTC call (join.callsUrl with join.token), which brings echo cancellation on phones and in browsers.

Make it part of the game

  • Live state. Mint the secret with control: true, and your server can update what the character knows while the player talks: const session = await kael.control(secret).start(); await session.context.update({ health: "6/20" }).
  • Tools. Give the character functions your game runs, such as opening a gate or selling an item. With control: true they run on your server, which checks each call first.
  • Speaking first. session.cue("The player just drew a sword.") makes the character react as soon as nobody is talking.
  • Several players. nur.multiplayerNpc(...) keeps one character’s story straight across everyone who talks to it.

Next

Characters

Personas, presets, tools, live state, memory, rooms and languages.

Client secrets

Locks, call length, silence hang-up and signed reply webhooks.

Tools and MCP servers

Functions your game runs, and when the character asks first.

Live conversation

The protocol an engine speaks over the WebSocket.