thumbgate 1.27.11 → 1.27.13

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 (131) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.well-known/llms.txt +2 -1
  3. package/.well-known/mcp/server-card.json +1 -1
  4. package/README.md +2 -4
  5. package/adapters/claude/.mcp.json +2 -2
  6. package/adapters/mcp/server-stdio.js +1 -1
  7. package/adapters/opencode/opencode.json +1 -1
  8. package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
  9. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
  10. package/bin/cli.js +78 -259
  11. package/config/builtin-lessons.json +23 -0
  12. package/config/gate-templates.json +0 -228
  13. package/config/gates/claim-verification.json +0 -18
  14. package/package.json +35 -25
  15. package/public/assets/brand/thumbgate-logo-transparent.svg +22 -0
  16. package/public/assets/brand/thumbgate-mark-inline-v3.svg +19 -0
  17. package/public/assets/brand/thumbgate-mark.svg +11 -5
  18. package/public/blog.html +0 -30
  19. package/public/brand/thumbgate-mark.svg +9 -5
  20. package/public/chatgpt-app.html +2 -2
  21. package/public/compare.html +2 -1
  22. package/public/dashboard.html +1 -1
  23. package/public/federal.html +1 -1
  24. package/public/index.html +95 -216
  25. package/public/learn.html +59 -35
  26. package/public/lessons.html +1 -1
  27. package/public/numbers.html +2 -2
  28. package/public/pro.html +7 -7
  29. package/scripts/aws-blocks-guardrails.js +228 -0
  30. package/scripts/cli-schema.js +22 -10
  31. package/scripts/dashboard-chat.js +2 -1
  32. package/scripts/document-intake.js +1 -49
  33. package/scripts/durability/step.js +3 -3
  34. package/scripts/gate-stats.js +5 -11
  35. package/scripts/gemini-embedding-policy.js +2 -1
  36. package/scripts/hook-stop-anti-claim.js +116 -184
  37. package/scripts/hosted-config.js +0 -12
  38. package/scripts/llm-client.js +187 -5
  39. package/scripts/plausible-domain-config.js +3 -1
  40. package/scripts/seo-gsd.js +240 -1
  41. package/scripts/tool-registry.js +2 -2
  42. package/scripts/vector-store.js +44 -0
  43. package/scripts/workspace-evolver.js +62 -2
  44. package/src/api/server.js +340 -131
  45. package/public/assets/brand/thumbgate-mark-inline.svg +0 -15
  46. package/public/compare/adopt-ai.html +0 -219
  47. package/public/compare/agentix-labs.html +0 -197
  48. package/public/compare/ai-experience-orchestration.html +0 -216
  49. package/public/compare/anthropic-claude-for-legal.html +0 -260
  50. package/public/compare/anthropic-containment.html +0 -280
  51. package/public/compare/arcade.html +0 -175
  52. package/public/compare/arcjet.html +0 -239
  53. package/public/compare/bumblebee.html +0 -307
  54. package/public/compare/claude-code-hooks.html +0 -294
  55. package/public/compare/databricks-unity-ai-gateway.html +0 -215
  56. package/public/compare/fallow.html +0 -351
  57. package/public/compare/heidi.html +0 -233
  58. package/public/compare/mem0.html +0 -342
  59. package/public/compare/oak-and-sparrow-gatekeeper.html +0 -289
  60. package/public/compare/rein.html +0 -236
  61. package/public/compare/sigmashake.html +0 -256
  62. package/public/compare/speclock.html +0 -342
  63. package/public/guides/agent-harness-optimization.html +0 -342
  64. package/public/guides/agentic-web-governance.html +0 -406
  65. package/public/guides/ai-agent-governance-sprint.html +0 -415
  66. package/public/guides/ai-agent-pre-action-approval-gates.html +0 -401
  67. package/public/guides/ai-agent-workflow-migration-checklist.html +0 -392
  68. package/public/guides/ai-deployment-readiness.html +0 -415
  69. package/public/guides/ai-mode-ads-agent-governance.html +0 -401
  70. package/public/guides/ai-search-topical-presence.html +0 -342
  71. package/public/guides/autoresearch-agent-safety.html +0 -342
  72. package/public/guides/background-agent-governance.html +0 -358
  73. package/public/guides/best-tools-stop-ai-agents-breaking-production.html +0 -363
  74. package/public/guides/browser-automation-safety.html +0 -342
  75. package/public/guides/chatgpt-ads-trust.html +0 -353
  76. package/public/guides/claude-code-feedback.html +0 -339
  77. package/public/guides/claude-code-prevent-repeated-mistakes.html +0 -161
  78. package/public/guides/claude-code-skills-guardrails.html +0 -343
  79. package/public/guides/claude-desktop.html +0 -356
  80. package/public/guides/code-knowledge-graph-guardrails.html +0 -365
  81. package/public/guides/codex-cli-guardrails.html +0 -339
  82. package/public/guides/cursor-agent-guardrails.html +0 -339
  83. package/public/guides/cursor-prevent-repeated-mistakes.html +0 -161
  84. package/public/guides/database-agent-safety.html +0 -406
  85. package/public/guides/deepseek-v4-runtime-guardrails.html +0 -346
  86. package/public/guides/developer-machine-supply-chain-guardrails.html +0 -358
  87. package/public/guides/gcp-mcp-guardrails.html +0 -147
  88. package/public/guides/gemini-cli-feedback-memory.html +0 -339
  89. package/public/guides/gpt-5-5-model-evaluation.html +0 -358
  90. package/public/guides/internal-ai-engineering-stack-guardrails.html +0 -348
  91. package/public/guides/long-running-agent-context-management.html +0 -346
  92. package/public/guides/mcp-tool-governance.html +0 -401
  93. package/public/guides/multica-thumbgate-setup.html +0 -134
  94. package/public/guides/native-messaging-host-security.html +0 -342
  95. package/public/guides/policy-engine-pre-action-gates.html +0 -346
  96. package/public/guides/pre-action-checks.html +0 -342
  97. package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +0 -342
  98. package/public/guides/prompt-tricks-to-workflow-rules.html +0 -365
  99. package/public/guides/proxy-pointer-rag-guardrails.html +0 -352
  100. package/public/guides/rag-precision-tuning-guardrails.html +0 -352
  101. package/public/guides/reasoning-compression-guardrails.html +0 -346
  102. package/public/guides/relational-knowledge-ai-recommendations.html +0 -342
  103. package/public/guides/roo-code-alternative-cline.html +0 -339
  104. package/public/guides/semantic-programmatic-seo-guardrails.html +0 -352
  105. package/public/guides/seo-agent-skills-guardrails.html +0 -344
  106. package/public/guides/stop-repeated-ai-agent-mistakes.html +0 -342
  107. package/public/learn/ac-dc-runtime-enforcement.html +0 -277
  108. package/public/learn/agent-harness-pattern.html +0 -181
  109. package/public/learn/agent-identity-connector-governance.html +0 -146
  110. package/public/learn/agent-swarms-shared-gates.html +0 -173
  111. package/public/learn/agentic-enterprise-context-brain.html +0 -117
  112. package/public/learn/agentic-os-team-governance.html +0 -146
  113. package/public/learn/ai-agent-governance.html +0 -158
  114. package/public/learn/ai-agent-persistent-memory.html +0 -211
  115. package/public/learn/anthropomorphic-claim-gates.html +0 -180
  116. package/public/learn/background-agent-control-layer.html +0 -184
  117. package/public/learn/claude-code-goal-with-rubrics.html +0 -205
  118. package/public/learn/codex-role-plugins-need-governance.html +0 -125
  119. package/public/learn/cost-aware-agent-gate-routing.html +0 -173
  120. package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +0 -157
  121. package/public/learn/deterministic-agent-workflows.html +0 -185
  122. package/public/learn/feedback-loop-vs-decision-layer.html +0 -283
  123. package/public/learn/from-prototype-to-production.html +0 -223
  124. package/public/learn/learn.css +0 -51
  125. package/public/learn/mcp-pre-action-checks-explained.html +0 -172
  126. package/public/learn/pretix-stripe-connect-marketplaces.html +0 -161
  127. package/public/learn/regulated-agent-execution-boundary.html +0 -196
  128. package/public/learn/spec-driven-development.html +0 -168
  129. package/public/learn/stop-ai-agent-force-push.html +0 -134
  130. package/public/learn/vibe-coding-safety-net.html +0 -142
  131. package/scripts/reddit-browser-notification-watch.js +0 -230
