Documentation menu
Start here
IntroductionGetting startedWrite an agentProject anatomyUnderstand Ayjnt
Harness engineeringTwo runtimesHuman interfacesHow agents workHost bridgeAgent capabilities
Callable methodsState & SQLiteSessions & memorySchedulingWorkflowsDurable executionInter-agent RPCSub-agentsToolsInterfaces & integrations
Browser clientRouting & middlewareVoiceBrowser toolsMCPEmailObservabilityCLI
Command overviewnewdevrunbuildcompilemigratedeployAPI reference
AgentAgentClientWorkflow classesLocal & cloudMigrationsExamplesVoice
Build realtime spoken interfaces while keeping the durable agent and browser surface co-located.
Start from a fresh project
This guide is self-contained. Create an empty Ayjnt project, then replace the starter agent with the files shown below. Run commands from the new project directory unless a step says otherwise.
bunx ayjnt new try-voice --empty
cd try-voice
bun install
# remove agents/alive once you are ready to add the guide's filesRealtime transport, durable identity
Voice agents use the Cloudflare Voice integration for audio transport while Ayjnt generates the bindings and route plumbing. The browser owns microphone permission and visualization; the agent owns session identity, policy, and durable state.
Use the realtime voice example when integrating Gemini Live or another realtime model. Never place long-lived API keys in committed browser code; accept them for a local demo or exchange them through a server-controlled path.
Run it and verify the result
Add the provider key, allow microphone access, and confirm the sphere changes to its listening state before the model answers.
bun run build
bun run dev
# the local app is now available at http://localhost:8787