langgraph-human-in-the-loop

Installation
Summary

Pause graph execution for human review, approval, or validation, then resume with their input.

  • Requires three components: a checkpointer (InMemorySaver or PostgresSaver), a thread ID in config, and JSON-serializable interrupt payloads
  • interrupt(value) pauses and surfaces data; Command(resume=value) resumes and returns that value to the paused node
  • All code before interrupt() re-executes on resume, so side effects must be idempotent (use upsert, not insert)
  • Supports approval workflows, validation loops with re-prompting, and parallel interrupts resumed via ID-to-value mapping
SKILL.md
  • interrupt(value) — pauses execution, surfaces a value to the caller
  • Command(resume=value) — resumes execution, providing the value back to interrupt()
  • Checkpointer — required to save state while paused
  • Thread ID — required to identify which paused execution to resume

Requirements

Three things are required for interrupts to work:

  1. Checkpointer — compile with checkpointer=InMemorySaver() (dev) or PostgresSaver (prod)
  2. Thread ID — pass {"configurable": {"thread_id": "..."}} to every invoke/stream call
  3. JSON-serializable payload — the value passed to interrupt() must be JSON-serializable
Related skills
Installs
6.4K
GitHub Stars
678
First Seen
Mar 3, 2026