What it is
Microsoft's multi-agent framework. Agents exchange messages, and the conversation itself is the control flow. The current generation runs on an async actor model with a central runtime, which is what the adapter attaches to.
What goes wrong
Conversations do not terminate on their own. Two agents can agree politely forever, or ping a tool back and forth without converging. Message count goes up, progress does not, and reading the transcript to find where it stalled is slow.
What the adapter does
Registers as an intervention handler on the runtime, so it sees messages in flight rather than reconstructing them after. Constraints like "no more than N exchanges without a tool result" become enforceable at runtime instead of discovered in the bill.
adapter = AutoGenAdapter("app", runtime=runtime)
Caveat
AutoGen's API has moved substantially between major versions. Check which one you're on before assuming the runtime hook is where you left it.