TrigGuard
TRIGGUARD PROTOCOL_SPEC

Technical specification

TG-01, deterministic authorization protocol. Pre-execution governance: deterministic outcomes, no silent PERMIT (no default-allow), cryptographically verifiable receipts.

End-to-end path: execution trace walkthrough. New to the category? AI execution governance · runtime authorization for AI agents · deterministic authorization · AI decision verification · execution authorization · Products · Quickstart

Cryptographic verification is offline against published keys; discovery endpoints are public. The execution authorization gateway is in private beta and not yet publicly deployed. The overview below links canonical specs; it does not replace the authoritative protocol source.

TG-01 protocol playground - generate signed receipts, tamper the JSON, and offline-verify in the browser (fixture key, same canonical bytes as trigguard verify-receipt).

PROTOCOL IDENTIFIER: TG-PRTCL-01

VERSION: 1.0.4-STABLE

LAST UPDATED: 2026

STATUS: PRODUCTION_ACTIVE

CLASSIFICATION: DETERMINISTIC_EXECUTION_CONTROL

REFERENCE SPEC: TG-01 reference specification (document revision 1.0.4, REFERENCE_SPECIFICATION)

API

POST /execute

Single entry point for pre-execution evaluation. Request fields: surface, action, context, idempotency_key. Irreversible work proceeds only after an explicit PERMIT and signed receipt.

KEY_DISCOVERY

/.well-known/trigguard/keys.json

Public keys for offline verification. No callback to TrigGuard required after issuance.

SECURITY

Ed25519

Issuer-signed receipts use Ed25519 over canonicalized JSON. Tamper-evident, offline-verifiable, immutable.

VERIFICATION

Offline Verification

Verify receipts against published keys locally. Third parties can validate enforcement without trusting our uptime.

Protocol Specification

TLS carries the channel; identity stays at your IdP. TrigGuard's job is execution governance, binding outcomes and signed proof. Formal specs for audit and procurement.

I. Abstract

The TrigGuard protocol (TGP) defines a cryptographic boundary between callers (automation, agents, CI) and irreversible execution. TGP operates before commit: every state-changing path must receive an explicit authorization decision and signed receipt. There is no silent default-allow, if evaluation fails or is incomplete, execution does not proceed. For how this fits the broader category, see AI execution governance.

Visual category map: execution governance architecture on the pillar. Agent-oriented stack diagram: AI agent safety (single deep diagram, not duplicated here).

II. Core Architecture: The Gate Model

The protocol follows a Request-Attestation-Receipt loop:

  1. Intercept: All POST /execute requests enter the single authoritative evaluation layer.
  2. Validation: Declared context is hashed and evaluated against deterministic policy, same conditions, same outcome.
  3. Signing: On PERMIT (only), the protocol issues an Ed25519-signed receipt over the canonicalized payload. DENY and SILENCE still yield a deterministic, attributable outcome.
  4. Execution: Downstream systems must not commit without a valid PERMIT receipt binding that request.

TrigGuard operates at the point of irreversible execution, not just policy evaluation.

Technical Properties

Low latency (scoped)

Kernel hot path <5ms p99; end-to-end evaluation <15ms p99, no scoring layers, no hidden models in the decision path. Measured: kernel p99 0.018 ms, sequential pipeline p99 1.28 ms (raw artifacts at /benchmarks).

Cryptographically enforced

Ed25519-signed receipts over canonicalized payloads. Tamper-evident, immutable, verifiable offline against the issuer's published public key.

Zero standing trust at verify

Integrate at the same choke point you use for deploy/pay/export. Enforce before commit, verify without callback.

III. Payload Specification

Every authorized action must contain the following header structure:

{
 "tg_receipt_id": "uuid-v4",
 "tg_signature": "base64_encoded_hash",
 "tg_timestamp": "unix_epoch",
 "tg_policy_ver": "1.0.4"
}

Protocol Flow

Request → authoritative evaluation → deterministic outcome → signed receipt (on PERMIT) → caller executes only if PERMIT.

TrigGuard protocol sequence AI agent to host application, interception at TGP gate, signed receipt returned, downstream execution only when authorized. AI AGENT HOST APP TGP GATE DOWNSTREAM 1. Executes Action (High Risk) 2. Intercepts Intent Payload 3. [SIGNED_RECEIPT] 4. Authorizes (WITH Receipt) 5. Returns Success

POST /execute

Status. The hosted Execution Authorization Gateway is in private beta and is not yet publicly deployed. Requests to api.trigguardai.com/execute will fail until access is granted. The shape and semantics below are the reference contract for the hosted gateway. The verification and discovery surfaces at https://trigguardai.com are live today; see the API reference and openapi.yaml. Request access to the beta.

The future gateway will accept a pre-execution evaluation request for an irreversible action and return PERMIT, DENY, or SILENCE; downstream execution proceeds only on PERMIT with a valid receipt.

# Request shape (reference; endpoint not yet deployed)
POST https://api.trigguardai.com/execute
Authorization: Bearer $TRIGGUARD_API_KEY
Content-Type: application/json

{
 "surface": "deploy.release",
 "action": "promote-to-production",
 "context": {
 "commit": "a1b2c3d4",
 "branch": "main",
 "environment": "production",
 "actor": "ci-bot"
 },
 "idempotency_key": "deploy-2026-03-13-001"
}
# Reference response: PERMIT
HTTP/1.1 200 OK

{
 "decision": "PERMIT",
 "receipt_id": "tg_rcpt_a0b1c2d3e4f50607",
 "timestamp": "2026-03-13T14:22:00.000Z",
 "expires_at": "2026-03-13T14:32:00.000Z",
 "payload_hash": "sha256:9f86d0...hex",
 "signature": "rsa-sha256:base64...",
 "key_id": "tgk_example_key_id"
}
# Reference response: DENY
HTTP/1.1 403 Forbidden

