Add real intelligence to the applications you already have, one method at a time. Not a chatbot bolted on the side.
Mark a method with [AIIntent] and run it with ExecuteIntentAsync<T>, or call TransformAsync<T> on any value. The answer is your own type, checked against your rules before your code sees it.
IntentSharp is on NuGet: dotnet add package IntentSharp
No intent file needed. .NET 8, 9 and 10, with OpenAI, Anthropic or any IChatClient.
var email = "Hi, this is Dana from Northwind. We'd like 40 units of SKU A-1192 delivered by 2026-11-15.";var options = new AIRequestOptions() .Require<PurchaseRequest>(r => r.Quantity > 0, "Quantity must be a positive number.");var order = await client.TransformAsync<PurchaseRequest>(email, "Extract the purchase request from this email.", options);[Validator] attempt 1: Quantity must be a positive number.Success: true, after 2 attemptsValue: PurchaseRequest { Contact = Dana (Northwind), Sku = A-1192, Quantity = 40, DeliverBy = 2026-11-15 }Compiled and run with every build of this site. The model's answers are scripted.
The parse, check and retry loop, built in.
No confidence score. The result says what was checked. A pass means the checks passed, not that the answer is right.
The drawing: the path of one checked call
Each box links to its stage on the Overview.
- Your own objects back. Filter, sort and group your own objects. On success the original objects come back, selected or ordered by the model: a filter's matches once each, and every element exactly once for sort and group.
- Checks run in code. No check calls a model, except the optional judge. What does not call the model
- Wording and rules in a file. The folder is watched: save the file, and the next call uses it, with no release. A bad save keeps the last good version while the app runs. Intent files
- Tools for Microsoft Agent Framework.
AsAIFunctions()turns every enabled catalog intent into a standardAIFunctiontool, and each answer is checked before the agent sees it.
Or start from the problem you have: eight problems IntentSharp solves, each with an example compiled and run on scripted answers.
Why not just call the model?
For one typed call, GetResponseAsync<T> is enough. IntentSharp is the checking, retry, limit, fallback and reporting code you would write around every call after that.
The GetResponseAsync<T> column follows Microsoft's .NET structured-output quickstart (learn.microsoft.com/
| What you need | IntentSharp | GetResponseAsync<T> |
|---|---|---|
| Typed result | Built in | Built in |
| Missing member reported, not defaulted | Built in | You write it |
| Your rules checked | Built in | You write it |
| Retry with the findings | Built in | You write it |
| Limits on attempts, model calls and time | Built in | You write it |
| Every attempt kept, with raw output and tokens | Built in | You write it |
| Wording, shape and rules in a file that reloads | Built in | You write it |
From $349 per developer per year.
- 30-day free evaluation
- Unlimited deployments
- Keep the versions released while you paid
- Made by
- C2Consultants LLC, North Carolina
- Support
- By email; the support policy gives the response target for each edition