.NET and Go SDK Feature Comparison

September 4, 2026 ยท View on GitHub

Feature inventory date: July 2, 2026

Contract parity update: August 31, 2026

This document compares the .NET SDK at microsoft/agent-framework/dotnet with the Go SDK in this repository. The updated overlapping API contracts use .NET baseline microsoft/agent-framework@5996105a1bf2726918101adc6e9c9857b7f68b98; the broader package, sample, and feature inventory remains based on July 2, 2026. The workflow source and test delta was also checked through microsoft/agent-framework@6a0773ba2180e8036d138dbb9794ae64ec2d978b; no workflow code or test changes followed the baseline.

Status Legend

StatusMeaning
AlignedThe Go SDK has the same feature category and broadly equivalent behavior.
PartialThe Go SDK has the core concept, but the API shape, integrations, storage, hosting, samples, or provider coverage differ.
.NET onlyThe feature exists in the .NET SDK and no equivalent was found in the Go SDK.
Go onlyThe feature exists in the Go SDK and no equivalent first-class .NET package was found in the inspected surface.

Executive Summary

The Go SDK covers the core agent and workflow model: agents, sessions, history, context providers, streaming response updates, structured output, function tools, shell execution with environment-aware context, tool auto-calling and approvals, initial harness utilities, A2A, AGUI, MCP, skills, compaction, in-process workflows, checkpoint/resume, human-in-the-loop request ports, state, and workflow-as-agent/agent-in-workflow adapters.

The .NET SDK has a much wider integration and product layer. The largest gaps are DevUI/Aspire, evaluation, declarative agents/workflows, durable agents/workflows, Azure Functions and ASP.NET hosting integrations, OpenAI-compatible hosting, Foundry lifecycle/hosting administration, Azure AI Persistent agents, Copilot Studio, Mem0, Cosmos DB storage, Purview, RAG, remaining harness utilities such as file access/memory/store and subagents, richer sample coverage, and source-generator/declarative workflow tooling.

Within overlapping features, the main misalignments are API shape and ecosystem integration. .NET is centered on Microsoft.Extensions.AI types (AIAgent, AgentRunOptions, ChatMessage, AIContent, AIFunction, AITool, dependency injection, ASP.NET, Durable Task). Go has idiomatic packages and interfaces (agent.Agent, agent.Option, message.Message, message.Content, tool.Tool, workflow.Builder) with less framework hosting and fewer service-specific adapters.

Intentional contract choices in this parity pass:

  • Usage remains represented by message.UsageContent and aggregated through Response.Usage(); Go does not add a duplicate response-level UsageDetails field.
  • A2A hosting uses fresh native sessions and persists opaque framework continuation tokens in A2A task metadata; it does not add an agent session-store API or treat the A2A context ID as a provider session ID.
  • Extensible request metadata stays provider-specific, such as a2aprovider.WithMetadata; Go does not add a generic agent.WithAdditionalProperties option.

Feature Matrix

