Five minutes from nothing to an offline-verified dispute pack. Every
command below is real and runs against the FARIGATE Cloud bundle in
deploy/cloud/ of the repository (or, with a different URL,
against the hosted gate).
# from a checkout of the FARIGATE repository
cd farigate-platform # repo root
docker compose -f deploy/cloud/docker-compose.yml build
deploy/cloud/scripts/cloud-up.sh
The gate is now at http://127.0.0.1:8801. First boot
generated this deployment's Ed25519 signing key and exported the PUBLIC
half to deploy/cloud/trust-export/ — everything you verify
later checks against that file. Already have a hosted gate? Skip this and
use its URL below.
deploy/cloud/scripts/provision-tenant.sh
# ... prints ONCE:
# fg_actor_9f2c4e... <- your actor-bound API key
export FARIGATE_API_KEY=fg_actor_9f2c4e...
The key is actor-bound (default actor agent-demo-operator,
role approver — what the published governance policy
expects) and stored server-side only as a sha256 hash.
An agent_payment request carries the AP2 v0.2.0 SD-JWT
mandate chain plus the canonical action digest over it. The repo ships a
helper that builds a ready-to-submit request from the committed,
SDK-minted mandate vectors (tokens are never hand-minted):
cargo build --manifest-path demos/agentic-commerce/Cargo.toml
demos/agentic-commerce/target/debug/agentic-commerce print-request in-policy > request.json
curl -s -X POST http://127.0.0.1:8801/gate \
-H "Authorization: Bearer $FARIGATE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.json > pack.json
python3 -c 'import json; r = json.load(open("pack.json")); print(r["decision"], r["policy_reason"])'
# allow CEDAR_PERMIT
The full response IS the evidence: decision, signed receipt
(receipt_bytes_b64), and a self-contained
evidence_pack with the mandate tokens as bound artifacts.
Integrating for real? The request schema is in the
API reference; mint fresh mandates per the
AP2 integration guide.
# the refusal path is a product too: expired mandates -> deny + refusal pack
demos/agentic-commerce/target/debug/agentic-commerce print-request expired > request-expired.json
curl -s -X POST http://127.0.0.1:8801/gate \
-H "Authorization: Bearer $FARIGATE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @request-expired.json | python3 -c 'import json,sys; print(json.load(sys.stdin)["decision"])'
# deny
Open the browser verifier,
switch the trust source to FARIGATE Cloud (registry) (one fetch of
the published trust JSON; verification then stays offline in your
browser), and drop pack.json. You get the five dispute
questions answered, badged with the hosted-cloud trust label.
CLI alternative, against your deployment's exported public key:
cargo run -p farigate-cli -- verify-evidence-pack \
--pack pack.json \
--receipt-signer-trust-dir deploy/cloud/trust-export \
--agent-mandate-trust-dir appliance/fixtures/agent-dispute-packs/agent_mandate_trust_demo
What you just proved: the gate's decision for this exact action
digest is signed by the deployment key in trust-export/; the
AP2 mandate bundle re-verifies offline at the recorded decision time; the
Cedar decision replays; every bound artifact digest recomputes. What you
did NOT prove: production readiness or anything about systems other than
this gate — see What PASS means.