Skip to main content
When the harness needs permission to act - run a tool, write a file - it emits an input_required event and the turn pauses. You resolve it with a decision, and the turn resumes.

The input_required event

The session also records this as pending_input until resolved.

Resolve it

PUT /v1/sessions/{session_id}/inputs/{request_id} On the agent route family, the same operation is: PUT /{org}/{agent}/v1/sessions/{session_id}/inputs/{request_id}.
decision
string
required
One of approve_once, approve_session, or deny.

Response 200

The events array carries the turn’s continuation after your decision; the session reflects the cleared pending_input. Verification signal: session.pending_input is null. If you chose deny, the continuation includes a terminal done event whose data marks the request as denied.

Decisions

Default behavior

How aggressively a turn prompts is governed by the session’s permission_mode and the input_required_policy config - an autonomous runtime maps to approve_session, while interactive prompts. In the SDK, resolve and continue streaming with session.stream_pending_input(...).