Overview
HESO ships one Rust core compiled to several surfaces. Pick the one for your runtime, then follow its reference page.
Gating, signing, and verification all run from the same compiled core, so a verdict is the same in Python, in Node, and in a browser. You do not re-implement canonicalization, BLAKE3, or Ed25519 anywhere. You install the package for your runtime and call it.
Which SDK?
Start from the job you have, not the package name.
| Your job | Package |
|---|---|
| Build a Python agent | heso (pip install heso) |
| Build a Node / TypeScript agent | @hesohq/sdk (+ native @hesohq/node) |
| Verify receipts in a browser or CI | @hesohq/verify-wasm |
| Verify evidence bundles on the CLI | heso-verify-cli |
Gating and signing run where your agent runs (Python or Node). Verifying a receipt runs anywhere, including a browser or CI step with no HESO infrastructure and no API key.
A worked path: a Python agent
Building a Python agent? Here is the order you do things, with the page for each step. The Node path mirrors it with @hesohq/sdk.
- Install the SDK.
pip install heso— see installation. - Run
heso.init(). One call at startup loads your policy and signing key. See the Python quickstart. - Decorate your tools. Wrap each tool with
@heso.toolso every call is captured, gated, and signed. See the Python quickstart. - Write a policy. Define
[[rule]]blocks inheso.tomlthat say which actions allow, block, redact, or need approval. See writing policy. - Run your agent. Each action now produces a signed receipt. Verify it offline with any surface above.
Framework adapters
If you use a framework, you usually do not call gating by hand. HESO ships adapters for the Vercel AI SDK and Mastra that gate tools for you. See framework adapters.
Per-language reference
Each surface has a full reference page covering its function list.
| Surface | Package | Reference |
|---|---|---|
| Python | heso | SDK reference — Python |
| TypeScript / Node | @hesohq/sdk | SDK reference — TypeScript |
| Node native addon | @hesohq/node | SDK reference — Node |
| Browser (WASM) | @hesohq/verify-wasm | SDK reference — Browser |
| CLI | heso / heso-verify-cli | SDK reference — CLI |
Versioning
Every package releases in lockstep on one version number, and they bundle the same Rust core. The wire format is the stable contract: the algorithm is heso-action/v2+ed25519. A receipt signed today verifies on any surface that recognizes it. The packages are pre-1.0, so pin your versions and handle every verification outcome instead of assuming success.