Skip to content
CAI
Software that uses CAICheck a score

JordanMarr/Agent.NET

62.7

Adequate · 3 October 2026

3.5k

lines of production code

F#

with C#

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

AgentNet is a .NET library that provides a workflow engine and chat agent interface built on the Microsoft Agent Framework. It enables developers to define typed workflows with support for parallel execution, durable suspend/resume capabilities, and resilience patterns like retries. The system also offers a chat agent API for building conversational AI applications with tool integration and streaming support.

How it got here

2025 — Agent.NET v0.2.0 release and MAF integration

7 changes.

The project released Agent.NET v0.2.0, consolidating packages and re-architecting the core to integrate with the Microsoft Agent Framework (MAF) while removing Semantic Kernel dependencies. This update introduced unified durable execution, dependency injection support, and new workflow APIs, alongside comprehensive C\# and F\# sample applications demonstrating these capabilities.

2026 — In-process execution and resilience

5 changes.

This period focused on establishing a robust in-process execution model for AgentNet, replacing early exit mechanisms with structured signals and introducing a Polly-based resilience decorator for step handling. Comprehensive test coverage was added to validate workflow composition, parallel operations, and durable checkpointing, while new samples demonstrated these capabilities in stock analysis and OCR scenarios.

Features

Added Polly resilience pipeline decorator for in-process steps

The new AgentNet.InProcess.Polly module introduces a \policy\ decorator that wraps a step's \ExecuteInProcess\ function with a Polly \ResiliencePipeline\. This allows users to apply resilience patterns, such as retries or circuit breaking, to in-process agent steps by passing a configured pipeline to the decorator.

src/AgentNet.InProcess.Polly · high confidence

Added durable OCR sample demonstrating suspend/resume workflows

A new sample application in Samples.DurableOcr illustrates a long-running OCR pipeline that utilizes durable suspend and resume capabilities. The workflow downloads a PDF, triggers an external OCR service, and then suspends execution via awaitEvent until a callback arrives, allowing the process to exit and be resumed later by a different instance. The sample includes logic for idempotent result storage and demonstrates checkpoint persistence to the file system.

Samples.DurableOcr · high confidence

Added stock comparison workflow sample

A new sample file (WorkflowSample.fs) demonstrates the AgentNet workflow DSL by implementing a sequential pipeline that fetches data for two stocks in parallel, passes the combined data to an AI agent (ChatAgent) for analysis, and generates a formatted comparison report.

StockAdvisorFS · high confidence

F\# Stock Advisor demo with interactive agent chat and workflow samples

The StockAdvisorFS project now includes a complete F\# demo application featuring an interactive agent chat mode powered by Anthropic's Claude model, alongside standalone workflow and single-stock analysis samples. Users can launch the app to select from several demo scenarios: an interactive chat loop where the agent uses tools (stock info, historical prices, volatility, and comparison) to provide investment insights; predefined workflow comparisons for specific stock pairs (AAPL vs MSFT, GOOGL vs AMZN); a single stock analysis for TSLA; and a custom workflow for comparing any two stocks. The application loads environment variables from .env files and requires the ANTHROPIC\_API\_KEY to be set for the chat feature.

src/StockAdvisorFS · high confidence

Introduces AgentNet workflow and chat agent APIs

AgentNet now provides a new workflow engine and chat agent interface. Users can define typed workflows using a computation expression that supports steps, routing, parallel fan-out/fan-in, and durable operations like awaitEvent and delay. The engine compiles these workflows to the MAF (Microsoft.Agents.AI.Workflows) runtime for execution. Additionally, a new ChatAgent type allows creating agents with configurable instructions, tools, and chat options, supporting standard chat, full response history, and streaming modes. Tools can be created from F\# quotations with automatic extraction of parameter descriptions from XML documentation, and dependency injection is supported via the WorkflowContext.

AgentNet · high confidence

New C\# Stock Advisor agent and workflow samples

Added a new C\# sample application (StockAdvisorCS) that demonstrates building AI agents and workflows using the Microsoft Agent Framework (MAF) and Anthropic's Claude model. The sample includes an interactive chat agent for single-stock analysis, a sequential workflow for comparing two stocks in parallel, and a set of simulated stock tools (info, volatility, history, comparison) to showcase agent tool usage.

src/StockAdvisorCS · high confidence

Behavioural changes

Agent.NET v0.2.0: Unified package, MAF-native durability, and DI support

Agent.NET is released as version 0.2.0, consolidating the previously separate InProcess and Durable packages into a single \AgentNet\ package (with an optional \AgentNet.InProcess.Polly\ add-on). The durable execution model has been reworked to use Microsoft Agent Framework (MAF) native checkpoint/resume, removing the dependency on Azure Durable Functions. This change allows the same workflow definitions to run in-process or durably, with explicit suspension at \awaitEvent\ points. Additionally, dependency injection is now supported via \WorkflowContext.Services\, allowing steps to resolve services at execution time.

(repo-wide) · high confidence

AgentNet re-architected to use Microsoft Agent Framework with new workflow and durable ID systems

