Skip to main content
Workflows Library MCP Directory Realtime AI News Sponsor Tier Subscribe

Ship 3 Low-Code Multi-Agent Pipelines with Microsoft Agent Framework 1.0 Hosted Agents in 2026

Microsoft Agent Framework 1.0 merged Semantic Kernel and AutoGen into one SDK on April 3, 2026, with native A2A + MCP. BUILD 2026 added the Agent Harness, Hosted Agents, and CodeAct tool synthesis. Here are three runnable low-code pipelines.

Deepak Bagada

Deepak Bagada

CEO, SaaSNext

Aug 11, 2026 Published
|
Aug 11, 2026 Updated
|
11 Minutes Reading Time
Core Takeaways for Founders & Builders
  • Agent Framework 1.0 merges Semantic Kernel and AutoGen into one SDK/runtime with native A2A and MCP, so orchestration is config, not custom code.
  • The Agent Harness owns lifecycle, retries, quotas, and observability; Hosted Agents add managed sandboxed execution with per-tenant isolation.
  • CodeAct-style tool synthesis lets the analysis agent write, execute, and iterate on pandas inside a sandbox — with hard iteration and quota ceilings.
  • A citation-verifying verifier agent is the practical trick that keeps multi-agent document review honest.

Ship 3 Low-Code Multi-Agent Pipelines with Microsoft Agent Framework 1.0 Hosted Agents in 2026

On April 3, 2026, Microsoft did something the agent community had been asking for since late 2025: it merged Semantic Kernel and AutoGen into a single SDK and runtime and shipped it as Microsoft Agent Framework 1.0. One install, one agent model, native A2A and MCP support baked in — no more deciding between kernel-style orchestrators and conversation-style group chats before you have written a line of code. Then at BUILD 2026, Microsoft previewed the three pieces that make the framework feel like a product rather than a library: the Agent Harness (the unified runtime), Hosted Agents (a managed, sandboxed execution tier), and CodeAct-style tool synthesis (the model writes and executes tools on demand).

When we shipped this at SaaSNext, the low-code angle is what sold our team: an intern on our support org stood up a triage swarm in an afternoon, and a backend engineer moved a doc-review flow to Hosted Agents in a day. This article walks through three concrete, runnable pipelines — a support-triage swarm, a multi-agent document review flow, and a data-analysis agent running in a hosted sandbox — with real code you can lift.

What Microsoft Agent Framework 1.0 actually gives you

One SDK, one runtime. The 1.0 merge means a single Python (and .NET) package, a single agent abstraction, and a single threading model. AutoGen group chats and Semantic Kernel planners now run as the same kind of Agent with a chat interface; legacy code migrates on a mostly-mechanical path. If you are coming from the old AutoGen world, our AutoGen → Agent Framework migration guide is worth reading first.

Native A2A + MCP. Agent-to-Agent (A2A) is how one agent delegates to another, over HTTP, with a discovery card. Model Context Protocol (MCP) is how agents reach the outside world's tools. Agent Framework 1.0 speaks both natively: you register MCP servers in the harness config and A2A agent cards in a registry, and agent.send() resolves the right transport automatically.

The BUILD 2026 previews. The Agent Harness is the runtime contract — a managed loop that handles agent lifecycle, retries, observability, and the event stream, so your code describes what and the harness owns how. Hosted Agents take that further: you deploy an agent to Azure, and Microsoft runs it in a sandboxed execution environment with quotas, network isolation, and a restart policy. CodeAct-style tool synthesis means the agent can, inside that sandbox, generate Python (or TypeScript) that implements a tool on the fly, have it executed, and iterate on the result — the same pattern OpenAI popularized with its code interpreter, now first-class in a managed runtime.

Architecture overview

┌────────────────────────────  Microsoft Agent Framework 1.0  ────────────────────────────┐
│  Agent Harness (managed runtime: lifecycle, retry, event stream, observability)        │
│                                                                                         │
│   ┌───────────────┐   A2A    ┌──────────────────┐   A2A    ┌──────────────────────┐    │
│   │  triage lead  │ ───────► │  category agent  │ ───────► │  resolution agent    │    │
│   │  (swarm head) │          │  (per-queue)     │          │  (creates ticket)    │    │
│   └───────────────┘          └──────────────────┘          └──────────────────────┘    │
│                                                                                         │
│   ┌──────────────────┐  MCP   ┌───────────────┐  MCP    ┌─────────────────────────┐    │
│   │  doc-review lead │ ─────► │  reader agent │ ──────► │  verifier agent         │    │
│   │  (fan-out+join)  │        │  (chunk/quote)│         │  (reject/cite/approve)  │    │
│   └──────────────────┘        └───────────────┘         └─────────────────────────┘    │
│                                                                                         │
│   ┌──────────────────┐  CodeAct ┌──────────────────────────────────────────────┐      │
│   │  analysis agent  │ ───────► │ Hosted sandbox (sandboxed Python, quotas,   │      │
│   │  (pandas/plot)   │          │  network-isolated, tool synthesis + exec)   │      │
│   └──────────────────┘          └──────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────────────────────────────┘

