Seal vs. HumanLayer for human-in-the-loop approvals
HumanLayer popularised approvals-as-an-API and its SDK still works: you wrap a function, a human confirms, execution continues. Its centre of gravity has since moved to CodeLayer and coding agents — the repository now describes itself as a way to get coding agents through complex codebases, and the TypeScript HITL SDK last shipped a release in January 2026. Seal takes the same problem in a different direction: it gates at the MCP protocol layer instead of in your code, decides with a declarative policy instead of per-call wrapping, and writes a hash-chained audit trail you can verify offline.
| Dimension | Seal | HumanLayer |
|---|---|---|
| Where the gate sits | MCP proxy — agent code unchanged | SDK wrapper around each call |
| What decides | Declarative policy, approval by exception | You choose per call, in code |
| Works with no account | Yes — local mode, no network | Cloud service required |
| Audit trail | Hash-chained, exportable, verifiable offline | Hosted history |
| Python SDK | Not yet | Yes, and it is the mature one |
| Current product focus | Agent governance | CodeLayer and coding agents |
Pick HumanLayer if you want a battle-tested Python SDK and per-call control in your own code. Pick Seal if you want the decision to live in policy rather than in call sites, your agent to reach its MCP tools through a gate it cannot bypass, and an audit trail an auditor can verify without trusting us.
Frequently asked questions
Is HumanLayer abandoned?+
No. The repository is active and widely used, and the SDK still works. What changed is focus: the project now presents itself as tooling for coding agents under the CodeLayer name, and the TypeScript human-in-the-loop SDK has not had a release since January 2026. If approvals-as-infrastructure is what you need long term, that shift is worth weighing.
How do I migrate from HumanLayer to Seal?+
The call shape is close. A HumanLayer-wrapped function becomes a gate.require({ action, payload, policyKey }) that resolves on the decision, so the change is mechanical. The bigger difference is that you can stop wrapping call sites entirely: point your MCP client at the Seal proxy and every tools/call is gated by policy without touching the agent.
Do I have to use MCP to use Seal?+
No. The SDK gates any function call the same way HumanLayer does. MCP is the option that needs no code change at all — useful when the agent is a client you do not control, like Claude Desktop or Cursor.
Can I try Seal without signing up?+
Yes, and this is the sharpest difference. npx @seal-dev/mcp-proxy runs the policy engine, the approval prompt and the audit log entirely on your machine, with no account and no network. The hosted product adds what one machine structurally cannot do: a second reviewer, an agent running in CI, and a trail an auditor can read.