Complete reference for the Java Autohand Code Agent SDK.
Agent agent = Agent.create(AgentOptions.builder()
.cwd(".")
.instructions("Review code with Staff-level Java judgement.")
.permissionMode(PermissionMode.INTERACTIVE)
.build());Agent.create(AgentOptions options): starts a session.agent.send(String prompt): creates aRun.agent.run(String prompt): waits for a completedRunResult.agent.runJson(String prompt, Class<T> type): parses final output as JSON.agent.runJson(String prompt, Class<T> type, String schemaName, Object schema, Map<String, Object> options): appends JSON output instructions and parses the final output.agent.allowPermission(String requestId, DecisionScope scope): approves a permission request.agent.denyPermission(String requestId, DecisionScope scope): denies a permission request.agent.command(String command, String arguments): sends a slash command.agent.deepResearch(String topic),agent.autoresearch(String objective): current CLI command helpers.agent.supportsCommand(String command): checks the connected CLI surface.- Typed autoresearch lifecycle and ledger methods listed below are also available on
Agent. - Typed persistent-goal methods listed below are also available on
Agent. - Typed community-skill and MCP discovery methods listed below are also available on
Agent. agent.close(): stops the session.
run.stream(Consumer<Event> onEvent): streams events to a callback.run.waitForResult(): returnsRunResult.run.json(Class<T> type): parses structured output.
public record RunResult(String id, String status, String text, List<Event> events) {}AutohandSDK sdk = new AutohandSDK(new SDKConfig(".", cliPath, false, 300_000));
sdk.start();
sdk.streamPrompt(new PromptParams("Analyze this package"), event -> {
if (event instanceof Events.MessageUpdateEvent mue) {
System.out.print(mue.delta());
}
});
sdk.stop();start(),stop(),close()prompt(PromptParams params): returnsPromptResultstreamPrompt(PromptParams params, Consumer<Event> onEvent)setPermissionMode(PermissionMode mode)setPlanMode(boolean enabled),enablePlanMode(),disablePlanMode()setModel(String model)setMaxThinkingTokens(int tokens)clearMaxThinkingTokens()applyFlagSettings(Map<String, Object> settings)supportedModels(): returnsList<ModelInfo>supportedCommands(): returnsList<String>supportsCommand(String command)getGoal(),createGoal(Goals.CreateParams params),updateGoal(Goals.UpdateParams params)clearGoal(),queueGoal(Goals.CreateParams params),startQueuedGoal(),listGoalTemplates()startAutoresearch(Autoresearch.StartParams params)getAutoresearchStatus(),stopAutoresearch(),getAutoresearchHistory()replayAutoresearch(...),rescoreAutoresearch(...),compareAutoresearch(...)getAutoresearchPareto(),pinAutoresearch(...),pruneAutoresearch(...)getState(),getMessages()reset(): replaces the active conversation and returns its new session ID.createBrowserHandoff(BrowserHandoff.CreateParams params): creates an expiring browser attachment URL.attachBrowserHandoff(BrowserHandoff.AttachParams params): attaches a handoff by token.attachLatestBrowserHandoff(): attaches the newest available browser handoff.startAutoMode(AutoMode.StartParams params): starts a bounded autonomous run.getAutoModeStatus(): returns typed run state, file counts, branch, and checkpoint metadata.pauseAutoMode(): pauses the active autonomous run.resumeAutoMode(): resumes the paused autonomous run.cancelAutoMode(AutoMode.CancelParams params): cancels a run with an optional reason.getAutoModeLog(AutoMode.GetLogParams params): returns typed iteration actions, usage, cost, and checkpoints.getSkillsRegistry(),getSkillsRegistry(CommunitySkills.RegistryParams params)installSkill(CommunitySkills.InstallParams params)getContextUsage(): returnsContextUsageaccountInfo(),getAccountInfo(): returnsAccountInforeloadPlugins()toggleMcpServer(String serverName, boolean enabled)reconnectMcpServer(String serverName)setMcpServers(Map<String, McpServerConfig> servers)listMcpServers(): returnsMcpDiscovery.ListServersResultlistMcpTools(),listMcpTools(McpDiscovery.ListToolsParams params)getMcpServerConfigs(): returnsMcpDiscovery.GetServerConfigsResultgetHooks(),addHook(HookDefinition hook),removeHook(HookEvent event, int index),toggleHook(HookEvent event, int index)saveSession(),resumeSession(String sessionId)getSessionMetadata(),getStats()allowPermission(String requestId, DecisionScope scope)denyPermission(String requestId, DecisionScope scope)permissionResponse(PermissionResponseParams params)
Goals.NullableUpdate.unchanged(), .set(value), and .clear() preserve the
CLI's omitted/value/JSON-null distinction for mutable goal budgets.
Events implement the Event marker interface and are exposed as records under
Events:
AgentStartEventAgentEndEventTurnStartEventTurnEndEventMessageStartEventMessageUpdateEventMessageEndEventToolStartEventToolUpdateEventToolEndEventPermissionRequestEventFileModifiedEventAutoresearchLifecycleEventAutoresearchOperationEventHookPreToolEventHookPostToolEventHookPrePromptEventHookPostResponseEventHookSessionErrorEventHookStopEventHookSessionStartEventHookSessionEndEventHookSubagentStopEventHookPermissionRequestEventHookNotificationEventHookContextCompactedEventHookContextOverflowEventHookContextWarningEventHookContextCriticalEventErrorEventUnknownEvent
FileModifiedEvent is also the typed event for
autohand.hook.fileModified. See Event Streaming
for the complete hook mapping, validation rules, and raw fallback contract.
Use Java 21 pattern matching:
switch (event) {
case Events.MessageUpdateEvent e -> System.out.print(e.delta());
case Events.ToolStartEvent e -> System.out.println("Tool: " + e.toolName());
case Events.PermissionRequestEvent e -> sdk.allowPermission(e.requestId(), DecisionScope.ONCE);
case Events.ErrorEvent e -> System.err.println(e.message());
default -> {}
}