Overview
What is Eino ADK?
Eino ADK is an Agent development framework for Go, providing:
- ChatModelAgent: A ReAct Agent using LLM as the decision-maker, supporting tool calls, autonomous reasoning, and runtime enhancement (Middleware)
- Workflow Agents: Deterministic orchestration primitives (Sequential / Loop / Parallel)
- Runner / TurnLoop: Agent execution entry point, supporting event streams, checkpoint/resume, and multi-turn preemption
- Multi-Agent Collaboration: AgentAsTool (recommended), Workflow composition
Broadly applicable, model-agnostic, and deployment-agnostic.
ADK Architecture
Agent Interface
All ADK functionality revolves around the Agent interface:
type Agent interface {
Name(ctx context.Context) string
Description(ctx context.Context) string
Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
}
Semantics of Run:
- Obtains task information from
AgentInputand Context - Executes the task asynchronously, writing produced events to
AsyncIterator - Returns the Iterator immediately after starting the async task (Future pattern)
ChatModelAgent
The core implementation of ADK. Uses ChatModel as the decision-maker and autonomously progresses problem solving through a ReAct Loop.
ChatModelAgent = ChatModel + Tools + ReAct Loop + Middleware
See details at: Eino ADK: ChatModelAgent Introduction
Multi-Agent Collaboration
💡 Recommended approach: AgentAsTool — Convert a sub-Agent into a Tool, and the parent Agent invokes it via ToolCall and receives the result. This is the most flexible and composable collaboration pattern.
| Collaboration Method | Mechanism | Applicable Scenarios |
| AgentAsTool (Recommended) | Sub-Agent wrapped as a Tool, parent Agent autonomously decides whether to call it | Delegating subtasks, capability composition |
| Workflow | Sequential / Loop / Parallel deterministic orchestration | Multi-step tasks with fixed flows |
See: Agent Collaboration
Runner
Runner is the execution entry point for Agents. The following features are only available when executing through Runner:
- Event stream output: Query/Run → AsyncIterator[AgentEvent]
- Checkpoint / Resume: Persist running state, support interrupt recovery
- TurnLoop: Multi-turn runtime, Push/Preempt/Stop
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: agent,
EnableStreaming: true,
CheckPointStore: store, // Optional
})
iter := runner.Query(ctx, "Your question")
See: Agent Runner and Extension | Agent Cancel and TurnLoop