# AG2 Beta > AG2 Beta (`autogen.beta`) is an async, protocol-driven Python framework for building AI agents - covering agents, tools, multi-agent networks, structured output, memory, and evaluation. This file indexes the Beta documentation for LLMs and coding assistants. Build with `autogen.beta` only. The classic `autogen` API (`ConversableAgent`, `initiate_chat`, `GroupChat`) is retired at v1.0 - do not use it. For ready-made setup, install the AG2 Skills with `npx skills add ag2ai/ag2-skills`. ## Documentation - [AG2 Beta](https://docs.ag2.ai/latest/docs/beta/motivation/): The original AutoGen project released with its first public preview in September 2023, and AG2 later diverged from that codebase in November 2024 to continue building on its core ideas. - [Agent Communication](https://docs.ag2.ai/latest/docs/beta/agents/): Agents are the central primitive in AG2 Beta. They maintain state, interact with models, execute tools, and handle user interactions through a clean, conversation-focused API. - [The Agent Harness](https://docs.ag2.ai/latest/docs/beta/agent_harness/): A bare Agent is just a model loop. The harness is the set of opt-in primitives you compose onto it to give it richer capabilities - context assembly, persistent knowledge, sub-task spawning, and the... - [Resuming a Turn](https://docs.ag2.ai/latest/docs/beta/resume/): agent.ask(...) starts a turn from a new message on the agent's current stream. agent.resume(...) does the same job from a recorded trajectory: you hand it a list of past events, and it re-enters the... - [Structured Output](https://docs.ag2.ai/latest/docs/beta/structured_output/): Structured output constrains the model's final message so you can parse it into a typed Python value-a number, a dataclass, a Pydantic model, or the result of your own validator-instead of treating... - [Model Configuration](https://docs.ag2.ai/latest/docs/beta/model_configuration/): The AG2 framework provides an explicit, predictable, and type-safe way to configure Large Language Models (LLMs) for your agents. The configuration API is designed to provide a consistent developer... - [Prompt Management](https://docs.ag2.ai/latest/docs/beta/system_prompts/): Agents can be initialized with a static system prompt. You can provide a single string or a list of strings: - [Tasks](https://docs.ag2.ai/latest/docs/beta/tasks/): A Task is a framework-core wrapper any Agent can use to give a unit of work a trackable lifecycle. While the task is active, the framework emits TaskStarted, TaskProgress, TaskCompleted, TaskFailed... - [Sub-task Delegation](https://docs.ag2.ai/latest/docs/beta/task_delegation/): Sub-task delegation allows agents to delegate work to other agents through tool calling. The calling agent's LLM decides when and what to delegate, and each sub-task runs on its own isolated stream... - [Skills](https://docs.ag2.ai/latest/docs/beta/skills/): Skills let an agent load specialized instructions on demand instead of carrying every capability in its system prompt. They follow the agentskills.io convention: each skill is a directory that an... - [Depends](https://docs.ag2.ai/latest/docs/beta/depends/): The Depends mechanism allows you to calculate and inject dependencies dynamically at execution time. - [Middleware](https://docs.ag2.ai/latest/docs/beta/middleware/): Middleware lets you intercept and customize how an AG2 Beta agent runs a turn. It's the right tool when you want to add cross-cutting behavior such as logging, retries, history trimming, request... - [Telemetry](https://docs.ag2.ai/latest/docs/beta/telemetry/): AG2 Beta includes a TelemetryMiddleware that emits OpenTelemetry spans for agent turns, LLM calls, tool executions, and human-in-the-loop interactions. - [Testing](https://docs.ag2.ai/latest/docs/beta/testing/): AG2 provides a built-in TestConfig utility in the autogen.beta.testing module to help you write unit tests for your agents. It allows you to mock LLM responses and simulate tool execution scenarios... - [AG2 Compatibility](https://docs.ag2.ai/latest/docs/beta/ag2_compatibility/): The autogen.beta.Agent is designed to be fully compatible with existing AG2 architectures, including Group Chats and sequential workflows. By calling the as_conversable() method, you can seamlessly... - [Next Steps](https://docs.ag2.ai/latest/docs/beta/roadmap/) - [Coding with AI Assistants](https://docs.ag2.ai/latest/docs/beta/coding_with_ai/): Set up your AI coding assistant (Claude Code, Cursor, Copilot, Codex, Windsurf, or any agent) so it can build AG2 Beta apps with you using current, accurate APIs and examples. - [Contribution Policy](https://docs.ag2.ai/latest/docs/beta/contribution_policy/): AG2 is what it is today because of its contributors. This page explains how contributions will work in the v1.0 era - what lives in Core, what lives as an Extension, and what we ask of contributors... ## Multimodality - [Multimodal Inputs](https://docs.ag2.ai/latest/docs/beta/multimodal/inputs/): AG2 agents can process images, audio, video, and documents alongside text. The input event system provides a unified API across providers - you create inputs the same way regardless of which model... - [Image Generation](https://docs.ag2.ai/latest/docs/beta/multimodal/image_generation/): Some providers can produce images as part of an agent's reply. Generated images are always returned the same way - as a list of BinaryResult objects on reply.files - regardless of which provider... ## Voice & Realtime - [Voice & Realtime Overview](https://docs.ag2.ai/latest/docs/beta/live/live/): autogen.beta.live is the AG2 Beta module for building voice-enabled agents. It covers two complementary patterns: a turn-by-turn STT -> Agent -> TTS pipeline built on top of a regular Agent, and a... - [Speech-to-Text and Text-to-Speech](https://docs.ag2.ai/latest/docs/beta/live/stt_tts/): The STT -> Agent -> TTS flow turns any existing Agent into a voice agent without changing the agent itself. Speech-to-text is added as a pipeline wrapper; text-to-speech is added as an observer that... - [LiveAgent - Realtime Voice Sessions](https://docs.ag2.ai/latest/docs/beta/live/live_agent/): LiveAgent is a full-duplex voice agent backed by a provider's realtime API. Unlike the turn-by-turn STT/TTS pipeline, it opens a single bidirectional session for the entire conversation - audio flows... ## Multi-Agent Network - [Multi-Agent Network Overview](https://docs.ag2.ai/latest/docs/beta/network/overview/): The autogen.beta.network module turns one or more Agent instances into a multi-agent network - a hub-and-spoke topology where a central registry coordinates channel-based, protocol-driven exchanges... - [Quick Start](https://docs.ag2.ai/latest/docs/beta/network/quick_start/): The smallest possible end-to-end network scenario: one in-process hub, two agents, a consulting channel that auto-closes after a single Q-and-A. - [Hub and Identity](https://docs.ag2.ai/latest/docs/beta/network/hub_and_identity/): The hub is the network's single source of truth: registry, audit log, channel table, write-ahead logs, expectation evaluators, sweepers. Every send, observation, and rule check goes through it. - [Agent Clients and Handlers](https://docs.ag2.ai/latest/docs/beta/network/agent_clients/): The agent-side of the network. A HubClient represents one process's connection to the hub; it produces AgentClients - one per registered Agent. Each AgentClient carries a notify handler that decides... - [Human Clients (HITL)](https://docs.ag2.ai/latest/docs/beta/network/human_client/): A HumanClient is a non-LLM participant on the network - the human-in-the-loop primitive. It is a client in the network, just like LLM agents, so the hub routes envelopes to it exactly the same way. - [Network-Assigned Tools](https://docs.ag2.ai/latest/docs/beta/network/network_assigned_tools/): When you call HubClient.register(agent, ...) with the default attach_plugin=True, the framework attaches NetworkPlugin to your agent. The plugin does two things: - [Channel Adapters Overview](https://docs.ag2.ai/latest/docs/beta/network/adapters_overview/): A channel adapter governs one channel's allowed sends, default view policy, expectations, and termination rules. Four built-ins ship with the network module; each has its own page. - [Conversation Adapter](https://docs.ag2.ai/latest/docs/beta/network/conversation/): conversation is a free-form 2-party channel. Either side can send at any time; there's no turn order to enforce, and the adapter never auto-closes. Use it when you want a peer-to-peer back-and-forth... - [Consulting Adapter](https://docs.ag2.ai/latest/docs/beta/network/consulting/): consulting is a strict 1-question-1-reply channel. The initiator sends exactly one substantive envelope; the respondent sends exactly one reply; the adapter auto-closes with reason... - [Discussion Adapter](https://docs.ag2.ai/latest/docs/beta/network/discussion/): discussion is an N-party round-robin channel. Participants speak in a fixed order, cycling indefinitely until you close it. The adapter enforces "wait your turn" via validate_send; the hub's can_send... - [Workflow Adapter](https://docs.ag2.ai/latest/docs/beta/network/workflow/): workflow is the orchestrated multi-party adapter. A declarative TransitionGraph describes who speaks first, what conditions fire, and when the channel terminates. It's the modern replacement for the... - [Context Variables](https://docs.ag2.ai/latest/docs/beta/network/context_variables/): Channel-scoped mutable state that any participant can read or write, auto-persisted on the WAL, and visible to transition conditions. The modern equivalent of classic ContextVariables from... - [Closing Channels](https://docs.ag2.ai/latest/docs/beta/network/termination/): Every channel terminates with an EV_CHANNEL_CLOSED envelope on the WAL, carrying a free-form reason on event_data["reason"] and on ChannelMetadata.close_reason. Five routes lead there. Pick by who... - [Migrating from Group Chat](https://docs.ag2.ai/latest/docs/beta/network/migration_from_group_chat/): This page is for users porting an existing AG2 deployment that uses GroupChat plus Handoffs-style orchestration onto the new autogen.beta.network module. The modern equivalent is the WorkflowAdapter... - [Pattern Cookbook](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/pattern_cookbook/): Side-by-side translations of the canonical multi-agent orchestration patterns from classic (non-beta) AG2 (autogen.agentchat.group) onto the beta WorkflowAdapter. Each pattern lists the classic... - [Pipeline / Sequential Processing](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/pipeline/): The Pipeline pattern organises agents into a strict linear sequence: each agent processes the previous agent's output, then hands off to the next. Information flows in one direction; the run ends... - [Hierarchical / Tree](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/hierarchical/): The Hierarchical pattern places a coordinator above a set of specialists. The coordinator delegates work, the researcher returns to the coordinator with facts, and the writer is the terminal step... - [Star](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/star/): The Star pattern places one hub agent at the centre with several specialist spokes. The hub fans out questions to the relevant spoke, collects each reply, and synthesises a final answer. Spokes never... - [Coordinator (Manager + Specialists)](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/coordinator/): A coordinator agent at the centre with several specialists. The coordinator's LLM decides which specialist to consult next via a single generic handoff(to) tool, and ends the conversation via a... - [Escalation](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/escalation/): The Escalation pattern flows a request up a tiered support stack. Each tier either resolves the request (terminating the workflow) or escalates to the next tier. - [Redundant](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/redundant/): The Redundant pattern sends the same problem to multiple specialists with different perspectives; an evaluator at the end picks the best answer or synthesises across them. - [Feedback Loop](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/feedback_loop/): The Feedback Loop pattern alternates a drafter and a reviewer until the reviewer flips a done flag in context, or max_turns fires as the safety cap. Drafter writes, reviewer either approves or gives... - [Context-Aware Routing](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/context_aware_routing/): The Context-Aware Routing pattern uses a router agent to read the user's request, classify it into a category, and dispatch to the specialist whose domain matches. - [Triage with Tasks](https://docs.ag2.ai/latest/docs/beta/network/pattern_cookbook/triage_with_tasks/): The Triage with Tasks pattern breaks a complex request into typed tasks (research -> writing -> review). Each task type routes to a specialist; tasks process sequentially, respecting prerequisite... - [Envelopes and Events](https://docs.ag2.ai/latest/docs/beta/network/envelopes_and_events/): The Envelope is the wire format for everything that flows between agents on the network. Every send produces one; every observer reads them. This page covers the envelope shape, the built-in event... - [Governance, Audit and Observability](https://docs.ag2.ai/latest/docs/beta/network/expectations_and_audit/): The hub enforces governance and surfaces observability through a few layered seams: - [Task Observation](https://docs.ag2.ai/latest/docs/beta/network/task_observation/): The bridge between the Task lifecycle primitive and the network's per-agent track record. When an Agent runs an agent.task(..., capability="X") inside a network turn, a TaskMirror forwards the... - [Views and Skills](https://docs.ag2.ai/latest/docs/beta/network/views_and_skills/): Two LLM-facing concerns: - [Distributed Deployment](https://docs.ag2.ai/latest/docs/beta/network/distributed/): The network is not limited to one process. Replace LocalLink with WsLink and the hub becomes a server that agents anywhere on the network can connect to over WebSocket - entirely over the wire, no... ## Tools - [Agent Tools](https://docs.ag2.ai/latest/docs/beta/tools/tools/): Tools allow agents to interact with the outside world. By providing tools, you enable your agents to perform actions such as executing code, fetching data from APIs, querying databases, or performing... - [Toolkits](https://docs.ag2.ai/latest/docs/beta/tools/toolkits/): A Toolkit groups related tools into a single, reusable unit. Instead of passing individual tools one by one, you can bundle them into a toolkit and pass the whole collection to an agent. This is... - [Common Tools](https://docs.ag2.ai/latest/docs/beta/tools/common_toolkits/): AG2 ships with ready-made tools and toolkits that bundle related function tools into a single Toolkit. Unlike built-in provider tools, these run locally as regular Python functions and work with... - [MCP Servers](https://docs.ag2.ai/latest/docs/beta/tools/mcp_servers/): MCP (Model Context Protocol) is a protocol introduced by Anthropic that aims to standardize how tools and prompts are exposed to LLMs. It can be thought of as a superset of regular Tools, created to... - [Built-in Provider Tools](https://docs.ag2.ai/latest/docs/beta/tools/builtin_tools/): AG2 includes built-in tools that map to server-side capabilities offered by LLM providers. These tools are executed by the provider's API - not locally - and require no function implementation on... - [Code Execution](https://docs.ag2.ai/latest/docs/beta/tools/code_execution/): AG2 supports two ways to let an agent run code: have the LLM provider execute it inside their own sandbox, or run it client-side through a sandboxed backend you control. Both produce the same... - [Sandbox Shell Tool](https://docs.ag2.ai/latest/docs/beta/tools/local_shell/): SandboxShellTool lets an agent run shell commands inside an environment you choose - a local subprocess, a Docker container, a Daytona sandbox, or any custom backend. Unlike the provider-native... - [Tool middleware](https://docs.ag2.ai/latest/docs/beta/tools/tool_middleware/): Tool middleware lets you wrap one function tool with async hooks that run immediately around its execution-the same idea as an agent's on_tool_execution() Middleware, but attached at tool definition... - [Approval Required](https://docs.ag2.ai/latest/docs/beta/tools/approval_required/): approval_required() is a built-in tool middleware that gates tool execution on human approval. When the agent tries to call a tool decorated with this middleware, the user is prompted to approve or... ## Extensions - [Exa Search](https://docs.ag2.ai/latest/docs/beta/extensions/tools/search/exa/): ExaToolkit gives an agent four related tools powered by the Exa neural search engine: web search, find-similar, content retrieval, and AI-powered answers - all sharing a single client. - [TinyFish Search](https://docs.ag2.ai/latest/docs/beta/extensions/tools/search/tinyfish/): TinyFishSearchToolkit gives an agent two related tools powered by TinyFish: web search and browser-rendered page fetch. Use it when an agent needs current search results and then needs to read the... ## Context Features - [Conversation Variables](https://docs.ag2.ai/latest/docs/beta/context/variables/): Variables provide a flexible way to store, share, and inject contextual information between agents and tools. Unlike hardcoded configurations, variables allow you to dynamically pass state-like API... - [Dependency Injection](https://docs.ag2.ai/latest/docs/beta/context/inject/): Dependency Injection (DI) is a design pattern used to pass complex objects or services into your tools at runtime, rather than hardcoding them or re-instantiating them repeatedly. This keeps your... - [Human in the Loop](https://docs.ag2.ai/latest/docs/beta/context/human_in_the_loop/): Agents often need guidance or approval from human users to proceed safely and effectively. The Human-in-the-Loop (HITL) feature allows an agent to temporarily pause its execution and wait for human... ## Evaluation - [Evaluation](https://docs.ag2.ai/latest/docs/beta/evaluation/evaluation/): Evaluation is how you measure whether your agent actually works. The framework runs your agent over a dataset of tasks, scores each run on multiple properties, and gives you aggregate metrics you can... - [Get started](https://docs.ag2.ai/latest/docs/beta/evaluation/getting-started/): A hands-on walk-through: by the end you'll have run a real evaluation and understood every line. We build it up one concept at a time - no prior eval experience assumed. - [Scorers](https://docs.ag2.ai/latest/docs/beta/evaluation/scorers/): A scorer is a function that grades one agent run and produces a structured feedback record. Run it across N tasks and you get N feedback records - which the framework aggregates into pass rates... - [Datasets & Runs](https://docs.ag2.ai/latest/docs/beta/evaluation/runs/): This page covers the core of the offline eval pipeline: building a Suite of tasks, calling run_agent(), reading the RunResult, and grading traces that already exist. (Saving runs and comparing them... - [Comparing variants](https://docs.ag2.ai/latest/docs/beta/evaluation/variants/): To answer "which is best?" - across models, prompts, tools, middleware, or whole builds - run the same suite under several named variants and rank them on a leaderboard. - [Pairwise comparison](https://docs.ag2.ai/latest/docs/beta/evaluation/pairwise/): Sometimes "which answer is better?" is easier and more reliable than scoring each answer in isolation - especially for subjective quality. run_pairwise runs two variants over the same suite and asks... - [Persistence & tracking](https://docs.ag2.ai/latest/docs/beta/evaluation/persistence/): Every run is saved to disk. That's what turns "run an eval once" into "track an agent over its lifetime" - comparing each version against its past selves to confirm improvements and catch regressions... ## Advanced Features - [Files API](https://docs.ag2.ai/latest/docs/beta/advanced/files/): The Beta Files API provides a provider-agnostic interface for uploading, listing, reading, and deleting files used by multimodal workflows. It wraps each provider's native files endpoint behind a... - [Events Streaming](https://docs.ag2.ai/latest/docs/beta/advanced/stream/): The Stream in AG2 Beta is a central event bus that facilitates communication between agents and system components. It operates on an event-driven architecture where components can publish events... - [Observers](https://docs.ag2.ai/latest/docs/beta/advanced/observers/): Observers let you attach lightweight, read-only event listeners directly to an Agent. Under the hood, each observer is a regular Stream subscriber - but you register it on the Agent instead of... - [Watches](https://docs.ag2.ai/latest/docs/beta/advanced/watches/): A Watch is a reactive trigger primitive. You arm it on a Stream, and it fires a callback when its condition is met - where "condition" can be an event match, a count, a time window, a schedule, or a... - [Knowledge Store](https://docs.ag2.ai/latest/docs/beta/advanced/knowledge_store/): A KnowledgeStore is a virtual, path-based key-value store with filesystem-like semantics. It gives agents a durable place to persist conversation logs, artifacts, working memory, and any other... - [Assembly](https://docs.ag2.ai/latest/docs/beta/advanced/assembly/): Use it to inject persistent context (working memory, past conversations, observer alerts) and to cap the history footprint (sliding window, token budget) - without touching the event stream itself. - [Compaction](https://docs.ag2.ai/latest/docs/beta/advanced/compaction/): Long-running conversations accumulate events faster than the model's context window can absorb. Use compaction to cap the size of history that flows into the next LLM call. - [Aggregation](https://docs.ag2.ai/latest/docs/beta/advanced/aggregation/): Aggregation is how an agent builds up persistent state between conversations - the material that WorkingMemoryPolicy and EpisodicMemoryPolicy read back in on subsequent runs. ## AG-UI - [AG-UI (Agent-User Interaction) Integration](https://docs.ag2.ai/latest/docs/beta/ag-ui/index/): The Agent-User Interaction (AG-UI) protocol standardizes how frontend applications communicate with agents. In AG2, autogen.ag_ui.AGUIStream bridges a ConversableAgent to AG-UI event streams. - [CopilotKit UI Quickstart for AG-UI](https://docs.ag2.ai/latest/docs/beta/ag-ui/copilotkit-quickstart/): This quickstart shows how to connect a CopilotKit React/Next.js UI to an AG2 backend endpoint that speaks the AG-UI protocol. - [AG-UI backend deep dive](https://docs.ag2.ai/latest/docs/beta/ag-ui/backend-deepdive/): This page expands on the backend of the AG-UI integration: how to secure your endpoint, how tool calls are represented in the protocol, and how to pass per-request context into your tools. ## A2A - [A2A Protocol Overview](https://docs.ag2.ai/latest/docs/beta/a2a/overview/): The autogen.beta.a2a module exposes any AG2 Agent over the Agent2Agent (A2A) protocol and lets one AG2 agent talk to a remote A2A endpoint as if it were a regular LLM provider. The protocol is... - [Exposing an Agent as an A2A Server](https://docs.ag2.ai/latest/docs/beta/a2a/server/): A2AServer wraps an existing Agent and produces a transport object you can serve directly. JSON-RPC is the default; the same A2AServer instance can also build REST and gRPC transports that share one... - [Connecting to an A2A Server](https://docs.ag2.ai/latest/docs/beta/a2a/client/): A2AConfig is a ModelConfig - pass it to a regular Agent and the remote A2A server becomes that agent's LLM provider. Conversation history, tool calls and streaming are negotiated through the... - [Managing Tasks and Push Notifications](https://docs.ag2.ai/latest/docs/beta/a2a/tasks_and_push/): A2A models every conversation as a Task with a server-side lifecycle. autogen.beta.a2a.tasks exposes helpers for inspecting and aborting tasks; autogen.beta.a2a.push manages webhook subscriptions for... - [A2A Advanced Topics](https://docs.ag2.ai/latest/docs/beta/a2a/advanced/): Topics that aren't part of the day-to-day A2A path: human-in-the-loop, transparent reconnects on streaming drops, plugging in a custom executor, and the error hierarchy. ## Code Examples - [Code Examples](https://docs.ag2.ai/latest/docs/beta/code_examples/code_examples/): End-to-end runnable scripts demonstrating autogen.beta. Each example is self-contained, instantiates a GeminiConfig directly, and exercises one or two specific harness primitives so you can read it... - [Hello Agent](https://docs.ag2.ai/latest/docs/beta/code_examples/01_hello_agent/): The smallest possible end-to-end example: instantiate an Agent with one model config, call ask(), print the reply, then reuse the same Agent for a second turn. No tools, no harness primitives, no... - [Recipe Builder](https://docs.ag2.ai/latest/docs/beta/code_examples/02_recipe_builder/): A culinary assistant that rescales a classic carbonara recipe from 2 servings to 6. The Agent is given a custom Python function as a tool and a Pydantic model as its response_schema, so the final... - [Travel Planner](https://docs.ag2.ai/latest/docs/beta/code_examples/03_travel_planner/): A travel-planner Agent walks through five turns of a single conversation: kicking off the trip, layering on budget and travel-mode constraints, swapping a day's activity, and producing a final... - [Token Watchdog](https://docs.ag2.ai/latest/docs/beta/code_examples/04_token_watchdog/): A creative-writing Agent runs with three observers attached: two built-in (TokenMonitor, LoopDetector) and one custom (AlertConsole). The thresholds are deliberately low so a single ask trips the... - [Research Squad](https://docs.ag2.ai/latest/docs/beta/code_examples/05_research_squad/): Two complementary multi-Agent patterns in one example. First, a coordinator opts in to the auto-injected run_subtasks tool (via tasks=TaskConfig()) to fan out three independent factual lookups... - [Journal Companion](https://docs.ag2.ai/latest/docs/beta/code_examples/06_journal_companion/): A daily-journal Agent that genuinely remembers across runs - not by replaying conversation history, but by summarising each session into a /memory/working.md file in a KnowledgeStore and re-injecting... - [Long-Doc Chat](https://docs.ag2.ai/latest/docs/beta/code_examples/07_long_doc_chat/): A "remember the last words" chat exercise that stress-tests the assembly chain. Three policies compose to control exactly what the LLM sees on each call - drop non-conversation events, hard-cap to... - [Safety Guard](https://docs.ag2.ai/latest/docs/beta/code_examples/08_safety_guard/): A custom BaseObserver (PathGuardian) watches every tool call and emits a Severity.FATAL ObserverAlert when an Agent tries to write to a forbidden path like /etc/. The alert routes through AlertPolicy... ## Optional - [llms-full.txt](https://docs.ag2.ai/latest/llms-full.txt): The entire Beta documentation concatenated into a single file. - [AG2 Skills](https://github.com/ag2ai/ag2-skills): Installable Agent Skills that teach coding assistants the Beta API.