garl — GARL Protocol Python SDK
Cryptographic verification for AI agent actions. Submit signed receipts, query Trust Vectors, and gate risky tool calls. Starting with code.
Install
pip install garl-protocol
Quick Start
import garl
garl.init("garl_your_api_key", "your-agent-uuid",
base_url="https://api.garl.ai/api/v1")
# Log an action (non-blocking by default)
garl.log_action("Generated REST API", "success", category="coding")
Trust Gate
Check other agents before delegating work:
result = garl.is_trusted("target-agent-uuid", min_score=60)
if result["trusted"]:
delegate_task(...)
Or use the decorator:
@garl.require_trust(min_score=60, mode="warn")
def delegate_task(target_agent_id, task):
...
Modes:
mode="warn"(default): Logs warning but executes the functionmode="block": Returns None if agent is not trusted
Full Client
from garl import GarlClient
client = GarlClient("garl_key", "agent-uuid",
base_url="https://api.garl.ai/api/v1")
cert = client.verify(status="success", task="Fixed bug", duration_ms=3200)
trust = client.check_trust("other-agent-uuid")
should = client.should_delegate("other-agent-uuid")
Wave 2 — capability tokens, action receipts, undo (v1.3.0)
# Multi-dimensional Trust Vector (replaces single trust_score for
# cross-domain decisions; null dimensions = "not yet measured")
vector = client.trust_vector()
# Capability Gate pre-flight: gets a token if allowed
gate = client.evaluate_action(
action_type="payment",
side_effect_class="reversible",
spend_limit_usd=50.0,
merchant_allowlist=["stripe.com"],
)
if gate["decision"] == "allowed":
cap_token = gate["token"] # JWT-shaped, ECDSA-secp256k1
cap_hash = gate["token_hash"]
# Submit a generic Action Receipt v0.1 (any tool call, not just commits)
import hashlib, json
def sha(o): return hashlib.sha256(
json.dumps(o, sort_keys=True, separators=(",", ":")).encode()
).hexdigest()
env = client.submit_action_receipt(
action_type="api_call",
side_effect="reversible",
input_hash=sha({"endpoint": "/v1/refunds", "charge": "ch_123"}),
output_hash=sha({"refund_id": "re_456", "amount": 1000}),
capability_token_hash=cap_hash,
attestations=["human_reviewed"],
)
# UETA §10(b) consumer-undo
undo = client.undo_receipt(env["receipt_id"])
print(undo["undo_payload"]) # the action to actually run
# Revoke a token (cascades to attenuated children)
client.revoke_capability_token(cap_hash, reason="task-complete")
Async
from garl import AsyncGarlClient
client = AsyncGarlClient("garl_key", "agent-uuid",
base_url="https://api.garl.ai/api/v1")
cert = await client.verify(status="success", task="Analyzed data", duration_ms=5000)
Links
- Website: https://garl.ai
- API Docs: https://api.garl.ai/docs
- MCP Server: https://www.npmjs.com/package/@garl-protocol/mcp-server
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
garl_protocol-1.4.0.tar.gz
(20.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file garl_protocol-1.4.0.tar.gz.
File metadata
- Download URL: garl_protocol-1.4.0.tar.gz
- Upload date:
- Size: 20.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5dec1a14a4ad74c78b899e8b73986bc4f034d570e4078b38dd4f93a47928cc89
|
|
| MD5 |
f335d0625f194869e0e13c4a31b039a5
|
|
| BLAKE2b-256 |
78faed8d26a96eb212c5307fc2f51e217ce42f25652268a71fc1ce89ef8b6f45
|
File details
Details for the file garl_protocol-1.4.0-py3-none-any.whl.
File metadata
- Download URL: garl_protocol-1.4.0-py3-none-any.whl
- Upload date:
- Size: 20.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd4e0633e6113358d993b385d7d96c819e8d796811abc09bc9f932cb18f45e6c
|
|
| MD5 |
c3884794f06116599487f63789d03a2a
|
|
| BLAKE2b-256 |
fc24f37e8a897df49c239c6221f6f9dc66f7e0d33f3b868603f87762a13c2c95
|