HITL is for individual tasks only. It is not available for batch requests.
Checkpoints
Each pause sets the task status to
awaiting_input. If you don’t respond within 5 minutes it becomes paused (state saved) - you can still respond anytime to resume; the task re-enqueues at highest priority with a brief cold-start delay.
Quick start
The simplest approach: pass anon_interaction callback to wait() and let the SDK handle each checkpoint as it fires.
respond_planning_questions() / respondPlanningQuestions(), approve_plan() / approvePlan(), respond_source_review() / respondSourceReview(), and approve_outline() / approveOutline(). See the Python and TypeScript SDK references.
Where checkpoints fire
Query analysis
The agent analyzes the query.
planning_questions
Pause: clarifying questions before research starts. You answer to set scope.
plan_review
Pause: review the research plan. Approve or request changes.
Research execution
The agent searches and reads sources.
source_review
Pause: review sources grouped by domain. Include or exclude domains.
outline_review
Pause: review the report outline. Approve or request structural changes.
Report writing
The agent writes the final report and the task completes.
Checkpoint response shapes
When status isawaiting_input, status.interaction.data holds the checkpoint payload and you reply with a matching response.
planning_questions
planning_questions
The agent asks questions; you answer them.
answers is required: an array of { question, answer } strings.plan_review and outline_review
plan_review and outline_review
Both share the same response shape - approve, or reject with free-text guidance.
approved (boolean) is required; modifications (string) is optional free-text guidance for the model. interaction.data contains the plan / outline and section breakdown for you to display.source_review
source_review
interaction.data lists sources grouped by domain with a source_count, avg_relevance_score, and an ai_recommendation of include or exclude. You reply with explicit include/exclude lists.Manual polling and the respond endpoint
If you poll yourself instead of usingwait(), watch for awaiting_input (or paused), then POST your response:
Status values and interaction fields
Status values and interaction fields
When HITL is enabled, the status response also carries
hitl_config (mirrors the request), interaction (present while awaiting_input/paused), and hitl_history (one entry per completed checkpoint with interaction_id, type, created_at, responded_at, auto_continued, and response).Best practices
- Poll faster around checkpoints - 2-3s when expecting input, 5-10s during research phases.
- Handle both
awaiting_inputandpaused- the UX is identical, only resume speed differs. - Enable selectively - each checkpoint adds latency equal to the user’s response time.
- Use
heavyormaxmodes - HITL pays off when the research is substantial enough to benefit from guidance.