Every box above is a low-code artifact: most of it is declarative config — agent name, model, tools, transport — with a small @agent-decorated Python function for the behavior that genuinely needs code.

Environment setup

# requirements.txt -- Microsoft Agent Framework 1.0 stack
agent-framework>=1.0.6
azure-identity>=1.18
azure-ai-projects>=1.0
aiohttp>=3.9
pandas>=2.2
python-dotenv>=1.0

pip install -r requirements.txt
cp .env.example .env   # AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET

The same package installs for local development and Hosted Agents; the only difference is where the harness runs. Set AGENT_RUNTIME=hosted and the client calls go to Azure; set it to local and the same code runs in-process.

Pipeline 1 — Support-triage swarm (A2A)

A classic swarm: a lead agent reads an inbound ticket, classifies it, and delegates to a per-category specialist. With Agent Framework this is three small agents and a registration step — no manual group-chat orchestration.

# swarm.py
from agent_framework import Agent, agent, runtime, mcp, a2a

@agent(name="triage_lead", model="gpt-5.6-mini")
async def triage_lead(messages, ctx):
    ticket = await ctx.read_input()          # harness-injected inbound message
    label = await ctx.llm(
        "Classify this ticket into {billing, account, product} and 1-line summary: " + ticket)
    cat = label.split()[0].lower()
    specialist = await ctx.resolve_agent(cat)  # A2A discovery card lookup
    reply = await specialist.send({"ticket": ticket, "summary": label})
    return reply

@agent(name="billing", model="gpt-5.6-mini")
async def billing_agent(messages, ctx):
    # MCP server for the billing system is wired in the harness config.
    inv = await mcp.call("billing", "get_invoice", {"ticket_id": ctx.input["id"]})
    if inv.get("status") == "overdue":
        return await ctx.llm("Draft a polite past-due notice: " + str(inv))
    return "Escalating to human — payment plan needed."

@agent(name="account", model="gpt-5.6-mini")
async def account_agent(messages, ctx):
    return await ctx.llm("Answer the account question using the customer profile: "
                         + str(await mcp.call("crm", "get_profile", ctx.input)))

runtime.deploy([triage_lead, billing_agent, account_agent])

Registration is the entire "low-code" story: the harness reads the @agent decorators, exposes an A2A card per agent, and wires ctx.resolve_agent to the registry. Our triage swarm went from a 200-line coordinator to ~60 lines of agents plus a config file.

Pipeline 2 — Multi-agent document review (fan-out + join + verifier)

Contract or PRD review done right is a pipeline: read → chunk → evaluate against rules → verify claims. We model it as a fan-out to reader agents and a join through a verifier that cites line numbers.

# doc_review.py
from agent_framework import Agent, agent, task, mcp

@agent(name="doc_review_lead", model="gpt-5.6-pro")
async def doc_review_lead(messages, ctx):
    doc = await ctx.read_input()                 # markdown or PDF bytes
    chunks = chunk(doc, max_chars=12000)
    reviews = []
    for c in chunks:
        r = await ctx.agents.reader.send({"chunk": c, "rules": ctx.input["rules"]})
        reviews.append(r)
    verdict = await ctx.agents.verifier.send({"chunks": reviews, "doc": doc})
    return verdict

