@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.
- package/LICENSE +217 -0
- package/README.md +481 -0
- package/bin/agent-guardrails +133 -0
- package/bin/aport-create-passport.sh +444 -0
- package/bin/aport-cursor-hook.sh +90 -0
- package/bin/aport-guardrail-api.sh +108 -0
- package/bin/aport-guardrail-bash.sh +394 -0
- package/bin/aport-guardrail-v2.sh +5 -0
- package/bin/aport-guardrail.sh +5 -0
- package/bin/aport-resolve-paths.sh +71 -0
- package/bin/aport-status.sh +276 -0
- package/bin/frameworks/crewai.sh +49 -0
- package/bin/frameworks/cursor.sh +95 -0
- package/bin/frameworks/langchain.sh +48 -0
- package/bin/frameworks/n8n.sh +36 -0
- package/bin/frameworks/openclaw.sh +19 -0
- package/bin/lib/allowlist.sh +18 -0
- package/bin/lib/common.sh +28 -0
- package/bin/lib/config.sh +46 -0
- package/bin/lib/constants.sh +232 -0
- package/bin/lib/detect.sh +65 -0
- package/bin/lib/error.sh +269 -0
- package/bin/lib/passport.sh +19 -0
- package/bin/lib/templates/.gitkeep +1 -0
- package/bin/lib/templates/config.yaml +6 -0
- package/bin/lib/validation.sh +206 -0
- package/bin/openclaw +660 -0
- package/docs/ADDING_A_FRAMEWORK.md +87 -0
- package/docs/AGENTS.md.example +40 -0
- package/docs/CODE_REVIEW.md +192 -0
- package/docs/DEPLOYMENT_READINESS.md +81 -0
- package/docs/FAQ_SECURITY_SCANNERS.md +373 -0
- package/docs/FRAMEWORK_ROADMAP.md +41 -0
- package/docs/HOSTED_PASSPORT_SETUP.md +362 -0
- package/docs/IMPLEMENTING_YOUR_OWN_EVALUATOR.md +433 -0
- package/docs/OPENCLAW_COMPATIBILITY.md +73 -0
- package/docs/OPENCLAW_LOCAL_INTEGRATION.md +596 -0
- package/docs/OPENCLAW_TOOLS_AND_POLICIES.md +54 -0
- package/docs/QUICKSTART.md +470 -0
- package/docs/QUICKSTART_OPENCLAW_PLUGIN.md +470 -0
- package/docs/README.md +28 -0
- package/docs/RELEASE.md +87 -0
- package/docs/REPO_LAYOUT.md +47 -0
- package/docs/SKILLS_ECOSYSTEM_ANALYSIS_FEB17.md +1260 -0
- package/docs/TOOL_POLICY_MAPPING.md +46 -0
- package/docs/UPGRADE.md +46 -0
- package/docs/VERIFICATION_METHODS.md +97 -0
- package/docs/assets/README.md +8 -0
- package/docs/assets/porter.svg +54 -0
- package/docs/development/ERROR_CODES.md +616 -0
- package/docs/frameworks/GITHUB_ISSUE_PROPOSALS.md +1105 -0
- package/docs/frameworks/crewai.md +114 -0
- package/docs/frameworks/cursor.md +159 -0
- package/docs/frameworks/langchain.md +72 -0
- package/docs/frameworks/n8n.md +40 -0
- package/docs/frameworks/openclaw.md +40 -0
- package/docs/launch/ADD_APORT_AWESOME_LISTS_INSTRUCTIONS.md +146 -0
- package/docs/launch/ANNOUNCEMENT_GUIDE.md +266 -0
- package/docs/launch/AWESOME_REPOS.md +53 -0
- package/docs/launch/CURSOR_VSCODE_HOOKS_RESEARCH.md +77 -0
- package/docs/launch/DEMO_TERMINAL_OUTPUT.txt +48 -0
- package/docs/launch/DRY_AND_PLAN_CHECKLIST.md +47 -0
- package/docs/launch/EVIDENCE_README.md +61 -0
- package/docs/launch/EVIDENCE_TERMINAL_CAPTURE.txt +10 -0
- package/docs/launch/FRAMEWORK_SUPPORT_PLAN.md +1640 -0
- package/docs/launch/LAUNCH_READINESS_CHECKLIST.md +237 -0
- package/docs/launch/LAUNCH_STRATEGY_SUMMARY.md +464 -0
- package/docs/launch/OPENCLAW_FEEDBACK_AND_FIXES.md +85 -0
- package/docs/launch/POST_1_VALENTINE_IMPROVED.md +233 -0
- package/docs/launch/POST_2_GUARDRAIL_IMPROVED.md +369 -0
- package/docs/launch/PRE_LAUNCH_FIXES.md +766 -0
- package/docs/launch/QUICK_LAUNCH_CHECKLIST.md +400 -0
- package/docs/launch/READINESS_SUMMARY.md +262 -0
- package/docs/launch/README.md +68 -0
- package/docs/launch/USER_STORIES.md +327 -0
- package/docs/launch/scripts/add-aport-awesome-pr.sh +69 -0
- package/docs/operations/MONITORING.md +588 -0
- package/docs/reviews/2026-02-18-staff-review.md +268 -0
- package/extensions/openclaw-aport/README.md +415 -0
- package/extensions/openclaw-aport/index.js +625 -0
- package/extensions/openclaw-aport/openclaw-aport.js +7 -0
- package/extensions/openclaw-aport/openclaw.plugin.json +46 -0
- package/extensions/openclaw-aport/package.json +36 -0
- package/extensions/openclaw-aport/test.js +307 -0
- package/external/aport-policies/README.md +363 -0
- package/external/aport-policies/agent.session.create.v1/README.md +345 -0
- package/external/aport-policies/agent.session.create.v1/policy.json +162 -0
- package/external/aport-policies/agent.tool.register.v1/README.md +361 -0
- package/external/aport-policies/agent.tool.register.v1/policy.json +172 -0
- package/external/aport-policies/code.release.publish.v1/README.md +51 -0
- package/external/aport-policies/code.release.publish.v1/policy.json +121 -0
- package/external/aport-policies/code.repository.merge.v1/README.md +287 -0
- package/external/aport-policies/code.repository.merge.v1/express.example.js +332 -0
- package/external/aport-policies/code.repository.merge.v1/fastapi.example.py +370 -0
- package/external/aport-policies/code.repository.merge.v1/policy.json +162 -0
- package/external/aport-policies/data.export.create.v1/README.md +226 -0
- package/external/aport-policies/data.export.create.v1/express.example.js +172 -0
- package/external/aport-policies/data.export.create.v1/fastapi.example.py +165 -0
- package/external/aport-policies/data.export.create.v1/policy.json +133 -0
- package/external/aport-policies/data.report.ingest.v1/README.md +134 -0
- package/external/aport-policies/data.report.ingest.v1/express.example.js +105 -0
- package/external/aport-policies/data.report.ingest.v1/minimal-example.js +68 -0
- package/external/aport-policies/data.report.ingest.v1/policy.json +174 -0
- package/external/aport-policies/finance.crypto.trade.v1/README.md +146 -0
- package/external/aport-policies/finance.crypto.trade.v1/express.example.js +109 -0
- package/external/aport-policies/finance.crypto.trade.v1/minimal-example.js +65 -0
- package/external/aport-policies/finance.crypto.trade.v1/policy.json +176 -0
- package/external/aport-policies/finance.payment.charge.v1/README.md +326 -0
- package/external/aport-policies/finance.payment.charge.v1/express.example.js +250 -0
- package/external/aport-policies/finance.payment.charge.v1/fastapi.example.py +227 -0
- package/external/aport-policies/finance.payment.charge.v1/minimal-example.js +64 -0
- package/external/aport-policies/finance.payment.charge.v1/policy.json +224 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/contexts.jsonl +12 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/expected.jsonl +12 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/passport.instance.json +42 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/passport.template.json +40 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/payments-charge-policy.test.js +817 -0
- package/external/aport-policies/finance.payment.charge.v1/tests/test_payments_charge_policy.py +486 -0
- package/external/aport-policies/finance.payment.payout.v1/README.md +78 -0
- package/external/aport-policies/finance.payment.payout.v1/policy.json +181 -0
- package/external/aport-policies/finance.payment.refund.v1/README.md +275 -0
- package/external/aport-policies/finance.payment.refund.v1/express.example.js +167 -0
- package/external/aport-policies/finance.payment.refund.v1/fastapi.example.py +136 -0
- package/external/aport-policies/finance.payment.refund.v1/minimal-example.js +183 -0
- package/external/aport-policies/finance.payment.refund.v1/policy.json +216 -0
- package/external/aport-policies/finance.payment.refund.v1/tests/refunds-policy.test.js +924 -0
- package/external/aport-policies/finance.payment.refund.v1/tests/test_refunds_policy.py +778 -0
- package/external/aport-policies/finance.transaction.execute.v1/README.md +309 -0
- package/external/aport-policies/finance.transaction.execute.v1/express.example.js +261 -0
- package/external/aport-policies/finance.transaction.execute.v1/fastapi.example.py +231 -0
- package/external/aport-policies/finance.transaction.execute.v1/minimal-example.js +78 -0
- package/external/aport-policies/finance.transaction.execute.v1/policy.json +189 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/contexts.jsonl +12 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/expected.jsonl +12 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/passport.instance.json +42 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/passport.template.json +42 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/test_transactions_policy.py +214 -0
- package/external/aport-policies/finance.transaction.execute.v1/tests/transactions-policy.test.js +306 -0
- package/external/aport-policies/governance.data.access.v1/README.md +292 -0
- package/external/aport-policies/governance.data.access.v1/express.example.js +321 -0
- package/external/aport-policies/governance.data.access.v1/fastapi.example.py +279 -0
- package/external/aport-policies/governance.data.access.v1/minimal-example.js +65 -0
- package/external/aport-policies/governance.data.access.v1/policy.json +208 -0
- package/external/aport-policies/governance.data.access.v1/tests/contexts.jsonl +12 -0
- package/external/aport-policies/governance.data.access.v1/tests/data-access-policy.test.js +308 -0
- package/external/aport-policies/governance.data.access.v1/tests/expected.jsonl +12 -0
- package/external/aport-policies/governance.data.access.v1/tests/passport.instance.json +56 -0
- package/external/aport-policies/governance.data.access.v1/tests/passport.template.json +56 -0
- package/external/aport-policies/governance.data.access.v1/tests/test_data_access_policy.py +214 -0
- package/external/aport-policies/legal.contract.review.v1/README.md +109 -0
- package/external/aport-policies/legal.contract.review.v1/policy.json +378 -0
- package/external/aport-policies/legal.contract.review.v1/tests/legal-contract-review-policy.test.js +609 -0
- package/external/aport-policies/legal.contract.review.v1/tests/passport.template.json +49 -0
- package/external/aport-policies/mcp.tool.execute.v1/README.md +301 -0
- package/external/aport-policies/mcp.tool.execute.v1/policy.json +141 -0
- package/external/aport-policies/messaging.message.send.v1/README.md +230 -0
- package/external/aport-policies/messaging.message.send.v1/express.example.js +183 -0
- package/external/aport-policies/messaging.message.send.v1/fastapi.example.py +193 -0
- package/external/aport-policies/messaging.message.send.v1/policy.json +144 -0
- package/external/aport-policies/policy-template.json +107 -0
- package/external/aport-policies/system.command.execute.v1/README.md +275 -0
- package/external/aport-policies/system.command.execute.v1/policy.json +146 -0
- package/external/aport-spec/CONTRIBUTING.md +273 -0
- package/external/aport-spec/LICENSE +21 -0
- package/external/aport-spec/README.md +168 -0
- package/external/aport-spec/conformance/README.md +294 -0
- package/external/aport-spec/conformance/cases/data.export.v1/contexts/allow_users.json +6 -0
- package/external/aport-spec/conformance/cases/data.export.v1/contexts/deny_pii.json +6 -0
- package/external/aport-spec/conformance/cases/data.export.v1/expected/allow_users.decision.json +19 -0
- package/external/aport-spec/conformance/cases/data.export.v1/expected/deny_pii.decision.json +19 -0
- package/external/aport-spec/conformance/cases/data.export.v1/passports/template.json +29 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/allow_50usd.json +9 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/deny_150usd.json +9 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/contexts/deny_currency.json +9 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/allow_50usd.decision.json +19 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/deny_150usd.decision.json +19 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/expected/deny_currency.decision.json +19 -0
- package/external/aport-spec/conformance/cases/payments.refunds.v1/passports/template.json +42 -0
- package/external/aport-spec/conformance/package.json +44 -0
- package/external/aport-spec/conformance/pnpm-lock.yaml +642 -0
- package/external/aport-spec/conformance/src/cases.ts +371 -0
- package/external/aport-spec/conformance/src/ed25519.ts +167 -0
- package/external/aport-spec/conformance/src/jcs.ts +85 -0
- package/external/aport-spec/conformance/src/runner.ts +533 -0
- package/external/aport-spec/conformance/src/validators.ts +185 -0
- package/external/aport-spec/conformance/test-runner.js +315 -0
- package/external/aport-spec/conformance/tsconfig.json +21 -0
- package/external/aport-spec/error-schema.json +192 -0
- package/external/aport-spec/index.json +12 -0
- package/external/aport-spec/integrations/clawmoat/README.md +12 -0
- package/external/aport-spec/integrations/shield/README.md +245 -0
- package/external/aport-spec/integrations/shield/adapters/index.js +116 -0
- package/external/aport-spec/integrations/shield/adapters/system-command-execute.js +133 -0
- package/external/aport-spec/integrations/shield/test/README.md +58 -0
- package/external/aport-spec/integrations/shield/test/shield.md +40 -0
- package/external/aport-spec/integrations/shield/test/test-shield-to-verify.js +274 -0
- package/external/aport-spec/metrics-schema.json +504 -0
- package/external/aport-spec/oap/CHANGELOG.md +54 -0
- package/external/aport-spec/oap/VERSION.md +40 -0
- package/external/aport-spec/oap/capability-registry.md +229 -0
- package/external/aport-spec/oap/conformance.md +257 -0
- package/external/aport-spec/oap/decision-schema.json +114 -0
- package/external/aport-spec/oap/examples/context.refund.usd.50.json +9 -0
- package/external/aport-spec/oap/examples/decision.allow.sample.json +20 -0
- package/external/aport-spec/oap/examples/decision.deny.sample.json +23 -0
- package/external/aport-spec/oap/examples/passport.instance.v1.json +50 -0
- package/external/aport-spec/oap/examples/passport.template.v1.json +71 -0
- package/external/aport-spec/oap/oap-spec.md +426 -0
- package/external/aport-spec/oap/passport-schema.json +396 -0
- package/external/aport-spec/oap/security.md +213 -0
- package/external/aport-spec/oap/vc/context-oap-v1.jsonld +137 -0
- package/external/aport-spec/oap/vc/examples/oap-decision-vc.json +37 -0
- package/external/aport-spec/oap/vc/examples/oap-passport-vc.json +68 -0
- package/external/aport-spec/oap/vc/tools/INTEGRATION.md +375 -0
- package/external/aport-spec/oap/vc/tools/README.md +278 -0
- package/external/aport-spec/oap/vc/tools/examples/decision-to-vc.js +66 -0
- package/external/aport-spec/oap/vc/tools/examples/passport-to-vc.js +83 -0
- package/external/aport-spec/oap/vc/tools/examples/vc-to-decision.js +77 -0
- package/external/aport-spec/oap/vc/tools/examples/vc-to-passport.js +94 -0
- package/external/aport-spec/oap/vc/tools/package.json +38 -0
- package/external/aport-spec/oap/vc/tools/pnpm-lock.yaml +472 -0
- package/external/aport-spec/oap/vc/tools/src/cli.ts +226 -0
- package/external/aport-spec/oap/vc/tools/src/crypto-utils.ts +427 -0
- package/external/aport-spec/oap/vc/tools/src/index.ts +653 -0
- package/external/aport-spec/oap/vc/tools/src/test.ts +148 -0
- package/external/aport-spec/oap/vc/tools/src/vp.ts +382 -0
- package/external/aport-spec/oap/vc/tools/test-simple.js +214 -0
- package/external/aport-spec/oap/vc/tools/tsconfig.json +19 -0
- package/external/aport-spec/oap/vc/vc-mapping.md +443 -0
- package/external/aport-spec/passport-schema.json +586 -0
- package/external/aport-spec/rate-limiting.md +136 -0
- package/external/aport-spec/transport-profile.md +325 -0
- package/external/aport-spec/webhook-spec.md +314 -0
- package/package.json +70 -0
- package/skills/aport-agent-guardrail/SKILL.md +314 -0
- package/src/evaluator.js +252 -0
- 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.
|