@@ -1,342 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Native Messaging Host Security | Audit Browser Bridges Before They Expand</title>
7
- <meta name="description" content="Native messaging hosts let browser extensions talk to local executables. That can be useful, but it also creates a persistent bridge outside the browser sand..." />
8
- <meta property="og:title" content="Native Messaging Host Security | Audit Browser Bridges Before They Expand" />
9
- <meta property="og:description" content="Native messaging hosts let browser extensions talk to local executables. That can be useful, but it also creates a persistent bridge outside the browser sand..." />
10
- <meta property="og:type" content="article" />
11
- <meta property="og:url" content="https://thumbgate.ai/guides/native-messaging-host-security" />
12
- <link rel="canonical" href="https://thumbgate.ai/guides/native-messaging-host-security" />
13
- <link rel="llm-context" href="/llm-context.md" type="text/markdown" />
14
- <link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
15
- <link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
16
- <meta property="og:image" content="/og.png" />
17
- <style>
18
- :root {
19
- --bg: #0a0a0b;
20
- --bg-raised: #111113;
21
- --bg-card: #161618;
22
- --line: #222225;
23
- --text: #e8e8ec;
24
- --muted: #8b8b96;
25
- --cyan: #22d3ee;
26
- --green: #4ade80;
27
- --red: #f87171;
28
- }
29
- * { box-sizing: border-box; }
30
- body {
31
- margin: 0;
32
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
33
- background: var(--bg);
34
- color: var(--text);
35
- line-height: 1.65;
36
- }
37
- a { color: var(--cyan); text-decoration: none; }
38
- a:hover { text-decoration: underline; }
39
- .container { max-width: 980px; margin: 0 auto; padding: 0 24px; }
40
- .topbar {
41
- position: sticky;
42
- top: 0;
43
- z-index: 20;
44
- backdrop-filter: blur(12px);
45
- background: rgba(10, 10, 11, 0.88);
46
- border-bottom: 1px solid var(--line);
47
- }
48
- .topbar .container {
49
- display: flex;
50
- justify-content: space-between;
51
- align-items: center;
52
- padding-top: 14px;
53
- padding-bottom: 14px;
54
- }
55
- .brand {
56
- font-weight: 700;
57
- color: var(--text);
58
- display: inline-flex;
59
- align-items: center;
60
- gap: 8px;
61
- text-decoration: none;
62
- }
63
- .brand .logo-mark { width: 28px; height: 28px; display: block; }
64
- .hero { padding: 72px 0 32px; }
65
- .eyebrow {
66
- display: inline-flex;
67
- align-items: center;
68
- gap: 8px;
69
- padding: 6px 12px;
70
- border-radius: 999px;
71
- border: 1px solid rgba(34, 211, 238, 0.22);
72
- background: rgba(34, 211, 238, 0.1);
73
- color: var(--cyan);
74
- text-transform: uppercase;
75
- letter-spacing: 0.08em;
76
- font-size: 12px;
77
- font-weight: 700;
78
- }
79
- h1 {
80
- font-size: clamp(34px, 5vw, 56px);
81
- line-height: 1.06;
82
- letter-spacing: -0.04em;
83
- margin: 16px 0;
84
- max-width: 760px;
85
- }
86
- .hero p {
87
- max-width: 720px;
88
- color: var(--muted);
89
- font-size: 18px;
90
- }
91
- .signal-row {
92
- display: flex;
93
- flex-wrap: wrap;
94
- gap: 12px;
95
- margin: 28px 0 0;
96
- }
97
- .signal-pill {
98
- display: inline-flex;
99
- align-items: center;
100
- gap: 8px;
101
- padding: 10px 14px;
102
- border-radius: 999px;
103
- border: 1px solid var(--line);
104
- background: var(--bg-raised);
105
- font-weight: 600;
106
- font-size: 14px;
107
- }
108
- .signal-pill.up {
109
- border-color: rgba(74, 222, 128, 0.28);
110
- color: #b8f7c8;
111
- background: rgba(74, 222, 128, 0.1);
112
- }
113
- .signal-pill.down {
114
- border-color: rgba(248, 113, 113, 0.28);
115
- color: #ffc0c0;
116
- background: rgba(248, 113, 113, 0.1);
117
- }
118
- .grid {
119
- display: grid;
120
- grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
121
- gap: 24px;
122
- padding-bottom: 72px;
123
- }
124
- .card, .detail-section, .sidebar-card {
125
- background: var(--bg-card);
126
- border: 1px solid var(--line);
127
- border-radius: 16px;
128
- }
129
- .card { padding: 24px; }
130
- .detail-section { padding: 24px; margin-bottom: 18px; }
131
- .detail-section h2 { margin: 0 0 12px; font-size: 24px; letter-spacing: -0.03em; }
132
- .detail-section p { color: var(--muted); }
133
- .detail-section ul, .card ul { padding-left: 18px; color: var(--muted); }
134
- .card h2 { margin-top: 0; }
135
- .sidebar {
136
- display: flex;
137
- flex-direction: column;
138
- gap: 18px;
139
- }
140
- .sidebar-card {
141
- padding: 20px;
142
- }
143
- /* Only the first sidebar card sticks. Stacking multiple stickies at the
144
- same top offset makes them overlap each other on scroll. The related-
145
- pages card flows normally below. */
146
- .sidebar-card:first-child {
147
- position: sticky;
148
- top: 84px;
149
- max-height: calc(100vh - 104px);
150
- overflow-y: auto;
151
- -webkit-overflow-scrolling: touch;
152
- }
153
- .proof-links {
154
- display: flex;
155
- flex-wrap: wrap;
156
- gap: 12px;
157
- margin-top: 16px;
158
- }
159
- .cta-button {
160
- display: inline-flex;
161
- align-items: center;
162
- justify-content: center;
163
- margin-top: 18px;
164
- padding: 12px 16px;
165
- border-radius: 10px;
166
- background: var(--cyan);
167
- color: #071116;
168
- font-weight: 700;
169
- text-decoration: none;
170
- }
171
- .faq-item {
172
- border-top: 1px solid var(--line);
173
- padding: 14px 0;
174
- }
175
- .faq-item summary {
176
- cursor: pointer;
177
- font-weight: 600;
178
- }
179
- .faq-item p {
180
- color: var(--muted);
181
- }
182
- .related-card {
183
- display: block;
184
- padding: 14px;
185
- border-radius: 12px;
186
- border: 1px solid var(--line);
187
- background: var(--bg-raised);
188
- margin-top: 12px;
189
- color: var(--text);
190
- }
191
- .related-label {
192
- display: block;
193
- color: var(--muted);
194
- font-size: 12px;
195
- text-transform: uppercase;
196
- letter-spacing: 0.08em;
197
- margin-bottom: 4px;
198
- }
199
- @media (max-width: 860px) {
200
- .grid {
201
- grid-template-columns: 1fr;
202
- }
203
- .sidebar-card:first-child {
204
- position: static;
205
- max-height: none;
206
- overflow: visible;
207
- }
208
- }
209
- </style>
210
- <script type="application/ld+json">
211
- {
212
- "@context": "https://schema.org",
213
- "@type": "TechArticle",
214
- "headline": "Native messaging host security for AI browser bridges",
215
- "description": "Native messaging hosts let browser extensions talk to local executables. That can be useful, but it also creates a persistent bridge outside the browser sand...",
216
- "about": [
217
- "claude code masterclass guardrails",
218
- "cursor prevent repeated mistakes",
219
- "claude code prevent repeated mistakes",
220
- "codex cli guardrails"
221
- ],
222
- "url": "https://thumbgate.ai/guides/native-messaging-host-security",
223
- "publisher": {
224
- "@type": "Organization",
225
- "name": "ThumbGate",
226
- "url": "https://thumbgate.ai"
227
- },
228
- "mainEntityOfPage": "https://thumbgate.ai/guides/native-messaging-host-security"
229
- }
230
- </script>
231
- <script type="application/ld+json">
232
- {
233
- "@context": "https://schema.org",
234
- "@type": "FAQPage",
235
- "mainEntity": [
236
- {
237
- "@type": "Question",
238
- "name": "Why does native messaging deserve a separate security review?",
239
- "acceptedAnswer": {
240
- "@type": "Answer",
241
- "text": "Because it lets a browser extension hand work to a local executable outside the browser sandbox. That is a different trust boundary than ordinary page automation or side-panel UI access."
242
- }
243
- },
244
- {
245
- "@type": "Question",
246
- "name": "How does ThumbGate help with native messaging host security?",
247
- "acceptedAnswer": {
248
- "@type": "Answer",
249
- "text": "ThumbGate audits known host locations, highlights AI/browser bridges, flags stale or missing host binaries, and gives teams an enforcement layer so future connector expansion requires explicit approval."
250
- }
251
- }
252
- ]
253
- }
254
- </script>
255
- </head>
256
- <body>
257
- <div class="topbar">
258
- <div class="container">
259
- <a class="brand" href="/"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
260
- <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a>
261
- </div>
262
- </div>
263
-
264
- <main class="container">
265
- <section class="hero">
266
- <div class="eyebrow">guide | native messaging host security</div>
267
- <h1>Native messaging host security for AI browser bridges</h1>
268
- <p>Native messaging hosts let browser extensions talk to local executables. That can be useful, but it also creates a persistent bridge outside the browser sandbox. ThumbGate audits those registrations and helps teams require explicit approval before they become part of the workflow.</p>
269
- <div class="signal-row">
270
- <div class="signal-pill up">👍 Thumbs up reinforces good behavior</div>
271
- <div class="signal-pill down">👎 Thumbs down blocks repeated mistakes</div>
272
- </div>
273
- </section>
274
-
275
- <section class="grid">
276
- <div>
277
- <div class="card">
278
- <h2>Why this page exists</h2>
279
- <ul><li>Native messaging is a real local capability boundary, not a harmless implementation detail.</li><li>A manifest can pre-authorize extension origins long before a human operator understands the blast radius.</li><li>ThumbGate turns native messaging review into an auditable operator workflow instead of an invisible local side effect.</li></ul>
280
- </div>
281
-
282
- <section class="detail-section">
283
- <h2>What native messaging hosts actually do</h2>
284
- <p>A native messaging host is a local manifest that tells a browser extension which executable it may launch on the operator machine. That bridge sits outside the browser sandbox, so it deserves the same review discipline teams use for deploy credentials or production write access.</p><p>The risk is not only the host binary itself. It is the combination of extension permissions, allowed origins, and whether the host remains registered for browsers the operator did not intentionally connect.</p>
285
-
286
- </section>
287
- <section class="detail-section">
288
- <h2>Signals ThumbGate audits</h2>
289
-
290
- <ul><li>Manifest files under browser-specific NativeMessagingHosts directories on macOS and Linux.</li><li>Allowed extension origins and extension-id fan-out per host registration.</li><li>Host binaries that are missing on disk, which leaves stale or broken registrations behind.</li><li>AI/browser bridge manifests registered for browsers not detected in the usual local install paths.</li></ul>
291
- </section>
292
- <section class="detail-section">
293
- <h2>The fastest operator action</h2>
294
- <p>Run npx thumbgate native-messaging-audit --json in the repo or workstation you govern. Review every AI browser bridge, remove anything you did not intentionally integrate, and keep browser-use in ask-before-acting mode until connector scope is explicit and revocable.</p>
295
-
296
- </section>
297
- <div class="detail-section">
298
- <h2>FAQ</h2>
299
-
300
- <details class="faq-item">
301
- <summary>Why does native messaging deserve a separate security review?</summary>
302
- <p>Because it lets a browser extension hand work to a local executable outside the browser sandbox. That is a different trust boundary than ordinary page automation or side-panel UI access.</p>
303
- </details>
304
- <details class="faq-item">
305
- <summary>How does ThumbGate help with native messaging host security?</summary>
306
- <p>ThumbGate audits known host locations, highlights AI/browser bridges, flags stale or missing host binaries, and gives teams an enforcement layer so future connector expansion requires explicit approval.</p>
307
- </details>
308
- </div>
309
- </div>
310
-
311
- <aside class="sidebar">
312
-
313
-
314
-
315
-
316
- <div class="sidebar-card">
317
- <h2>GSD execution brief</h2>
318
- <p>This page was prioritized because it captures high-intent demand around native messaging host security and feeds directly into ThumbGate's proof-led conversion path.</p>
319
- <p><strong>Opportunity score:</strong> 75</p>
320
- <p><strong>Primary persona:</strong> ai-engineer</p>
321
- <p><strong>Keyword cluster:</strong> claude code masterclass guardrails, cursor prevent repeated mistakes, claude code prevent repeated mistakes, codex cli guardrails</p>
322
- <p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
323
- <div class="proof-links"><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json" target="_blank" rel="noopener">Automation proof</a><a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub repository</a></div>
324
- <a class="cta-button" href="/checkout/pro?utm_source=website&amp;utm_medium=seo_page&amp;utm_campaign=guides_native-messaging-host-security&amp;cta_placement=seo_brief&amp;plan_id=pro" target="_blank" rel="noopener">Go Pro — $19/mo</a>
325
- </div>
326
- <div class="sidebar-card">
327
- <h2>Related pages</h2>
328
-
329
- <a class="related-card" href="/guides/browser-automation-safety">
330
- <span class="related-label">Related page</span>
331
- <strong>Browser automation safety needs explicit approval boundaries</strong>
332
- </a>
333
- <a class="related-card" href="/guides/pre-action-checks">
334
- <span class="related-label">Related page</span>
335
- <strong>What Are Pre-Action Checks?</strong>
336
- </a>
337
- </div>
338
- </aside>
339
- </section>
340
- </main>
341
- </body>
342
- </html>
@@ -1,346 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Policy Engines Need Pre-Action Gates for AI Agents | ThumbGate</title>
7
- <meta name="description" content="Policy engines, guardrail SDKs, and compliance APIs can decide whether an AI-agent action is allowed. ThumbGate enforces that decision locally before the tool runs." />
8
- <meta property="og:title" content="Policy Engines Need Pre-Action Gates for AI Agents | ThumbGate" />
9
- <meta property="og:description" content="Policy engines decide. ThumbGate enforces before shell, file, MCP, browser, deploy, or API actions run." />
10
- <meta property="og:type" content="article" />
11
- <meta property="og:url" content="https://thumbgate.ai/guides/policy-engine-pre-action-gates" />
12
- <link rel="canonical" href="https://thumbgate.ai/guides/policy-engine-pre-action-gates" />
13
- <link rel="llm-context" href="/llm-context.md" type="text/markdown" />
14
- <link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
15
- <link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
16
- <meta property="og:image" content="/og.png" />
17
- <style>
18
- :root {
19
- --bg: #0a0a0b;
20
- --bg-raised: #111113;
21
- --bg-card: #161618;
22
- --line: #222225;
23
- --text: #e8e8ec;
24
- --muted: #9b9ba6;
25
- --cyan: #22d3ee;
26
- --green: #4ade80;
27
- --red: #f87171;
28
- }
29
- * { box-sizing: border-box; }
30
- body {
31
- margin: 0;
32
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
33
- background: var(--bg);
34
- color: var(--text);
35
- line-height: 1.65;
36
- }
37
- a { color: var(--cyan); text-decoration: none; }
38
- a:hover { text-decoration: underline; }
39
- .container { max-width: 980px; margin: 0 auto; padding: 0 24px; }
40
- .topbar {
41
- position: sticky;
42
- top: 0;
43
- z-index: 20;
44
- backdrop-filter: blur(12px);
45
- background: rgba(10, 10, 11, 0.88);
46
- border-bottom: 1px solid var(--line);
47
- }
48
- .topbar .container {
49
- display: flex;
50
- justify-content: space-between;
51
- align-items: center;
52
- padding-top: 14px;
53
- padding-bottom: 14px;
54
- }
55
- .brand {
56
- display: inline-flex;
57
- gap: 8px;
58
- align-items: center;
59
- color: var(--text);
60
- font-weight: 700;
61
- }
62
- .logo-mark { width: 28px; height: 28px; display: block; }
63
- .hero { padding: 72px 0 32px; }
64
- .eyebrow {
65
- display: inline-flex;
66
- padding: 6px 12px;
67
- border-radius: 999px;
68
- border: 1px solid rgba(34, 211, 238, 0.22);
69
- background: rgba(34, 211, 238, 0.1);
70
- color: var(--cyan);
71
- text-transform: uppercase;
72
- letter-spacing: 0.08em;
73
- font-size: 12px;
74
- font-weight: 700;
75
- }
76
- h1 {
77
- max-width: 820px;
78
- margin: 16px 0;
79
- font-size: clamp(34px, 5vw, 56px);
80
- line-height: 1.06;
81
- letter-spacing: -0.04em;
82
- }
83
- .hero p {
84
- max-width: 760px;
85
- color: var(--muted);
86
- font-size: 18px;
87
- }
88
- .signal-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }
89
- .signal-pill {
90
- padding: 10px 14px;
91
- border-radius: 999px;
92
- border: 1px solid var(--line);
93
- background: var(--bg-raised);
94
- font-size: 14px;
95
- font-weight: 700;
96
- }
97
- .signal-pill.up { border-color: rgba(74, 222, 128, 0.28); color: #b8f7c8; background: rgba(74, 222, 128, 0.1); }
98
- .signal-pill.down { border-color: rgba(248, 113, 113, 0.28); color: #ffc0c0; background: rgba(248, 113, 113, 0.1); }
99
- .grid {
100
- display: grid;
101
- grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
102
- gap: 24px;
103
- padding-bottom: 72px;
104
- }
105
- .card, .detail-section, .sidebar-card {
106
- background: var(--bg-card);
107
- border: 1px solid var(--line);
108
- border-radius: 16px;
109
- }
110
- .card, .detail-section, .sidebar-card { padding: 24px; }
111
- .detail-section { margin-bottom: 18px; }
112
- .detail-section h2, .card h2, .sidebar-card h2 { margin: 0 0 12px; letter-spacing: -0.03em; }
113
- .detail-section p, .card p, .sidebar-card p, li { color: var(--muted); }
114
- ul { padding-left: 18px; }
115
- table { width: 100%; border-collapse: collapse; margin-top: 16px; }
116
- th, td { border: 1px solid var(--line); padding: 12px; vertical-align: top; text-align: left; }
117
- th { color: var(--text); background: var(--bg-raised); }
118
- code, pre {
119
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
120
- background: #0d1117;
121
- color: #d6deff;
122
- border: 1px solid var(--line);
123
- border-radius: 10px;
124
- }
125
- code { padding: 2px 6px; }
126
- pre { overflow-x: auto; padding: 16px; }
127
- .sidebar { display: flex; flex-direction: column; gap: 18px; }
128
- .sidebar-card:first-child {
129
- position: sticky;
130
- top: 84px;
131
- max-height: calc(100vh - 104px);
132
- overflow-y: auto;
133
- }
134
- .cta-button {
135
- display: inline-flex;
136
- justify-content: center;
137
- margin-top: 18px;
138
- padding: 12px 16px;
139
- border-radius: 10px;
140
- background: var(--cyan);
141
- color: #071116;
142
- font-weight: 700;
143
- }
144
- .related-card {
145
- display: block;
146
- padding: 14px;
147
- margin-top: 12px;
148
- border: 1px solid var(--line);
149
- border-radius: 12px;
150
- background: var(--bg-raised);
151
- color: var(--text);
152
- }
153
- .related-label {
154
- display: block;
155
- color: var(--muted);
156
- font-size: 12px;
157
- text-transform: uppercase;
158
- letter-spacing: 0.08em;
159
- }
160
- .faq-item { border-top: 1px solid var(--line); padding: 14px 0; }
161
- .faq-item summary { cursor: pointer; font-weight: 700; }
162
- @media (max-width: 860px) {
163
- .grid { grid-template-columns: 1fr; }
164
- .sidebar-card:first-child { position: static; max-height: none; }
165
- }
166
- </style>
167
- <script type="application/ld+json">
168
- {
169
- "@context": "https://schema.org",
170
- "@type": "TechArticle",
171
- "headline": "Policy Engines Need Pre-Action Gates for AI Agents",
172
- "description": "Policy engines, guardrail SDKs, and compliance APIs can decide whether an AI-agent action is allowed. ThumbGate enforces that decision locally before the tool runs.",
173
- "about": [
174
- "AI agent policy engine",
175
- "pre-action gates",
176
- "OPA agent guardrails",
177
- "Bedrock Guardrails agent tools",
178
- "Guardian SDK agent governance"
179
- ],
180
- "url": "https://thumbgate.ai/guides/policy-engine-pre-action-gates",
181
- "publisher": {
182
- "@type": "Organization",
183
- "name": "ThumbGate",
184
- "url": "https://thumbgate.ai"
185
- }
186
- }
187
- </script>
188
- <script type="application/ld+json">
189
- {
190
- "@context": "https://schema.org",
191
- "@type": "FAQPage",
192
- "mainEntity": [
193
- {
194
- "@type": "Question",
195
- "name": "Does ThumbGate replace a policy engine?",
196
- "acceptedAnswer": {
197
- "@type": "Answer",
198
- "text": "No. A policy engine decides whether an action is allowed. ThumbGate enforces that decision before the agent executes a shell, file, MCP, browser, deploy, or API action."
199
- }
200
- },
201
- {
202
- "@type": "Question",
203
- "name": "Can ThumbGate use Guardian SDK, Ethicore, OPA, or Bedrock Guardrails decisions?",
204
- "acceptedAnswer": {
205
- "@type": "Answer",
206
- "text": "Yes. ThumbGate's policy-engine adapter normalizes allow, block, and approval-required outputs from external policy engines, then applies local pre-action gates before execution."
207
- }
208
- },
209
- {
210
- "@type": "Question",
211
- "name": "Why not just log policy violations after the run?",
212
- "acceptedAnswer": {
213
- "@type": "Answer",
214
- "text": "Post-run logging proves what happened after damage is possible. Pre-action gates stop the risky action before it runs and preserve the evidence for audit."
215
- }
216
- }
217
- ]
218
- }
219
- </script>
220
- </head>
221
- <body>
222
- <header class="topbar">
223
- <div class="container">
224
- <a class="brand" href="/"><img class="logo-mark" src="/assets/brand/thumbgate-mark.svg" alt="" /> ThumbGate</a>
225
- <a href="/pricing">Pricing</a>
226
- </div>
227
- </header>
228
-
229
- <main class="container">
230
- <section class="hero">
231
- <span class="eyebrow">Policy engine adapter</span>
232
- <h1>Policy engines decide. ThumbGate enforces before the agent acts.</h1>
233
- <p>Guardian SDK, Ethicore-style policy layers, OPA, Bedrock Guardrails, and custom compliance APIs are useful decision systems. The missing piece is a deterministic local gate that catches the actual command, file edit, MCP call, browser action, deployment, or API request before it executes.</p>
234
- <div class="signal-row">
235
- <span class="signal-pill up">Use existing policy engines</span>
236
- <span class="signal-pill up">Normalize allow/block/review</span>
237
- <span class="signal-pill down">Do not rely on after-the-fact logs</span>
238
- </div>
239
- </section>
240
-
241
- <section class="grid">
242
- <div>
243
- <div class="card">
244
- <h2>The buyer objection</h2>
245
- <p>"We already have a policy engine." Good. ThumbGate should sit underneath it, not compete with it. Policy engines answer whether an action is compliant. ThumbGate makes that answer operational at the exact moment an AI agent is about to touch a real system.</p>
246
- </div>
247
-
248
- <section class="detail-section">
249
- <h2>Policy reasoning vs execution enforcement</h2>
250
- <table>
251
- <thead>
252
- <tr>
253
- <th>Layer</th>
254
- <th>What it does</th>
255
- <th>Failure if used alone</th>
256
- </tr>
257
- </thead>
258
- <tbody>
259
- <tr>
260
- <td>Policy engine</td>
261
- <td>Evaluates a rule, ontology, risk model, or compliance policy.</td>
262
- <td>The agent can still execute if the decision is not wired into the tool boundary.</td>
263
- </tr>
264
- <tr>
265
- <td>Audit log</td>
266
- <td>Records what the agent did and why it was allowed or denied.</td>
267
- <td>The record arrives after the risky action may already have run.</td>
268
- </tr>
269
- <tr>
270
- <td>ThumbGate</td>
271
- <td>Intercepts the concrete action locally before shell, file, MCP, deploy, browser, or API execution.</td>
272
- <td>It needs policy input for teams that already maintain centralized governance models.</td>
273
- </tr>
274
- </tbody>
275
- </table>
276
- </section>
277
-
278
- <section class="detail-section">
279
- <h2>Adapter contract</h2>
280
- <p>The adapter normalizes common policy-engine outputs into ThumbGate's enforcement shape.</p>
281
- <pre><code>{
282
- "decision": "block",
283
- "reason": "off-scope network egress",
284
- "policyId": "egress-001",
285
- "evidence": [
286
- { "ruleId": "egress-001", "reason": "curl to unknown host" }
287
- ]
288
- }</code></pre>
289
- <p>ThumbGate then treats that as a pre-action decision. If the policy says block, the wrapped tool does not execute. If the policy says allow but a local thumbs-down rule catches a repeated mistake, ThumbGate can still hard-block locally.</p>
290
- </section>
291
-
292
- <section class="detail-section">
293
- <h2>Where this helps teams</h2>
294
- <ul>
295
- <li>Enterprises that already have compliance policies but no AI-agent tool boundary.</li>
296
- <li>Platform teams exposing internal MCP tools to Claude Code, Cursor, Codex, Gemini CLI, OpenCode, or Letta agents.</li>
297
- <li>Security teams that need proof that a risky command was stopped before execution.</li>
298
- <li>Teams comparing policy SDKs, guardrails, and agent firewalls for production rollouts.</li>
299
- </ul>
300
- </section>
301
-
302
- <section class="detail-section">
303
- <h2>FAQ</h2>
304
- <details class="faq-item">
305
- <summary>Does ThumbGate replace a policy engine?</summary>
306
- <p>No. A policy engine decides whether an action is allowed. ThumbGate enforces that decision before the agent executes a shell, file, MCP, browser, deploy, or API action.</p>
307
- </details>
308
- <details class="faq-item">
309
- <summary>Can ThumbGate use Guardian SDK, Ethicore, OPA, or Bedrock Guardrails decisions?</summary>
310
- <p>Yes. The policy-engine adapter normalizes allow, block, and approval-required outputs from external policy engines, then applies local pre-action gates before execution.</p>
311
- </details>
312
- <details class="faq-item">
313
- <summary>Why not just log policy violations after the run?</summary>
314
- <p>Post-run logging proves what happened after damage is possible. Pre-action gates stop the risky action before it runs and preserve the evidence for audit.</p>
315
- </details>
316
- </section>
317
- </div>
318
-
319
- <aside class="sidebar">
320
- <div class="sidebar-card">
321
- <h2>Implementation path</h2>
322
- <p>Install ThumbGate, wrap the policy decision, and enforce the result before the agent's tool call runs.</p>
323
- <pre><code>npx thumbgate init</code></pre>
324
- <p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
325
- <a class="cta-button" href="/checkout/pro?utm_source=website&amp;utm_medium=seo_page&amp;utm_campaign=guides_policy_engine_pre_action_gates&amp;cta_placement=seo_brief&amp;plan_id=pro">Go Pro - $19/mo</a>
326
- </div>
327
- <div class="sidebar-card">
328
- <h2>Related pages</h2>
329
- <a class="related-card" href="/guides/mcp-tool-governance">
330
- <span class="related-label">Related page</span>
331
- <strong>MCP Tool Governance</strong>
332
- </a>
333
- <a class="related-card" href="/guides/ai-agent-pre-action-approval-gates">
334
- <span class="related-label">Related page</span>
335
- <strong>AI Agent Pre-Action Approval Gates</strong>
336
- </a>
337
- <a class="related-card" href="/guides/pretooluse-hooks-vs-advisory-prompt-rules">
338
- <span class="related-label">Related page</span>
339
- <strong>PreToolUse Hooks vs Advisory Prompt Rules</strong>
340
- </a>
341
- </div>
342
- </aside>
343
- </section>
344
- </main>
345
- </body>
346
- </html>