withHuman - A human approval layer for AI Agents

withHuman is an approval layer for AI agents. It intercepts your agents’ tool calls before they run. Rules approve or deny routine calls automatically, and risky ones go to the right person on your team. It works across Claude Code, Codex and agents built with LangGraph, Pydantic AI and more, through an open protocol (AAP). One set of rules for every agent your company runs. Open source, with a hosted version. Use code PRODUCTHUNT for 3 months of Scale free - valid till Friday!

Add a comment

Replies

Best
Hey Product Hunt! I’m Chris, co-founder of withHuman along with Ece 👋 Before withHuman, we built an AI agent that investigated production issues and worked out fixes. It could often find the right fix. The hard part was asking a customer to let it apply that fix to their production systems. Fair enough: nobody wants to hand an agent admin access to production and hope for the best. We added an approval step, but the same problems kept coming up in conversations. Each team had different rules about who could approve what. They wanted finer control over what the agent could do. And they were already using other agents, each with its own approval setup. withHuman is what we wished existed back then. It sits between your agents and their tools and intercepts each tool call before it runs. Your rules approve or deny the routine ones automatically, and the risky ones go to the right person, wherever suits them. Your agents don’t need to change, and they can’t skip it. What’s available today: • The Agent Approval Protocol (AAP), an open spec, with prebuilt hooks for Claude Code and Codex, and SDKs for Python and TypeScript • withHuman itself, open source, with a hosted version that has a free plan The quickest way to try it is the Quickstart, which connects a coding agent you already use in a few minutes. There’s plenty we’re still figuring out, like giving reviewers enough context to decide, and gating calls that don’t go through MCP. We wrote more about that here: We’d love your feedback, especially on this: which of your agent’s actions would you want a human to sign off on first? Ece and Chris

Interesting!
QQ - what happens if withHuman is unreachable (on either cloud or self-hosted)?

 Hey Lev! Good question. So currently the tool call will fail. We made it this way because withHuman is a security boundary in many cases.

If a user sets up a rule which is refunds > $20 go to a human, we felt like we shouldn't let a $25 refund go through because withHuman is down.

Completely understand the point though, withHuman has to be extremely reliable.

Potentially this is something where a user should be able to set it in future but right now we chose to be conservative!

There is some potentially interesting work around caching rules at an intermediary layer which would survive a brief upstream outage. Something we're still actively exploring!

The production-fix story explains the need for this really well. An approval request needs enough context for someone to make a decision, so I'm glad you called that out as something you're still working on.

 Thanks Oleksii, yeah the context is interesting. Most of the time it works well but imagine you get asked to approve a tool call that contains some identifiers like;

userId: faeebde0-082e-45ce-b23e-567f8291e0da 

It will be hard to understand, so we're figuring out how we can best make that something human readable like

userId: faeebde0-082e-45ce-b23e-567f8291e0da (Bob from Accounting)

This feels like a missing layer for production agents. How much context does the reviewer see before approving a tool call? Too little is risky, but too much gets noisy fast.

 For sure, so there are a couple of things. The agent itself can provide context in the tool call and we show the full tool call arguments as well. We're working on getting more in here too: embedded identifier links like I mentioned above as well as being able to review the full agent history.

Noise / approval fatigue is probably the biggest problem we're tackling in general. We have a couple ideas on how to combat it - the first main idea is that of an approval pipeline. They let you write automated rules that approve / deny actions before they get to a person. So imagine you have a customer service agent, approving every refund would be too much work most likely so you could write a rule like:

if (tool = 'stripe.refund' and amount < $5) {
  approve
}

This way you can only look at the actually important stuff.