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:
Read the returned state and, for requires_action, its approval or client-tool ID. Do not infer task identity from chat messages. Completed responses survive restarts with a Harnest-owned checkpointer. Pending approvals and client-tool exchanges must return to their owning process. Advanced mode cannot guarantee recovery across native boundaries you replace.

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.