{
 "decision": "DENY",
 "reason": "policy_denied",
 "policy_id": "policy_example_001",
 "message": "Production deploys denied outside business hours",
 "receipt_id": "tg_rcpt_b1c2d3e4f5060708",
 "signature": "rsa-sha256:base64..."
}

Three Possible Outcomes

Every request produces exactly one of three deterministic outcomes. No probabilistic reasoning. No ambiguity.

PERMIT

Action is authorized. Receipt is valid for the specified TTL. Proceed with execution.

DENY

Action is denied. Reason and policy ID included. Do not proceed.

SILENCE

SILENCE means no authorization was issued. Without authorization, execution cannot proceed. (Evaluation may be indeterminate in cause, still explicit non-permission.)

  • PERMIT → execution proceeds
  • DENY → system blocks execution
  • SILENCE → no authorization → execution cannot proceed

Receipts record decisions. Runtimes record enforcement.

Do not mix vocabulary on a single axis. Decision (receipt-safe, auditor-facing): PERMIT, DENY, SILENCE. Enforcement (runtime telemetry, operator records): EXECUTED, BLOCKED. The word BLOCK is not a decision label, BLOCKED is what the system did after receiving a decision.

Rule: Decisions DENY. Systems BLOCK. A signed receipt always records what TrigGuard decided, not whether the caller later attempted execution.

# Correct two-field representation
{
 "decision": "DENY",
 "enforcement": "BLOCKED"
}

Invariant: any outcome other than PERMIT maps to enforcement = BLOCKED in a conformant integration. PERMIT may yield EXECUTED or BLOCKED only if downstream execution fails or an operator aborts.

Full decision & enforcement model →

GET /.well-known/trigguard-keys.json

The conformance signing key is published at a well-known endpoint as a JWK Set. The same key is also returned inline as public_key (PEM) by GET /.well-known/trigguard; both surfaces are kept in sync.

# Live key set (Ed25519 conformance key, single entry today)
GET https://trigguardai.com/.well-known/trigguard-keys.json

# Response
{
 "keys": [
 {
 "kty": "OKP",
 "crv": "Ed25519",
 "use": "sig",
 "alg": "EdDSA",
 "kid": "tgk_example_key_id",
 "x": ""
 }
 ],
 "discovery": "https://trigguardai.com/.well-known/trigguard"
}

The same key is also returned inline as public_key (PEM) by GET /.well-known/trigguard. Multi-key sets, additional signature algorithms, and key-rotation lifecycle apply to the future Execution Authorization Gateway. Ed25519 will continue to be accepted indefinitely under the additive-only versioning rule.

Signed Receipt Structure

Every decision produces a cryptographically signed receipt. Receipts are self-contained and verifiable offline.

receipt_id Unique identifier (tg_rcpt_...)
decision PERMIT | DENY | SILENCE
timestamp ISO 8601 UTC
expires_at Receipt validity window
signature Ed25519 signature (base64) over canonical payload
key_id Signing key identifier
surface Execution surface (deploy.release, etc.)
context_hash SHA-256 of request context
payload_hash Hex SHA-256 of the canonical signed payload (anchor)

Receipts are issuer-signed attestations, not multi-validator final-truth claims. They are immutable once signed: validator judgments live in separate validation artifacts that reference the receipt, never inside it. See Receipts for the full protocol artifact specification.

Verify Without Network Access

Once you have the public keys, verification requires no network call to TrigGuard. Cache keys, verify locally.

# Verification pseudocode
def verify_receipt(receipt, public_keys):
 key = find_key(public_keys, receipt.key_id)
 if not key:
 return False
 
 payload = canonical_json({
 "receipt_id": receipt.receipt_id,
 "decision": receipt.decision,
 "timestamp": receipt.timestamp,
 "execution_surface": receipt.execution_surface,
 "context_hash": receipt.context_hash
 })
 
 # Optional: confirm the canonical-payload anchor before signature verify.
 if receipt.payload_hash:
 if sha256_hex(payload) != receipt.payload_hash:
 return False
 
 return rsa_sha256_verify(
 key.public_key,
 payload,
 base64_decode(receipt.signature)
 )

What's frozen, what evolves

TrigGuard treats the receipt artifact and the execution-surface taxonomy as long-lived infrastructure protocol, closer to a wire format than a feature surface. The following commitments are binding under TrigGuard protocol governance:

Frozen taxonomy

The canonical 13 execution surfaces are bounded and named at the infrastructure level. New surfaces require an explicit governance amendment, not a per-integrator addition.

Additive-only schema

The receipt schema evolves under an additive-only rule. Renaming, removing, or re-meaning existing fields requires a hard-freeze amendment with a published migration window.

Long-term verifiability

Receipts are immutable, offline-verifiable artifacts. Ed25519 signatures will be accepted indefinitely; the canonical payload-hash anchor lets a verifier re-bind to the exact bytes that were signed years after issuance.

Governance is the spec

Authoritative protocol commitments live in published governance documents (SURFACE_TAXONOMY_DECISION.md, RECEIPT_SCHEMA_LOCK_IN.md, SURFACE_RUNTIME_MIGRATION_PLAN.md). Site documentation mirrors them; on conflict, governance and code win.

Source-of-truth order: actual code → deployed behavior → infrastructure config → governance documents → site documentation. This order is enforced in engineering review.

How the protocol is organized on this site

Canonical paths for crawlers and engineers, each page links back into products and docs so nothing sits orphaned.

Also see Products, Docs, and /protocol/spec/docs/api for cross-links.

Protocol Standards

Complete protocol specifications in RFC-style documentation. Cite these in compliance reviews, security audits, and vendor assessments.