Every action. On the record.
Wrap any AI call in gentic.run(). Get back the result and a tamper-evident signed receipt, independently verifiable with no call to Gentic.
live receipt lifecycle · ed25519 · gentic_rec_
Three checkpoints. One proof.
Intercept
Every AI action passes a runtime checkpoint before execution. No action runs uninspected. The checkpoint records the action, the caller, and any policy constraints.
Sign
An Ed25519-signed receipt is issued for the outcome: action, result, cost, and timestamp. Canonical bytes, hash-chained. The signing key never leaves the runtime.
Return
Your function receives both the result and the receipt. The proof travels with the output, not behind it. Verify offline with the public key: no account, no network call.
This is what proof looks like.
Every Gentic receipt is a JSON document signed with Ed25519. Anyone holding the public key can verify it offline — no network call, no Gentic account.
SHA-256 of the canonical payload: every field, sorted, no whitespace. Rewrite a single byte and the hash fails.
Ed25519 signature over the canonical bytes. Requires the private key to forge. Requires only the public key to verify.
Always ed25519, asymmetric: not HMAC. You verify without ever seeing the private key. No Gentic account.
Three lines to governed AI.
Drop the SDK in, wrap the call, get the receipt. @gentic/sdk is zero-dependency on Node and ships WebCrypto verify for the browser and Deno.
Pure Node node:crypto. No vendored crypto library: the runtime handles signing.
If the control path fails, execution blocks. If observation fails, fn() still runs and the receipt carries unreceipted: true.
Browser and Deno verification ships with the SDK. Same Ed25519 proof, any runtime.
import { Gentic } from '@gentic/sdk'
const gentic = new Gentic({ key: process.env.GENTIC_KEY })
const { result, receipt } = await gentic.run({
action: 'voice.call.completed',
fn: () => client.calls.create({
to: '+17025550198',
from: '+18449803424',
}),
})
// receipt.id === 'gentic_rec_94b8b2d499ad4959'
// receipt.hash_valid === true
// receipt.sig_valid === trueA log can be rewritten.
A signed receipt cannot.
Tamper-evident
The receipt hash covers every byte of the signed payload. Alter any field (action, cost, outcome) and the hash fails verification.
Independently verifiable
Anyone holding the public key can verify any receipt, offline, without contacting Gentic. No API call. No trust relationship.
No account required
Verification is a one-liner and a public key. Not a dashboard. Not a Gentic login. The proof belongs to the receipt holder.
Put your AI on the record.
Talk to us about governed runtimes for your stack. We work with developers, CTOs, and compliance teams who need verifiable AI action trails.