ClearGate

Verify a record

Every decision goes into a JSONL record. You can check it with no network and no API keys.

Each line carries the SHA-256 digest of the call's arguments, the hash of the line before it, and an Ed25519 signature. This is line 9 of the gated run, the injected export:

{"seq": 8, "verb": "BLOCK", "agent": "triage",
 "tool": "payments.export_customer_records", "args": {"segment": "all"},
 "rule": "visible_tools",
 "reason": "payments.export_customer_records was narrowed out of this task",
 "args_digest": "939b0358ff821741…", "prev_hash": "5b2be9350f0463fa…",
 "hash": "83165fb1821d3163…", "sig": "yU0f4fiNSctwQijP…"}

Fields trimmed and values shortened for the page. The file below is the full record.

$ pip install cryptography
$ python verify.py stub-gated.jsonl
MATCH: 30 records, sealed; chain intact, all signatures valid (key 7fffe58033d2ce21…)

# change "limit":5000 to "limit":50 on line 15, then run it again
$ python verify.py stub-gated.jsonl
MISMATCH at line 15 (seq 14): args_digest does not match the canonical arguments

It proves the record hasn't changed since it was signed. It doesn't prove the signer was honest. This record was signed by the local stand-in run of cleargate check --stub.

Run the rest yourself

$ git clone https://github.com/ashutosh887/cleargate && cd cleargate
$ pip install -e .
$ cleargate check --stub              # example: the coding agent, GO / NO-GO
$ cleargate bank --demo all --stub    # example: the bank voice agent
$ cleargate evolve --target stub      # the policy fuzzer
$ python scripts/runtime_proof.py     # live AgntID runtime only

Python 3.12 or later. Only the last command needs a live runtime.

What we don't claim

Built with