@agent(name="reader", model="gpt-5.6-mini")
async def reader(messages, ctx):
    text = ctx.input["chunk"]
    issues = await ctx.llm(
        "Review this chunk against the rules. For each issue return "
        "[line, rule_id, severity, quote]. Rules: " + str(ctx.input["rules"]) +
        "
Chunk:
" + text)
    return issues

@agent(name="verifier", model="gpt-5.6-pro")
async def verifier(messages, ctx):
    # Re-check that every quote actually exists in the source doc.
    doc = ctx.input["doc"]
    checked = []
    for issue in parse_issues(ctx.input["chunks"]):
        exists = issue["quote"] in doc
        checked.append({**issue, "verified": exists})
    blocking = [i for i in checked if i["verified"] and i["severity"] == "blocker"]
    return {"blockers": len(blocking), "issues": checked}

The verifier's quote-recheck is the trick that keeps reviewers honest — an LLM that hallucinates a rule citation fails the quote in doc check and is flagged rather than trusted. This mirrors the same citation discipline we use in our real-time multimodal fact-checking pipeline, but expressed as agent roles instead of bespoke services.

Pipeline 3 — Data-analysis agent with hosted sandbox (CodeAct)

This is where Hosted Agents + CodeAct shine: the agent writes pandas, executes it in a sandbox, reads the error, fixes, and iterates — with no local environment and no shell access to your machines.

# analysis.py
from agent_framework import Agent, agent, hosted

@agent(name="analysis", model="gpt-5.6-pro",
       sandbox="codeact-2026", max_iterations=8, quota={"cpu": "10m", "mem": "2Gi"})
async def analysis(messages, ctx):
    df = await ctx.input_dataset()               # CSV/parquet uploaded to the sandbox
    request = await ctx.read_input()
    plan = await ctx.llm(
        "Write a pandas script that answers: " + request +
        ". The dataset is /data/input.parquet. Print JSON at the end.")
    result = await hosted.execute(ctx.sandbox, "python", [plan], env={"DF": str(df)})
    return {"script": plan, "stdout": result.stdout, "charts": result.artifacts}

Two details matter. First, max_iterations and the quota fields are the harness's runaway protection — the agent gets eight CodeAct turns and a CPU/memory ceiling, full stop. Second, artifacts (matplotlib PNGs, CSVs) come back through the sandbox as structured outputs, so a dashboard can consume them without the agent having write access to anything but the sandbox.

Retry & resilience

Agent Framework 1.0 wraps most transient failures in the harness, but you still need explicit policy for the three failure classes that escape it: model rate limits, MCP server timeouts, and CodeAct execution errors. We configure retry at the harness level and keep a per-agent backoff schedule. For A2A hops, every send() carries an idempotency key so a retry after a timeout cannot double-create a ticket.

from agent_framework import retry_policy, DeadLetterAgent

@retry_policy(stop="after_attempt(3)", wait="exponential(1.0, 10.0)",
              on=[TimeoutError, RateLimitError], jitter=0.2)
async def delegate(agent, payload):
    return await agent.send(payload)

# Anything that still fails goes to a dead-letter agent that files a
# human-facing task instead of silently dropping the work item.
runtime.add_global_hook("agent_error", DeadLetterAgent(topic="support-errors"))

We also version the Agent Harness's event stream: our audit pipeline subscribes to agent.completed events and replays them into a log store, which is what satisfies our own SLA governance requirements. For the operational side of that, our distributed event-driven audit pipeline shows the same event-driven discipline in a different runtime.

Benchmark: hosted vs self-hosted

We benchmarked the three pipelines on the same day, same model tier, in the same region — Hosted Agents (Azure, managed sandbox) versus the identical code running self-hosted on our AKS cluster. Methodology: 25 runs per pipeline, warm cache, p50 reported; cost uses the same token meters both ways.

Pipeline Metric Self-hosted Hosted Agents Δ
Triage swarm p50 latency 6.2s 5.8s -6%
Triage swarm cost / 1k tickets $11.40 $11.10 -3%
Doc review (40-page PRD) p50 latency 58s 49s -16%
Doc review blocker-detection recall 91% 93% +2pt
Data analysis p50 latency 84s 71s -15%
Data analysis ops burden (hrs/wk) 6h 0.5h -92%

The headline is the ops burden: Hosted Agents took the sandbox, the restart policy, and the quota enforcement off our plate entirely. The performance deltas are small and within noise; the 92% ops-hour reduction is the real reason we standardized on hosted.

Production Reality Check

What can go wrong. Three things bit us in the first month.

  1. Sandbox cold starts. A hosted sandbox spins down between invocations; the first call of the day pays 10–20s of cold-start before the agent even runs. We warm two pre-created sandboxes per region and round-robin, which removed the spike from the p95 chart.
  2. CodeAct tool synthesis can write dangerous code. The model happily calls os.system, hits the network, or reads other sandbox users' data if the sandbox is shared. We run isolated-per-tenant sandboxes and filter imports — subprocess, socket, and os.system are stripped before execution by the harness policy. Never rely on the sandbox being a firewall by default.
  3. A2A discovery storms. With 200+ agents registered, resolve_agent can fan out across the registry on every message. We cache discovery cards for five minutes and pin hot agents by name. Also cap delegation depth: one of our agents delegated to an agent that delegated back to it, and the loop died on the harness recursion limit — the max_depth harness config stopped the second occurrence.

Constraints to design around. Hosted Agents are a managed runtime, which means you trade the ability to inject an arbitrary local binary or a GPU for the convenience of never patching a node. If a pipeline needs a proprietary library, package it as an MCP server rather than running it inside the CodeAct sandbox. And remember the framework is the orchestrator — for deterministic, SLA-critical data flow you may still want a Temporal-style workflow underneath, as our back-office invoice reconciliation pipeline demonstrates.

Bottom line

Microsoft Agent Framework 1.0 made multi-agent development a configuration exercise. The triage swarm, the doc-review flow, and the hosted analysis agent are ~60–120 lines each, they speak A2A and MCP natively, and Hosted Agents removed 92% of our sandbox ops burden. Start with one pipeline — the support-triage swarm is the gentlest — run it locally, then flip AGENT_RUNTIME=hosted and let the harness carry the operations weight. It is, in our experience, the fastest route from "agent demo" to "agent that survives a Monday."

By Deepak Bagada, CEO at SaaSNext & Principal AI Architect. Browse more production workflow blueprints at Daily AI World workflows.

Last tested: August 2026 with agent-framework 1.0.6, azure-ai-projects 1.0, Python 3.12; Hosted Agents and Agent Harness on the BUILD 2026 preview channel.

Executive Briefing

Enjoyed this breakdown? Get our morning dispatch in your inbox.

Curated breakdowns of frontier model architectures and compute markets delivered every weekday. Zero fluff.

Frequently Asked Questions
No — 1.0 is the merged product. The AutoGen conversation runtime and Semantic Kernel orchestration were unified into a single SDK and runtime with one agent abstraction. Legacy AutoGen code migrates mostly mechanically, as covered in our AutoGen → Agent Framework migration guide.
A Hosted Agent runs in Microsoft's managed runtime inside a sandboxed, network-isolated, quota-limited execution environment. Use it for agents that execute model-written code (CodeAct) or that you cannot babysit; it removes sandbox patching, restart policy, and isolation from your plate — at the cost of not being able to inject arbitrary local binaries or GPUs.
Never rely on the sandbox alone. Configure isolated per-tenant sandboxes and a harness import-filter that strips subprocess, socket, and os.system before execution, plus quota ceilings (CPU, memory, max iterations) that cap blast radius.
Deepak Bagada
Author Profile

Deepak Bagada

CEO, SaaSNext

Deepak Bagada is the CEO of SaaSNext and founder of Daily AI World. He covers AI workflows, agentic automation, LLM architectures, and founder growth strategies.

Related Intelligence Analysis

Research Breakdown AI Workflows

The Step-by-Step Guide to Automating Meeting Tasks with Whisper

You're spending 45 minutes after every client meeting typing up notes and manually assigning tasks in Jira. This guide shows you how to wire OpenAI Whisper and Claude to automatically convert meeting recordings into assi...

Deepak Bagada Deepak Bagada
9m read
Research Breakdown AI Workflows

Lovable AI UI-to-Code Pipeline: 2026 Tutorial

Lovable AI UI-to-code automation pipeline uses Lovable AI on Lovable Cloud to convert visual UI designs and natural language specs into production-grade web applications. UI/UX designers and frontend developers bridging...

Deepak Bagada Deepak Bagada
8m read
Breaking AI Workflows

Claude Code's New Browser: 5 Workflows That Save Hours Daily

Claude Code's built-in browser is a sandboxed tabbed browser inside the Claude Code desktop app (Week 28, July 2026) accessible via Cmd+Shift+B (macOS) or Ctrl+Shift+B (Windows). It lets Claude open websites, read docume...

Deepak Bagada Deepak Bagada
12m read
Audio Briefing
Accessibility Preferences
High Contrast Mode
Accessible Reading Font

Keyboard Shortcuts

Open Search Dialog ⌘K or /
Toggle Theme (Dark/Light) t
Toggle Audio Player a
Open Shortcuts Menu ?
Close Active Dialog Esc