thumbgate 1.27.12 → 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 (132) 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/gate-templates.json +0 -228
  12. package/config/gates/claim-verification.json +0 -18
  13. package/package.json +35 -25
  14. package/public/assets/brand/thumbgate-logo-transparent.svg +22 -0
  15. package/public/assets/brand/thumbgate-mark-inline-v3.svg +19 -0
  16. package/public/assets/brand/thumbgate-mark.svg +11 -5
  17. package/public/blog.html +0 -30
  18. package/public/brand/thumbgate-mark.svg +9 -5
  19. package/public/chatgpt-app.html +2 -2
  20. package/public/compare.html +2 -1
  21. package/public/dashboard.html +1 -1
  22. package/public/federal.html +1 -1
  23. package/public/index.html +95 -216
  24. package/public/learn.html +59 -35
  25. package/public/lessons.html +1 -1
  26. package/public/numbers.html +2 -2
  27. package/public/pro.html +7 -7
  28. package/scripts/aws-blocks-guardrails.js +228 -0
  29. package/scripts/cli-schema.js +22 -10
  30. package/scripts/dashboard-chat.js +2 -1
  31. package/scripts/document-intake.js +1 -49
  32. package/scripts/durability/step.js +3 -3
  33. package/scripts/gate-stats.js +5 -11
  34. package/scripts/gates-engine.js +0 -49
  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/lesson-search.js +1 -15
  39. package/scripts/llm-client.js +187 -5
  40. package/scripts/plausible-domain-config.js +3 -1
  41. package/scripts/seo-gsd.js +240 -1
  42. package/scripts/tool-registry.js +2 -2
  43. package/scripts/vector-store.js +44 -0
  44. package/scripts/workspace-evolver.js +62 -2
  45. package/src/api/server.js +340 -131
  46. package/public/assets/brand/thumbgate-mark-inline.svg +0 -15
  47. package/public/compare/adopt-ai.html +0 -219
  48. package/public/compare/agentix-labs.html +0 -197
  49. package/public/compare/ai-experience-orchestration.html +0 -216
  50. package/public/compare/anthropic-claude-for-legal.html +0 -260
  51. package/public/compare/anthropic-containment.html +0 -280
  52. package/public/compare/arcade.html +0 -175
  53. package/public/compare/arcjet.html +0 -239
  54. package/public/compare/bumblebee.html +0 -307
  55. package/public/compare/claude-code-hooks.html +0 -294
  56. package/public/compare/databricks-unity-ai-gateway.html +0 -215
  57. package/public/compare/fallow.html +0 -351
  58. package/public/compare/heidi.html +0 -233
  59. package/public/compare/mem0.html +0 -342
  60. package/public/compare/oak-and-sparrow-gatekeeper.html +0 -289
  61. package/public/compare/rein.html +0 -236
  62. package/public/compare/sigmashake.html +0 -256
  63. package/public/compare/speclock.html +0 -342
  64. package/public/guides/agent-harness-optimization.html +0 -342
  65. package/public/guides/agentic-web-governance.html +0 -406
  66. package/public/guides/ai-agent-governance-sprint.html +0 -415
  67. package/public/guides/ai-agent-pre-action-approval-gates.html +0 -401
  68. package/public/guides/ai-agent-workflow-migration-checklist.html +0 -392
  69. package/public/guides/ai-deployment-readiness.html +0 -415
  70. package/public/guides/ai-mode-ads-agent-governance.html +0 -401
  71. package/public/guides/ai-search-topical-presence.html +0 -342
  72. package/public/guides/autoresearch-agent-safety.html +0 -342
  73. package/public/guides/background-agent-governance.html +0 -358
  74. package/public/guides/best-tools-stop-ai-agents-breaking-production.html +0 -363
  75. package/public/guides/browser-automation-safety.html +0 -342
  76. package/public/guides/chatgpt-ads-trust.html +0 -353
  77. package/public/guides/claude-code-feedback.html +0 -339
  78. package/public/guides/claude-code-prevent-repeated-mistakes.html +0 -161
  79. package/public/guides/claude-code-skills-guardrails.html +0 -343
  80. package/public/guides/claude-desktop.html +0 -356
  81. package/public/guides/code-knowledge-graph-guardrails.html +0 -365
  82. package/public/guides/codex-cli-guardrails.html +0 -339
  83. package/public/guides/cursor-agent-guardrails.html +0 -339
  84. package/public/guides/cursor-prevent-repeated-mistakes.html +0 -161
  85. package/public/guides/database-agent-safety.html +0 -406
  86. package/public/guides/deepseek-v4-runtime-guardrails.html +0 -346
  87. package/public/guides/developer-machine-supply-chain-guardrails.html +0 -358
  88. package/public/guides/gcp-mcp-guardrails.html +0 -147
  89. package/public/guides/gemini-cli-feedback-memory.html +0 -339
  90. package/public/guides/gpt-5-5-model-evaluation.html +0 -358
  91. package/public/guides/internal-ai-engineering-stack-guardrails.html +0 -348
  92. package/public/guides/long-running-agent-context-management.html +0 -346
  93. package/public/guides/mcp-tool-governance.html +0 -401
  94. package/public/guides/multica-thumbgate-setup.html +0 -134
  95. package/public/guides/native-messaging-host-security.html +0 -342
  96. package/public/guides/policy-engine-pre-action-gates.html +0 -346
  97. package/public/guides/pre-action-checks.html +0 -342
  98. package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +0 -342
  99. package/public/guides/prompt-tricks-to-workflow-rules.html +0 -365
  100. package/public/guides/proxy-pointer-rag-guardrails.html +0 -352
  101. package/public/guides/rag-precision-tuning-guardrails.html +0 -352
  102. package/public/guides/reasoning-compression-guardrails.html +0 -346
  103. package/public/guides/relational-knowledge-ai-recommendations.html +0 -342
  104. package/public/guides/roo-code-alternative-cline.html +0 -339
  105. package/public/guides/semantic-programmatic-seo-guardrails.html +0 -352
  106. package/public/guides/seo-agent-skills-guardrails.html +0 -344
  107. package/public/guides/stop-repeated-ai-agent-mistakes.html +0 -342
  108. package/public/learn/ac-dc-runtime-enforcement.html +0 -277
  109. package/public/learn/agent-harness-pattern.html +0 -181
  110. package/public/learn/agent-identity-connector-governance.html +0 -146
  111. package/public/learn/agent-swarms-shared-gates.html +0 -173
  112. package/public/learn/agentic-enterprise-context-brain.html +0 -117
  113. package/public/learn/agentic-os-team-governance.html +0 -146
  114. package/public/learn/ai-agent-governance.html +0 -158
  115. package/public/learn/ai-agent-persistent-memory.html +0 -211
  116. package/public/learn/anthropomorphic-claim-gates.html +0 -180
  117. package/public/learn/background-agent-control-layer.html +0 -184
  118. package/public/learn/claude-code-goal-with-rubrics.html +0 -205
  119. package/public/learn/codex-role-plugins-need-governance.html +0 -125
  120. package/public/learn/cost-aware-agent-gate-routing.html +0 -173
  121. package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +0 -157
  122. package/public/learn/deterministic-agent-workflows.html +0 -185
  123. package/public/learn/feedback-loop-vs-decision-layer.html +0 -283
  124. package/public/learn/from-prototype-to-production.html +0 -223
  125. package/public/learn/learn.css +0 -51
  126. package/public/learn/mcp-pre-action-checks-explained.html +0 -172
  127. package/public/learn/pretix-stripe-connect-marketplaces.html +0 -161
  128. package/public/learn/regulated-agent-execution-boundary.html +0 -196
  129. package/public/learn/spec-driven-development.html +0 -168
  130. package/public/learn/stop-ai-agent-force-push.html +0 -134
  131. package/public/learn/vibe-coding-safety-net.html +0 -142
  132. 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>