C#/.NET SDK
The .NET SDK wraps the Autohand CLI subprocess and exposes async APIs for agent runs, event streams, permissions, structured output, and cancellation-aware host code.
Repository: autohandai/code-agent-sdk-csharp. This SDK is in beta while the Agent SDK APIs stabilize. Pin commits or package versions in production.
Requirements
- .NET 8 or newer.
- Autohand CLI installed, authenticated, and configured.
- Optional `AUTOHAND_CLI_PATH` when testing a local CLI build.
Install
.NET
dotnet add package Autohand.CodeAgentSdk
Source
# Until the NuGet package is published, reference the project or repository directly from your solution.Run your first agent
Start with the high-level agent API when you want the SDK to own the run lifecycle and final result collection.
Program.cs
using Autohand.CodeAgentSdk;
await using var agent = await Agent.CreateAsync(new AgentOptions
{
WorkingDirectory = ".",
Instructions = "Review code with staff-level C# judgement.",
});
var run = agent.Send("List the main source files and tell me what looks risky.");
await foreach (var item in run.StreamAsync())
{
if (item is MessageUpdateEvent message)
{
Console.Write(message.Delta);
}
}
var result = await run.WaitAsync();
Console.WriteLine(result.Text);API shape
- `Agent` and `Run` for high-level application workflows.
- `AutohandSdk` for low-level JSON-RPC control.
- `IAsyncEnumerable<SdkEvent>` for streaming tokens, tools, permission requests, and errors.
- `CancellationToken` and `await using` support for host-managed lifecycle.
Structured JSON
Use `RunJsonAsync<T>` when your app needs typed output instead of prose.
C#
using Autohand.CodeAgentSdk;
await using var agent = await Agent.CreateAsync(new AgentOptions
{
WorkingDirectory = ".",
Instructions = "Prefer concise release-readiness analysis.",
});
var risk = await agent.RunJsonAsync<ReleaseRisk>(
"Assess this SDK repository for publish readiness. Do not execute commands.",
new JsonRunOptions
{
SchemaName = "ReleaseRisk",
Schema = new
{
summary = "string",
risks = new[]
{
new { title = "string", severity = "low | medium | high" },
},
},
});
Console.WriteLine(risk.Summary);
public sealed record ReleaseRisk(string Summary, Risk[] Risks);
public sealed record Risk(string Title, string Severity);Next steps
- Use Quickstart for the cross-language setup flow.
- Open C#/.NET API for the reference surface.
- Read Stream responses in real-time and Handle approvals and user input for shared runtime behavior.