Skip to main content
Approvals and client-hosted tools suspend the current invocation before external input is needed.

Decide an approval

The HTTP endpoint remains available when the approving interface does not own the live socket. Both paths apply the same user, response, approval, expiry, and one-time-use checks.

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:
The response reports the latest 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

Submitted output is identity-bound, consumed once, and validated before execution resumes. For @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.