Hexgate
Runtime authorization for AI agents. On every tool call, Hexgate decides whether this user, in this role, may run this tool with these arguments — allow, deny, or require approval. For OpenAI Agents, LangChain, Google ADK, Pydantic AI, or a native runtime.
What is Hexgate?
Hexgate is two things that move together:
hexgate— the SDK. A Python runtime that gates every tool call through a typedDecision(allow / deny / approval-required), resolving the caller's role at call time to apply that role's rules. Wrap an existing agent without rewriting it, or build one natively — every decision is traced and audited with the caller's identity. See supported frameworks →- The Hexgate platform (optional) — a FastAPI control plane + React dashboard for editing policy in a browser, minting per-project tokens, watching live decisions stream from a serving agent, and shipping signed WASM policy bundles to production. Available as Hexgate Cloud (hosted — set one env var, no infra) or self-hosted.
You can use the SDK three ways: local (YAML/bundle on disk, no platform), Hexgate Cloud (remote enforcement + audit — just set HEXGATE_API_KEY), or self-hosted (run the control plane yourself). HEXGATE_API_URL defaults to https://app.hexgate.ai, so remote enforcement is one env var away.
end user (id + role) tool call (name + args)
└───────────────┬────────────────┘
▼
PolicyEnforcer.decide() ◄── policy (local YAML / bundle
▼ or signed cloud bundle)
allow · deny · approval
│
▼
audit log — who called what, and whether it was allowed
Quickstart
pip install hexgate
See it enforce — no API keys. Save a policy that gives two roles different
limits on the same refund_order tool:
# policy.yaml
version: 1
roles:
support: # small USD refunds only
default_policy: { mode: deny }
tools:
refund_order:
mode: allow
constraints:
- args.amount <= 50
- args.currency == "USD"
billing: # larger refunds, major currencies
default_policy: { mode: deny }
tools:
refund_order:
mode: allow
constraints:
- args.amount <= 500
- args.currency in ["USD", "EUR"]
hexgate policy test decides the same $400 refund for each role offline — no model, no keys:
hexgate policy test policy.yaml --role support \
--tool refund_order --args '{"amount": 400, "currency": "USD"}'
# ✗ DENY · support → refund_order({"amount": 400, "currency": "USD"})
# reason: Policy on "refund_order" denied: constraint failed — args.amount <= 50
hexgate policy test policy.yaml --role billing \
--tool refund_order --args '{"amount": 400, "currency": "USD"}'
# ✓ ALLOW · billing → refund_order({"amount": 400, "currency": "USD"})
Same tool, same request — the caller's role and the arguments decide, enforced outside the model. The full quickstart → puts this in front of a live agent.
Documentation
Full documentation lives at docs.hexgate.ai.
| Build an agent | The two shapes — wrap an existing agent, or let the platform own the YAML. |
| Framework adapters | OpenAI Agents, LangChain/LangGraph, Google ADK, Pydantic AI. |
| Policy | YAML shape, constraints, WASM bundles, signing, local override. |
| User scope + roles | Per-request identity, role resolution, biscuit attenuation. |
| CLI | chat, serve, register, policy. |
| MCP servers | Wrap any Model Context Protocol server as policy-enforced tools. |
| Hexgate Cloud (hosted) | Remote policy enforcement + audit with zero infra — get a key, set one env var. |
| Platform (self-hosted) | Run the control plane, dashboard, ClickHouse audit, and Resend email yourself. |
Development
Contributor setup, make targets, and the test suites are documented in
Development & testing. The short
version:
make install-dev # uv sync --extra dev (first time only)
make check # lint + fmt-check + test (matches CI)
License
MIT — see LICENSE.
If Hexgate looks useful, give it a ⭐ on GitHub — it helps more than you'd think. Built by Hexamind.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hexgate-0.2.9.tar.gz.
File metadata
- Download URL: hexgate-0.2.9.tar.gz
- Upload date:
- Size: 192.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58562dd9570779fbf7fd1f601b5aa665206422e8652bdbe6256e77f8bf025cf3
|
|
| MD5 |
c510637f2988817bfff14cebdca5a5a9
|
|
| BLAKE2b-256 |
c8831f79ca2d85f45ec8c25473abecfbdb1509175216b9468be43bd5e68608b4
|
Provenance
The following attestation bundles were made for hexgate-0.2.9.tar.gz:
Publisher:
release.yml on HexamindOrganisation/hexgate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hexgate-0.2.9.tar.gz -
Subject digest:
58562dd9570779fbf7fd1f601b5aa665206422e8652bdbe6256e77f8bf025cf3 - Sigstore transparency entry: 2172175048
- Sigstore integration time:
-
Permalink:
HexamindOrganisation/hexgate@3e70103a128482353620cb4757134aada8458944 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HexamindOrganisation
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e70103a128482353620cb4757134aada8458944 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file hexgate-0.2.9-py3-none-any.whl.
File metadata
- Download URL: hexgate-0.2.9-py3-none-any.whl
- Upload date:
- Size: 236.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18f0866333fd75495a1595dec94e4725602ea95b554f73ffa4833d3b8a4e5aa1
|
|
| MD5 |
dfe8dd30c57f5be0443408a12f09a4cb
|
|
| BLAKE2b-256 |
56cb85796adcdc000d6cb1df4392ce13a7412bebbe0f793638266839a9598e83
|
Provenance
The following attestation bundles were made for hexgate-0.2.9-py3-none-any.whl:
Publisher:
release.yml on HexamindOrganisation/hexgate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hexgate-0.2.9-py3-none-any.whl -
Subject digest:
18f0866333fd75495a1595dec94e4725602ea95b554f73ffa4833d3b8a4e5aa1 - Sigstore transparency entry: 2172175145
- Sigstore integration time:
-
Permalink:
HexamindOrganisation/hexgate@3e70103a128482353620cb4757134aada8458944 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HexamindOrganisation
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e70103a128482353620cb4757134aada8458944 -
Trigger Event:
workflow_dispatch
-
Statement type: