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.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>getState(),getMessages()getContextUsage(): returnsContextUsageaccountInfo(),getAccountInfo(): returnsAccountInforeloadPlugins()toggleMcpServer(String serverName, boolean enabled)reconnectMcpServer(String serverName)setMcpServers(Map<String, McpServerConfig> servers)getHooks(),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)
Events implement the Event marker interface and are exposed as records under
Events:
AgentStartEventAgentEndEventTurnStartEventTurnEndEventMessageStartEventMessageUpdateEventMessageEndEventToolStartEventToolUpdateEventToolEndEventPermissionRequestEventFileModifiedEventErrorEventUnknownEvent
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 -> {}
}