Install

.NET

dotnet add package Autohand.CodeAgentSdk

Source

# Until the NuGet package is published, reference the project or repository directly from your solution.

`AutohandOptions`

Configuration sets the working directory, CLI binary path, debug output, request timeout, model override, skills, system prompt additions, and execution-mode flags.

csharp

var options = new AutohandOptions
{
    WorkingDirectory = ".",
    Debug = true,
    RequestTimeout = TimeSpan.FromMinutes(5),
    Model = "fantail2",
};

`AutohandSdk`

Use the low-level wrapper when you need direct JSON-RPC control.

  • StartAsync() / StopAsync()
  • RequestAsync(method, parameters)
  • PromptAsync(message, options)
  • StreamPromptAsync(message, options)
  • InterruptAsync()
  • SetPlanModeAsync(enabled)
  • SetPermissionModeAsync(mode)
  • SetModelAsync(model)
  • GetStateAsync()
  • GetMessagesAsync()
  • PermissionResponseAsync(requestId, decision)

`Agent`

The high-level agent API is the best fit for product code that sends prompts, streams events, and waits for final results.

csharp

await using var agent = await Agent.CreateAsync(new AgentOptions
{
    WorkingDirectory = ".",
});

var run = agent.Send("Review the public API.");
var result = await run.WaitAsync();
  • Agent.CreateAsync(options)
  • Agent.FromSdk(sdk)
  • Send(prompt, options)
  • RunAsync(prompt, options)
  • RunJsonAsync<T>(prompt, jsonOptions, promptOptions)
  • AllowPermissionAsync(requestId)
  • DenyPermissionAsync(requestId)
  • SuggestPermissionAlternativeAsync(requestId, alternative)
  • SetPlanModeAsync(enabled)

Run

  • StreamAsync(): stream events
  • WaitAsync(): wait until the run finishes and collect text/events
  • JsonAsync<T>(): parse final output as JSON
  • AbortAsync(): interrupt the current run

CLI Runtime Control

Core lifecycle and auto-mode operations are available on Agent and AutohandSdk. Use AutohandSdk for the complete approval, session, MCP, learning, tool-registry, and context surface.

  • Conversation and handoff: ResetAsync, CreateBrowserHandoffAsync, AttachBrowserHandoffAsync, AttachLatestBrowserHandoffAsync
  • Auto-mode: StartAutoModeAsync, GetAutoModeStatusAsync, PauseAutoModeAsync, ResumeAutoModeAsync, CancelAutoModeAsync, GetAutoModeLogAsync
  • Approvals and sessions: AcknowledgePermissionAsync, RespondDirectoryAccessAsync, AcknowledgeDirectoryAccessAsync, DecideChangesAsync, GetHistoryAsync, GetSessionAsync, AttachSessionAsync
  • Integrations and context: SetYoloModeAsync, SetYoloModeAliasAsync, SetVscodeMcpToolsAsync, RespondMcpInvocationAsync, RecommendLearnAsync, UpdateLearnAsync, GenerateLearnAsync, GetToolsRegistryAsync, SetContextCompactAsync

See Control the CLI runtime for behavior, safety contracts, and the equivalent names in every CLI-backed SDK.

SDK events

All CLI-backed SDKs expose the same runtime event names, with language-specific wrappers or helper methods around the raw JSON payload.

  • agent_start
  • turn_start
  • message_update
  • message_end
  • tool_start
  • tool_update
  • tool_end
  • permission_request
  • automode_iteration, automode_complete, automode_error
  • error

See Hooks and events for the complete normalized event contract.

Structured JSON

Use the JSON helpers when the host application needs typed output from the final assistant response.

csharp

var risk = await agent.RunJsonAsync<ReleaseRisk>(
    "Assess release readiness.",
    new JsonRunOptions { SchemaName = "ReleaseRisk" });