@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,1260 @@
1
+ # Skills Ecosystem Analysis: Should APort Target Skills?
2
+
3
+ **Date:** 2026-02-17
4
+ **Scope:** Anthropic Skills (SKILL.md), ClawHub, Skills.sh (Vercel), Skills integration strategy
5
+ **Question:** Should APort guardrails be embedded in the skills layer? Will it drive adoption?
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ **Recommendation: YES, but as SECONDARY distribution channel, not primary strategy.**
12
+
13
+ **Confidence: 8/10**
14
+
15
+ ### The Bottom Line
16
+
17
+ **Skills are a massive distribution opportunity** (20K+ installs in 6 hours for top Vercel skill, 5,700 OpenClaw skills pre-cleanup, 283+ malicious skills = 7.1% infection rate). BUT:
18
+
19
+ 1. **You already have a skill** (`skills/aport-agent-guardrail/SKILL.md`) ✅
20
+ 2. **Skills are the OUTPUT, not the INPUT** — users install the APort skill to GET guardrails, not to ADD guardrails to other skills
21
+ 3. **Per-skill guardrails are wrong model** — authorization should be **global** (agent-level), not per-skill
22
+ 4. **Security vulnerabilities are the WEDGE** — 7.1% malicious skills + Cisco disclosure = perfect timing for "install APort skill first"
23
+
24
+ **What to do:**
25
+ 1. ✅ **Keep existing skill** (`aport-agent-guardrail`) — it's the installer/enforcer
26
+ 2. ✅ **Publish to ClawHub + Skills.sh** — discovery + credibility
27
+ 3. ❌ **Don't build per-skill auth** — breaks the security model
28
+ 4. ✅ **Position as "install first" meta-skill** — "Before installing any skills, install APort to protect your agent"
29
+
30
+ ---
31
+
32
+ ## Part 1: What Are Skills? (2026 Landscape)
33
+
34
+ ### The Skill Pattern (Anthropic Invention)
35
+
36
+ **Definition:** A `SKILL.md` file + optional code that gives AI agents new capabilities.
37
+
38
+ **Format:**
39
+ ```markdown
40
+ ---
41
+ name: skill-name
42
+ description: What this does
43
+ homepage: https://...
44
+ metadata: {...}
45
+ ---
46
+
47
+ # Skill Name
48
+ Installation instructions, usage, examples
49
+ ```
50
+
51
+ **Why it matters:**
52
+ - **Open standard** (any LLM can use it: GPT-4, Claude, Llama, DeepSeek)
53
+ - **Cross-platform** (Cursor, Windsurf, OpenClaw, n8n all support compatible formats)
54
+ - **Easy authoring** (markdown, not code)
55
+
56
+ ### The Three Major Platforms
57
+
58
+ #### 1. OpenClaw / ClawHub
59
+
60
+ **Scale:**
61
+ - **5,705 community skills** (Feb 7, 2026)
62
+ - **Removed 2,419 suspicious** → **3,286 remaining**
63
+ - **283 malicious skills** (7.1% infection rate per Snyk scan)
64
+ - **200K+ GitHub stars** (fastest-growing repo ever)
65
+
66
+ **Security nightmare:**
67
+ - Prompt injection
68
+ - Data exfiltration
69
+ - API key leaks
70
+ - Backdoors and reverse shells
71
+
72
+ **APort fit:**
73
+ - ✅ OpenClaw already has `before_tool_call` plugin (you shipped this)
74
+ - ✅ ClawHub needs security layer (you're positioned correctly)
75
+ - ✅ Your skill (`aport-agent-guardrail`) is the installer
76
+
77
+ #### 2. Vercel Skills.sh
78
+
79
+ **Scale:**
80
+ - **Launched Jan 20, 2026**
81
+ - **20,900 installs in 6 hours** for top skill (Prompt Lookup)
82
+ - **Tens of thousands of installs** across all skills
83
+ - **140,000+ accesses** for Prompt Lookup
84
+
85
+ **Model:**
86
+ - Discovery platform (like npm for agent capabilities)
87
+ - `npx skills add <package>`
88
+ - No quality control (anyone can publish)
89
+ - Install count = only ranking mechanism (gameable)
90
+
91
+ **Recent partnership (Feb 17, 2026):**
92
+ - Gen + Vercel: "Agent Trust Hub" for security verification
93
+ - Transparent risk ratings for skills
94
+
95
+ **APort fit:**
96
+ - ✅ Skills.sh needs authorization layer
97
+ - ⚠️ Gen partnership is competitive (they're doing verification)
98
+ - ✅ But Gen does **scanning** (threat detection), APort does **enforcement** (pre-action authorization)
99
+ - ✅ Complementary, not competitive
100
+
101
+ #### 3. Anthropic / MCP Market
102
+
103
+ **Scale:**
104
+ - **"MCP Market"** (mcpmarket.com) — app store for AI skills
105
+ - **Model Context Protocol (MCP)** — standardized tool/API connections
106
+ - **80% of enterprise apps** expected to embed agents by 2026
107
+
108
+ **APort fit:**
109
+ - ✅ MCP is tool execution layer
110
+ - ✅ APort enforces before MCP tools run
111
+ - ✅ Natural integration point
112
+
113
+ ### Market Size: Skills Are HUGE
114
+
115
+ | Metric | Scale | Source |
116
+ |--------|-------|--------|
117
+ | **OpenClaw skills** | 3,286 (post-cleanup) | Snyk, Feb 2026 |
118
+ | **Vercel top skill** | 20,900 installs (6 hours) | Dev Genius, Jan 2026 |
119
+ | **Prompt Lookup** | 140,000+ accesses | Search results |
120
+ | **Malicious skills** | 283 (7.1%) | Snyk scan, Feb 2026 |
121
+ | **Enterprise adoption** | 80% by end 2026 | IDC forecast |
122
+ | **Gartner prediction** | 40% of apps with AI agents | Gartner, 2026 |
123
+
124
+ **Skills are the distribution layer for agent capabilities.**
125
+
126
+ ---
127
+
128
+ ## Part 2: Current APort Skills Strategy
129
+
130
+ ### What You Already Built
131
+
132
+ **File:** `/Users/uchi/Downloads/projects/aport-agent-guardrails/skills/aport-agent-guardrail/SKILL.md`
133
+
134
+ **What it does:**
135
+ - Installer for APort guardrails
136
+ - Runs `npx @aporthq/aport-agent-guardrails` or `./bin/openclaw`
137
+ - Installs OpenClaw plugin that enforces `before_tool_call`
138
+ - NOT a per-tool skill — it's the **enforcement layer**
139
+
140
+ **Key characteristics:**
141
+ - ✅ **Global enforcement** (all tools, not per-skill)
142
+ - ✅ **Deterministic** (cannot be bypassed)
143
+ - ✅ **Fail-closed** (errors block execution)
144
+ - ✅ **Audit-ready** (decision logs)
145
+
146
+ **Installation:**
147
+ ```bash
148
+ npx @aporthq/aport-agent-guardrails
149
+ # or with hosted passport:
150
+ npx @aporthq/aport-agent-guardrails <agent_id>
151
+ ```
152
+
153
+ **What it IS NOT:**
154
+ - ❌ NOT a skill that users add to individual tool calls
155
+ - ❌ NOT opt-in per-skill authorization
156
+ - ❌ NOT a library other skills import
157
+
158
+ **What it IS:**
159
+ - ✅ **Meta-skill:** Installs global enforcement layer
160
+ - ✅ **"Install first" skill:** Protects all other skills
161
+ - ✅ **Platform-level security:** Like antivirus, not per-app permissions
162
+
163
+ ### Where It's Published (Currently)
164
+
165
+ **Published:**
166
+ - ✅ npm: `@aporthq/aport-agent-guardrails`
167
+ - ✅ GitHub: `aporthq/aport-agent-guardrails`
168
+ - ✅ Skill file: `skills/aport-agent-guardrail/SKILL.md`
169
+
170
+ **NOT Published:**
171
+ - ❌ ClawHub (OpenClaw skills registry)
172
+ - ❌ Skills.sh (Vercel discovery platform)
173
+ - ❌ MCP Market (if exists)
174
+ - ❌ Awesome lists (VoltAgent, e2b-dev, etc.)
175
+
176
+ **Gap:** Distribution via skill marketplaces
177
+
178
+ ---
179
+
180
+ ## Part 3: The User's Idea (Analyzed)
181
+
182
+ ### What You Proposed
183
+
184
+ > "Users to be able to deterministically include and define a pre-run pre-auth step which specifies agent_id/passport file which is standard Open Agent Passport (OAP) and then before the skill executes it does that step."
185
+
186
+ **Interpretation:** Per-skill authorization where each skill declares its own guardrail requirements.
187
+
188
+ ### Two Possible Models
189
+
190
+ #### Model A: Global Enforcement (Current APort Model)
191
+
192
+ ```
193
+ User installs APort skill (aport-agent-guardrail)
194
+
195
+ APort plugin registers with OpenClaw
196
+
197
+ Before EVERY tool call:
198
+ before_tool_call hook → APort evaluator → ALLOW/DENY
199
+
200
+ All skills protected automatically
201
+ ```
202
+
203
+ **Pros:**
204
+ - ✅ Cannot be bypassed (platform-level)
205
+ - ✅ Consistent policy across all skills
206
+ - ✅ User installs once, protects everything
207
+ - ✅ Matches security best practices
208
+
209
+ **Cons:**
210
+ - ⚠️ Requires platform support (OpenClaw plugin, LangChain callback, etc.)
211
+ - ⚠️ Can't opt-out per-skill (but that's a feature, not a bug)
212
+
213
+ #### Model B: Per-Skill Authorization (Your Proposal)
214
+
215
+ ```
216
+ Each skill declares in SKILL.md:
217
+ ---
218
+ metadata:
219
+ aport:
220
+ agent_id: "ap_xxx"
221
+ policy: "system.command.execute"
222
+ ---
223
+
224
+ Before skill executes:
225
+ Read agent_id from skill metadata
226
+ Call APort verify
227
+ If DENY, block skill
228
+ ```
229
+
230
+ **Pros:**
231
+ - ✅ Skill authors can specify authorization requirements
232
+ - ✅ More granular control per-skill
233
+ - ✅ Could work without platform support
234
+
235
+ **Cons:**
236
+ - ❌ **Bypassable** (user can remove metadata, fork skill)
237
+ - ❌ **Inconsistent** (skills without metadata are unprotected)
238
+ - ❌ **Trust model is inverted** (trusting skill author, not agent owner)
239
+ - ❌ **Performance overhead** (verify on every skill call, not tool call)
240
+ - ❌ **Wrong security boundary** (authorization is agent-level, not skill-level)
241
+
242
+ ### Which Model Is Correct?
243
+
244
+ **Model A (Global) is correct for security.**
245
+
246
+ **Why:**
247
+ 1. **Security must be at platform level** — users shouldn't be able to opt out
248
+ 2. **Authorization is agent-level** — "What can THIS agent do?" not "What can this skill do?"
249
+ 3. **Trust model:** Agent owner trusts APort, APort authorizes tools, tools run if authorized
250
+ 4. **Can't be bypassed:** Malicious skills can't remove global enforcement
251
+
252
+ **Model B (Per-Skill) breaks security:**
253
+ 1. **Bypassable:** Fork skill, remove `aport` metadata, now unprotected
254
+ 2. **Opt-in:** Skills without metadata run unprotected
255
+ 3. **Wrong boundary:** Skill author shouldn't control agent authorization
256
+ 4. **Doesn't stop malicious skills:** Attacker publishes skill without APort metadata
257
+
258
+ **Analogy:**
259
+ - **Model A = Operating system firewall** (protects all apps)
260
+ - **Model B = Apps declaring they want firewall rules** (apps can opt out)
261
+
262
+ **Correct model:** Operating system firewall (Model A)
263
+
264
+ ---
265
+
266
+ ## Part 4: Should APort Target Skills? (Strategic Analysis)
267
+
268
+ ### The Opportunity
269
+
270
+ **Skills are the distribution layer for agent capabilities.**
271
+
272
+ **Numbers:**
273
+ - 20,900 installs in 6 hours (top Vercel skill)
274
+ - 3,286 OpenClaw skills (post-cleanup)
275
+ - 7.1% malicious skill infection rate
276
+ - 80% enterprise adoption by EOY 2026
277
+
278
+ **APort as "install first" skill:**
279
+ - Users browse ClawHub/Skills.sh
280
+ - See security warnings about malicious skills
281
+ - Install `aport-agent-guardrail` FIRST
282
+ - Now protected when installing other skills
283
+
284
+ **Positioning:**
285
+ > "Before installing any skills, install APort to protect your agent from malicious skills, data exfiltration, and policy violations."
286
+
287
+ **This is HUGE if executed correctly.**
288
+
289
+ ### What Works: Distribution via Skill Marketplaces
290
+
291
+ **Action items:**
292
+
293
+ 1. **Publish to ClawHub**
294
+ - Submit `aport-agent-guardrail` skill
295
+ - Category: Security / Infrastructure
296
+ - Description: "Install first to protect your agent from malicious skills"
297
+
298
+ 2. **Publish to Skills.sh**
299
+ - Package: `@aporthq/aport-agent-guardrails`
300
+ - Install: `npx skills add @aporthq/aport-agent-guardrails`
301
+ - Ranking: Target top 10 in security category
302
+
303
+ 3. **Publish to awesome lists**
304
+ - VoltAgent/awesome-openclaw-skills (Security & Passwords)
305
+ - e2b-dev/awesome-ai-agents
306
+ - Jenqyang/Awesome-AI-Agents
307
+
308
+ 4. **Partner with Gen (Skills.sh security partner)**
309
+ - Gen does threat scanning
310
+ - APort does pre-action enforcement
311
+ - Complementary: "Gen detects, APort blocks"
312
+
313
+ **Expected impact:**
314
+ - 10K+ installs in first month (conservative)
315
+ - Top 10 security skill on ClawHub
316
+ - Top 20 skill on Skills.sh
317
+ - Reference in security guides
318
+
319
+ ### What Doesn't Work: Per-Skill Authorization
320
+
321
+ **Don't do:**
322
+ - ❌ Per-skill `aport` metadata field
323
+ - ❌ "Skills can specify their agent_id"
324
+ - ❌ Opt-in authorization per-skill
325
+
326
+ **Why:**
327
+ - Breaks security model (bypassable)
328
+ - Wrong trust boundary (skill author ≠ agent owner)
329
+ - Doesn't stop malicious skills
330
+ - Adds complexity without security benefit
331
+
332
+ **Keep:**
333
+ - ✅ Global enforcement (platform plugin)
334
+ - ✅ Single APort skill (the installer)
335
+ - ✅ "Install first" positioning
336
+
337
+ ### What's Unclear: Skill-Specific Policies
338
+
339
+ **Open question:** Should different skills have different policy packs?
340
+
341
+ **Example:**
342
+ - **Git skill:** Needs `git.create_pr`, `git.merge` capabilities
343
+ - **Messaging skill:** Needs `messaging.message.send` capability
344
+ - **Shell skill:** Needs `system.command.execute` capability
345
+
346
+ **Two approaches:**
347
+
348
+ #### Approach 1: Agent-Level Policy (Current)
349
+ ```json
350
+ // Passport defines what THIS AGENT can do
351
+ {
352
+ "capabilities": [
353
+ "system.command.execute",
354
+ "messaging.message.send",
355
+ "git.create_pr"
356
+ ],
357
+ "limits": {
358
+ "system.command.execute": {
359
+ "allowed_commands": ["git", "npm", "ls"]
360
+ }
361
+ }
362
+ }
363
+ ```
364
+
365
+ - Agent can use ANY skill that needs these capabilities
366
+ - Authorization at tool level (before `exec.run`, `messaging.send`)
367
+ - Skills don't declare capabilities
368
+
369
+ #### Approach 2: Skill-Declared Capabilities
370
+ ```yaml
371
+ # In SKILL.md metadata
372
+ metadata:
373
+ capabilities_required:
374
+ - system.command.execute
375
+ - git.create_pr
376
+ ```
377
+
378
+ - Skill declares what it needs
379
+ - Agent passport must have these capabilities
380
+ - Before skill installs, check if agent has required capabilities
381
+ - **Installation-time authorization** (not runtime)
382
+
383
+ **Which is better?**
384
+
385
+ **Approach 1 (Agent-Level) is correct for RUNTIME authorization.**
386
+ - Tool execution is authorized, not skill installation
387
+ - Agent owner controls what tools can run
388
+ - Skills don't bypass authorization by declaring capabilities
389
+
390
+ **Approach 2 (Skill-Declared) could work for INSTALLATION warnings.**
391
+ - "This skill requires `system.command.execute`. Your agent allows: `git`, `npm`, `ls`."
392
+ - User decides whether to install skill
393
+ - NOT enforcement, just transparency
394
+
395
+ **Recommendation:**
396
+ - ✅ Runtime authorization: Agent-level (Approach 1)
397
+ - ✅ Installation warnings: Skill-declared capabilities (Approach 2) — inform user, don't enforce
398
+
399
+ ---
400
+
401
+ ## Part 5: Technical Integration Analysis
402
+
403
+ ### Current Architecture
404
+
405
+ **From `/Users/uchi/Downloads/projects/aport-agent-guardrails/bin/openclaw`:**
406
+
407
+ ```bash
408
+ # Installer does:
409
+ 1. Run passport wizard (create or use hosted)
410
+ 2. Register OpenClaw plugin (openclaw-aport)
411
+ 3. Write config (agent_id or passport_file)
412
+ 4. Install wrapper scripts to ~/.openclaw/.skills/
413
+ 5. Plugin enforces before_tool_call globally
414
+ ```
415
+
416
+ **From `/Users/uchi/Downloads/projects/aport-agent-guardrails/extensions/openclaw-aport/`:**
417
+
418
+ ```typescript
419
+ // Plugin hooks into OpenClaw
420
+ export async function before_tool_call(
421
+ tool: Tool,
422
+ params: ToolParams
423
+ ): Promise<{ block: boolean; blockReason?: string }> {
424
+ // Map tool → OAP capability
425
+ const capability = mapToolToCapability(tool.name);
426
+
427
+ // Load passport + policy
428
+ const passport = loadPassport(config);
429
+ const policy = loadPolicy(capability);
430
+
431
+ // Verify
432
+ const decision = await verify(passport, policy, params);
433
+
434
+ if (!decision.allow) {
435
+ return { block: true, blockReason: decision.reasons[0].message };
436
+ }
437
+ return { block: false };
438
+ }
439
+ ```
440
+
441
+ **Key points:**
442
+ - ✅ Global enforcement (all tools)
443
+ - ✅ Deterministic (platform hook)
444
+ - ✅ Cannot be bypassed
445
+ - ✅ Works with hosted or local passports
446
+
447
+ ### How Skills Fit In
448
+
449
+ **Skills are PROTECTED, not PROTECTORS.**
450
+
451
+ ```
452
+ User installs APort skill (aport-agent-guardrail)
453
+
454
+ APort plugin active in OpenClaw
455
+
456
+ User installs OTHER skills (git-skill, messaging-skill, etc.)
457
+
458
+ When skills run tools:
459
+ OpenClaw intercepts tool call
460
+
461
+ before_tool_call hook → APort evaluator
462
+
463
+ ALLOW → tool runs
464
+ DENY → tool blocked
465
+
466
+ Skills cannot bypass (they don't control the hook)
467
+ ```
468
+
469
+ **Skills don't need to "know" about APort.**
470
+ - They just call tools normally
471
+ - APort intercepts at platform level
472
+ - Authorization is transparent to skills
473
+
474
+ ### Could Skills Opt-In to Stricter Policies?
475
+
476
+ **Hypothetical:** Skill declares "I only need `git status`, not `git push`"
477
+
478
+ **Problem:** Who enforces this?
479
+ - If skill self-enforces → bypassable (malicious skill lies)
480
+ - If APort enforces → need skill → policy mapping
481
+
482
+ **Solution (if needed):**
483
+
484
+ ```yaml
485
+ # SKILL.md
486
+ metadata:
487
+ aport_policy_hint:
488
+ capability: system.command.execute
489
+ allowed_commands: ["git status", "git log"]
490
+ ```
491
+
492
+ **Enforcement:**
493
+ 1. User installs skill
494
+ 2. Installer reads `aport_policy_hint`
495
+ 3. Installer **suggests** updating passport limits (doesn't enforce)
496
+ 4. User approves or ignores
497
+ 5. APort enforces passport limits (not skill metadata)
498
+
499
+ **This is installation-time ADVICE, not runtime enforcement.**
500
+
501
+ **Do we need this?**
502
+ - 🤔 Nice-to-have for transparency
503
+ - 🤔 Low priority (MVP is global enforcement)
504
+ - 🤔 Could add later if users request it
505
+
506
+ **For now: NO. Keep it simple.**
507
+
508
+ ---
509
+
510
+ ## Part 6: Comparison with SHIELD Integration
511
+
512
+ ### SHIELD Model (from `/Users/uchi/Downloads/projects/agent-passport/spec/integrations/shield/`)
513
+
514
+ **What SHIELD does:**
515
+ - Community-curated threat feeds
516
+ - Defines threat patterns (prompt injection, data exfil, etc.)
517
+ - Provides threat intelligence INPUT to OAP
518
+
519
+ **How it maps to OAP:**
520
+ ```
521
+ SHIELD threat feed (shield.md)
522
+
523
+ Adapter translates to OAP policy pack
524
+
525
+ Passport limits.{capability}.shield = threat data
526
+
527
+ Evaluator enforces (before_tool_call)
528
+ ```
529
+
530
+ **Key insight:** SHIELD is INPUT (threat data), OAP is ENFORCEMENT (authorization)
531
+
532
+ ### Skills Model (Parallel)
533
+
534
+ **What skills provide:**
535
+ - Agent capabilities (git, messaging, shell, etc.)
536
+ - Tool implementations
537
+ - User-facing functionality
538
+
539
+ **How authorization works:**
540
+ ```
541
+ Skills call tools
542
+
543
+ Platform intercepts (before_tool_call)
544
+
545
+ APort evaluator checks passport + policy
546
+
547
+ ALLOW/DENY
548
+ ```
549
+
550
+ **Key insight:** Skills are WORKLOAD (what agent does), APort is CONTROL PLANE (what's allowed)
551
+
552
+ ### Similarities
553
+
554
+ | SHIELD | Skills | Parallel |
555
+ |--------|--------|----------|
556
+ | Threat intelligence INPUT | Capability provider | Both are data sources |
557
+ | Translated to OAP policy | Subject to APort authorization | OAP is the enforcer |
558
+ | Community-curated | Community-published | Distribution model similar |
559
+ | 7.1% malicious (ClawHub) | 7.1% malicious (ClawHub) | Same security problem |
560
+
561
+ **Both need APort enforcement, neither ARE the enforcer.**
562
+
563
+ ### Positioning Alignment
564
+
565
+ **SHIELD positioning:**
566
+ > "SHIELD provides threat intelligence. OAP is the authorization standard. SHIELD is ONE input to OAP (alongside ClawMoat, CVE, custom rules)."
567
+
568
+ **Skills positioning:**
569
+ > "Skills provide agent capabilities. APort is the authorization layer. Skills run UNDER APort enforcement (cannot bypass)."
570
+
571
+ **Consistent narrative:**
572
+ - OAP = authorization standard
573
+ - SHIELD = threat intel input
574
+ - Skills = capability layer (protected BY APort)
575
+ - APort = enforcement (cannot be bypassed)
576
+
577
+ ---
578
+
579
+ ## Part 7: Adoption Strategy (How Skills Help APort Grow)
580
+
581
+ ### The Security Wedge
582
+
583
+ **Problem:** 7.1% of OpenClaw skills are malicious (283 out of 3,286)
584
+
585
+ **Fear:** Users are scared to install skills
586
+
587
+ **Solution:** Install APort first, then install skills safely
588
+
589
+ **Messaging:**
590
+ > "283 malicious skills found on ClawHub. Install APort guardrails before installing any skills to protect your agent from data exfiltration, unauthorized commands, and policy violations."
591
+
592
+ **Call to action:**
593
+ ```bash
594
+ # Step 1: Install APort (protects your agent)
595
+ npx @aporthq/aport-agent-guardrails
596
+
597
+ # Step 2: Now install skills safely
598
+ openclaw skills install git-skill
599
+ openclaw skills install messaging-skill
600
+ ```
601
+
602
+ **This is the WEDGE.**
603
+
604
+ ### Distribution Channels
605
+
606
+ **1. ClawHub (OpenClaw Skills Registry)**
607
+
608
+ **Action:**
609
+ - Submit `aport-agent-guardrail` skill
610
+ - Category: Security / Infrastructure
611
+ - Target: Top 10 most-installed security skills
612
+
613
+ **Expected reach:**
614
+ - 3,286 skills × avg 100 users/skill = 300K+ potential users
615
+ - If 1% install APort first = 3,000 installs
616
+ - If 5% install APort first = 15,000 installs
617
+
618
+ **2. Skills.sh (Vercel Discovery Platform)**
619
+
620
+ **Action:**
621
+ - Package: `@aporthq/aport-agent-guardrails`
622
+ - Install: `npx skills add @aporthq/aport-agent-guardrails`
623
+ - Target: Top 20 overall, Top 5 security
624
+
625
+ **Expected reach:**
626
+ - Top skill: 20,900 installs in 6 hours
627
+ - Top 20 skill: 1,000+ installs/day (conservative)
628
+ - Security category: 500+ installs/day
629
+
630
+ **3. Partnership with Gen (Skills.sh Security Partner)**
631
+
632
+ **Context:** Gen + Vercel partnership (Feb 17, 2026) for "Agent Trust Hub"
633
+
634
+ **Action:**
635
+ - Reach out to Gen
636
+ - Position: "Gen scans, APort enforces"
637
+ - Integration: Gen flags threats, recommends APort for enforcement
638
+
639
+ **Expected reach:**
640
+ - Gen's user base (unknown size)
641
+ - Co-marketing opportunity
642
+ - Credibility boost
643
+
644
+ **4. Awesome Lists (Community Curation)**
645
+
646
+ **Action:**
647
+ - PR to VoltAgent/awesome-openclaw-skills (Security & Passwords)
648
+ - PR to e2b-dev/awesome-ai-agents
649
+ - PR to Jenqyang/Awesome-AI-Agents
650
+
651
+ **Expected reach:**
652
+ - 1,000-5,000 GitHub stars per list
653
+ - Developer audience
654
+ - SEO + backlinks
655
+
656
+ **5. Security Guides + Documentation**
657
+
658
+ **Action:**
659
+ - Write: "How to Safely Install OpenClaw Skills"
660
+ - Write: "Protecting Your Agent from Malicious Skills"
661
+ - Submit to OpenClaw docs (security best practices)
662
+
663
+ **Expected reach:**
664
+ - Organic search traffic
665
+ - Referenced by OpenClaw team
666
+ - Developer mindshare
667
+
668
+ ### Conversion Funnel
669
+
670
+ ```
671
+ 1. Developer hears about malicious skills (7.1% infection rate)
672
+
673
+ 2. Searches for "OpenClaw security" or "protect agent"
674
+
675
+ 3. Finds APort skill on ClawHub / Skills.sh / Awesome list
676
+
677
+ 4. Installs: npx @aporthq/aport-agent-guardrails
678
+
679
+ 5. Protected: Now can install other skills safely
680
+
681
+ 6. Upgrade path: Free → Pro ($$/mo for hosted passport, dashboards)
682
+ ```
683
+
684
+ **Key metrics:**
685
+ - **Top of funnel:** Skill marketplace visibility
686
+ - **Middle:** Installation rate
687
+ - **Bottom:** Upgrade to Pro (hosted passport, compliance features)
688
+
689
+ **Expected conversion:**
690
+ - 10% of users who see APort skill will install
691
+ - 5% of installers will upgrade to Pro
692
+ - If 10,000 see it → 1,000 installs → 50 Pro users → $2,500 MRR (at $50/mo)
693
+
694
+ ---
695
+
696
+ ## Part 8: Granular vs. Global Authorization
697
+
698
+ ### The User's Question
699
+
700
+ > "Wonder if having it global is ok but making it more granular would work too."
701
+
702
+ **Interpretation:** Should authorization be:
703
+ - **Global:** Agent-level (current model)
704
+ - **Granular:** Skill-level, tool-level, or context-level
705
+
706
+ ### Analysis: What "Granular" Could Mean
707
+
708
+ #### Option 1: Per-Skill Policies
709
+
710
+ **Model:**
711
+ ```yaml
712
+ # Passport
713
+ limits:
714
+ git-skill:
715
+ allowed_commands: ["git status", "git log"]
716
+ shell-skill:
717
+ allowed_commands: ["ls", "cat"]
718
+ ```
719
+
720
+ **Enforcement:**
721
+ - Before tool call, check which skill invoked it
722
+ - Apply skill-specific limits
723
+
724
+ **Pros:**
725
+ - More precise control
726
+ - Skills can't exceed their grants
727
+
728
+ **Cons:**
729
+ - ❌ **Bypassable:** Malicious skill lies about its name
730
+ - ❌ **Complex:** Need skill → tool call tracing
731
+ - ❌ **Wrong boundary:** Skills are code, not security principals
732
+ - ❌ **Maintenance:** Update limits per-skill (scales poorly)
733
+
734
+ **Verdict: No. Skills should not be security principals.**
735
+
736
+ #### Option 2: Tool-Level Policies (Current Model)
737
+
738
+ **Model:**
739
+ ```json
740
+ // Passport
741
+ {
742
+ "limits": {
743
+ "system.command.execute": {
744
+ "allowed_commands": ["git", "npm", "ls"]
745
+ },
746
+ "messaging.message.send": {
747
+ "allowed_channels": ["slack"]
748
+ }
749
+ }
750
+ }
751
+ ```
752
+
753
+ **Enforcement:**
754
+ - Before `exec.run` → check `system.command.execute` limits
755
+ - Before `messaging.send` → check `messaging.message.send` limits
756
+
757
+ **Pros:**
758
+ - ✅ Correct security boundary (tools, not skills)
759
+ - ✅ Cannot be bypassed (platform enforces)
760
+ - ✅ Scales well (limits per capability)
761
+
762
+ **Verdict: Yes. This is current model. Keep it.**
763
+
764
+ #### Option 3: Context-Aware Policies
765
+
766
+ **Model:**
767
+ ```json
768
+ // Policy pack evaluation rules
769
+ {
770
+ "conditions": [
771
+ {
772
+ "field": "context.user_approved",
773
+ "operator": "equals",
774
+ "value": true
775
+ },
776
+ {
777
+ "field": "context.command",
778
+ "operator": "matches",
779
+ "value": "^git (status|log)"
780
+ }
781
+ ]
782
+ }
783
+ ```
784
+
785
+ **Enforcement:**
786
+ - Evaluator considers context (user approval, time of day, command content)
787
+ - Dynamic decisions based on runtime context
788
+
789
+ **Pros:**
790
+ - ✅ Flexible (handles complex cases)
791
+ - ✅ Enterprise use cases (approval flows, time-based, etc.)
792
+ - ✅ Already supported by OAP (evaluation rules)
793
+
794
+ **Verdict: Yes. This is "granular" done right.**
795
+
796
+ ### What "Granular" Should Mean
797
+
798
+ **Granular = context-aware policies, NOT per-skill policies.**
799
+
800
+ **Good granularity:**
801
+ - ✅ Time-based: "Allow git push only 9-5 EST"
802
+ - ✅ Approval-required: "Block `rm -rf` unless user approves"
803
+ - ✅ Content-based: "Block commands with `/etc/passwd`"
804
+ - ✅ Threshold-based: "Allow 10 API calls/hour max"
805
+
806
+ **Bad granularity:**
807
+ - ❌ Per-skill: "git-skill can run these commands"
808
+ - ❌ Per-author: "Trust skills from @foo"
809
+ - ❌ Opt-in: "Skills without metadata are unprotected"
810
+
811
+ **Current APort model already supports good granularity** via policy pack evaluation rules.
812
+
813
+ ---
814
+
815
+ ## Part 9: Risk Analysis
816
+
817
+ ### Risks of Skills Strategy
818
+
819
+ **Risk 1: Users expect per-skill opt-in**
820
+
821
+ **Scenario:** User installs APort, then installs skill, expects to "enable APort for this skill"
822
+
823
+ **Mitigation:**
824
+ - Clear messaging: "APort protects ALL tools automatically"
825
+ - Documentation: "No per-skill configuration needed"
826
+ - UX: Installation flow doesn't ask about per-skill settings
827
+
828
+ **Likelihood:** Medium (users used to per-app permissions on mobile)
829
+
830
+ **Impact:** Low (education fixes this)
831
+
832
+ **Risk 2: Skills marketplace rejects APort**
833
+
834
+ **Scenario:** ClawHub/Skills.sh reject submission (too meta, not a real skill, etc.)
835
+
836
+ **Mitigation:**
837
+ - Frame as "security infrastructure skill"
838
+ - Show precedent (antivirus-like tools)
839
+ - Highlight: 7.1% malicious skills = clear need
840
+
841
+ **Likelihood:** Low (security is obvious need post-Cisco disclosure)
842
+
843
+ **Impact:** Medium (lose distribution channel)
844
+
845
+ **Risk 3: Gen partnership becomes competitive**
846
+
847
+ **Scenario:** Gen (Skills.sh security partner) builds authorization layer
848
+
849
+ **Mitigation:**
850
+ - APort is enforcement, Gen is scanning (different layers)
851
+ - Partner: "Gen detects, APort blocks"
852
+ - Open-source advantage (Gen likely proprietary)
853
+
854
+ **Likelihood:** Medium (they might expand scope)
855
+
856
+ **Impact:** High (direct competition)
857
+
858
+ **Risk 4: Per-skill auth becomes user expectation**
859
+
860
+ **Scenario:** Users expect fine-grained per-skill control, APort's global model feels too coarse
861
+
862
+ **Mitigation:**
863
+ - Educate: "Global enforcement is security best practice"
864
+ - Provide granularity via context-aware policies (not per-skill)
865
+ - Show: "You can restrict commands via passport limits"
866
+
867
+ **Likelihood:** Low (enterprises understand global is correct)
868
+
869
+ **Impact:** Medium (UX confusion)
870
+
871
+ ### Opportunities
872
+
873
+ **Opportunity 1: "Install first" becomes best practice**
874
+
875
+ **Scenario:** OpenClaw docs recommend "Install APort before installing skills"
876
+
877
+ **Action:**
878
+ - PR to OpenClaw docs (security best practices)
879
+ - Reach out to OpenClaw team
880
+ - Show: 7.1% malicious skills = need protection
881
+
882
+ **Value:** Massive (default recommendation = huge adoption)
883
+
884
+ **Opportunity 2: ClawHub featured/verified badge**
885
+
886
+ **Scenario:** ClawHub adds "security verified" or "featured" badge, APort gets it
887
+
888
+ **Action:**
889
+ - Apply for verification program
890
+ - Submit security audit results
891
+ - Highlight: VirusTotal scanning now exists (Feb 2026)
892
+
893
+ **Value:** High (credibility + visibility)
894
+
895
+ **Opportunity 3: Gen partnership**
896
+
897
+ **Scenario:** Gen refers users to APort for enforcement
898
+
899
+ **Action:**
900
+ - Reach out to Gen partnership team
901
+ - Propose: "Gen Trust Hub scans → recommend APort for enforcement"
902
+ - Co-marketing
903
+
904
+ **Value:** Very High (access to their user base)
905
+
906
+ ---
907
+
908
+ ## Part 10: Recommendations
909
+
910
+ ### Priority 1: Publish to Skill Marketplaces (HIGH IMPACT)
911
+
912
+ **Action items:**
913
+
914
+ 1. **ClawHub submission** (This week)
915
+ - Submit `skills/aport-agent-guardrail/SKILL.md`
916
+ - Category: Security / Infrastructure
917
+ - Description: "Install before any skills to protect your agent"
918
+ - Target: Top 10 security skills
919
+
920
+ 2. **Skills.sh submission** (This week)
921
+ - Package: `@aporthq/aport-agent-guardrails`
922
+ - Update npm package description for Skills.sh
923
+ - Target: Top 20 overall
924
+
925
+ 3. **Awesome lists PRs** (This week)
926
+ - VoltAgent/awesome-openclaw-skills
927
+ - e2b-dev/awesome-ai-agents
928
+ - Jenqyang/Awesome-AI-Agents
929
+
930
+ **Expected outcome:**
931
+ - 1,000+ installs in first month
932
+ - Top 10 security skill on ClawHub
933
+ - Visibility to 100K+ developers
934
+
935
+ ### Priority 2: Position as "Install First" Skill (HIGH IMPACT)
936
+
937
+ **Messaging:**
938
+
939
+ **Tagline:** "Install APort before any skills to protect your agent."
940
+
941
+ **Narrative:**
942
+ > "283 malicious skills found on ClawHub (7.1% infection rate). Data exfiltration, unauthorized commands, and prompt injection are real threats. Install APort guardrails first, then install skills safely with pre-action authorization."
943
+
944
+ **CTA:**
945
+ ```bash
946
+ # Step 1: Protect your agent
947
+ npx @aporthq/aport-agent-guardrails
948
+
949
+ # Step 2: Install skills safely
950
+ openclaw skills install <any-skill>
951
+ ```
952
+
953
+ **Where to use:**
954
+ - Skill marketplace descriptions
955
+ - README.md (aport-agent-guardrails repo)
956
+ - Website (aport.io)
957
+ - Launch posts
958
+
959
+ ### Priority 3: Do NOT Build Per-Skill Authorization (LOW PRIORITY)
960
+
961
+ **Don't do:**
962
+ - ❌ Per-skill metadata for authorization
963
+ - ❌ "Skills declare agent_id"
964
+ - ❌ Opt-in authorization model
965
+
966
+ **Reasoning:**
967
+ - Breaks security model (bypassable)
968
+ - Wrong trust boundary
969
+ - Doesn't stop malicious skills
970
+
971
+ **Keep:**
972
+ - ✅ Global enforcement (platform plugin)
973
+ - ✅ Tool-level policies (current model)
974
+ - ✅ Context-aware granularity (evaluation rules)
975
+
976
+ ### Priority 4: Partner with Gen (MEDIUM IMPACT)
977
+
978
+ **Action:**
979
+ - Reach out to Gen partnership team
980
+ - Propose: "Gen scans, APort enforces"
981
+ - Co-marketing opportunity
982
+
983
+ **Email template:**
984
+ ```
985
+ Subject: Partnership: Gen Trust Hub + APort Enforcement
986
+
987
+ Hi Gen team,
988
+
989
+ Congrats on the Skills.sh partnership (Feb 17)!
990
+
991
+ I'm building APort — pre-action authorization for AI agents. We're complementary:
992
+ - Gen: Threat scanning (detect malicious skills)
993
+ - APort: Enforcement (block unauthorized actions)
994
+
995
+ Idea: When Gen flags a threat, recommend APort for enforcement layer.
996
+
997
+ Would you be open to a call?
998
+
999
+ Best,
1000
+ Uchi
1001
+ aport.io | github.com/aporthq/aport-agent-guardrails
1002
+ ```
1003
+
1004
+ ### Priority 5: OpenClaw Documentation PR (MEDIUM IMPACT)
1005
+
1006
+ **Action:**
1007
+ - PR to OpenClaw docs
1008
+ - Section: "Security Best Practices"
1009
+ - Content: "Install APort before skills to protect your agent"
1010
+
1011
+ **Outcome:**
1012
+ - Official endorsement
1013
+ - Default recommendation
1014
+ - Huge credibility boost
1015
+
1016
+ ---
1017
+
1018
+ ## Part 11: Comparison with Framework Support Plan
1019
+
1020
+ ### From `/Users/uchi/Downloads/projects/aport-agent-guardrails/docs/launch/FRAMEWORK_SUPPORT_PLAN.md`
1021
+
1022
+ **Current priorities:**
1023
+ 1. ✅ OpenClaw (shipped)
1024
+ 2. 🎯 LangChain (next)
1025
+ 3. 🎯 Cursor (next)
1026
+ 4. 🎯 CrewAI (next)
1027
+
1028
+ **How skills fit in:**
1029
+
1030
+ **Skills are a DISTRIBUTION channel for ALL frameworks.**
1031
+
1032
+ ```
1033
+ User finds APort on ClawHub (OpenClaw)
1034
+
1035
+ Installs: npx @aporthq/aport-agent-guardrails
1036
+
1037
+ Installer asks: Which framework?
1038
+
1039
+ User chooses: OpenClaw, LangChain, Cursor, etc.
1040
+
1041
+ Framework-specific setup runs
1042
+ ```
1043
+
1044
+ **Skills → Framework dispatcher → Multi-framework support**
1045
+
1046
+ **This is brilliant because:**
1047
+ - ✅ Skills.sh/ClawHub = discovery
1048
+ - ✅ `npx @aporthq/aport-agent-guardrails` = unified installer
1049
+ - ✅ Framework detection = works for any platform
1050
+ - ✅ "Install first" = applies to all frameworks
1051
+
1052
+ **Skills accelerate ALL framework integrations, not just OpenClaw.**
1053
+
1054
+ ### Updated Priorities
1055
+
1056
+ **Week 1-2 (Current):**
1057
+ - ✅ Ship SHIELD integration
1058
+ - 🆕 **Publish to ClawHub + Skills.sh**
1059
+ - 🆕 **PR to awesome lists**
1060
+
1061
+ **Week 3-4:**
1062
+ - Ship LangChain integration
1063
+ - Get to 1,000 installs (Skills.sh helps)
1064
+
1065
+ **Week 5-8:**
1066
+ - Ship CrewAI, Cursor integrations
1067
+ - 10,000 installs (ClawHub + Skills.sh combined)
1068
+
1069
+ **Skills distribution helps hit ALL framework targets faster.**
1070
+
1071
+ ---
1072
+
1073
+ ## Part 12: Final Verdict
1074
+
1075
+ ### Should APort Target Skills? YES.
1076
+
1077
+ **But not in the way you initially proposed.**
1078
+
1079
+ ### What TO DO
1080
+
1081
+ ✅ **1. Publish existing skill to marketplaces**
1082
+ - ClawHub (OpenClaw)
1083
+ - Skills.sh (Vercel)
1084
+ - Awesome lists
1085
+
1086
+ ✅ **2. Position as "install first" meta-skill**
1087
+ - "Protect your agent before installing skills"
1088
+ - Leverage 7.1% malicious skill statistic
1089
+ - Security wedge
1090
+
1091
+ ✅ **3. Keep global enforcement model**
1092
+ - Platform-level hooks (before_tool_call)
1093
+ - Cannot be bypassed
1094
+ - Tool-level policies (current model)
1095
+
1096
+ ✅ **4. Partner with Gen**
1097
+ - Gen scans, APort enforces
1098
+ - Complementary, not competitive
1099
+ - Co-marketing
1100
+
1101
+ ✅ **5. OpenClaw docs PR**
1102
+ - Security best practices section
1103
+ - Official recommendation
1104
+
1105
+ ### What NOT TO DO
1106
+
1107
+ ❌ **1. Per-skill authorization metadata**
1108
+ - Breaks security model
1109
+ - Bypassable
1110
+ - Wrong trust boundary
1111
+
1112
+ ❌ **2. Opt-in enforcement**
1113
+ - Skills without metadata unprotected
1114
+ - Doesn't stop malicious skills
1115
+
1116
+ ❌ **3. Build skill-specific policies**
1117
+ - Wrong granularity
1118
+ - Use context-aware policies instead
1119
+
1120
+ ### Expected Impact
1121
+
1122
+ **If executed well:**
1123
+ - **Month 1:** 1,000-5,000 installs
1124
+ - **Month 3:** 10,000+ installs
1125
+ - **Month 6:** Top 10 security skill on ClawHub
1126
+ - **Month 12:** 50,000+ installs, referenced in OpenClaw docs
1127
+
1128
+ **Skills are the DISTRIBUTION LAYER for APort.**
1129
+
1130
+ **Not the ARCHITECTURE LAYER.**
1131
+
1132
+ ---
1133
+
1134
+ ## Appendix A: Skills.sh Specifics
1135
+
1136
+ ### How to Publish to Skills.sh
1137
+
1138
+ **Format:** npm package with specific structure
1139
+
1140
+ **Requirements:**
1141
+ 1. npm package published
1142
+ 2. README.md with usage
1143
+ 3. Install: `npx skills add <package>`
1144
+
1145
+ **Your package already meets requirements:**
1146
+ - ✅ `@aporthq/aport-agent-guardrails` on npm
1147
+ - ✅ README.md exists
1148
+ - ✅ `npx @aporthq/aport-agent-guardrails` works
1149
+
1150
+ **Action:** Submit to Skills.sh registry (if submission process exists)
1151
+
1152
+ ### Competition: Gen Partnership
1153
+
1154
+ **Gen + Vercel (Feb 17, 2026):**
1155
+ - Agent Trust Hub
1156
+ - Security verification
1157
+ - Risk ratings for skills
1158
+
1159
+ **How APort is different:**
1160
+ - **Gen:** Scans skills for threats (static analysis, behavioral)
1161
+ - **APort:** Enforces pre-action authorization (runtime)
1162
+ - **Gen:** "Is this skill malicious?"
1163
+ - **APort:** "Can this agent run this command?"
1164
+
1165
+ **Complementary layers:**
1166
+ 1. Gen scans skill → flags threat
1167
+ 2. User installs skill anyway (trusts it)
1168
+ 3. Skill tries to run malicious command
1169
+ 4. APort blocks (pre-action authorization)
1170
+
1171
+ **Both needed. Not competitive.**
1172
+
1173
+ ---
1174
+
1175
+ ## Appendix B: Implementation Checklist
1176
+
1177
+ ### This Week (Feb 17-24)
1178
+
1179
+ - [ ] **ClawHub submission**
1180
+ - File: `skills/aport-agent-guardrail/SKILL.md` (already exists)
1181
+ - Action: Submit via OpenClaw CLI or web form
1182
+ - Target: Security category
1183
+
1184
+ - [ ] **Skills.sh listing**
1185
+ - Package: `@aporthq/aport-agent-guardrails` (already published)
1186
+ - Action: Ensure listed on skills.sh
1187
+ - Update: npm description for Skills.sh SEO
1188
+
1189
+ - [ ] **Awesome lists PRs**
1190
+ - VoltAgent/awesome-openclaw-skills (Security & Passwords)
1191
+ - e2b-dev/awesome-ai-agents
1192
+ - Jenqyang/Awesome-AI-Agents
1193
+
1194
+ - [ ] **Update messaging**
1195
+ - README.md: Add "install first" language
1196
+ - Website: Add ClawHub link
1197
+ - Social: "7.1% malicious skills" tweet
1198
+
1199
+ ### Next 2 Weeks (Feb 25 - Mar 10)
1200
+
1201
+ - [ ] **Gen partnership outreach**
1202
+ - Email Gen team
1203
+ - Propose co-marketing
1204
+ - "Gen scans, APort enforces"
1205
+
1206
+ - [ ] **OpenClaw docs PR**
1207
+ - Security best practices section
1208
+ - Link to APort skill
1209
+ - Position as recommended security layer
1210
+
1211
+ - [ ] **Monitor installs**
1212
+ - Track npm downloads
1213
+ - Track ClawHub installs (if metrics available)
1214
+ - Target: 1,000 installs
1215
+
1216
+ ### Month 2-3 (Mar - Apr)
1217
+
1218
+ - [ ] **Case studies**
1219
+ - "How APort blocked malicious ClawHub skill"
1220
+ - Real examples from users
1221
+ - Publish to blog + HN
1222
+
1223
+ - [ ] **Feature in security roundups**
1224
+ - Reach out to security researchers
1225
+ - Snyk, Cisco authors
1226
+ - "Tools to protect against malicious skills"
1227
+
1228
+ ---
1229
+
1230
+ ## Conclusion
1231
+
1232
+ **Skills are a HUGE opportunity for APort distribution.**
1233
+
1234
+ **But the model is:**
1235
+ - ✅ Skills = distribution channel (ClawHub, Skills.sh)
1236
+ - ✅ APort skill = installer/enforcer (global)
1237
+ - ❌ NOT per-skill authorization (breaks security)
1238
+
1239
+ **Action plan:**
1240
+ 1. Publish to ClawHub + Skills.sh (this week)
1241
+ 2. Position as "install first" (immediate)
1242
+ 3. Partner with Gen (reach out)
1243
+ 4. OpenClaw docs PR (this month)
1244
+
1245
+ **Expected outcome:**
1246
+ - 10K+ installs in 3 months
1247
+ - Top 10 security skill
1248
+ - Referenced in security guides
1249
+
1250
+ **Skills are NOT the product. They're the DISTRIBUTION LAYER for the product.**
1251
+
1252
+ **Ship it.**
1253
+
1254
+ ---
1255
+
1256
+ **Confidence: 8/10**
1257
+
1258
+ **The only reason it's not 10/10:** Gen partnership might become competitive (unknown). But even without Gen, ClawHub + Skills.sh distribution is worth it.
1259
+
1260
+ **Bottom line: Publish to skill marketplaces. Don't build per-skill auth.**