Feature area.NET SDKGo SDKStatusMisalignment
Core agent abstractionAIAgent, DelegatingAIAgent, AgentRunOptions, AgentResponse, AgentResponseUpdate, current run context, metadata, typed structured responses.agent.Agent, agent.ProviderConfig, agent.Config, agent.Option, Response, ResponseUpdate, Run, RunText, RunMessage, ResponseStream; response aggregation preserves provider RawRepresentation.Aligned.NET exposes extension-method adapters around Microsoft.Extensions.AI; Go uses a provider RunFunc contract and package-level option wrappers.
Agent identity and metadataAIAgentMetadata, agent ID/name/description, source attribution extensions.Agent ID/name/description, provider name, response author stamping.PartialGo does not expose the same request source attribution helpers as .NET.
SessionsAgentSession, AgentSessionStateBag, session serialization helpers, provider session state.agent.Session, marshal/unmarshal hooks, provider session hooks, local/service ID support.Aligned.NET has a richer typed state bag and extension helpers; Go stores provider/session values through its own session abstraction.
Chat historyChatHistoryProvider, InMemoryChatHistoryProvider, per-service-call persistence, reducer triggers.HistoryProvider, default in-memory history for local sessions, third-party storage example.PartialGo has the core lifecycle but fewer built-in storage providers and no first-class reducer trigger options on the history provider.
Context providers and memory injectionAIContextProvider, MessageAIContextProvider, provider invoking/invoked lifecycle.agent.ContextProvider, (*agent.ContextProvider).Middleware, before/after lifecycle.Aligned.NET context providers are integrated with Microsoft.Extensions.AI; Go providers directly transform message.Message slices and options.
Memory integrationsChat history memory, bounded chat history, Mem0, Foundry memory, RAG samples, file memory.In-memory history/context examples and foundryprovider.NewMemoryProvider.PartialGo has Foundry memory and primitives to build memory, but no Mem0, RAG, bounded memory package, or file memory provider.
Compaction and chat reductionCompaction provider, triggers, message index/groups, sliding window, context window, truncation, summarization, tool-result, pipeline, chat reducer adapter.agent/compaction provider, triggers, message index/groups, sliding window, ContextWindowStrategy, truncation, summarization, tool-result, pipeline.AlignedIChatReducer is a .NET-only abstraction that does not exist in Go; all compaction strategies now align.
Structured outputTyped AgentResponse<T>, structured output options, provider adapters.WithStructuredOutput, ResponseFormat, provider Format/Unmarshal hooks, agent/format/jsonformat, typed JSON schema helpers.Aligned.NET response typing is part of the response type; Go uses options and provider-declared structured output support.
JSON schema/format helpersUses AIJsonUtilities, JsonSerializerOptions, schema helpers through extensions and tools.jsonformat.New, Any, Nothing, For[T], MustFor[T], ForType, validation/normalization.PartialGo has a dedicated JSON format package; .NET leans on platform JSON and MEAI tool/function metadata.
Message/content modelChatMessage, AIContent, text/data/error/function call/function result/hosted file/vector store/reasoning/code interpreter and durable state wrappers.message.Message, Content, text/data/error/function call/function result/hosted file/vector store/reasoning/URI/usage/approval/code interpreter content.AlignedType names and serialization are not interchangeable. Go has its own content model rather than using MEAI.
Annotations/citationsMEAI annotation/content support through AIContent.message.Annotation, citation annotations, annotated text spans.AlignedNo direct binary compatibility; mapping is provider-specific.
Function toolsAIFunction, AITool, function tools, plugins, dynamic function tools, tool argument matching in evals. Tool selection supports auto, none, require-any, or one required function.tool.Tool, tool.FuncTool, functool.New, typed input/output schemas, ToolModeAuto, ToolModeNone, ToolModeRequired, RequireTool, and a plugin-style grouping sample.PartialCore tool-selection semantics align. Go has typed function tools and plugin-style tool grouping, but no first-class plugin abstraction or dynamic tool sample equivalent to .NET steps 12 and 20.
Shell tool and environment contextMicrosoft.Agents.AI.Tools.Shell: LocalShellExecutor, ShellPolicy (allow/deny-list), ShellResult, stateless and persistent shell execution modes, approval-in-the-loop gate, head-tail output truncation, ShellEnvironmentProvider, ShellEnvironmentSnapshot, shell-family instructions, common CLI probing.tool/shelltool.NewLocal, shelltool.LocalConfig (mode, timeout, max output, policy, acknowledge unsafe), shelltool.Policy, shelltool.Result.FormatForModel, shelltool.Executor, shelltool.NewEnvironmentProvider, EnvironmentProviderConfig, ShellEnvironmentSnapshot, DefaultShellEnvironmentInstructions.AlignedGo mirrors the .NET design for local execution, policy allow/deny-list, approval-required by default, stateless/persistent modes, output truncation, environment snapshot probing, cached first-probe behavior, refresh, current snapshot access, shell-family prompt instructions, invalid/duplicate probe handling, stderr version fallback, caller cancellation, and probe timeout handling. Docker shell executor not ported (Go has no equivalent DockerShellExecutor). Go represents tool-version nullability with ToolVersion{Found bool} rather than nullable strings.
Tool auto-callingProvider/tool-call loop, concurrent invocation, tool approval agent, and the separate MessageInjectingChatClient decorator.agent/harness/toolautocall is installed by supporting providers. Supplying agent.Config.MessageInjector enables the corresponding internal provider-call decorator; callers queue and inspect messages through that agent.MessageInjector. Auto-call supports concurrent invocation, approval-response binding, and approval-not-required call bypass.AlignedGo keeps auto-call in explicit middleware and uses an explicit injector, while preserving .NET's separate inner-decorator behavior.
Tool approvalTool approval request/response content, tool approval agent and builder extensions, auto-approval rules (heuristics).message.ToolApprovalRequestContent, message.ToolApprovalResponseContent, tool.ApprovalRequiredFunc, agent/harness/toolautocall approval flow, agent/harness/toolapproval middleware for standing-rule and auto-approval-rule approval management, AGUI HITL sample. Approval responses are rebound by request ID to session-snapshotted calls; unknown and duplicate responses are ignored, while safe sibling calls are executed and reinjected on the next turn.AlignedAPI shape differs: .NET uses a ToolApprovalAgent delegating-agent wrapper with ToolApprovalAgentOptions; Go uses idiomatic middleware (toolapproval.New(toolapproval.Config{AutoApprovalRules: ...})). Standing approval rules, queued-request batching, AlwaysApprove* response content, and auto-approval rules (heuristics) are now present in both SDKs.
Hosted/server-side toolsFoundry/OpenAI samples for code interpreter, file search, web search, OpenAPI, Bing custom search, SharePoint, Microsoft Fabric, memory search, Toolbox, hosted MCP.tool/hostedtool declarations for web search, file search, code interpreter, MCP server; Foundry-first samples cover code interpreter, web search, MCP client tools, and local MCP tools; OpenAI Responses hosted-tool coverage remains provider-specific.PartialGo has declaration types and initial Foundry/OpenAI Responses hosted-tool coverage, but fewer service-specific Foundry hosted tool integrations and no Foundry toolbox lifecycle sample.
Agent as function toolAgents can be converted/bound as tools in samples and workflow builders.tool/agenttool.New wraps an agent as a FuncTool.AlignedAPI shape differs; Go exposes a direct package.
Agent as MCP tool/server.NET sample Agent_Step07_AsMcpTool and durable sample for agent as MCP tool.tool/mcptool.AddTool, examples/02-agents/mcp/agent_mcp_server, step10_as_mcp_tool.AlignedDurable MCP hosting is .NET only.
MCP client tools.NET hosted MCP and MCP declarative workflow packages/samples.mcptool.Connect, ListTools, wrappers over MCP client sessions.PartialGo has the basic MCP client/tool bridge; .NET has more hosting/declarative samples.
SkillsFile-based, inline/code-defined, class-based skills, resources, scripts, DI-backed skills.agent/skills, fsskills, file-based, in-memory/code-defined, mixed skills, resources, scripts with script runners.PartialGo lacks class-based skill reflection and DI skill support.
OpenAI providerOpenAI Chat Completions, Responses, Azure OpenAI, background responses, code interpreter file download samples.openaiprovider.NewAgent, NewChatCompletionsAgent, NewResponsesAgent, Azure OpenAI through the OpenAI Go Azure client, continuation/background response support, and explicit OpenAI/Azure provider samples.PartialGeneral Go samples prefer Foundry agents; OpenAI coverage remains provider-specific and has fewer samples for background responses and hosted tools.
Anthropic providerAnthropic packages and reasoning/skills/function-tool samples.anthropicprovider.NewAgent, message params option.PartialGo has provider support, but sample coverage is smaller.
Gemini/provider ecosystemGoogle Gemini sample through provider adapters.geminiprovider.NewAgent, generate content config option.Aligned.NET reaches more providers through generic IChatClient adapters; Go has a direct Gemini package.
A2A agent clientMicrosoft.Agents.AI.A2A, card/client extensions, request metadata, and A2AAgentSession with one current context/task ID.provider/a2aprovider, session-only WithTaskID, TaskIDFromSession, and provider-specific WithMetadata, with one current task ID per session. Direct messages and completed tasks finish with stop; non-streaming task artifacts remain distinct response messages.AlignedGo maps .NET's typed CreateSessionAsync(contextId, taskId) overload to Agent.CreateSession(WithServiceID(contextId), WithTaskID(taskId)). Both validate nonblank IDs and replace or clear the current task ID as the conversation advances.
A2A hostingA2A hosting packages, ASP.NET Core hosting, task continuation, samples.provider/a2aprovider, executor for a2a-go JSON-RPC and JSON HTTP handlers, incoming request metadata forwarding, task-carried background continuation, and end-to-end client/server sample.PartialGo integrates with a2a-go HTTP handlers but does not provide ASP.NET-style hosting/DI integration. It creates fresh native sessions, keeps A2A context IDs separate from provider session IDs, and restores framework continuation tokens from persisted A2A task metadata without a session store. The a2a-go ExecutorContext does not expose SendMessageRequest.Config, so request configuration cannot currently be forwarded to hosted agents as .NET does.
AGUI agent/clientAGUI chat client and shared conversions.provider/aguiprovider, AGUI SSE client integration.AlignedType models differ but feature categories line up.
AGUI hostingASP.NET Core AGUI hosting, end-to-end web chat samples.provider/aguiprovider, JSON HTTP handler, backend/frontend tools, HITL, state examples, reasoning event emission.PartialGo has handlers and examples, but no ASP.NET/Blazor-style end-to-end web app equivalent.
Azure AI Persistent agentsMicrosoft.Agents.AI.AzureAI.Persistent, lifecycle and persistent conversation samples.No equivalent package..NET onlyGo currently uses OpenAI/Azure OpenAI clients, not Azure AI Persistent Agents.
Foundry agents and hosted agentsMicrosoft.Agents.AI.Foundry, Foundry.Hosting, Foundry agent lifecycle and hosted agent samples. Foundry agents report provider identity microsoft.foundry.provider/foundryprovider for Foundry project Responses agents, existing server-side agent endpoint invocation, sticky hosted-agent session IDs, x-client headers, hosted-agent user-identity pass-through, served-model metadata, Foundry memory, and microsoft.foundry provider/telemetry identity.PartialGo supports direct Foundry agent invocation, sticky hosted-agent session reuse, user-identity pass-through, and memory, but lacks Foundry agent lifecycle/admin APIs, ProjectsAgentVersion/record wrapping, Foundry hosting, and several service-specific hosted tool integrations.
Copilot StudioMicrosoft.Agents.AI.CopilotStudio.No equivalent package..NET onlyNo Go connector found.
GitHub CopilotMicrosoft.Agents.AI.GitHub.Copilot.provider/copilotprovider.PartialGo includes a GitHub Copilot provider integration; sample coverage may differ from .NET.
Generic chat-client adapterIChatClient.AsAIAgent, ChatClientBuilder.BuildAIAgent, any MEAI chat client including Ollama/ONNX/custom samples.Custom providers can be built with agent.ProviderConfig, but no generic MEAI-style chat client ecosystem.PartialGo can implement custom providers but lacks a shared cross-provider chat-client abstraction comparable to MEAI.
Agent hosting baseMicrosoft.Agents.AI.Hosting and service registration patterns.A2A, AGUI, workflow hosting packages.PartialGo has targeted host adapters; .NET has broader hosting infrastructure.
OpenAI-compatible hostingMicrosoft.Agents.AI.Hosting.OpenAI for Chat Completions, Responses, Conversations models/converters/streaming.No equivalent package..NET onlyGo does not expose agents through OpenAI-compatible HTTP APIs.
Azure Functions hostingMicrosoft.Agents.AI.Hosting.AzureFunctions.No equivalent package..NET onlyGo has no Azure Functions hosting adapter.
ASP.NET Core hostingA2A/AGUI/DevUI/authorization samples and endpoint extensions.net/http handlers for A2A and AGUI.PartialGo provides handlers but no framework-specific web host integration.
DevUIMicrosoft.Agents.AI.DevUI, endpoint/service extensions, DevUI samples.No DevUI package..NET onlyGo README mentions DevUI at framework level, but no Go DevUI implementation was found.
Aspire integrationAspire.Hosting.AgentFramework.DevUI, Aspire dashboard samples.No equivalent package..NET onlyNo Go Aspire integration.
Dependency injectionAgent and skill samples using Microsoft.Extensions.DependencyInjection; service collection extensions in multiple packages.Idiomatic construction/config examples, no DI framework package.PartialGo does not attempt to mirror .NET DI.
Agent middleware/delegationDelegatingAIAgent, builder extensions, tool approval agent, chat client pipeline integration.agent.Middleware, MiddlewareFunc, automatic run logging, automatic provider-backed structured output, built-in message injection, provider/otelprovider, (*agent.ContextProvider).Middleware, and harness middleware.AlignedAPI shape differs: .NET exposes delegating agents and chat-client builders; Go exposes direct run middleware plus provider-owned internal middleware.
LoggingMicrosoft.Extensions.Logging source-generated logs.slog logger support through agent.Config.Logger, automatic agent run logs, and provider/middleware diagnostics.PartialLogging ecosystems differ.
OpenTelemetry for agentsAgent/workflow observability samples and OpenTelemetry workflow builder extension.provider/otelprovider, workflow/observability/opentelemetry, workflow builder instrumentation via WithTelemetry, trace context propagation in workflow context.AlignedAPI shape differs: Go passes a tracer from the OpenTelemetry adapter separately from TelemetryOptions and keeps workflow observability internals unexported.
EvaluationAgent evaluation extensions, eval checks, local/function evaluators, conversation splitters, workflow evaluation samples, Foundry quality samples.No evaluation package..NET onlyNo Go equivalent found.
Harness utilitiesAgent mode, file access, file memory, file store, subagents, todo, tool approval harness providers, loop harness.agent/harness/agentmode, agent/harness/todo, agent/harness/toolapproval, agent/harness/toolautocall, agent/harness/loop; message injection is supplied through agent.Config.PartialGo now has packaged harness support for agent mode, todo tracking, tool approval, tool auto-call, message injection, and loop reinvocation with delegate/completion-marker evaluators. It still lacks file access, file memory, file store, subagent harness utilities, and the .NET AI-judge loop evaluator. Agent mode tool names (mode_set/mode_get), default instructions, and mode descriptions are aligned with .NET (#6071).
RAGBasic text RAG, custom vector store RAG, custom data source RAG, Foundry service RAG, Neo4j graph RAG samples.No RAG package or sample found..NET onlyGo has data/file/vector content types but no RAG workflow package or samples.
PurviewMicrosoft.Agents.AI.Purview models and end-to-end sample.No equivalent package..NET onlyNo Go governance/Purview integration.
Cosmos DB storageCosmos chat history provider and workflow checkpoint store.No built-in Cosmos package..NET onlyGo has public in-memory and JSON/file workflow checkpoint stores plus a custom store interface, but no Cosmos DB provider.
Agent workflow buildersSequential, concurrent, handoff, group chat builders.agentworkflow.NewSequentialWorkflowBuilder, agentworkflow.NewConcurrentWorkflowBuilder, agentworkflow.NewGroupChatWorkflowBuilder; manual builder plus AddChain, AddSwitch, direct/fan-out/fan-in edges; workflow-as-agent, group chat, and agents-in-workflows examples.PartialGo now has first-class sequential, concurrent, and group chat builders with explicit output designation support. Handoff and Magentic builders are not yet implemented.
Workflow graph builderWorkflowBuilder, direct edges, fan-out, fan-in barrier, labels, conditions, switch/case samples.workflow.Builder, AddEdge, AddFanOutEdge, AddFanInBarrierEdge, WithEdgeLabel, WithEdgeCondition, WithEdgeCondition0, WithEdgeAssigner, IdempotentEdge, AddSwitch.Aligned.NET has more overloads/extension methods; Go uses typed option functions.
Workflow executor modelGeneric Executor<TInput> and Executor<TInput,TOutput>, function executors, aggregating executor, protocol builder.Executor, NewExecutor, NewAggregatingExecutor, Executor.Bind, Executor.Extend, RouteBuilder, StatefulExecutorCache.AlignedGo's NewExecutor adapts functions and structs with a Handle method; NewAggregatingExecutor handles stateful aggregation. Cross-run declarations, binding concurrency gates, incremental state, and checkpoint restore behavior align.
Workflow protocol descriptionAccepts/yields/sends/catch-all protocol descriptor and chat protocol helpers.ProtocolDescriptor exposes accepted, yielded, and sent types plus catch-all acceptance; messageworkflow.Configure contributes chat-message protocol metadata.AlignedGo now exposes the same protocol shape while keeping chat helpers in the Go-specific message workflow adapter.
Workflow execution modesIn-process OffThread, Concurrent, Lockstep; durable execution in separate package.In-process OffThread, Concurrent, Lockstep; subworkflow execution mode used by workflow/inproc.PartialDurable execution is .NET only.
Workflow streaming and runsRun, StreamingRun, open/run/resume streaming, try-send, run to halt, status, events.inproc.Run, StreamingRun, Run, OpenStreaming, RunStreaming, Resume, ResumeStreaming, TrySendMessage, WatchStream, WatchUntilHalt, status.AlignedNaming follows Go conventions (SessionID instead of .NET SessionId). Incompatible try-send input returns false without an error.
Workflow checkpointingIn-memory and JSON checkpoint managers, custom stores, Cosmos store, checkpoint restore, checkpoint hooks.In-memory checkpoint manager (checkpoint.NewInMemoryManager), JSON+file checkpoint manager (checkpoint.NewJSONManager with checkpoint.FileSystemJSONStore), Manager.LatestCheckpoint, custom store interface (checkpoint.Store[json.RawMessage]), WithCheckpointing, checkpoint restore, checkpoint hooks, resume pending request republish, checkpoint-and-rehydrate example.PartialGo lacks a Cosmos store. Custom durable stores can be implemented via the public checkpoint.Store[json.RawMessage] interface.
Workflow stateShared/private scoped state, state update lifecycle, stateful executors.Scoped state, ReadState, ReadOrInitState, ReadStateKeys, QueueStateUpdate, ScopeID, ScopeKey, state checkpointing.AlignedAPI naming and state store extensibility differ.
Workflow external requests/HITLRequest ports, external requests/responses, human-in-the-loop samples, wrapped request support.RequestPort, RequestPort.Bind, ExternalRequest, ExternalResponse, PostRequest, HITL sample, pending request republish.PartialGo supports the core flow but lacks .NET's broader wrapped-request/host integration surface.
Agent in workflowAIAgentBinding, AIAgentHostOptions, response/update events, role reassignment, message forwarding, intercept user-input/function-call requests.workflow/agentworkflow.New with Config: EmitUpdateEvents, EmitResponseEvents, pointer-backed ForwardIncomingMessages and ReassignOtherAgentsAsUsers, InterceptUserInputRequests, InterceptUnterminatedFunctionCalls.AlignedGo uses pointers for nullable/default-true settings so omission preserves .NET defaults while explicit new(false) remains available.
Workflow as agentWorkflow host agent / AsAIAgent, experimental session checkpoint recovery service, sample.agentworkflow.NewAgent with session-backed checkpoint rehydration.PartialGo chooses the in-process environment based on concurrency and intentionally omits .NET's experimental WorkflowSessionCheckpointRecovery API.
SubworkflowsConfigureSubWorkflow, BindAsExecutor, subworkflow sample.inproc.BindSubworkflowAsExecutor plus in-process subworkflow execution.AlignedGo exposes subworkflow binding from the in-process execution package.
Handoff orchestrationHandoff workflow builder with handoff instructions, tool-call filtering, return-to-previous, response/update events.No first-class handoff builder..NET onlyCould be modeled manually with tools/workflows, but no SDK feature.
Group chat orchestrationGroup chat manager and group chat workflow builder.agentworkflow.GroupChatManager, agentworkflow.NewRoundRobinGroupChatManager, agentworkflow.NewGroupChatWorkflowBuilder.AlignedAPI shape differs, but Go now has a managed group chat abstraction with manager callbacks and workflow hosting.
Declarative agentsYAML prompt/declarative agent packages, factories, PowerFx helpers.No equivalent package..NET onlyGo skills are prompt-like, but not declarative agents.
Declarative workflowsDeclarative workflow packages, Foundry/MCP declarative integrations, samples for confirm input, HTTP, code, MCP, function tools, marketing, student/teacher, etc.No equivalent package..NET onlyGo workflows are code-first.
Workflow source generatorsMicrosoft.Agents.AI.Workflows.Generators.No equivalent package..NET onlyGo relies on generics/reflection without generator tooling.
Durable agents/workflowsDurable Task agents/workflows, Azure Functions and console samples, reliable streaming, long-running tools.No durable package..NET onlyGo checkpointing is in-process only.
Workflow visualizationVisualization sample and DevUI serialization extensions.Reflectors for edges/executors/ports and edge labels; no visualization UI sample found.PartialGo can expose metadata but does not ship visualization tooling.
Message filtersNot a prominent standalone package in the scanned .NET public surface.message/messagefilter with And, Or, PassThrough, None, source filters.Go onlyGo exposes message filtering as a small public package.
Message workflow adapterNo direct standalone package found.message/messageworkflow configures a workflow.ExecutorSpec from message options.Go onlyThis is Go-specific glue around the local message model.
Samples and tutorialsVery broad sample set: get started, providers, agents, shell environment, skills, Foundry, memory, RAG, AGUI, A2A, MCP, declarative, DevUI, evaluation, durable hosting, web chat, Purview, M365.Focused sample set: get started, providers, agents, shell environment, A2A, AGUI, MCP server, skills, workflows (including checkpoint-and-resume and checkpoint-and-rehydrate), A2A end-to-end, chat CLI.PartialGo samples cover core parity areas but miss many .NET integration scenarios.

Notable Misalignments Inside Overlapping Features

Agent Runtime

  • .NET can adapt any IChatClient into an AIAgent, so provider coverage includes direct packages plus any MEAI-compatible chat client. Go can define any provider through agent.ProviderConfig, but there is no common external chat-client adapter layer.
  • .NET agent responses include typed AgentResponse<T>; Go keeps structured output as run options backed by provider-declared response formatting and unmarshaling hooks.
  • Go supports background/continuation tokens through agent options and OpenAI Responses handling, but .NET has more sample coverage around background responses and provider fallbacks.
  • Go rejects blank RunText input and nil RunMessage input, generates UUID default IDs, and does not persist history/context after a caller successfully abandons a response stream.
  • OpenAI, Anthropic, Gemini, AGUI, and Foundry constructors accept provider-owned *toolautocall.Config values. Supplying agent.Config.MessageInjector places message injection inside provider-owned auto-call middleware. Explicit OpenAI and Gemini tool modes apply even when no framework function tools are registered.
  • Both SDKs detect conflicts between local history providers and service-managed sessions, but the session state models and extension points are different.

Tools and Hosted Tools

  • Go has typed function tools, agent-as-tool, MCP tool wrapping, approval-required tools, hosted tool declaration structs, a shell execution tool with environment context (tool/shelltool), and harness middleware for tool auto-calling, message injection, and approval management. .NET has all of those categories plus plugins, dynamic function tool samples, tool approval agent wrappers, Docker shell execution, and many server-side hosted tool samples.
  • Go hosted tools should be treated as provider-dependent declarations. The .NET samples demonstrate more concrete hosted-tool scenarios, especially Foundry and OpenAI Responses server-side tools.

Skills

  • The file/inline skill model is similar: frontmatter, content, resources, scripts, sources/providers.
  • .NET adds class-based skills, attribute-based resources/scripts, and DI-backed skill construction. Go has programmatic in-memory skills and script runners, but no class/DI reflection equivalent.
  • Both Go and .NET support the three skill tools (load_skill, read_skill_resource, run_skill_script); in Go, they are registered when skills are discovered or provided, and when present the tools return descriptive errors if the requested resource or script is not found. Go also exposes per-tool approval controls (DisableLoadSkillApproval, DisableReadSkillResourceApproval, DisableRunSkillScriptApproval) plus ContextProviderOptions.IncludeDetailedErrors, matching the corresponding .NET AgentSkillsProviderOptions surface.

Workflows

  • Core graph primitives are close: direct, fan-out, fan-in barrier, edge labels, conditions/assigners, output executors, run events, run status, checkpointing, state, and human-in-the-loop request ports.
  • .NET has more convenience builders: sequential/concurrent agent workflows, handoff workflows, group chat workflows, and declarative workflows. Go has first-class sequential/concurrent/group chat helpers and subworkflow binding via workflow/inproc, while handoff/declarative workflows are not first-class public features.
  • .NET and Go both expose workflow protocol metadata for accepted, yielded, sent, and catch-all aspects. The API shapes differ, and Go contributes chat-message protocol metadata through the Go-specific messageworkflow adapter.
  • In-process subworkflows run concurrently where configured and pair start/finish hooks correctly.
  • Agent-shaped workflow outputs bypass per-executor yield-type validation but still honor configured output filtering and tags. This follows .NET's corrected future behavior rather than its legacy unfiltered branch.
  • .NET checkpointing supports in-memory, JSON stores, and Cosmos DB. Go supports public in-memory checkpointing, JSON/file checkpoint stores, latest-checkpoint lookup, ordered deduplicated file indexes, checkpoint hooks, resume/restore, and custom stores through checkpoint.Store[json.RawMessage], but it does not include a Cosmos DB store.
  • .NET Durable Task is a separate durable execution model. Go has no durable equivalent.

Hosting and Developer Experience

  • Go has useful protocol handlers for A2A and AGUI, but .NET goes further with ASP.NET Core endpoint extensions, Azure Functions hosting, OpenAI-compatible hosting, Foundry hosting, DevUI, and Aspire integration. The .NET samples/04-hosting/FoundryHostedAgents family remains unported in Go.
  • Go has agent OpenTelemetry middleware and workflow trace context plumbing. .NET has richer observability samples and workflow builder instrumentation.
  • .NET includes evaluation and a broader harness package set. Go now includes initial harness packages for agent mode, todo tracking, tool approval, tool auto-call, and loop reinvocation; other harness capabilities still require custom tools, context providers, or test helpers.

.NET Feature Checklist

The following .NET source packages were present and accounted for in the matrix:

.NET package/projectFeature coverage in this comparison
Microsoft.Agents.AI.AbstractionsCore agent, sessions, responses, context providers, chat history, content conversions.
Microsoft.Agents.AIChat client agent, compaction, evaluation, harness providers, memory, skills.
Microsoft.Agents.AI.OpenAIOpenAI and Azure OpenAI agent adapters.
Microsoft.Agents.AI.AnthropicAnthropic agent adapters.
Microsoft.Agents.AI.Tools.ShellLocal shell execution, shell policies, shell results, shell environment provider/snapshots, environment-aware sample parity.
Microsoft.Agents.AI.A2AA2A agent client integration.
Microsoft.Agents.AI.AGUIAGUI chat client and conversions.
Microsoft.Agents.AI.AzureAI.PersistentAzure AI Persistent Agents.
Microsoft.Agents.AI.FoundryFoundry agents and related integrations.
Microsoft.Agents.AI.Foundry.HostingFoundry hosted agents.
Microsoft.Agents.AI.CopilotStudioCopilot Studio agent integration.
Microsoft.Agents.AI.GitHub.CopilotGitHub Copilot provider integration.
Microsoft.Agents.AI.Mem0Mem0 memory provider.
Microsoft.Agents.AI.CosmosNoSqlCosmos chat history and checkpoint stores.
Microsoft.Agents.AI.PurviewPurview integration.
Microsoft.Agents.AI.DeclarativeDeclarative/prompt agents.
Microsoft.Agents.AI.DevUIDeveloper UI endpoints and services.
Aspire.Hosting.AgentFramework.DevUIAspire DevUI integration.
Microsoft.Agents.AI.HostingBase hosting infrastructure.
Microsoft.Agents.AI.Hosting.A2AA2A hosting.
Microsoft.Agents.AI.Hosting.A2A.AspNetCoreASP.NET Core A2A hosting.
Microsoft.Agents.AI.Hosting.AGUI.AspNetCoreASP.NET Core AGUI hosting.
Microsoft.Agents.AI.Hosting.AzureFunctionsAzure Functions hosting.
Microsoft.Agents.AI.Hosting.OpenAIOpenAI-compatible hosting for chat completions, responses, conversations.
Microsoft.Agents.AI.WorkflowsCode-first workflows, in-process execution, checkpointing, state, agents in workflows, workflow as agent, handoff/group chat builders.
Microsoft.Agents.AI.Workflows.DeclarativeDeclarative workflow runtime and object model.
Microsoft.Agents.AI.Workflows.Declarative.FoundryFoundry declarative workflow integration.
Microsoft.Agents.AI.Workflows.Declarative.McpMCP declarative workflow integration.
Microsoft.Agents.AI.Workflows.GeneratorsWorkflow generator tooling.
Microsoft.Agents.AI.DurableTaskDurable agents and durable workflows.

The following .NET sample categories were also accounted for: get started, A2A, AGUI, agent providers, OpenAI/Anthropic/Foundry provider flows, shell environment, memory, RAG, MCP, skills, DevUI, evaluation, harness, declarative agents, code-first workflows, checkpointing, concurrent workflows, conditional edges, human-in-the-loop, shared state, observability, orchestration/handoff, visualization, durable hosting, Foundry hosted agents, web chat, authorization, Purview, and M365.

Go Feature Checklist

The following Go packages and sample groups were present and accounted for in the matrix:

Go package/sample groupFeature coverage in this comparison
agentCore agent runtime, options, sessions, history, context providers, middleware, responses.
agent/compactionCompaction provider, triggers, strategies, message indexing.
agent/format/jsonformatJSON response formats and schema helpers.
agent/harness/agentmodeAgent operating-mode context provider and mode-switching tools.
agent/harness/todoTodo-list context provider and todo management tools.
agent/harness/toolapprovalHuman-in-the-loop tool approval middleware with standing approval rules.
agent/harness/toolautocallFunction-tool auto-calling and approval handling.
agent/harness/loopLoop reinvocation harness with delegate and completion-marker evaluators.
(*agent.ContextProvider).MiddlewareContext provider middleware adapter.
agent.ProviderConfig structured output hooksAutomatic structured output middleware when providers supply Format and Unmarshal.
provider/otelproviderAgent OpenTelemetry middleware.
provider/openaiproviderOpenAI Chat Completions and Responses, including Azure OpenAI client usage.
provider/anthropicproviderAnthropic provider.
provider/geminiproviderGemini provider.
provider/foundryproviderMicrosoft Foundry project Responses agents, server-side agent endpoint invocation, client headers, hosted-agent user-identity pass-through, served-model metadata, and memory provider.
provider/a2aproviderA2A remote agent provider and hosting executor for a2a-go handlers.
provider/aguiproviderAGUI remote agent provider and hosting handler/events.
workflow/agentworkflowWorkflow-as-agent and agent-as-workflow-executor adapters; sequential, concurrent, and group chat agent workflow builders.
agent/skillsSkill model, sources, provider, resources, scripts.
agent/skills/fsskillsFile-system skills source.
messageMessages, content types, annotations, data URI handling, coalescing.
message/messagefilterMessage filter combinators and source filters.
message/messageworkflowMessage/workflow adapter options.
toolTool abstractions, tool modes, approval-required tools.
tool/functoolTyped function tools and JSON schemas.
tool/agenttoolAgent as function tool.
tool/hostedtoolHosted web search, file search, code interpreter, MCP server declarations.
tool/mcptoolMCP tool bridge and MCP server/client helpers.
tool/shelltoolLocal shell command execution tool with policy allow/deny-list, approval gate, output truncation, raw executor interface, shell environment provider, environment snapshots, shell-family instructions, and common CLI version probing.
workflowWorkflow graph builder, executor bindings, edge model, events, protocol, request ports, state context.
workflow/checkpointIn-memory checkpoint manager, JSON checkpoint manager, file-system JSON store, and public custom store interface.
workflow/inprocIn-process run/streaming/resume/checkpoint execution environments.
examples/01-get-startedHello agent, tools, multi-turn, memory, first workflow.
examples/02-agentsRunning agents, tools, approvals, structured output, persisted conversation, third-party history, observability, DI-style construction, agent as MCP/tool, images, context providers, compaction, shell environment context, A2A, AGUI, providers, MCP server, skills.
examples/03-workflowsStreaming, agents in workflows, sequential/concurrent/group chat patterns, group chat tool approval, subworkflows, nested subworkflows, checkpoint/resume, concurrent, conditional edges, HITL, loop, shared state.
examples/05-end-to-endA2A client/server.
examples/demos/chat_cliChat CLI demo.

Highest-Priority Go Parity Opportunities

  1. Add Cosmos-like checkpoint/chat history storage integrations and examples.
  2. Add DevUI or at least workflow visualization/export support that consumes existing reflection metadata.
  3. Add evaluation primitives and samples, starting with local function checks and expected-output/tool-call assertions.
  4. Add declarative agent/workflow support only if Go wants parity with .NET's YAML/PowerFx model; otherwise document the intentional code-first stance.
  5. Add first-class handoff builder support, or document recommended manual workflow patterns.
  6. Expand remaining provider integrations for Foundry lifecycle/admin and hosting, Azure AI Persistent Agents, Copilot Studio, Mem0, Cosmos DB, and Purview if Go intends to match .NET's product surface.
  7. Add OpenAI-compatible, Azure Functions, and richer web hosting adapters if Go should match .NET hosting scenarios.