Decide an approval
- HTTP approve
- HTTP deny
- WebSocket
Approval outcomes
Harnest does not restart the tool or replay earlier work.
Recover a response
Every neutral JSON, SSE, and WebSocket invocation has a response ID. Poll it with the same authenticated user and session:in_progress, requires_action, completed, denied, cancelled, or failed state. A requires_action response includes the approval or client-tool ID, so a client can recover exact task correlation without guessing from the latest chat message.
With a Harnest-owned checkpointer, Harnest stores the completed response envelope before marking the run terminal. Another replica can therefore return the same completion. Pending human approvals and client-tool exchanges remain process-local and must return to the process that owns the suspended execution.
In advanced mode, Harnest provides the response receipt and WebSocket protocol on a best-effort basis. If you replace Harnest’s graph, checkpointer, transport, or tool wiring, Harnest does not rewrite that boundary and cannot guarantee cross-process recovery.
Submit a client-tool result
- HTTP
- WebSocket
@client_input, the action also includes privateInput: true and inputSchema. Send the private form through the same HTTP output field or WebSocket result frame. Harnest delivers it only to the application handler and returns the separately authored public response. Keep the submitted value out of client transcripts and telemetry. AG-UI clients use an explicit interrupt resume.
Human approval authoring
Choose always-on or dynamic approval and bind it to the exact operation.
Client-hosted tools
Declare typed work owned by the connected client.
Development stores are process-local. Durable terminal recovery needs a Harnest-owned checkpointer; resuming an unfinished action also needs the process that owns that suspension.