JamBot · AgentBoundary v0.2-alpha reference impl
Live Action Receipts.
Every policy-gated tool call JamBot makes in production emits a spec-compliant Action Receipt below. 0 receipts in the last 24 h. Each v0.2-alpha receipt carries six independently verifiable properties: canonical hash, self-declared provenance per field, completeness_score, a prior_receipt chain link, the arguments_hash binding, and schema validation against the canonical JSON Schema.
a0b3f411·github.issues.create·2026-05-30v0.2-alphaAllowedSUCCESScompleteness 0.956provenance 21 observed · 2 inferredpriorf04df972args_hash883e505421c1…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "allow" }, "target": { "system": "github.com/jamjet-labs/jamjet-discord-bot", "environment": "prod", "resource_id": "jamjet-labs/jamjet-discord-bot" }, "version": "agentboundary/v0.2-alpha", "execution": { "status": "success", "result_ref": "github://issues/2", "completed_at": "2026-05-30T16:50:12.556Z" }, "issued_at": "2026-05-30T16:50:12.089Z", "provenance": { "actor.id": "inferred", "issued_at": "observed", "tool.name": "observed", "actor.type": "observed", "receipt_id": "observed", "agent.model": "observed", "policy.name": "observed", "tool.version": "observed", "target.system": "observed", "arguments_hash": "observed", "policy.version": "observed", "agent.framework": "observed", "policy.decision": "observed", "tool.capability": "observed", "execution.status": "observed", "actor.display_name": "inferred", "target.environment": "observed", "target.resource_id": "observed", "execution.result_ref": "observed", "execution.completed_at": "observed", "agent.framework_version": "observed", "prior_receipt.receipt_id": "observed", "prior_receipt.receipt_hash": "observed" }, "receipt_id": "a0b3f411-9145-4c7d-bdec-fc3d8cd9dffb", "receipt_hash": "83e0d275d2b99a0749d996a313f0bfc5f0089bdad536764b7dbb5f049a9edd69", "prior_receipt": { "receipt_id": "f04df972-f9fc-4624-83cb-0ed3682297cf", "receipt_hash": "43234da1cb87aa56f3c8fd535323de10c5497a1639af44449c012ff28bff92c1" }, "arguments_hash": "883e505421c14d8542960274e6290e14cce4ca507fd28cb1365c4a5b21f02934", "completeness_score": 0.956 }target: github.com/jamjet-labs/jamjet-discord-bot·view on GitHub ↗Verify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PYf04df972·github.issues.create·2026-05-21v0.2-alphaAllowedSUCCESScompleteness 0.913provenance 20 observed · 2 inferredpriorcab5eff7args_hasha654595b6cde…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "allow" }, "target": { "system": "github.com/jamjet-labs/jamjet-discord-bot", "environment": "prod", "resource_id": "jamjet-labs/jamjet-discord-bot" }, "version": "agentboundary/v0.2-alpha", "execution": { "status": "success", "result_ref": "github://issues/1", "completed_at": "2026-05-21T06:54:39.699Z" }, "issued_at": "2026-05-21T06:54:39.251Z", "provenance": { "actor.id": "inferred", "issued_at": "observed", "tool.name": "observed", "actor.type": "observed", "receipt_id": "observed", "agent.model": "observed", "policy.name": "observed", "target.system": "observed", "arguments_hash": "observed", "policy.version": "observed", "agent.framework": "observed", "policy.decision": "observed", "tool.capability": "observed", "execution.status": "observed", "actor.display_name": "inferred", "target.environment": "observed", "target.resource_id": "observed", "execution.result_ref": "observed", "execution.completed_at": "observed", "agent.framework_version": "observed", "prior_receipt.receipt_id": "observed", "prior_receipt.receipt_hash": "observed" }, "receipt_id": "f04df972-f9fc-4624-83cb-0ed3682297cf", "receipt_hash": "43234da1cb87aa56f3c8fd535323de10c5497a1639af44449c012ff28bff92c1", "prior_receipt": { "receipt_id": "cab5eff7-923e-4f51-8bd1-74875667fdf1", "receipt_hash": "3e7f5a9337b26c036a09530b5d38f29389481c8afd4f07b22cd76e05a9a454af" }, "arguments_hash": "a654595b6cdee6f4d982b4323539c9aa4b32a39accba44596dbd738da7855ab4", "completeness_score": 0.913 }target: github.com/jamjet-labs/jamjet-discord-bot·view on GitHub ↗Verify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PYcab5eff7·github.issues.create·2026-05-21unknownAllowedSUCCESSargs_hashd95e103abaa8…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "allow" }, "target": { "system": "github.com/jamjet-labs/agentboundary", "environment": "prod", "resource_id": "jamjet-labs/agentboundary" }, "version": "agentboundary/v0.1", "execution": { "status": "success", "result_ref": "github://issues/2", "completed_at": "2026-05-21T04:19:25.735Z" }, "issued_at": "2026-05-21T04:19:25.402Z", "receipt_id": "cab5eff7-923e-4f51-8bd1-74875667fdf1", "receipt_hash": "3e7f5a9337b26c036a09530b5d38f29389481c8afd4f07b22cd76e05a9a454af", "arguments_hash": "d95e103abaa8d4adb5fa0d9c25930f4e098f604b4f2420728aa25f0db622b1cd" }target: github.com/jamjet-labs/agentboundary·view on GitHub ↗Verify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PY17b94323·github.issues.create·2026-05-21unknownAllowedSUCCESSargs_hashac3b6a300490…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "allow" }, "target": { "system": "github.com/jamjet-labs/agentboundary", "environment": "prod", "resource_id": "jamjet-labs/agentboundary" }, "version": "agentboundary/v0.1", "execution": { "status": "success", "result_ref": "github://issues/1", "completed_at": "2026-05-21T04:19:06.352Z" }, "issued_at": "2026-05-21T04:19:05.913Z", "receipt_id": "17b94323-7169-4baf-867d-8b702774b468", "receipt_hash": "7a4f7a57a66ec66e48bfd5a304f2e51150202abf7afce491ce6f0bac899624b9", "arguments_hash": "ac3b6a300490474e1e0bc69535f9de5db68e7c11a8a3b9b75ac0f888cb35d385" }target: github.com/jamjet-labs/agentboundary·view on GitHub ↗Verify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PY8eacbd8f·github.issues.create·2026-05-21unknownHeldBLOCKEDargs_hashac3b6a300490…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "escalate" }, "target": { "system": "github.com/jamjet-labs/agentboundary", "environment": "prod", "resource_id": "jamjet-labs/agentboundary" }, "version": "agentboundary/v0.1", "approval": { "context": "Reviewed in <#1506287781440131225>", "approver": { "id": "discord:user:aa74fa40751b528f", "role": "maintainer", "display_name": "jam" }, "approved_at": "2026-05-21T04:08:08.757Z" }, "execution": { "status": "blocked", "completed_at": "2026-05-21T04:08:08.757Z" }, "issued_at": "2026-05-21T04:07:58.981+00:00", "receipt_id": "8eacbd8f-eea3-4220-869c-f13dad2ed8de", "receipt_hash": "fb1ddef48861ab19a47dddfde03cb29ce31a800892897d8a9caea5432ea3e86f", "arguments_hash": "ac3b6a300490474e1e0bc69535f9de5db68e7c11a8a3b9b75ac0f888cb35d385" }target: github.com/jamjet-labs/agentboundaryVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PYabd1bc8e·github.issues.create·2026-05-21unknownHeldBLOCKEDargs_hash2d257d4e72f6…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "escalate" }, "target": { "system": "github.com/jamjet-labs/jamjet-discord-bot", "environment": "prod", "resource_id": "jamjet-labs/jamjet-discord-bot" }, "version": "agentboundary/v0.1", "approval": { "context": "Reviewed in <#1506287781440131225>", "approver": { "id": "discord:user:aa74fa40751b528f", "role": "maintainer", "display_name": "jam" }, "approved_at": "2026-05-21T04:02:05.919Z" }, "execution": { "status": "blocked", "completed_at": "2026-05-21T04:02:05.919Z" }, "issued_at": "2026-05-21T04:00:37.16+00:00", "receipt_id": "abd1bc8e-444c-4c19-99ca-c251cd5c3c82", "receipt_hash": "c2d777833d78a6511724d7e878385bc8b5ee87ca35bcb83cf89d5359901715cb", "arguments_hash": "2d257d4e72f62afa112766154b9b5ac0dd98ae79ee7c2758563a4363a0fb4bdf" }target: github.com/jamjet-labs/jamjet-discord-botVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PYf24a9615·github.issues.create·2026-05-21unknownAllowedBLOCKEDargs_hash2d257d4e72f6…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "allow" }, "target": { "system": "github.com/jamjet-labs/jamjet-discord-bot", "environment": "prod", "resource_id": "jamjet-labs/jamjet-discord-bot" }, "version": "agentboundary/v0.1", "execution": { "status": "blocked", "completed_at": "2026-05-21T03:59:19.849Z" }, "issued_at": "2026-05-21T03:59:19.712Z", "receipt_id": "f24a9615-6aaa-4995-9d79-784cd8f37ab3", "receipt_hash": "38973281fe2ba48355e5a839c5bf8de0657e97049b89e2b889a26ca2d21652e4", "arguments_hash": "2d257d4e72f62afa112766154b9b5ac0dd98ae79ee7c2758563a4363a0fb4bdf" }target: github.com/jamjet-labs/jamjet-discord-botVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PY2fd1fa3a·github.issues.create·2026-05-21unknownBlockedBLOCKEDargs_hash38b4d0f4832a…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "deny" }, "target": { "system": "github.com/jamjet-labs/jamjet-discord-bot", "environment": "prod", "resource_id": "jamjet-labs/jamjet-discord-bot" }, "version": "agentboundary/v0.1", "execution": { "status": "blocked", "completed_at": "2026-05-21T03:56:45.089Z" }, "issued_at": "2026-05-21T03:56:45.089Z", "receipt_id": "2fd1fa3a-9ee6-4761-9fea-cca1fa2ec7af", "receipt_hash": "050d358d018f56e5a3a8b8913fc774b42412dff1476d83a4cac3d7f3a729f9c9", "arguments_hash": "38b4d0f4832a8f3188af4e4e3d28471b77050be0bf0fb5ae4f719805d1c84df2" }target: github.com/jamjet-labs/jamjet-discord-botVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PY46c99d99·github.issues.create·2026-05-21unknownBlockedBLOCKEDargs_hash751559b2cbb0…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "deny" }, "target": { "system": "github.com/jamjet-labs/jamjet-docs", "environment": "prod", "resource_id": "jamjet-labs/jamjet-docs" }, "version": "agentboundary/v0.1", "execution": { "status": "blocked", "completed_at": "2026-05-21T03:56:14.447Z" }, "issued_at": "2026-05-21T03:56:14.437Z", "receipt_id": "46c99d99-02a9-46af-9228-b58148a25f2d", "receipt_hash": "71bf44c7462c24a1a0b8b5e0ced64bcc3bfc8ca29618c49a61684fc7bf1cb17d", "arguments_hash": "751559b2cbb0cd29c33834f40762b50710af9fe3a9c30fc47080d8c2c4aae724" }target: github.com/jamjet-labs/jamjet-docsVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PYc98892eb·github.issues.create·2026-05-21unknownBlockedBLOCKEDargs_hash751559b2cbb0…{ "tool": { "name": "github-rest", "version": "2022-11-28", "capability": "github.issues.create" }, "actor": { "id": "agent:jambot:discord:user:aa74fa40751b528f", "type": "agent", "display_name": "JamBot · acting for jam" }, "agent": { "model": "claude-haiku-4-5-20251001", "framework": "discord.js", "framework_version": "14.16.3" }, "policy": { "name": "jambot.file-issue.v1", "version": "1", "decision": "deny" }, "target": { "system": "github.com/jamjet-labs/jamjet-docs", "environment": "prod", "resource_id": "jamjet-labs/jamjet-docs" }, "version": "agentboundary/v0.1", "execution": { "status": "blocked", "completed_at": "2026-05-21T03:37:00.473Z" }, "issued_at": "2026-05-21T03:37:00.462Z", "receipt_id": "c98892eb-e34e-4f5a-a283-73a36e805ea3", "receipt_hash": "484981f2430ba8214370ca914c7e8d141ff5eab700a56771b96b9b3468d11207", "arguments_hash": "751559b2cbb0cd29c33834f40762b50710af9fe3a9c30fc47080d8c2c4aae724" }target: github.com/jamjet-labs/jamjet-docsVerify yourself
pip install agentboundary python - <<'PY' import json, hashlib def canonical(v): if isinstance(v, dict): return "{" + ",".join(json.dumps(k) + ":" + canonical(v[k]) for k in sorted(v)) + "}" if isinstance(v, list): return "[" + ",".join(canonical(x) for x in v) + "]" return json.dumps(v, ensure_ascii=False) r = json.loads(open("receipt.json").read()) # this receipt's JSON body = {k: v for k, v in r.items() if k != "receipt_hash"} got = hashlib.sha256(canonical(body).encode("utf-8")).hexdigest() assert got == r["receipt_hash"], (got, r["receipt_hash"]) print("\u2713 canonical receipt_hash verified") PY