@aporthq/aport-agent-guardrails 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/LICENSE +217 -0
  2. package/README.md +481 -0
  3. package/bin/agent-guardrails +133 -0
  4. package/bin/aport-create-passport.sh +444 -0
  5. package/bin/aport-cursor-hook.sh +90 -0
  6. package/bin/aport-guardrail-api.sh +108 -0
  7. package/bin/aport-guardrail-bash.sh +394 -0
  8. package/bin/aport-guardrail-v2.sh +5 -0
  9. package/bin/aport-guardrail.sh +5 -0
  10. package/bin/aport-resolve-paths.sh +71 -0
  11. package/bin/aport-status.sh +276 -0
  12. package/bin/frameworks/crewai.sh +49 -0
  13. package/bin/frameworks/cursor.sh +95 -0
  14. package/bin/frameworks/langchain.sh +48 -0
  15. package/bin/frameworks/n8n.sh +36 -0
  16. package/bin/frameworks/openclaw.sh +19 -0
  17. package/bin/lib/allowlist.sh +18 -0
  18. package/bin/lib/common.sh +28 -0
  19. package/bin/lib/config.sh +46 -0
  20. package/bin/lib/constants.sh +232 -0
  21. package/bin/lib/detect.sh +65 -0
  22. package/bin/lib/error.sh +269 -0
  23. package/bin/lib/passport.sh +19 -0
  24. package/bin/lib/templates/.gitkeep +1 -0
  25. package/bin/lib/templates/config.yaml +6 -0
  26. package/bin/lib/validation.sh +206 -0
  27. package/bin/openclaw +660 -0
  28. package/docs/ADDING_A_FRAMEWORK.md +87 -0
  29. package/docs/AGENTS.md.example +40 -0
  30. package/docs/CODE_REVIEW.md +192 -0
  31. package/docs/DEPLOYMENT_READINESS.md +81 -0
  32. package/docs/FAQ_SECURITY_SCANNERS.md +373 -0
  33. package/docs/FRAMEWORK_ROADMAP.md +41 -0
  34. package/docs/HOSTED_PASSPORT_SETUP.md +362 -0
  35. package/docs/IMPLEMENTING_YOUR_OWN_EVALUATOR.md +433 -0
  36. package/docs/OPENCLAW_COMPATIBILITY.md +73 -0
  37. package/docs/OPENCLAW_LOCAL_INTEGRATION.md +596 -0
  38. package/docs/OPENCLAW_TOOLS_AND_POLICIES.md +54 -0
  39. package/docs/QUICKSTART.md +470 -0
  40. package/docs/QUICKSTART_OPENCLAW_PLUGIN.md +470 -0
  41. package/docs/README.md +28 -0
  42. package/docs/RELEASE.md +87 -0
  43. package/docs/REPO_LAYOUT.md +47 -0
  44. package/docs/SKILLS_ECOSYSTEM_ANALYSIS_FEB17.md +1260 -0
  45. package/docs/TOOL_POLICY_MAPPING.md +46 -0
  46. package/docs/UPGRADE.md +46 -0
  47. package/docs/VERIFICATION_METHODS.md +97 -0
  48. package/docs/assets/README.md +8 -0
  49. package/docs/assets/porter.svg +54 -0
  50. package/docs/development/ERROR_CODES.md +616 -0
  51. package/docs/frameworks/GITHUB_ISSUE_PROPOSALS.md +1105 -0
  52. package/docs/frameworks/crewai.md +114 -0
  53. package/docs/frameworks/cursor.md +159 -0
  54. package/docs/frameworks/langchain.md +72 -0
  55. package/docs/frameworks/n8n.md +40 -0
  56. package/docs/frameworks/openclaw.md +40 -0
  57. package/docs/launch/ADD_APORT_AWESOME_LISTS_INSTRUCTIONS.md +146 -0
  58. package/docs/launch/ANNOUNCEMENT_GUIDE.md +266 -0
  59. package/docs/launch/AWESOME_REPOS.md +53 -0
  60. package/docs/launch/CURSOR_VSCODE_HOOKS_RESEARCH.md +77 -0
  61. package/docs/launch/DEMO_TERMINAL_OUTPUT.txt +48 -0
  62. package/docs/launch/DRY_AND_PLAN_CHECKLIST.md +47 -0
  63. package/docs/launch/EVIDENCE_README.md +61 -0
  64. package/docs/launch/EVIDENCE_TERMINAL_CAPTURE.txt +10 -0
  65. package/docs/launch/FRAMEWORK_SUPPORT_PLAN.md +1640 -0
  66. package/docs/launch/LAUNCH_READINESS_CHECKLIST.md +237 -0
  67. package/docs/launch/LAUNCH_STRATEGY_SUMMARY.md +464 -0
  68. package/docs/launch/OPENCLAW_FEEDBACK_AND_FIXES.md +85 -0
  69. package/docs/launch/POST_1_VALENTINE_IMPROVED.md +233 -0
  70. package/docs/launch/POST_2_GUARDRAIL_IMPROVED.md +369 -0
  71. package/docs/launch/PRE_LAUNCH_FIXES.md +766 -0
  72. package/docs/launch/QUICK_LAUNCH_CHECKLIST.md +400 -0
  73. package/docs/launch/READINESS_SUMMARY.md +262 -0
  74. package/docs/launch/README.md +68 -0
  75. package/docs/launch/USER_STORIES.md +327 -0
  76. package/docs/launch/scripts/add-aport-awesome-pr.sh +69 -0
  77. package/docs/operations/MONITORING.md +588 -0
  78. package/docs/reviews/2026-02-18-staff-review.md +268 -0
  79. package/extensions/openclaw-aport/README.md +415 -0
  80. package/extensions/openclaw-aport/index.js +625 -0
  81. package/extensions/openclaw-aport/openclaw-aport.js +7 -0
  82. package/extensions/openclaw-aport/openclaw.plugin.json +46 -0
  83. package/extensions/openclaw-aport/package.json +36 -0
  84. package/extensions/openclaw-aport/test.js +307 -0
  85. package/external/aport-policies/README.md +363 -0
  86. package/external/aport-policies/agent.session.create.v1/README.md +345 -0
  87. package/external/aport-policies/agent.session.create.v1/policy.json +162 -0
  88. package/external/aport-policies/agent.tool.register.v1/README.md +361 -0
  89. package/external/aport-policies/agent.tool.register.v1/policy.json +172 -0
  90. package/external/aport-policies/code.release.publish.v1/README.md +51 -0
  91. package/external/aport-policies/code.release.publish.v1/policy.json +121 -0
  92. package/external/aport-policies/code.repository.merge.v1/README.md +287 -0
  93. package/external/aport-policies/code.repository.merge.v1/express.example.js +332 -0
  94. package/external/aport-policies/code.repository.merge.v1/fastapi.example.py +370 -0
  95. package/external/aport-policies/code.repository.merge.v1/policy.json +162 -0
  96. package/external/aport-policies/data.export.create.v1/README.md +226 -0
  97. package/external/aport-policies/data.export.create.v1/express.example.js +172 -0
  98. package/external/aport-policies/data.export.create.v1/fastapi.example.py +165 -0
  99. package/external/aport-policies/data.export.create.v1/policy.json +133 -0
  100. package/external/aport-policies/data.report.ingest.v1/README.md +134 -0
  101. package/external/aport-policies/data.report.ingest.v1/express.example.js +105 -0
  102. package/external/aport-policies/data.report.ingest.v1/minimal-example.js +68 -0
  103. package/external/aport-policies/data.report.ingest.v1/policy.json +174 -0
  104. package/external/aport-policies/finance.crypto.trade.v1/README.md +146 -0
  105. package/external/aport-policies/finance.crypto.trade.v1/express.example.js +109 -0
  106. package/external/aport-policies/finance.crypto.trade.v1/minimal-example.js +65 -0
  107. package/external/aport-policies/finance.crypto.trade.v1/policy.json +176 -0
  108. package/external/aport-policies/finance.payment.charge.v1/README.md +326 -0
  109. package/external/aport-policies/finance.payment.charge.v1/express.example.js +250 -0
  110. package/external/aport-policies/finance.payment.charge.v1/fastapi.example.py +227 -0
  111. package/external/aport-policies/finance.payment.charge.v1/minimal-example.js +64 -0
  112. package/external/aport-policies/finance.payment.charge.v1/policy.json +224 -0
  113. package/external/aport-policies/finance.payment.charge.v1/tests/contexts.jsonl +12 -0
  114. package/external/aport-policies/finance.payment.charge.v1/tests/expected.jsonl +12 -0
  115. package/external/aport-policies/finance.payment.charge.v1/tests/passport.instance.json +42 -0
  116. package/external/aport-policies/finance.payment.charge.v1/tests/passport.template.json +40 -0
  117. package/external/aport-policies/finance.payment.charge.v1/tests/payments-charge-policy.test.js +817 -0
  118. package/external/aport-policies/finance.payment.charge.v1/tests/test_payments_charge_policy.py +486 -0
  119. package/external/aport-policies/finance.payment.payout.v1/README.md +78 -0
  120. package/external/aport-policies/finance.payment.payout.v1/policy.json +181 -0
  121. package/external/aport-policies/finance.payment.refund.v1/README.md +275 -0
  122. package/external/aport-policies/finance.payment.refund.v1/express.example.js +167 -0
  123. package/external/aport-policies/finance.payment.refund.v1/fastapi.example.py +136 -0
  124. package/external/aport-policies/finance.payment.refund.v1/minimal-example.js +183 -0
  125. package/external/aport-policies/finance.payment.refund.v1/policy.json +216 -0
  126. package/external/aport-policies/finance.payment.refund.v1/tests/refunds-policy.test.js +924 -0
  127. package/external/aport-policies/finance.payment.refund.v1/tests/test_refunds_policy.py +778 -0
  128. package/external/aport-policies/finance.transaction.execute.v1/README.md +309 -0
  129. package/external/aport-policies/finance.transaction.execute.v1/express.example.js +261 -0
  130. package/external/aport-policies/finance.transaction.execute.v1/fastapi.example.py +231 -0
  131. package/external/aport-policies/finance.transaction.execute.v1/minimal-example.js +78 -0
  132. package/external/aport-policies/finance.transaction.execute.v1/policy.json +189 -0
  133. package/external/aport-policies/finance.transaction.execute.v1/tests/contexts.jsonl +12 -0
  134. package/external/aport-policies/finance.transaction.execute.v1/tests/expected.jsonl +12 -0
  135. package/external/aport-policies/finance.transaction.execute.v1/tests/passport.instance.json +42 -0
  136. package/external/aport-policies/finance.transaction.execute.v1/tests/passport.template.json +42 -0
  137. package/external/aport-policies/finance.transaction.execute.v1/tests/test_transactions_policy.py +214 -0
  138. package/external/aport-policies/finance.transaction.execute.v1/tests/transactions-policy.test.js +306 -0
  139. package/external/aport-policies/governance.data.access.v1/README.md +292 -0
  140. package/external/aport-policies/governance.data.access.v1/express.example.js +321 -0
  141. package/external/aport-policies/governance.data.access.v1/fastapi.example.py +279 -0
  142. package/external/aport-policies/governance.data.access.v1/minimal-example.js +65 -0
  143. package/external/aport-policies/governance.data.access.v1/policy.json +208 -0
  144. package/external/aport-policies/governance.data.access.v1/tests/contexts.jsonl +12 -0
  145. package/external/aport-policies/governance.data.access.v1/tests/data-access-policy.test.js +308 -0
  146. package/external/aport-policies/governance.data.access.v1/tests/expected.jsonl +12 -0
  147. package/external/aport-policies/governance.data.access.v1/tests/passport.instance.json +56 -0
  148. package/external/aport-policies/governance.data.access.v1/tests/passport.template.json +56 -0
  149. package/external/aport-policies/governance.data.access.v1/tests/test_data_access_policy.py +214 -0
  150. package/external/aport-policies/legal.contract.review.v1/README.md +109 -0
  151. package/external/aport-policies/legal.contract.review.v1/policy.json +378 -0
  152. package/external/aport-policies/legal.contract.review.v1/tests/legal-contract-review-policy.test.js +609 -0
  153. package/external/aport-policies/legal.contract.review.v1/tests/passport.template.json +49 -0
  154. package/external/aport-policies/mcp.tool.execute.v1/README.md +301 -0
  155. package/external/aport-policies/mcp.tool.execute.v1/policy.json +141 -0
  156. package/external/aport-policies/messaging.message.send.v1/README.md +230 -0
  157. package/external/aport-policies/messaging.message.send.v1/express.example.js +183 -0
  158. package/external/aport-policies/messaging.message.send.v1/fastapi.example.py +193 -0
  159. package/external/aport-policies/messaging.message.send.v1/policy.json +144 -0
  160. package/external/aport-policies/policy-template.json +107 -0
  161. package/external/aport-policies/system.command.execute.v1/README.md +275 -0
  162. package/external/aport-policies/system.command.execute.v1/policy.json +146 -0
  163. package/external/aport-spec/CONTRIBUTING.md +273 -0
  164. package/external/aport-spec/LICENSE +21 -0
  165. package/external/aport-spec/README.md +168 -0
  166. package/external/aport-spec/conformance/README.md +294 -0
  167. package/external/aport-spec/conformance/cases/data.export.v1/contexts/allow_users.json +6 -0
  168. package/external/aport-spec/conformance/cases/data.export.v1/contexts/deny_pii.json +6 -0
  169. package/external/aport-spec/conformance/cases/data.export.v1/expected/allow_users.decision.json +19 -0
  170. package/external/aport-spec/conformance/cases/data.export.v1/expected/deny_pii.decision.json +19 -0
  171. package/external/aport-spec/conformance/cases/data.export.v1/passports/template.json +29 -0
  172. package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/allow_50usd.json +9 -0
  173. package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/deny_150usd.json +9 -0
  174. package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/deny_currency.json +9 -0
  175. package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/allow_50usd.decision.json +19 -0
  176. package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/deny_150usd.decision.json +19 -0
  177. package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/deny_currency.decision.json +19 -0
  178. package/external/aport-spec/conformance/cases/payments.refunds.v1/passports/template.json +42 -0
  179. package/external/aport-spec/conformance/package.json +44 -0
  180. package/external/aport-spec/conformance/pnpm-lock.yaml +642 -0
  181. package/external/aport-spec/conformance/src/cases.ts +371 -0
  182. package/external/aport-spec/conformance/src/ed25519.ts +167 -0
  183. package/external/aport-spec/conformance/src/jcs.ts +85 -0
  184. package/external/aport-spec/conformance/src/runner.ts +533 -0
  185. package/external/aport-spec/conformance/src/validators.ts +185 -0
  186. package/external/aport-spec/conformance/test-runner.js +315 -0
  187. package/external/aport-spec/conformance/tsconfig.json +21 -0
  188. package/external/aport-spec/error-schema.json +192 -0
  189. package/external/aport-spec/index.json +12 -0
  190. package/external/aport-spec/integrations/clawmoat/README.md +12 -0
  191. package/external/aport-spec/integrations/shield/README.md +245 -0
  192. package/external/aport-spec/integrations/shield/adapters/index.js +116 -0
  193. package/external/aport-spec/integrations/shield/adapters/system-command-execute.js +133 -0
  194. package/external/aport-spec/integrations/shield/test/README.md +58 -0
  195. package/external/aport-spec/integrations/shield/test/shield.md +40 -0
  196. package/external/aport-spec/integrations/shield/test/test-shield-to-verify.js +274 -0
  197. package/external/aport-spec/metrics-schema.json +504 -0
  198. package/external/aport-spec/oap/CHANGELOG.md +54 -0
  199. package/external/aport-spec/oap/VERSION.md +40 -0
  200. package/external/aport-spec/oap/capability-registry.md +229 -0
  201. package/external/aport-spec/oap/conformance.md +257 -0
  202. package/external/aport-spec/oap/decision-schema.json +114 -0
  203. package/external/aport-spec/oap/examples/context.refund.usd.50.json +9 -0
  204. package/external/aport-spec/oap/examples/decision.allow.sample.json +20 -0
  205. package/external/aport-spec/oap/examples/decision.deny.sample.json +23 -0
  206. package/external/aport-spec/oap/examples/passport.instance.v1.json +50 -0
  207. package/external/aport-spec/oap/examples/passport.template.v1.json +71 -0
  208. package/external/aport-spec/oap/oap-spec.md +426 -0
  209. package/external/aport-spec/oap/passport-schema.json +396 -0
  210. package/external/aport-spec/oap/security.md +213 -0
  211. package/external/aport-spec/oap/vc/context-oap-v1.jsonld +137 -0
  212. package/external/aport-spec/oap/vc/examples/oap-decision-vc.json +37 -0
  213. package/external/aport-spec/oap/vc/examples/oap-passport-vc.json +68 -0
  214. package/external/aport-spec/oap/vc/tools/INTEGRATION.md +375 -0
  215. package/external/aport-spec/oap/vc/tools/README.md +278 -0
  216. package/external/aport-spec/oap/vc/tools/examples/decision-to-vc.js +66 -0
  217. package/external/aport-spec/oap/vc/tools/examples/passport-to-vc.js +83 -0
  218. package/external/aport-spec/oap/vc/tools/examples/vc-to-decision.js +77 -0
  219. package/external/aport-spec/oap/vc/tools/examples/vc-to-passport.js +94 -0
  220. package/external/aport-spec/oap/vc/tools/package.json +38 -0
  221. package/external/aport-spec/oap/vc/tools/pnpm-lock.yaml +472 -0
  222. package/external/aport-spec/oap/vc/tools/src/cli.ts +226 -0
  223. package/external/aport-spec/oap/vc/tools/src/crypto-utils.ts +427 -0
  224. package/external/aport-spec/oap/vc/tools/src/index.ts +653 -0
  225. package/external/aport-spec/oap/vc/tools/src/test.ts +148 -0
  226. package/external/aport-spec/oap/vc/tools/src/vp.ts +382 -0
  227. package/external/aport-spec/oap/vc/tools/test-simple.js +214 -0
  228. package/external/aport-spec/oap/vc/tools/tsconfig.json +19 -0
  229. package/external/aport-spec/oap/vc/vc-mapping.md +443 -0
  230. package/external/aport-spec/passport-schema.json +586 -0
  231. package/external/aport-spec/rate-limiting.md +136 -0
  232. package/external/aport-spec/transport-profile.md +325 -0
  233. package/external/aport-spec/webhook-spec.md +314 -0
  234. package/package.json +70 -0
  235. package/skills/aport-agent-guardrail/SKILL.md +314 -0
  236. package/src/evaluator.js +252 -0
  237. package/src/server/index.js +72 -0