AgentNet has been refactored to integrate with the Microsoft Agent Framework (MAF), replacing the previous Semantic Kernel dependency. This change introduces a new \AgentFramework\ module that converts AgentNet tools into MAF-compatible AIFunctions, enabling features like XML parameter description extraction and proper cancellation token threading. The library now provides a new \DurableId\ module for generating stable, reproducible IDs for workflow steps based on function metadata, which supports durable workflow replay. Additionally, a new \ResultWorkflow\ system and \WorkflowBuilder\ with SRTP-based type threading have been introduced to handle complex workflows with error handling (\tryStep\) and parallel execution (\fanOut\), while the legacy \AgentNet.Interop\ and \AgentNet.InProcess\ packages have been removed in favor of this unified core.

src/AgentNet · high confidence

New in-process executor model with early-exit handling

The AgentNet.Interop layer now introduces a new in-process execution model via the Executors.cs file, which defines StepExecutor and ParallelExecutor classes to wrap async step functions and parallel branches respectively. This implementation replaces the previous EarlyExitException mechanism with a structured EarlyExitSignal and ExecutorEarlyExitEvent approach, allowing workflows to signal early exits due to errors while maintaining context. The ExecutorFactory provides static methods to create these executors, enabling more robust error handling and execution flow control within the in-process runtime.

src/AgentNet.Interop · high confidence

Solution structure reorganized with new project folders and samples

The AgentNet solution has been restructured to introduce dedicated folders for samples, tests, and specific execution modes. New projects include \StockAdvisorCS\ (a C\# agent example), \StockAdvisorFS\ (a F\# agent example), \AgentNet.InProcess.Polly\ (for in-process workflow execution with Polly), and \Samples.DurableOcr\ (a durable workflow sample). The solution also now explicitly groups these under \\_Samples\ and \\_Tests\ logical folders, alongside the core \AgentNet\ and \AgentNet.Tests\ projects.

src · high confidence

Test coverage

Added comprehensive test coverage for AgentNet workflow capabilities

Added tests in src/AgentNet.Tests for in-process workflow execution, including awaitEvent handling via runWithResponses, workflow composition and nesting, parallel fan-out/fan-in operations, resilience policies (retry, timeout, fallback, and Polly integration), durable checkpointing (start/resume with in-memory and file-system JSON storage), exception bubbling through MAF, and result workflow short-circuiting. Also added tests for decorator stacking, cancellation token propagation, and interop assembly loading verification.

src/AgentNet.Tests · high confidence

Dependencies

AgentNet now targets .NET 8, 9, and 10 with new Polly resilience and interop packages

The AgentNet library and its associated projects have been updated to support .NET 8, 9, and 10. This release introduces a new \AgentNet.InProcess.Polly\ package that provides Polly resilience pipeline decorators for in-process workflows, and a new \AgentNet.Interop\ project to handle interop with Microsoft Agent Framework. The core \AgentNet\ package now explicitly pins \Microsoft.Extensions.AI\ to resolve version mismatches with Microsoft Agent Framework rc4. Sample applications (StockAdvisorCS, StockAdvisorFS, Samples.DurableOcr) have been updated to use .NET 10 and the Anthropic provider.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 63 → 63 (-0.5)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 87 → 87 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 57 → 57 (+0.1)
  • Readiness 53 → 53 (+0.0)
  • Security 83 → 80 (-3.3)

Resolved (5)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Hotspot: src/AgentNet/Workflow.fs (src/AgentNet/Workflow.fs)
  • Inconsistent naming for stock identifiers. The type 'StockPair' has a property 'Pair' (redundant/ambiguous) and parameters/fields 'Symbol1' and 'Symbol2' (PascalCase). Other parts of the codebase use 'symbol1', 'symbol2' (camelCase) or 'symbols' (plural noun). 'Pair' is a poor name for a property holding a pair, and 'Symbol1/2' casing differs from the camelCase used in method parameters like 'symbol1'.
  • Parameter names use PascalCase (Stock1, Stock2) which is inconsistent with the standard C# convention of camelCase for local variables and parameters. While not a semantic drift, it violates the casing convention observed in other parameters in the same codebase (e.g., 'symbol1', 'symbol2', 'chatClient', 'context').

New (4)

  • Inconsistent casing for parameter names representing the same concept (first and second stock data). One uses PascalCase ('Stock1', 'Stock2') while the other similar parameters in the same codebase (e.g., 'symbol1', 'symbol2') use camelCase.
  • Inconsistent casing for parameter names. 'Pair' is PascalCase, while 'symbols' is camelCase. Given that 'Pair' is the type name and 'symbols' is plural, the inconsistency is primarily in the casing convention applied to the parameter identifier itself relative to the general camelCase convention seen elsewhere (e.g., 'symbol1', 'symbol2', 'chatClient').
  • Inconsistent casing for stock symbol parameters. Some are PascalCase ('Symbol1', 'Symbol2') while others are camelCase ('symbol1', 'symbol2').
  • redundant comment (src/StockAdvisorCS/Program.cs)

Changes since last survey

  • 2 commits — 1 feature/other, 1 fixes

By area

  • (root) — 2 commits

Notable commits

  • fix: v0.1.1 - Fix Tool.createWithDocs XML doc lookup for nested and generic parameter types (#8)
  • change: v0.2.0 - Tool.inject without IL emission or leaks; XML param descriptions reach the model (#9, #10)

Architecture

  • Unchanged — 1 containers · 3 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

JordanMarr/Agent.NET was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6169a427add18f3a51f9dc84ac27631848d93409 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.