@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,237 @@
1
+ # Launch Readiness Checklist
2
+
3
+ **Status: ✅ READY FOR OPENCLAW ANNOUNCEMENT** (guardrail post only after execution gates below are met)
4
+
5
+ **Source of truth for launch:** [README.md](README.md) in this folder is the single entry point. [QUICK_LAUNCH_CHECKLIST.md](QUICK_LAUNCH_CHECKLIST.md) and [LAUNCH_STRATEGY_SUMMARY.md](LAUNCH_STRATEGY_SUMMARY.md) define timing, content, evidence, and final verification. Use them before posting.
6
+
7
+ ---
8
+
9
+ ## Where we are
10
+
11
+ Phase 1 (Local-Only MVP) and Phase 2 (Cloud/API integration) are implemented: OpenClaw plugin with `before_tool_call`, local + API evaluation, passport and policies. This repo is **~82/100** launch-ready; remaining items (audit chaining, npm publish, etc.) are post-announcement. Strategy and roadmap docs are in the **agent-passport** repo under `docs/openclaw/` (internal).
12
+
13
+ **Summary:** We have working OpenClaw integration (local + API), docs, examples, and tests. **User-facing setup:** one command `npx @aporthq/aport-agent-guardrails` (no clone); optional hosted passport via `npx @aporthq/aport-agent-guardrails <agent_id>`. Do not claim "5-minute setup, works today" until the guardrail execution gates below are satisfied and evidence (screenshot) is captured.
14
+
15
+ ---
16
+
17
+ ## ✅ Priority 1: Fix Remaining Test Issue (COMPLETED)
18
+
19
+ - [x] Fix blocked pattern custom validator test
20
+ - [x] Ensure all 4 new policy tests pass 100%
21
+ - [x] Security patterns working correctly
22
+ - [x] False positives resolved (git clone URL issue fixed)
23
+
24
+ **Status**: All tests passing! ✅
25
+
26
+ ---
27
+
28
+ ## ✅ Priority 2: Create OpenClaw Local Integration Guide (COMPLETED)
29
+
30
+ ### Documentation Created
31
+
32
+ - [x] **[OPENCLAW_LOCAL_INTEGRATION.md](OPENCLAW_LOCAL_INTEGRATION.md)** - Complete integration guide
33
+ - Quick start (5 minutes)
34
+ - Passport setup
35
+ - Policy files setup
36
+ - Verification script
37
+ - Integration examples (Python)
38
+ - Security features overview
39
+ - Testing guide
40
+ - Troubleshooting
41
+
42
+ - [x] **[openclaw-integration-example.py](../examples/openclaw-integration-example.py)** - Working example code
43
+ - Command verification examples
44
+ - MCP tool verification examples
45
+ - Complete OpenClaw integration example
46
+ - Error handling
47
+ - Ready to run
48
+
49
+ - [x] **README.md updated** - Highlights OpenClaw integration
50
+ - Quick start section
51
+ - What's protected
52
+ - Links to new documentation
53
+
54
+ **Status**: Complete! ✅
55
+
56
+ ---
57
+
58
+ ## ✅ Priority 3: Update Documentation (COMPLETED)
59
+
60
+ ### Documentation Updates
61
+
62
+ - [x] README.md - Added OpenClaw quick start
63
+ - [x] OPENCLAW_LOCAL_INTEGRATION.md - Complete guide created
64
+ - [x] ANNOUNCEMENT_GUIDE.md - Launch materials created
65
+ - [x] Example code - Python integration example
66
+
67
+ **Status**: Complete! ✅
68
+
69
+ ---
70
+
71
+ ## ✅ Priority 4: Announcement Materials (COMPLETED)
72
+
73
+ ### Materials Created
74
+
75
+ - [x] **[ANNOUNCEMENT_GUIDE.md](ANNOUNCEMENT_GUIDE.md)** - Complete announcement guide
76
+ - Key messages
77
+ - Tweet draft
78
+ - Blog post outline
79
+ - Demo script
80
+ - Code examples
81
+ - Performance metrics
82
+ - FAQ
83
+
84
+ **Status**: Complete! ✅
85
+
86
+ ---
87
+
88
+ ## 📋 What's Ready
89
+
90
+ ### ✅ Core Functionality
91
+
92
+ - [x] **Dual evaluation paths:** `aport-guardrail-bash.sh` (fully local, no API) and `aport-guardrail-api.sh` (APort API). Backward-compat: `aport-guardrail.sh`, `aport-guardrail-v2.sh`.
93
+ - [x] **API supports agent_id or passport:** Cloud mode (`APORT_AGENT_ID`) or local-passport mode (passport in request, not stored). Matches agent-passport verify endpoint.
94
+ - [x] **Configurable endpoint:** `APORT_API_URL` for self-hosted or private instance (e.g. `https://api.aport.io`). Test suite runs against API by default.
95
+ - [x] 4 OpenClaw policies implemented:
96
+ - `system.command.execute.v1` ✅
97
+ - `mcp.tool.execute.v1` ✅
98
+ - `agent.session.create.v1` ✅
99
+ - `agent.tool.register.v1` ✅
100
+ - [x] Security patterns (40+ built-in) ✅
101
+ - [x] Local-first support (passport file + optional API) ✅
102
+ - [x] Performance acceptable (sub-100ms API, sub-300ms local) ✅
103
+
104
+ ### ✅ Documentation
105
+
106
+ - [x] Integration guide ✅
107
+ - [x] Example code ✅
108
+ - [x] README updated ✅
109
+ - [x] Announcement guide ✅
110
+
111
+ ### ✅ Testing
112
+
113
+ - [x] All tests passing ✅
114
+ - [x] Security patterns tested ✅
115
+ - [x] Performance verified ✅
116
+
117
+ ---
118
+
119
+ ## 🚨 Guardrail execution gate (must pass before guardrail post)
120
+
121
+ **Do not post the guardrail launch until the local plugin path is bulletproof.** Claiming "5-minute setup, works today" requires:
122
+
123
+ - [x] **Passport allows normal commands:** Installer and wizard emit OAP-compliant passports (`spec_version: "oap/1.0"`, nested `limits["system.command.execute"]`); default `allowed_commands: ["*"]` so normal commands get ALLOW. Re-run wizard or use normalized passport for ALLOW. See [OPENCLAW_TOOLS_AND_POLICIES.md](OPENCLAW_TOOLS_AND_POLICIES.md).
124
+ - [ ] **Plugin config correct:** OpenClaw config (`openclaw.json` or `config.yaml`) points to the guardrail script (`guardrailScript`) and passport (`passportFile`) with correct paths. Local mode works without needing the cloud API. *(Verify on your machine.)*
125
+ - [x] **No policy denials for normal use:** Guardrail ALLOW for `mkdir test` / `ls` and DENY for `rm -rf /` with fixture or wizard-created passport. See [EVIDENCE_TERMINAL_CAPTURE.txt](EVIDENCE_TERMINAL_CAPTURE.txt).
126
+ - [x] **Messaging (if claimed):** Default passport from wizard now includes `messaging.send` capability and `limits["messaging.message.send"]` so messaging guardrails work out of the box; no capability errors when sending a message.
127
+ - [x] **Evidence artifact captured:** Terminal ALLOW/DENY captured in [EVIDENCE_TERMINAL_CAPTURE.txt](EVIDENCE_TERMINAL_CAPTURE.txt). For the post, use a screenshot of the same commands (or this transcript); save as `evidence-allow-deny.png` in this folder if desired.
128
+
129
+ **API / hosted mode (launch promises both):** Verify in addition to local:
130
+ - Run `./tests/test-api-evaluator.sh` (uses `APORT_API_URL` / https://api.aport.io by default).
131
+ - Run `./tests/test-remote-passport-api.sh` when a local API or api.aport.io is available (agent_id–only path).
132
+ - Hosted flow: `npx @aporthq/aport-agent-guardrails <agent_id>` configures plugin for API mode; smoke test runs after setup.
133
+
134
+ Once all are checked, re-run [launch/QUICK_LAUNCH_CHECKLIST.md](QUICK_LAUNCH_CHECKLIST.md) and post.
135
+
136
+ ---
137
+
138
+ ## 📸 Evidence and repo sanity
139
+
140
+ - **Screenshot:** Terminal ALLOW/DENY transcript in [EVIDENCE_TERMINAL_CAPTURE.txt](EVIDENCE_TERMINAL_CAPTURE.txt). For the guardrail post, use a screenshot of that output (or run the same commands and capture). Save as `evidence-allow-deny.png` in this folder for the post.
141
+ - **Repo & public links:** Confirm GitHub repo is public and these links resolve (when repo is public):
142
+ - Repo: https://github.com/aporthq/aport-agent-guardrails
143
+ - README: https://github.com/aporthq/aport-agent-guardrails/blob/main/README.md
144
+ - QuickStart: https://github.com/aporthq/aport-agent-guardrails/blob/main/docs/QUICKSTART_OPENCLAW_PLUGIN.md
145
+ - Plugin README: https://github.com/aporthq/aport-agent-guardrails/blob/main/extensions/openclaw-aport/README.md
146
+ - **Docs:** README references the improved docs and QuickStart; [QUICKSTART_OPENCLAW_PLUGIN.md](../QUICKSTART_OPENCLAW_PLUGIN.md) has been tested. Call out known gaps in README if any (e.g. macOS-only, Node 18+).
147
+
148
+ ---
149
+
150
+ ## 📅 Launch sequencing (from launch strategy)
151
+
152
+ 1. **Valentine post first** — Already posted. If it stalled, engage communities before dropping the guardrail post.
153
+ 2. **Guardrail post 8–24h later** — Only after execution gate above is satisfied and screenshot is ready.
154
+ 3. **LinkedIn** — Same day as guardrail or +24h; more formal, production/security angle.
155
+ 4. **Monitor** — Reply within 2–4h, seed Discord/Slack, watch stars/issues (see [launch/QUICK_LAUNCH_CHECKLIST.md](launch/QUICK_LAUNCH_CHECKLIST.md)).
156
+
157
+ ---
158
+
159
+ ## 🚀 Ready to Launch!
160
+
161
+ ### What You Have
162
+
163
+ 1. **Working Implementation**
164
+ - Generic evaluator ✅
165
+ - 4 OpenClaw policies ✅
166
+ - Security patterns ✅
167
+ - Local API server ✅
168
+
169
+ 2. **Documentation**
170
+ - Integration guide ✅
171
+ - Example code ✅
172
+ - Announcement materials ✅
173
+ - Launch strategy and quick checklist in `docs/launch/` ✅
174
+
175
+ 3. **Performance**
176
+ - Sub-300ms P95 ✅
177
+ - 100% success rate ✅
178
+
179
+ ### Next Steps
180
+
181
+ 1. **Satisfy execution gate** (see above) and capture screenshot.
182
+ 2. **Review & test**
183
+ - Check [OPENCLAW_LOCAL_INTEGRATION.md](OPENCLAW_LOCAL_INTEGRATION.md)
184
+ - Run `./tests/test-api-evaluator.sh` (uses `APORT_API_URL=https://api.aport.io` by default)
185
+ - Run example: `python examples/openclaw-integration-example.py`
186
+ - Verify all links in README and docs
187
+ 3. **Announce**
188
+ - Use [launch/QUICK_LAUNCH_CHECKLIST.md](launch/QUICK_LAUNCH_CHECKLIST.md) and [launch/LAUNCH_STRATEGY_SUMMARY.md](launch/LAUNCH_STRATEGY_SUMMARY.md) (and [ANNOUNCEMENT_GUIDE.md](ANNOUNCEMENT_GUIDE.md) for messaging)
189
+ - Post guardrail only after gate is met; then post on social, share with OpenClaw community
190
+
191
+ ### Post-announcement (optional polish)
192
+
193
+ - Audit log chaining (SHA-256), rate-limit enforcement, `aport-renew-passport.sh`.
194
+ - Distribution: publish to npm, Homebrew, Docker, reusable GitHub Action.
195
+ - UPGRADE_TO_CLOUD.md, preset passport templates.
196
+
197
+ ---
198
+
199
+ ## 📊 Performance Summary
200
+
201
+ | Metric | Value | Status |
202
+ |--------|-------|--------|
203
+ | P95 Latency | 268ms | ✅ Acceptable |
204
+ | Mean Latency | 178ms | ✅ Good |
205
+ | Success Rate | 100% | ✅ Perfect |
206
+ | Security Patterns | 40+ | ✅ Comprehensive |
207
+ | Policies | 4 | ✅ Complete |
208
+
209
+ ---
210
+
211
+ ## 🎯 Key Features to Highlight
212
+
213
+ 1. **Local-first or API** — Use built-in bash evaluator (no network) or APort API (cloud / self-hosted via `APORT_API_URL`).
214
+ 2. **Agent_id or passport** — API supports registry lookup or send passport in request (not stored).
215
+ 3. **40+ security patterns** — Built-in protection (command injection, path traversal, etc.).
216
+ 4. **4 OpenClaw policies** — system.command.execute, mcp.tool.execute, agent.session.create, agent.tool.register.
217
+ 5. **Self-hosted friendly** — Point to your own endpoint (e.g. `https://api.aport.io`).
218
+ 6. **5-minute setup** — Integration guide + example code.
219
+
220
+ ---
221
+
222
+ ## ✅ Final Checklist
223
+
224
+ - [x] Implementation complete
225
+ - [x] Tests passing
226
+ - [x] Documentation complete
227
+ - [x] Examples working
228
+ - [x] Performance verified
229
+ - [x] Announcement materials ready
230
+ - [x] **Guardrail execution gate passed** (passport OAP-compliant; ALLOW/DENY evidence in [EVIDENCE_TERMINAL_CAPTURE.txt](EVIDENCE_TERMINAL_CAPTURE.txt); default passport includes messaging)
231
+ - [ ] **Repo sanity checked** (repo public; links above resolve; README/QuickStart accurate; known gaps called out if any)
232
+
233
+ **Status: 🚀 READY TO ANNOUNCE** once execution gate and evidence are done. Then use [launch/QUICK_LAUNCH_CHECKLIST.md](launch/QUICK_LAUNCH_CHECKLIST.md) for final verification before the guardrail post.
234
+
235
+ ---
236
+
237
+ **Valentine post:** Already live. **Guardrail post:** Publish only after the guardrail runs flawlessly on your machine and you have the screenshot. Then you're set. 🎉
@@ -0,0 +1,464 @@
1
+ # Launch Strategy Summary: Improved Posts
2
+
3
+ **Status:** Ready to post
4
+ **Created:** 2026-02-15
5
+ **Recommended timing:** Valentine post TODAY, Guardrail post 8-24h later
6
+
7
+ ---
8
+
9
+ ## What Changed from Original Drafts
10
+
11
+ ### Original Issues (DRAFT_POST_VALENTINE.md & DRAFT_POST_GUARDRAIL.md)
12
+
13
+ ❌ **Not tech-focused enough** - Generic story without implementation details
14
+ ❌ **Missing the "how"** - No actual stack, commands, or architecture
15
+ ❌ **Too marketing-y** - Sounded like a launch announcement, not a builder story
16
+ ❌ **Didn't set up the guardrail need** - Weak bridge from Valentine → product
17
+ ❌ **No specifics** - What broke? What commands? What limits?
18
+
19
+ ### Improved Version (POST_1_VALENTINE_IMPROVED.md & POST_2_GUARDRAIL_IMPROVED.md)
20
+
21
+ ✅ **Deep technical details** - Actual bash commands, cron setup, UPS tracking script
22
+ ✅ **Real stack documentation** - OpenClaw + WhatsApp + R2 + cron workflow
23
+ ✅ **Specific problems** - "Message tool was chatty," no command restrictions
24
+ ✅ **Builder voice** - "I'm a builder, so I automated it" (genuine, not salesy)
25
+ ✅ **Natural product bridge** - Problems emerged from real use → guardrails solve it
26
+ ✅ **Actionable implementation** - Code snippets, terminal output, exact limits
27
+
28
+ ---
29
+
30
+ ## Why the New Approach Works
31
+
32
+ ### Based on Successful OpenClaw Posts (2025-2026 Analysis)
33
+
34
+ **Pattern from viral OpenClaw stories:**
35
+
36
+ 1. **Real outcome upfront** - "She said it was memorable" = social proof
37
+ 2. **Technical depth matters** - Show actual commands, not abstract concepts
38
+ 3. **One relatable problem** - "Message was chatty" = everyone's experienced this
39
+ 4. **Human quote** - Wife's message = emotional anchor
40
+ 5. **One-sentence product tie** - "So we built X" without heavy pitch
41
+ 6. **Clear next step** - "Next post: shipping it"
42
+
43
+ **Examples that worked:**
44
+ - User who built a website "from my phone while putting baby to sleep" (outcome + tech stack)
45
+ - Crypto trading story (controversial but viral because of specific numbers + real outcome)
46
+ - Car negotiation bot (specific use case + what it actually did)
47
+
48
+ **What didn't work:**
49
+ - Generic "AI is amazing" posts
50
+ - Marketing announcements without technical detail
51
+ - Stories without real outcomes or specific problems
52
+
53
+ ---
54
+
55
+ ## Post 1: Valentine Story - What's Different
56
+
57
+ ### Original Draft:
58
+ ```
59
+ "I wanted this Valentine's to feel special and a bit automated..."
60
+ [Generic description of sending messages and web pages]
61
+ [Brief mention of issues]
62
+ ```
63
+
64
+ ### Improved Version:
65
+ ```bash
66
+ # Setup script created all the cron jobs
67
+ ./setup-valentine-final.sh
68
+
69
+ # 9am Friday: "Will you be my Valentine?" + web page link
70
+ # 12pm Friday: Romantic message
71
+ # When UPS delivered: "48 roses on the way up!" (script-triggered)
72
+ # [Full timeline with specific times]
73
+ ```
74
+
75
+ **Why it's better:**
76
+ - Shows ACTUAL code/commands
77
+ - Explains the UPS tracking trigger (bash loop polling API)
78
+ - Details the R2 hosting, Spotify embeds, photo timelines
79
+ - Specific technical problem: "Message sent to +1... Status: delivered ✓"
80
+ - Security angle emerges naturally: "Could run ANY command"
81
+
82
+ ---
83
+
84
+ ## Post 2: Guardrail Launch - What's Different
85
+
86
+ ### Original Draft:
87
+ ```
88
+ "We're shipping APort for OpenClaw..."
89
+ [General description of guardrails]
90
+ [Feature list]
91
+ ```
92
+
93
+ ### Improved Version:
94
+ ```bash
95
+ # The plugin calls this before EVERY tool
96
+ ~/.openclaw/.skills/aport-guardrail.sh system.command.execute '{"command":"mkdir test"}'
97
+
98
+ # Decision: ALLOW → tool runs
99
+ # Decision: DENY → tool blocked, reason logged
100
+ ```
101
+
102
+ **With table:**
103
+ | Tool Category | Policy | Example Limits |
104
+ |---------------|--------|----------------|
105
+ | System commands | `system.command.execute.v1` | Allowlist: `mkdir`, `npm`, `git`<br>Blocked: `rm -rf`, `sudo` |
106
+
107
+ **Why it's better:**
108
+ - Shows actual guardrail invocation
109
+ - Specific limits (not "command allowlist" but actual commands)
110
+ - 40+ blocked patterns listed
111
+ - "Every call = fresh check" addresses caching question preemptively
112
+ - Technical differentiation: platform-level enforcement, not prompts
113
+
114
+ ---
115
+
116
+ ## Recommended Posting Strategy
117
+
118
+ ### Timeline
119
+
120
+ **Day 1 (Today/Tomorrow Morning):**
121
+ ```
122
+ 8-10am ET: Post Valentine story (X Article)
123
+ - Monitor for engagement
124
+ - Reply to early comments
125
+ - Share to relevant Discord/Slack channels
126
+ ```
127
+
128
+ **Day 2 (8-24h after Valentine):**
129
+ ```
130
+ Morning: Post Guardrail launch (X Regular Post)
131
+ Same day: Post LinkedIn version (more formal)
132
+ - Pin Guardrail post to profile
133
+ - Reply to technical questions
134
+ - Share GitHub repo stats
135
+ ```
136
+
137
+ **Day 3-7:**
138
+ ```
139
+ - Monitor GitHub stars/clones
140
+ - Answer setup questions
141
+ - Awesome repos: Submit PRs to 6 curated lists (see docs/launch/AWESOME_REPOS.md)
142
+ - Optional: Demo video or technical thread
143
+ ```
144
+
145
+ ---
146
+
147
+ ### Platform-Specific Strategy
148
+
149
+ #### X/Twitter
150
+
151
+ **Valentine Post:**
152
+ - **Format:** Article (better for narrative flow)
153
+ - **Length:** 1200-1500 words (current draft is ~1400)
154
+ - **Images:** 1-2 screenshots (terminal or generic diagram)
155
+ - **Hashtags:** Max 2 (`#OpenClaw` `#AIAgents`)
156
+ - **Time:** Morning (8-10am ET) for best reach
157
+
158
+ **Guardrail Post:**
159
+ - **Format:** Regular post or 3-tweet thread (NOT Article)
160
+ - **Length:** 280 chars per tweet or ~800 words single post
161
+ - **Images:** 1 screenshot (terminal showing ALLOW/DENY)
162
+ - **Hashtags:** `#OpenClaw` `#AISecurity` `#AgentGuardrails`
163
+ - **Time:** 8-24h after Valentine post
164
+
165
+ #### LinkedIn
166
+
167
+ **When:** Same day as Guardrail post or +24h
168
+ **Tone:** Slightly more formal, emphasize production/security angle
169
+ **Angle:** "Same pattern we see in production: agent access + prompt ≠ security"
170
+ **Length:** 1000-1200 words
171
+ **Hashtags:** `#AIAutomation` `#OpenClaw` `#AIEngineering` `#AISecurity`
172
+
173
+ ---
174
+
175
+ ## Key Messages to Maintain
176
+
177
+ ### Valentine Post (Personal → Problem)
178
+
179
+ 1. **I'm a builder** - "I'm a builder, so I automated it"
180
+ 2. **Real outcome** - "She said it was memorable and precious"
181
+ 3. **Technical depth** - Actual cron jobs, UPS tracking, R2 hosting
182
+ 4. **Specific problems** - Message tool chatty, no limits
183
+ 5. **Security angle** - "Could run ANY command, access ANY file"
184
+ 6. **Bridge to product** - "So we built guardrails" (one sentence)
185
+
186
+ ### Guardrail Post (Solution → Ship)
187
+
188
+ 1. **Platform enforcement** - "before_tool_call hook, not prompts"
189
+ 2. **Every call = fresh check** - "No caching, no reusing decisions"
190
+ 3. **Real limits** - Specific commands, not abstract concepts
191
+ 4. **Local-first** - "Passport on your machine, optional API"
192
+ 5. **5-minute setup** - "./bin/openclaw - done"
193
+ 6. **Production-ready** - "40+ security patterns, tested"
194
+
195
+ ---
196
+
197
+ ## What NOT to Do
198
+
199
+ ### Privacy/Personal
200
+
201
+ ❌ **Don't share real web page URLs** - Keep surprise private
202
+ ❌ **Don't share actual message content** - Generic examples only
203
+ ❌ **Don't share wife's info** - Phone number, photos (unless she approves)
204
+ ❌ **Don't share gift locations** - Keep that personal
205
+
206
+ ### Marketing/Tone
207
+
208
+ ❌ **Don't oversell** - Let technical details speak for themselves
209
+ ❌ **Don't compare to competitors** - Focus on what you built
210
+ ❌ **Don't promise roadmap features** - Ship what exists today
211
+ ❌ **Don't use salesy language** - "revolutionary," "game-changing," etc.
212
+
213
+ ### Technical
214
+
215
+ ❌ **Don't claim 100% security** - Guardrails are one layer
216
+ ❌ **Don't hide limitations** - Be honest about what works today
217
+ ❌ **Don't skip setup instructions** - Make it easy to try
218
+ ❌ **Don't ignore questions** - Reply to setup issues promptly
219
+
220
+ ---
221
+
222
+ ## Success Metrics
223
+
224
+ ### Immediate (24h)
225
+
226
+ **Valentine Post:**
227
+ - Target: 100+ likes, 20+ retweets
228
+ - Quality signal: Comments saying "this is cool" or asking about setup
229
+ - Best signal: Other builders sharing their agent stories
230
+
231
+ **Guardrail Post:**
232
+ - Target: 50+ GitHub stars in first 24h
233
+ - Quality signal: Setup questions, "how do I" comments
234
+ - Best signal: PRs or issues from early adopters
235
+
236
+ ### Week 1
237
+
238
+ **Engagement:**
239
+ - 200+ GitHub stars
240
+ - 10+ clones/forks
241
+ - 5+ issues or questions
242
+ - Mentions in AI/agent Discord servers
243
+
244
+ **Reach:**
245
+ - Quote tweets from OpenClaw community members
246
+ - Shares in relevant newsletters
247
+ - Cross-posts to Reddit (r/OpenClaw, r/LocalLLaMA)
248
+
249
+ ### Month 1
250
+
251
+ **Adoption:**
252
+ - 500+ GitHub stars
253
+ - 20+ active users (issues, discussions)
254
+ - 3-5 community contributions (PRs, policies)
255
+ - 1-2 case studies from users
256
+
257
+ ---
258
+
259
+ ## Image Placeholders - What to Use
260
+
261
+ ### Valentine Post
262
+
263
+ **Option 1 (Recommended):**
264
+ ```
265
+ Screenshot of: openclaw cron list | grep valentine
266
+ Shows: valentine-friday-0900, valentine-saturday-1300, etc.
267
+ Blur: Job IDs if they're sensitive
268
+ ```
269
+
270
+ **Option 2:**
271
+ ```
272
+ Terminal output from ./setup-valentine-final.sh
273
+ Shows: "✅ Scheduled valentine-friday-1200" (generic, no personal info)
274
+ ```
275
+
276
+ **Option 3:**
277
+ ```
278
+ Simple diagram in terminal or draw.io:
279
+ User → OpenClaw → [Cron] → WhatsApp
280
+
281
+ UPS API → Trigger
282
+ ```
283
+
284
+ **DO NOT USE:**
285
+ - Real web page screenshots or URLs
286
+ - Actual message content (even blurred)
287
+ - Wife's phone/photos
288
+ - Specific locations or gifts
289
+
290
+ ---
291
+
292
+ ### Guardrail Post
293
+
294
+ **Option 1 (Recommended):**
295
+ ```
296
+ Terminal showing:
297
+ $ aport-guardrail.sh system.command.execute '{"command":"mkdir test"}'
298
+ ✅ ALLOW - Decision ID: dec_abc123
299
+
300
+ $ aport-guardrail.sh system.command.execute '{"command":"rm -rf /"}'
301
+ ❌ DENY - Blocked pattern: rm -rf
302
+ ```
303
+
304
+ **Option 2:**
305
+ ```
306
+ Screenshot of passport.json showing:
307
+ {
308
+ "capabilities": ["system.command.execute"],
309
+ "limits": {
310
+ "system.command.execute": {
311
+ "allowed_commands": ["mkdir", "npm", "git"]
312
+ }
313
+ }
314
+ }
315
+ ```
316
+
317
+ **Option 3:**
318
+ ```
319
+ Screenshot of openclaw.json showing plugin config:
320
+ "plugins": {
321
+ "entries": {
322
+ "openclaw-aport": {
323
+ "enabled": true,
324
+ "config": { "mode": "local", ... }
325
+ }
326
+ }
327
+ }
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Guardrail readiness (must pass before guardrail post)
333
+
334
+ **Do not post the guardrail launch until the local plugin runs flawlessly.** Otherwise you cannot truthfully claim "5-minute setup, works today."
335
+
336
+ - Passport now defaults to `allowed_commands: ["*"]` and messaging is open at L0. No manual passport edits needed for normal setup; testers capture ALLOW/DENY screenshot and run E2E test (e.g. `make test`).
337
+ - Plugin config points to guardrail script and passport; local mode works without API errors.
338
+ - You can demo **ALLOW** (e.g. `mkdir test`) and **DENY** (e.g. `rm -rf /`) on demand. Then **capture the screenshot**—don't launch without it.
339
+
340
+ Full gate: [QUICK_LAUNCH_CHECKLIST.md](QUICK_LAUNCH_CHECKLIST.md) (Guardrail execution gate) and [../LAUNCH_READINESS_CHECKLIST.md](../LAUNCH_READINESS_CHECKLIST.md) (evidence + repo sanity).
341
+
342
+ ---
343
+
344
+ ## Pre-Flight Checklist
345
+
346
+ ### Before Posting Valentine Story
347
+
348
+ - [ ] Choose Article or Regular Post (Article recommended)
349
+ - [ ] Add ONE screenshot (terminal recommended, no personal info)
350
+ - [ ] Remove ALL placeholders from text
351
+ - [ ] Test formatting (line breaks, code blocks work correctly)
352
+ - [ ] Verify: NO real web URLs, NO wife's personal info
353
+ - [ ] Check: Wife is okay with posting about this (even anonymized)
354
+ - [ ] Schedule Guardrail post for 8-24h later
355
+
356
+ ### Before Posting Guardrail
357
+
358
+ - [ ] Valentine post is live and has initial engagement
359
+ - [ ] Replace all GitHub URLs with real links
360
+ - [ ] Test that all links work (QUICKSTART, plugin README)
361
+ - [ ] Add ONE screenshot (ALLOW/DENY terminal recommended)
362
+ - [ ] Verify repo is public and README is updated
363
+ - [ ] Check that docs/QUICKSTART_OPENCLAW_PLUGIN.md exists and is accurate
364
+ - [ ] Test formatting (bash blocks, JSON, tables)
365
+ - [ ] Have LinkedIn version ready to post same day
366
+
367
+ ### After Posting Both
368
+
369
+ - [ ] Pin Guardrail post to profile
370
+ - [ ] Reply to comments within 2-4h
371
+ - [ ] Monitor GitHub for stars/issues
372
+ - [ ] Share in relevant Discord/Slack channels
373
+ - [ ] Prepare follow-up content (demo video, technical thread)
374
+
375
+ ---
376
+
377
+ ## Quick Answer Template for Common Questions
378
+
379
+ Copy-paste these when people ask:
380
+
381
+ **Q: "How do I set this up?"**
382
+ ```
383
+ 5-minute setup:
384
+
385
+ git clone https://github.com/aporthq/aport-agent-guardrails
386
+ cd aport-agent-guardrails
387
+ ./bin/openclaw
388
+
389
+ Follow prompts, done. Full guide: [QUICKSTART link]
390
+ ```
391
+
392
+ **Q: "Does this slow down the agent?"**
393
+ ```
394
+ Sub-300ms for local mode. Every call is fresh (no caching), so you get current passport state. P95: 268ms.
395
+ ```
396
+
397
+ **Q: "Can the agent bypass this?"**
398
+ ```
399
+ No. Runs at platform level via `before_tool_call` hook. Agent never sees the guardrail—just gets allowed/denied.
400
+ ```
401
+
402
+ **Q: "What if I need to allow a custom command?"**
403
+ ```
404
+ Edit ~/.openclaw/passport.json:
405
+ "allowed_commands": ["mkdir", "npm", "YOUR_COMMAND"]
406
+
407
+ Next tool call checks new state. Takes 30 seconds.
408
+ ```
409
+
410
+ **Q: "Does this work with [other framework]?"**
411
+ ```
412
+ OpenClaw plugin ships today. Generic evaluator works anywhere (Node.js, Python, bash). See docs/IMPLEMENTING_YOUR_OWN_EVALUATOR.md for integration.
413
+ ```
414
+
415
+ ---
416
+
417
+ ## Final Recommendation
418
+
419
+ ### Post Valentine story TODAY or tomorrow morning (8-10am ET)
420
+ **Why:** Sets context, establishes credibility, shows real use case
421
+
422
+ ### Post Guardrail 8-24h later
423
+ **Why:** Gives Valentine post time to get engagement, creates anticipation
424
+
425
+ ### Use improved drafts, not originals
426
+ **Why:** Technical depth + builder voice resonates better in 2025-2026 OpenClaw community
427
+
428
+ ### Post on LinkedIn same day as Guardrail
429
+ **Why:** Different audience, more professional angle, extends reach
430
+
431
+ ### Prepare for follow-up content
432
+ **Why:** Demo video, technical thread, case studies keep momentum
433
+
434
+ ### Submit to awesome lists (Day 2–3)
435
+ **Why:** Discovery and backlinks. See [AWESOME_REPOS.md](AWESOME_REPOS.md) for the 6 repos (e2b-dev/awesome-ai-agents, Jenqyang/Awesome-AI-Agents, VoltAgent/awesome-openclaw-skills, rohitg00/awesome-openclaw, hesamsheikh/awesome-openclaw-usecases, SamurAIGPT/awesome-openclaw) and suggested entry text.
436
+
437
+ ---
438
+
439
+ ## Success Pattern
440
+
441
+ **What you're doing:**
442
+
443
+ Day 1: "I built something fun with OpenClaw [Valentine]"
444
+ - Establishes: You're a builder, you ship, you have real use cases
445
+ - Shows: Technical depth, actual implementation
446
+ - Reveals: Problem (no guardrails)
447
+
448
+ Day 2: "Here's the solution [Guardrails]"
449
+ - Delivers: Production-ready fix for the problem
450
+ - Shows: 5-minute setup, works today
451
+ - Invites: Try it, contribute, share
452
+
453
+ Day 3-7: "Here's how it works under the hood [Technical content]"
454
+ - Deepens: Community engagement
455
+ - Builds: Contributor base
456
+ - Establishes: Technical leadership
457
+
458
+ ---
459
+
460
+ **This positions you as: Builder → Problem-solver → Thought leader**
461
+
462
+ **Not as: Marketer → Sales pitch → Vendor**
463
+
464
+ The Valentine story is genuine, the problem is real, the solution is shipped. That's the winning formula.