Human-in-the-loop approval dashboard for LangGraph agents — open source, free to deploy

I’ve been building LangGraph agents and kept hitting the same problem: no clean way to pause an agent before a sensitive action and wait for a human to approve or reject it before it executes.

LangGraph has interrupt() built in, but you still need somewhere to surface that interrupt to a reviewer, collect their decision, and return it to the agent. That’s the gap I built LangGraph Approval Hub to fill.

How it works

Your agent calls request_approval() — execution pauses. A reviewer sees the pending action on a real-time dashboard, approves or rejects with an optional note, and the agent gets the decision and continues.

from  langgraph_approval_hub import  request_approval

result = request_approval(
    hub_url="https://your-app.vercel.app",
    api_token="your-token",
    agent_name="FinanceBot",
    action_description="Transfer $5,000 to vendor account #4892",
    assignee="cfo@company.com",
    assignee_type="email",
)

if result["status"] == "approved":
    execute_transfer()

What’s included

  • Real-time dashboard (Next.js + Supabase Realtime)
  • Audit log — every decision timestamped, exportable to JSON
  • Email + Slack notifications when approvals arrive
  • Team routing — any member of a group can approve
  • Non-blocking async flow
  • Runs free on Vercel + Supabase free tiers

Links

Deploy takes ~5 minutes. Would love feedback from anyone building production LangGraph agents — especially edge cases I might have missed.

Hi Surya — interesting work on LangGraph Approval Hub.

Your point about needing somewhere to surface an interrupt, collect a reviewer decision, and return it to the agent maps closely to something we’re testing.

We’re experimenting with a small MCP supervision boundary: an agent submits an action intent, and the boundary returns a policy decision — allow / deny / needs-human-review — plus a receipt before anything is executed.

Not trying to pitch; I’m trying to validate the boundary.

Question: in your view, should this approval state live strictly inside the LangGraph runtime / approval dashboard, or could an external policy gate be useful when the same team runs agents across multiple frameworks?

Hi @0pen7ech ,
Great question — and honestly, I think the answer is: all three, by design.

LangGraph Approval Hub gives teams freedom of choice depending on where they sit:

• UI dashboard — a non-technical reviewer (CFO, legal, ops) approves directly from the interface, no code needed
• Python SDK — a developer embeds approval gates inline inside their LangGraph agent, same runtime
• External policy gate — your exact use case: a cross-framework boundary that any agent (LangGraph, CrewAI, AutoGen, whatever) can call via the API, so the same approval logic and audit trail applies regardless of the underlying framework

The approval state lives in Supabase, so it’s decoupled from any single runtime — that’s what makes the third option possible.

One more thing: since the whole stack is open source (Next.js + Supabase), teams can customize the UI and backend to fit their exact workflow. And because the codebase is straightforward, you can use Claude to modify it — tweak the dashboard layout, adjust the policy schema, add new notification channels — without needing to deeply understand every file first.

Your MCP supervision boundary sounds like it maps cleanly onto that third path.