Agent is a configured harness with a model running in a Runtime. It can be configured with an AgentConfig. An agent is given a Task and produces a Trace.
agent.interaction(task) holds a rollout open turn by turn. The caller acts as the
user, and each turn() runs one harness segment (i.e., a message, tool call, tool result etc.). A Segment therefore contains messages, tool calls etc.