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