@@ -0,0 +1,586 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Agent Passport",
4
+ "description": "Schema for AI agent passport data",
5
+ "type": "object",
6
+ "required": [
7
+ "agent_id",
8
+ "slug",
9
+ "name",
10
+ "owner_id",
11
+ "owner_type",
12
+ "owner_display",
13
+ "controller_type",
14
+ "claimed",
15
+ "role",
16
+ "description",
17
+ "capabilities",
18
+ "limits",
19
+ "regions",
20
+ "status",
21
+ "verification_status",
22
+ "assurance_level",
23
+ "contact",
24
+ "source",
25
+ "created_at",
26
+ "updated_at",
27
+ "version"
28
+ ],
29
+ "properties": {
30
+ "agent_id": {
31
+ "type": "string",
32
+ "pattern": "^ap_[a-zA-Z0-9_]+$",
33
+ "description": "Unique identifier for the agent",
34
+ "example": "ap_128094d345678"
35
+ },
36
+ "slug": {
37
+ "type": "string",
38
+ "description": "URL-friendly identifier for the agent",
39
+ "example": "customer-support-ai"
40
+ },
41
+ "name": {
42
+ "type": "string",
43
+ "description": "Human-readable name for the agent",
44
+ "example": "Customer Support AI"
45
+ },
46
+ "owner_id": {
47
+ "type": "string",
48
+ "pattern": "^(ap_org_|ap_user_)[a-zA-Z0-9_]+$",
49
+ "description": "Unique identifier for the owner (organization or user)",
50
+ "example": "ap_org_12345678"
51
+ },
52
+ "owner_type": {
53
+ "type": "string",
54
+ "enum": ["org", "user"],
55
+ "description": "Type of owner (organization or user)",
56
+ "example": "org"
57
+ },
58
+ "owner_display": {
59
+ "type": "string",
60
+ "description": "Display name of the owner",
61
+ "example": "Acme Corporation"
62
+ },
63
+ "controller_type": {
64
+ "type": "string",
65
+ "enum": ["org", "person"],
66
+ "description": "Type of controller (organization or person)",
67
+ "example": "org"
68
+ },
69
+ "claimed": {
70
+ "type": "boolean",
71
+ "description": "Whether the agent has been claimed by its owner",
72
+ "example": true
73
+ },
74
+ "role": {
75
+ "type": "string",
76
+ "description": "Agent's role or tier level",
77
+ "example": "Customer Support Agent"
78
+ },
79
+ "description": {
80
+ "type": "string",
81
+ "description": "Detailed description of the agent's purpose and capabilities",
82
+ "example": "AI agent specialized in customer support and ticket management"
83
+ },
84
+ "capabilities": {
85
+ "type": "array",
86
+ "items": {
87
+ "type": "object",
88
+ "required": ["id"],
89
+ "properties": {
90
+ "id": {
91
+ "type": "string",
92
+ "description": "Capability identifier",
93
+ "example": "payments.refund"
94
+ },
95
+ "params": {
96
+ "type": "object",
97
+ "description": "Optional parameters for the capability",
98
+ "additionalProperties": true,
99
+ "example": {
100
+ "max_amount": 5000,
101
+ "currency": "USD"
102
+ }
103
+ }
104
+ }
105
+ },
106
+ "description": "List of capabilities granted to the agent",
107
+ "example": [
108
+ {
109
+ "id": "payments.refund",
110
+ "params": {
111
+ "max_amount": 5000,
112
+ "currency": "USD"
113
+ }
114
+ },
115
+ {
116
+ "id": "data.export"
117
+ }
118
+ ]
119
+ },
120
+ "limits": {
121
+ "type": "object",
122
+ "description": "Operational limits for the agent",
123
+ "properties": {
124
+ "refund_amount_max_per_tx": {
125
+ "type": "number",
126
+ "minimum": 0,
127
+ "maximum": 1000000,
128
+ "description": "Maximum refund amount per transaction in USD cents"
129
+ },
130
+ "refund_amount_daily_cap": {
131
+ "type": "number",
132
+ "minimum": 0,
133
+ "maximum": 10000000,
134
+ "description": "Maximum total refunds per day in USD cents"
135
+ },
136
+ "payout_usd_daily_cap": {
137
+ "type": "number",
138
+ "minimum": 0,
139
+ "maximum": 100000000,
140
+ "description": "Maximum total payouts per day in USD cents"
141
+ },
142
+ "max_actions_per_min": {
143
+ "type": "number",
144
+ "minimum": 1,
145
+ "maximum": 10000,
146
+ "description": "Maximum actions allowed per minute"
147
+ },
148
+ "max_export_rows": {
149
+ "type": "number",
150
+ "minimum": 1,
151
+ "maximum": 1000000,
152
+ "description": "Maximum number of rows in data exports"
153
+ },
154
+ "allow_pii": {
155
+ "type": "boolean",
156
+ "description": "Whether the agent is allowed to access PII data"
157
+ },
158
+ "max_deploys_per_day": {
159
+ "type": "number",
160
+ "minimum": 1,
161
+ "maximum": 100,
162
+ "description": "Maximum deployments per day"
163
+ }
164
+ },
165
+ "additionalProperties": false
166
+ },
167
+ "regions": {
168
+ "type": "array",
169
+ "items": {
170
+ "type": "string",
171
+ "pattern": "^[A-Z]{2}(-[A-Z]{2})?$"
172
+ },
173
+ "description": "Geographic regions where the agent is authorized to operate",
174
+ "example": ["US-CA", "US-NY", "EU-DE"]
175
+ },
176
+ "status": {
177
+ "type": "string",
178
+ "enum": ["draft", "active", "suspended", "revoked"],
179
+ "description": "Current status of the agent passport",
180
+ "example": "active"
181
+ },
182
+ "verification_status": {
183
+ "type": "string",
184
+ "enum": ["unverified", "email_verified", "github_verified"],
185
+ "description": "Verification status of the agent",
186
+ "example": "email_verified"
187
+ },
188
+ "verification_method": {
189
+ "type": "string",
190
+ "enum": ["email", "github_oauth"],
191
+ "description": "Method used for verification",
192
+ "example": "email"
193
+ },
194
+ "verification_evidence": {
195
+ "type": "object",
196
+ "description": "Evidence of verification",
197
+ "properties": {
198
+ "email": {
199
+ "type": "string",
200
+ "format": "email",
201
+ "description": "Verified email address"
202
+ },
203
+ "github_username": {
204
+ "type": "string",
205
+ "description": "GitHub username"
206
+ },
207
+ "github_org": {
208
+ "type": "string",
209
+ "description": "GitHub organization"
210
+ },
211
+ "verified_at": {
212
+ "type": "string",
213
+ "format": "date-time",
214
+ "description": "When verification was completed"
215
+ }
216
+ },
217
+ "additionalProperties": false
218
+ },
219
+ "assurance_level": {
220
+ "type": "string",
221
+ "enum": ["L0", "L1", "L2", "L3", "L4KYC", "L4FIN"],
222
+ "description": "Assurance level of the agent",
223
+ "example": "L1"
224
+ },
225
+ "assurance_method": {
226
+ "type": "string",
227
+ "enum": [
228
+ "self",
229
+ "email",
230
+ "github",
231
+ "domain",
232
+ "kyc",
233
+ "kyb",
234
+ "financial_data"
235
+ ],
236
+ "description": "Method used for assurance verification",
237
+ "example": "email"
238
+ },
239
+ "assurance_verified_at": {
240
+ "type": "string",
241
+ "format": "date-time",
242
+ "description": "When assurance was verified",
243
+ "example": "2024-01-15T10:30:00Z"
244
+ },
245
+ "contact": {
246
+ "type": "string",
247
+ "format": "email",
248
+ "description": "Contact email for the agent",
249
+ "example": "contact@ai-research.com"
250
+ },
251
+ "links": {
252
+ "type": "object",
253
+ "description": "Related links for the agent",
254
+ "properties": {
255
+ "homepage": {
256
+ "type": "string",
257
+ "format": "uri",
258
+ "description": "Homepage URL"
259
+ },
260
+ "docs": {
261
+ "type": "string",
262
+ "format": "uri",
263
+ "description": "Documentation URL"
264
+ },
265
+ "repo": {
266
+ "type": "string",
267
+ "format": "uri",
268
+ "description": "Repository URL"
269
+ }
270
+ },
271
+ "additionalProperties": false
272
+ },
273
+ "categories": {
274
+ "type": "array",
275
+ "items": {
276
+ "type": "string",
277
+ "enum": [
278
+ "support",
279
+ "commerce",
280
+ "devops",
281
+ "ops",
282
+ "analytics",
283
+ "marketing"
284
+ ]
285
+ },
286
+ "description": "Categories the agent belongs to",
287
+ "example": ["support", "commerce"]
288
+ },
289
+ "framework": {
290
+ "type": "array",
291
+ "items": {
292
+ "type": "string",
293
+ "enum": [
294
+ "n8n",
295
+ "LangGraph",
296
+ "CrewAI",
297
+ "AutoGen",
298
+ "OpenAI",
299
+ "LlamaIndex",
300
+ "Custom"
301
+ ]
302
+ },
303
+ "description": "Frameworks used by the agent",
304
+ "example": ["LangGraph", "OpenAI"]
305
+ },
306
+ "logo_url": {
307
+ "type": "string",
308
+ "format": "uri",
309
+ "description": "URL to the agent's logo",
310
+ "example": "https://example.com/logo.png"
311
+ },
312
+ "source": {
313
+ "type": "string",
314
+ "enum": ["admin", "form", "crawler"],
315
+ "description": "How the passport was created",
316
+ "example": "admin"
317
+ },
318
+ "created_at": {
319
+ "type": "string",
320
+ "format": "date-time",
321
+ "description": "ISO 8601 timestamp of creation",
322
+ "example": "2024-01-01T00:00:00Z"
323
+ },
324
+ "updated_at": {
325
+ "type": "string",
326
+ "format": "date-time",
327
+ "description": "ISO 8601 timestamp of last update",
328
+ "example": "2024-01-15T10:30:00Z"
329
+ },
330
+ "version": {
331
+ "type": "string",
332
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
333
+ "description": "Version of the passport schema",
334
+ "example": "1.0.0"
335
+ },
336
+ "model_info": {
337
+ "type": "object",
338
+ "description": "Information about the AI model used by the agent",
339
+ "properties": {
340
+ "model_refs": {
341
+ "type": "array",
342
+ "items": {
343
+ "type": "object",
344
+ "properties": {
345
+ "provider": {
346
+ "type": "string",
347
+ "enum": ["OpenAI", "Anthropic", "Meta", "local"],
348
+ "description": "Model provider"
349
+ },
350
+ "id": {
351
+ "type": "string",
352
+ "description": "Model identifier",
353
+ "example": "gpt-4o-mini"
354
+ },
355
+ "version": {
356
+ "type": "string",
357
+ "description": "Model version",
358
+ "example": "2025-08-01"
359
+ },
360
+ "hash": {
361
+ "type": "string",
362
+ "description": "SHA256 hash of model artifact if local"
363
+ },
364
+ "modality": {
365
+ "type": "string",
366
+ "enum": ["text", "vision", "multimodal"],
367
+ "description": "Model modality"
368
+ },
369
+ "evals": {
370
+ "type": "array",
371
+ "items": {
372
+ "type": "object",
373
+ "properties": {
374
+ "name": {
375
+ "type": "string",
376
+ "description": "Evaluation name"
377
+ },
378
+ "score": {
379
+ "oneOf": [{ "type": "number" }, { "type": "string" }],
380
+ "description": "Evaluation score"
381
+ },
382
+ "date": {
383
+ "type": "string",
384
+ "format": "date",
385
+ "description": "Evaluation date"
386
+ }
387
+ }
388
+ },
389
+ "description": "Model evaluation results"
390
+ },
391
+ "safety": {
392
+ "type": "object",
393
+ "properties": {
394
+ "jailbreak": {
395
+ "type": "string",
396
+ "enum": ["low", "med", "high"],
397
+ "description": "Jailbreak resistance level"
398
+ },
399
+ "toxicity": {
400
+ "type": "string",
401
+ "enum": ["low", "med", "high"],
402
+ "description": "Toxicity level"
403
+ }
404
+ },
405
+ "description": "Safety assessment"
406
+ }
407
+ }
408
+ },
409
+ "description": "Model references"
410
+ },
411
+ "tools": {
412
+ "type": "array",
413
+ "items": {
414
+ "type": "object",
415
+ "properties": {
416
+ "name": {
417
+ "type": "string",
418
+ "description": "Tool name",
419
+ "example": "payments"
420
+ },
421
+ "provider": {
422
+ "type": "string",
423
+ "description": "Tool provider",
424
+ "example": "Stripe"
425
+ },
426
+ "version": {
427
+ "type": "string",
428
+ "description": "Tool version"
429
+ },
430
+ "scopes": {
431
+ "type": "array",
432
+ "items": {
433
+ "type": "string"
434
+ },
435
+ "description": "Tool access scopes",
436
+ "example": ["refunds:write", "tickets:read"]
437
+ }
438
+ }
439
+ },
440
+ "description": "Tools available to the agent"
441
+ },
442
+ "provenance": {
443
+ "type": "object",
444
+ "properties": {
445
+ "repo": {
446
+ "type": "string",
447
+ "format": "uri",
448
+ "description": "Source repository URL"
449
+ },
450
+ "commit": {
451
+ "type": "string",
452
+ "description": "Git commit SHA"
453
+ },
454
+ "manifest_hash": {
455
+ "type": "string",
456
+ "description": "Repository manifest hash"
457
+ }
458
+ },
459
+ "description": "Source code provenance"
460
+ },
461
+ "data_access": {
462
+ "type": "object",
463
+ "properties": {
464
+ "pii": {
465
+ "type": "boolean",
466
+ "description": "Whether the agent accesses PII data"
467
+ },
468
+ "pci": {
469
+ "type": "boolean",
470
+ "description": "Whether the agent accesses PCI data"
471
+ },
472
+ "sources": {
473
+ "type": "array",
474
+ "items": {
475
+ "type": "string"
476
+ },
477
+ "description": "Data sources accessed by the agent",
478
+ "example": ["zendesk", "stripe", "s3://bucket"]
479
+ }
480
+ },
481
+ "description": "Data access information"
482
+ }
483
+ },
484
+ "additionalProperties": false
485
+ },
486
+ "registry_key_id": {
487
+ "type": "string",
488
+ "description": "Registry key identifier for active passports",
489
+ "example": "reg-2025-01"
490
+ },
491
+ "registry_sig": {
492
+ "type": "string",
493
+ "description": "Registry signature for active passports",
494
+ "example": "ed25519:base64(<canonical-bytes>)"
495
+ },
496
+ "canonical_hash": {
497
+ "type": "string",
498
+ "description": "SHA256 hash of canonical JSON (excluding signature fields)",
499
+ "example": "sha256:base64"
500
+ },
501
+ "mcp": {
502
+ "type": "object",
503
+ "properties": {
504
+ "servers": {
505
+ "type": "array",
506
+ "items": {
507
+ "type": "string",
508
+ "pattern": "^(https?://|urn:mcp:)",
509
+ "description": "MCP server URL or URN"
510
+ },
511
+ "maxItems": 50,
512
+ "description": "Allowed MCP servers",
513
+ "example": ["https://mcp.stripe.com", "urn:mcp:acme:helpdesk"]
514
+ },
515
+ "tools": {
516
+ "type": "array",
517
+ "items": {
518
+ "type": "string",
519
+ "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$",
520
+ "description": "MCP tool in namespace.action format"
521
+ },
522
+ "maxItems": 200,
523
+ "description": "Allowed MCP tools",
524
+ "example": ["stripe.refunds.create", "notion.pages.export"]
525
+ }
526
+ },
527
+ "additionalProperties": false,
528
+ "description": "MCP (Model Context Protocol) allowlist configuration"
529
+ },
530
+ "evaluation": {
531
+ "type": "object",
532
+ "properties": {
533
+ "pack_id": {
534
+ "type": "string",
535
+ "description": "Policy pack identifier",
536
+ "example": "refunds.v1"
537
+ },
538
+ "assurance_ok": {
539
+ "type": "boolean",
540
+ "description": "Whether assurance level meets policy requirements"
541
+ },
542
+ "capability_ok": {
543
+ "type": "boolean",
544
+ "description": "Whether capabilities meet policy requirements"
545
+ },
546
+ "limits_ok": {
547
+ "type": "boolean",
548
+ "description": "Whether limits meet policy requirements"
549
+ },
550
+ "regions_ok": {
551
+ "type": "boolean",
552
+ "description": "Whether regions meet policy requirements"
553
+ },
554
+ "mcp_ok": {
555
+ "type": "boolean",
556
+ "description": "Whether MCP allowlist meets policy requirements"
557
+ },
558
+ "reasons": {
559
+ "type": "array",
560
+ "items": {
561
+ "type": "string"
562
+ },
563
+ "description": "Array of failure reasons if any checks fail"
564
+ }
565
+ },
566
+ "required": [
567
+ "pack_id",
568
+ "assurance_ok",
569
+ "capability_ok",
570
+ "limits_ok",
571
+ "regions_ok",
572
+ "mcp_ok",
573
+ "reasons"
574
+ ],
575
+ "additionalProperties": false,
576
+ "description": "Policy evaluation results (computed on create/update)"
577
+ },
578
+ "verified_at": {
579
+ "type": "string",
580
+ "format": "date-time",
581
+ "description": "ISO timestamp when registry signature was computed",
582
+ "example": "2024-01-15T10:30:00Z"
583
+ }
584
+ },
585
+ "additionalProperties": false
586
+ }