Go-native · runtime agnostic · open source

Go Realtime voice AI agents

agents-go runs the work around the model — it listens, thinks, and speaks — with typed tools, interruptible turns, and worker-fleet primitives. Built for large, horizontally-scaled voice.

Get started
agent.go
// an agent is instructions + a model to speak with
agent, _ := agents.NewAgent(agents.AgentOptions{
    Instructions: "You are a concise support agent.",
    LLM: model,
})

// the session runs the turn loop — transport-independent
session := agents.NewAgentSession(agents.AgentSessionOptions{})
defer session.Close(ctx)

session.Start(ctx, agents.StartOptions{Agent: agent})
result, _ := session.Run(ctx, agents.RunOptions{
    UserInput: "Reset my password",
})
fmt.Println(result.FinalOutput())
Why agents-go

The runtime for voice agents that have to listen, reason, and keep talking.

The stack

Three layers, and we handle the middle one. You define the others.

You bring the agent. agents-go runs the turn loop and structures the async work. Everything provider- or wire-specific lives in plugins — so the session never names a model vendor or a transport.

Read the architecture
Your agentwhat you write
InstructionsToolsWorkflows
agents-go runtimelisten · think · speak
SessionsTurn-takingAsync tasksLLM → TTS → playout
Providers & transportspluggable · in plugins
LLMSTTTTSVADWebSocketTwilioLiveKitConsole
// wire up a full voice turn: STT · LLM · TTS · VAD
session := agents.NewAgentSession(agents.AgentSessionOptions{
    STT: stt, LLM: llm, TTS: tts, VAD: vad,
})

// bind a transport and let the loop run
session.Start(ctx, agents.StartOptions{
    Agent: agent,
    Transport: roomio.Bind(room),
})
On the turn

Listen. Think. Speak. Interrupt. Repeat.

The session detects when a caller has finished speaking, runs the model, calls your tools, and streams TTS back — handling barge-in and handoffs as they happen. You describe the agent; the runtime drives the conversation.

See how a turn flows

Ship a voice agent this afternoon.

Install the module, connect a provider, and run your first interruptible voice agent in minutes — then scale it across a worker fleet.