thumbgate 1.14.1 → 1.16.0

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 (150) hide show
  1. package/.claude-plugin/marketplace.json +6 -6
  2. package/.claude-plugin/plugin.json +3 -3
  3. package/.well-known/llms.txt +5 -5
  4. package/.well-known/mcp/server-card.json +1 -1
  5. package/README.md +60 -35
  6. package/adapters/chatgpt/openapi.yaml +118 -2
  7. package/adapters/claude/.mcp.json +2 -2
  8. package/adapters/mcp/server-stdio.js +217 -84
  9. package/adapters/opencode/opencode.json +1 -1
  10. package/bench/prompt-eval-suite.json +5 -1
  11. package/bin/cli.js +211 -8
  12. package/config/enforcement.json +59 -7
  13. package/config/evals/agent-safety-eval.json +338 -22
  14. package/config/gates/default.json +33 -0
  15. package/config/gates/routine.json +43 -0
  16. package/config/github-about.json +3 -3
  17. package/config/mcp-allowlists.json +4 -0
  18. package/config/merge-quality-checks.json +2 -1
  19. package/config/model-candidates.json +131 -0
  20. package/openapi/openapi.yaml +118 -2
  21. package/package.json +70 -51
  22. package/public/blog.html +7 -7
  23. package/public/codex-plugin.html +13 -7
  24. package/public/compare.html +29 -23
  25. package/public/dashboard.html +105 -12
  26. package/public/guide.html +28 -28
  27. package/public/index.html +233 -97
  28. package/public/learn.html +87 -20
  29. package/public/lessons.html +26 -2
  30. package/public/numbers.html +271 -0
  31. package/public/pro.html +89 -19
  32. package/scripts/agent-audit-trace.js +55 -0
  33. package/scripts/agent-memory-lifecycle.js +96 -0
  34. package/scripts/agent-readiness-plan.js +118 -0
  35. package/scripts/agentic-data-pipeline.js +21 -1
  36. package/scripts/agents-sdk-sandbox-plan.js +57 -0
  37. package/scripts/ai-org-governance.js +98 -0
  38. package/scripts/ai-search-distribution.js +43 -0
  39. package/scripts/artifact-agent-plan.js +81 -0
  40. package/scripts/billing.js +27 -8
  41. package/scripts/cli-feedback.js +2 -1
  42. package/scripts/cli-schema.js +60 -5
  43. package/scripts/code-mode-mcp-plan.js +71 -0
  44. package/scripts/commercial-offer.js +1 -1
  45. package/scripts/context-engine.js +1 -2
  46. package/scripts/context-manager.js +4 -1
  47. package/scripts/contextfs.js +214 -32
  48. package/scripts/dashboard-render-spec.js +1 -1
  49. package/scripts/dashboard.js +275 -9
  50. package/scripts/decision-journal.js +13 -3
  51. package/scripts/document-workflow-governance.js +62 -0
  52. package/scripts/enterprise-agent-rollout.js +34 -0
  53. package/scripts/experience-replay-governance.js +69 -0
  54. package/scripts/export-hf-dataset.js +1 -1
  55. package/scripts/feedback-loop.js +141 -9
  56. package/scripts/feedback-to-rules.js +17 -23
  57. package/scripts/gates-engine.js +4 -6
  58. package/scripts/growth-campaigns.js +49 -0
  59. package/scripts/harness-selector.js +145 -1
  60. package/scripts/hybrid-supervisor-agent.js +64 -0
  61. package/scripts/inference-cache-policy.js +72 -0
  62. package/scripts/inference-economics.js +53 -0
  63. package/scripts/internal-agent-bootstrap.js +12 -2
  64. package/scripts/knowledge-layer-plan.js +108 -0
  65. package/scripts/lesson-canonical.js +181 -0
  66. package/scripts/lesson-db.js +71 -10
  67. package/scripts/lesson-inference.js +183 -44
  68. package/scripts/lesson-search.js +4 -1
  69. package/scripts/lesson-synthesis.js +23 -2
  70. package/scripts/llm-client.js +157 -26
  71. package/scripts/mailer/resend-mailer.js +112 -1
  72. package/scripts/mcp-transport-strategy.js +66 -0
  73. package/scripts/memory-store-governance.js +60 -0
  74. package/scripts/meta-agent-loop.js +7 -13
  75. package/scripts/model-access-eligibility.js +38 -0
  76. package/scripts/model-migration-readiness.js +55 -0
  77. package/scripts/native-messaging-audit.js +514 -0
  78. package/scripts/operational-integrity.js +96 -3
  79. package/scripts/otel-declarative-config.js +56 -0
  80. package/scripts/perplexity-client.js +1 -1
  81. package/scripts/post-training-governance.js +34 -0
  82. package/scripts/pr-manager.js +47 -7
  83. package/scripts/private-core-boundary.js +72 -0
  84. package/scripts/production-agent-readiness.js +40 -0
  85. package/scripts/profile-router.js +16 -1
  86. package/scripts/prompt-eval.js +564 -32
  87. package/scripts/prompt-programs.js +93 -0
  88. package/scripts/provider-action-normalizer.js +585 -0
  89. package/scripts/rule-validator.js +285 -0
  90. package/scripts/scaling-law-claims.js +60 -0
  91. package/scripts/security-scanner.js +1 -1
  92. package/scripts/self-distill-agent.js +7 -32
  93. package/scripts/seo-gsd.js +400 -43
  94. package/scripts/skill-rag-router.js +53 -0
  95. package/scripts/spec-gate.js +1 -1
  96. package/scripts/student-consistent-training.js +73 -0
  97. package/scripts/synthetic-data-provenance.js +98 -0
  98. package/scripts/task-context-result.js +81 -0
  99. package/scripts/telemetry-analytics.js +149 -0
  100. package/scripts/thompson-sampling.js +2 -2
  101. package/scripts/token-savings.js +7 -6
  102. package/scripts/token-tco.js +46 -0
  103. package/scripts/tool-registry.js +75 -3
  104. package/scripts/verification-loop.js +10 -1
  105. package/scripts/verifier-scoring.js +71 -0
  106. package/scripts/workflow-sentinel.js +284 -28
  107. package/scripts/workspace-agent-routines.js +118 -0
  108. package/skills/thumbgate/SKILL.md +1 -1
  109. package/src/api/server.js +434 -120
  110. package/.claude-plugin/README.md +0 -170
  111. package/adapters/README.md +0 -12
  112. package/scripts/analytics-report.js +0 -328
  113. package/scripts/autonomous-workflow.js +0 -377
  114. package/scripts/billing-setup.js +0 -109
  115. package/scripts/creator-campaigns.js +0 -239
  116. package/scripts/cross-encoder-reranker.js +0 -235
  117. package/scripts/daemon-manager.js +0 -108
  118. package/scripts/decision-trace.js +0 -354
  119. package/scripts/delegation-runtime.js +0 -896
  120. package/scripts/dispatch-brief.js +0 -159
  121. package/scripts/distribution-surfaces.js +0 -110
  122. package/scripts/feedback-history-distiller.js +0 -382
  123. package/scripts/funnel-analytics.js +0 -35
  124. package/scripts/history-distiller.js +0 -200
  125. package/scripts/hosted-job-launcher.js +0 -256
  126. package/scripts/intent-router.js +0 -392
  127. package/scripts/lesson-reranker.js +0 -263
  128. package/scripts/lesson-retrieval.js +0 -148
  129. package/scripts/managed-lesson-agent.js +0 -183
  130. package/scripts/operational-dashboard.js +0 -103
  131. package/scripts/operational-summary.js +0 -129
  132. package/scripts/operator-artifacts.js +0 -608
  133. package/scripts/optimize-context.js +0 -17
  134. package/scripts/org-dashboard.js +0 -206
  135. package/scripts/partner-orchestration.js +0 -146
  136. package/scripts/predictive-insights.js +0 -356
  137. package/scripts/pulse.js +0 -80
  138. package/scripts/reflector-agent.js +0 -221
  139. package/scripts/sales-pipeline.js +0 -681
  140. package/scripts/session-episode-store.js +0 -329
  141. package/scripts/session-health-sensor.js +0 -242
  142. package/scripts/session-report.js +0 -120
  143. package/scripts/swarm-coordinator.js +0 -81
  144. package/scripts/tool-kpi-tracker.js +0 -12
  145. package/scripts/webhook-delivery.js +0 -62
  146. package/scripts/workflow-sprint-intake.js +0 -475
  147. package/skills/agent-memory/SKILL.md +0 -97
  148. package/skills/solve-architecture-autonomy/SKILL.md +0 -17
  149. package/skills/solve-architecture-autonomy/tool.js +0 -33
  150. package/skills/thumbgate-feedback/SKILL.md +0 -49
@@ -10,13 +10,13 @@ const PRODUCT = {
10
10
  name: 'ThumbGate',
11
11
  npm: 'thumbgate',
12
12
  repoUrl: 'https://github.com/IgorGanapolsky/ThumbGate',
13
- homepageUrl: 'https://thumbgate-production.up.railway.app',
13
+ homepageUrl: 'https://thumbgate.ai',
14
14
  verificationUrl: 'https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md',
15
15
  automationUrl: 'https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json',
16
16
  compatibility: ['Claude Code', 'Cursor', 'Codex', 'Gemini', 'Amp', 'OpenCode'],
17
17
  proofPoints: [
18
18
  'thumbs-up/down feedback loop',
19
- 'pre-action gates',
19
+ 'pre-action checks',
20
20
  'verification evidence',
21
21
  'automation proof',
22
22
  'SQLite+FTS5 lesson DB',
@@ -38,11 +38,41 @@ const HIGH_ROI_QUERY_SEEDS = [
38
38
  notes: 'Bottom-of-funnel comparison against memory-only tooling.',
39
39
  },
40
40
  {
41
- query: 'pre-action gates for ai coding agents',
41
+ query: 'pre-action checks for ai coding agents',
42
42
  businessValue: 96,
43
43
  source: 'seed',
44
44
  notes: 'Category-defining query that explains the core wedge.',
45
45
  },
46
+ querySeed(
47
+ 'ai agent harness optimization',
48
+ 94,
49
+ 'Fresh harness-engineering demand that maps directly to ThumbGate progressive disclosure, pre-action checks, and workflow audits.',
50
+ ),
51
+ querySeed(
52
+ 'browser automation safety',
53
+ 93,
54
+ 'High-intent browser-agent safety query tied to prompt injection, permissions, and cross-app automation risk.',
55
+ ),
56
+ querySeed(
57
+ 'native messaging host security',
58
+ 91,
59
+ 'Security-led query that maps directly to browser bridge auditing and explicit connector governance.',
60
+ ),
61
+ querySeed(
62
+ 'ai search topical presence',
63
+ 93,
64
+ 'High-intent GEO query for teams trying to become the obvious recommendation in AI search and agent answers.',
65
+ ),
66
+ querySeed(
67
+ 'best tools to stop ai agents from breaking production',
68
+ 92,
69
+ 'Listicle-style answer-engine query that maps directly to buyer prompts about production agent reliability.',
70
+ ),
71
+ querySeed(
72
+ 'relational knowledge ai recommendations',
73
+ 91,
74
+ 'Captures research-led interest in how AI systems decide which brands and tools to recommend.',
75
+ ),
46
76
  {
47
77
  query: 'thumbs up thumbs down feedback for ai coding agents',
48
78
  businessValue: 95,
@@ -99,6 +129,10 @@ const HIGH_ROI_QUERY_SEEDS = [
99
129
  },
100
130
  ];
101
131
 
132
+ function querySeed(query, businessValue, notes) {
133
+ return { query, businessValue, source: 'seed', notes };
134
+ }
135
+
102
136
  function guideBlueprint({
103
137
  query,
104
138
  path,
@@ -138,6 +172,256 @@ function answer(question, text) {
138
172
  return { question, answer: text };
139
173
  }
140
174
 
175
+ function preActionGuide(slug, content) {
176
+ return guideBlueprint({
177
+ ...content,
178
+ path: `/guides/${slug}`,
179
+ pillar: 'pre-action-checks',
180
+ });
181
+ }
182
+
183
+ const HARNESS_OPTIMIZATION_QUERY = 'ai agent harness optimization';
184
+ const HARNESS_OPTIMIZATION_GUIDE_SPEC = Object.freeze({
185
+ slug: 'agent-harness-optimization',
186
+ meta: {
187
+ query: HARNESS_OPTIMIZATION_QUERY,
188
+ title: 'AI Agent Harness Optimization | Progressive Disclosure + Pre-Action Checks',
189
+ heroTitle: 'AI Agent Harness Optimization That Blocks Repeat Failures',
190
+ heroSummary: 'A better harness keeps global instructions lean, loads MCP schemas only when needed, and turns feedback into pre-action checks. ThumbGate makes that workflow measurable and enforceable.',
191
+ },
192
+ takeaways: [
193
+ 'Harness optimization is the control layer around the model: context, tools, guardrails, and feedback.',
194
+ 'Progressive disclosure keeps agents out of prompt bloat while preserving proof and tool access.',
195
+ 'ThumbGate adds a concrete audit path and Pre-Action Checks so harness lessons become runtime enforcement.',
196
+ ],
197
+ sections: [
198
+ ['paragraphs', 'What changed', [
199
+ 'The model is no longer the whole system. The harness decides which instructions, tools, context packs, and approval rules the model sees before it acts.',
200
+ 'When a team stuffs every rule into a global prompt, the agent loses reasoning room. When it routes work through lean discovery surfaces, the agent can fetch the exact tool schema, lesson, or harness only when the task requires it.',
201
+ ]],
202
+ ['bullets', 'How ThumbGate improves the harness', [
203
+ 'Scores global agent docs so AGENTS.md, CLAUDE.md, and GEMINI.md stay lean instead of becoming unreviewable prompt bundles.',
204
+ 'Publishes progressive MCP discovery through lightweight indexes and per-tool schema URLs.',
205
+ 'Selects specialized gate harnesses for deploy, code-edit, and database-write actions instead of loading every gate for every workflow.',
206
+ 'Turns thumbs-down feedback into prevention rules, then into hard Pre-Action Checks that block repeated mistakes.',
207
+ ]],
208
+ ['paragraphs', 'Where this creates ROI', [
209
+ 'For acquisition, this page names the buyer category: AI agent harness optimization. For conversion, the CLI audit gives a concrete first action. For retention, the same audit keeps local instructions and MCP surfaces from drifting back into bloat.',
210
+ ]],
211
+ ],
212
+ faq: [
213
+ [
214
+ 'What is an AI agent harness?',
215
+ 'An AI agent harness is the runtime layer around the model: context loading, tool calls, guardrails, approval boundaries, memory, and verification. ThumbGate focuses on the enforcement part of that harness.',
216
+ ],
217
+ [
218
+ 'How does ThumbGate optimize a harness?',
219
+ 'ThumbGate keeps global instructions lean, supports progressive MCP discovery, selects workflow-specific gate harnesses, and converts feedback into Pre-Action Checks that block known-bad actions before execution.',
220
+ ],
221
+ ],
222
+ relatedPaths: ['/guides/pre-action-checks', '/guides/codex-cli-guardrails'],
223
+ });
224
+
225
+ function buildSectionFromSpec(kind, heading, entries) {
226
+ return kind === 'bullets' ? bullets(heading, entries) : paragraphs(heading, entries);
227
+ }
228
+
229
+ function buildHarnessOptimizationGuide() {
230
+ return preActionGuide(HARNESS_OPTIMIZATION_GUIDE_SPEC.slug, {
231
+ ...HARNESS_OPTIMIZATION_GUIDE_SPEC.meta,
232
+ takeaways: HARNESS_OPTIMIZATION_GUIDE_SPEC.takeaways,
233
+ sections: HARNESS_OPTIMIZATION_GUIDE_SPEC.sections.map(([kind, heading, entries]) => buildSectionFromSpec(kind, heading, entries)),
234
+ faq: HARNESS_OPTIMIZATION_GUIDE_SPEC.faq.map(([question, text]) => answer(question, text)),
235
+ relatedPaths: HARNESS_OPTIMIZATION_GUIDE_SPEC.relatedPaths,
236
+ });
237
+ }
238
+
239
+ const BROWSER_BRIDGE_GUIDE_SPECS = Object.freeze([
240
+ {
241
+ slug: 'browser-automation-safety',
242
+ meta: {
243
+ query: 'browser automation safety',
244
+ title: 'Browser Automation Safety | Prompt Injection, Permissions, and Pre-Action Checks',
245
+ heroTitle: 'Browser automation safety needs explicit approval boundaries',
246
+ heroSummary: 'Browser agents can click, type, and navigate for you, but they also widen prompt-injection and cross-app integration risk. ThumbGate adds approval boundaries, auditability, and a native messaging audit before those bridges turn into silent blast-radius expansion.',
247
+ },
248
+ takeaways: [
249
+ 'Browser automation is useful because it has real permissions, which is exactly why it needs governance.',
250
+ 'Prompt injection becomes more dangerous when an extension can reach a local executable through a browser bridge.',
251
+ 'ThumbGate gives teams a first action now: audit native messaging hosts, then require explicit approval before browser-use connectors expand.',
252
+ ],
253
+ sections: [
254
+ ['paragraphs', 'Why browser-use changes the threat model', [
255
+ 'Browser agents do not just read text. They can click buttons, fill forms, switch tabs, and sometimes bridge into local binaries. That means the blast radius is no longer only "bad output" but "real actions on live websites and local systems."',
256
+ 'Once browser automation enters the stack, prompt injection stops being an abstract model weakness and becomes a workflow-governance problem. The right control is not more prompt advice. It is a hard boundary around what the agent is allowed to connect, install, and execute.',
257
+ ]],
258
+ ['bullets', 'What to audit first', [
259
+ 'Which browser extensions hold automation permissions such as debugger, tabs, downloads, and nativeMessaging.',
260
+ 'Whether the desktop app or CLI has registered native messaging hosts for browsers you did not explicitly connect.',
261
+ 'Whether host manifests point to live local binaries and whether those binaries sit outside the browser sandbox.',
262
+ 'Whether browser-use runs default to ask-before-acting or silently expand capability before a human approves them.',
263
+ ]],
264
+ ['paragraphs', 'How ThumbGate fits', [
265
+ 'ThumbGate is the approval and enforcement layer around browser-use. Start by running npx thumbgate native-messaging-audit. Then gate future connector installs, record who approved them, and turn browser-bridge mistakes into Pre-Action Checks before the same pattern repeats.',
266
+ ]],
267
+ ],
268
+ faq: [
269
+ [
270
+ 'Why is browser automation riskier than ordinary chat?',
271
+ 'Because the agent can take real actions in a browser and may also reach local executables through native messaging bridges. That turns prompt injection and permission drift into operational risk, not just output-quality risk.',
272
+ ],
273
+ [
274
+ 'What should a team do before enabling browser-use broadly?',
275
+ 'Audit native messaging hosts, review extension permissions, keep ask-before-acting enabled by default, and require explicit approval for any cross-app connector that expands the agent runtime beyond the browser sandbox.',
276
+ ],
277
+ ],
278
+ relatedPaths: ['/guides/native-messaging-host-security', '/guides/pre-action-checks'],
279
+ },
280
+ {
281
+ slug: 'native-messaging-host-security',
282
+ meta: {
283
+ query: 'native messaging host security',
284
+ title: 'Native Messaging Host Security | Audit Browser Bridges Before They Expand',
285
+ heroTitle: 'Native messaging host security for AI browser bridges',
286
+ heroSummary: '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.',
287
+ },
288
+ takeaways: [
289
+ 'Native messaging is a real local capability boundary, not a harmless implementation detail.',
290
+ 'A manifest can pre-authorize extension origins long before a human operator understands the blast radius.',
291
+ 'ThumbGate turns native messaging review into an auditable operator workflow instead of an invisible local side effect.',
292
+ ],
293
+ sections: [
294
+ ['paragraphs', 'What native messaging hosts actually do', [
295
+ '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.',
296
+ '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.',
297
+ ]],
298
+ ['bullets', 'Signals ThumbGate audits', [
299
+ 'Manifest files under browser-specific NativeMessagingHosts directories on macOS and Linux.',
300
+ 'Allowed extension origins and extension-id fan-out per host registration.',
301
+ 'Host binaries that are missing on disk, which leaves stale or broken registrations behind.',
302
+ 'AI/browser bridge manifests registered for browsers not detected in the usual local install paths.',
303
+ ]],
304
+ ['paragraphs', 'The fastest operator action', [
305
+ '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.',
306
+ ]],
307
+ ],
308
+ faq: [
309
+ [
310
+ 'Why does native messaging deserve a separate security review?',
311
+ '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.',
312
+ ],
313
+ [
314
+ 'How does ThumbGate help with native messaging host security?',
315
+ '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.',
316
+ ],
317
+ ],
318
+ relatedPaths: ['/guides/browser-automation-safety', '/guides/pre-action-checks'],
319
+ },
320
+ ]);
321
+
322
+ function buildBrowserBridgeGuide(spec) {
323
+ return preActionGuide(spec.slug, {
324
+ ...spec.meta,
325
+ takeaways: spec.takeaways,
326
+ sections: spec.sections.map(([kind, heading, entries]) => buildSectionFromSpec(kind, heading, entries)),
327
+ faq: spec.faq.map(([question, text]) => answer(question, text)),
328
+ relatedPaths: spec.relatedPaths,
329
+ });
330
+ }
331
+
332
+ const AI_RECOMMENDATION_VISIBILITY_GUIDE_SPECS = Object.freeze([
333
+ {
334
+ slug: 'ai-search-topical-presence',
335
+ meta: {
336
+ query: 'ai search topical presence',
337
+ title: 'AI Search Topical Presence | Become the Obvious Recommendation',
338
+ heroTitle: 'AI search topical presence decides who gets recommended',
339
+ heroSummary: 'AI assistants recommend the tools they repeatedly see tied to a problem in credible contexts. ThumbGate wins when the web consistently connects it to pre-action checks, AI coding agent safety, and stopping repeated mistakes before execution.',
340
+ },
341
+ takeaways: [
342
+ 'Topical presence is about repeated, credible association with the problems buyers actually ask AI systems to solve.',
343
+ 'ThumbGate should own a narrow association first: pre-action checks for AI coding agents.',
344
+ 'Proof assets, comparisons, integration pages, and category guides build the depth and breadth that make recommendations stick.',
345
+ ],
346
+ sections: [
347
+ ['paragraphs', 'What topical presence really measures', [
348
+ 'AI search visibility is not just page count or classic keyword volume. It is the strength of the association between your brand, the buyer problem, and the category language the model has already absorbed.',
349
+ 'For ThumbGate, that means showing up around pre-action checks, stopping repeated AI agent mistakes, AI coding agent guardrails, workflow hardening, and runtime enforcement. When those associations repeat across guides, product copy, proof artifacts, and third-party mentions, the model gains confidence retrieving ThumbGate for the right prompt.',
350
+ ]],
351
+ ['bullets', 'How ThumbGate improves topical presence', [
352
+ 'Lead with one crisp category association: ThumbGate is the pre-action checks layer for AI coding agents.',
353
+ 'Publish proof-backed pages that connect the product to repeated-mistake blocking, workflow hardening, and team enforcement.',
354
+ 'Cover adjacent commercial prompts such as Codex guardrails, Cursor repeat-failure prevention, browser automation safety, and Autoresearch safety.',
355
+ 'Keep pricing, verification evidence, and supported-agent compatibility easy for humans and LLMs to quote.',
356
+ ]],
357
+ ['paragraphs', 'What to publish next', [
358
+ 'The fastest way to improve topical presence is not random content fan-out. It is a small set of specific, high-intent pages that reinforce the same recommendation pattern from different angles. ThumbGate should keep tightening the loop between buyer questions, proof links, integration pages, and machine-readable evidence.',
359
+ ]],
360
+ ],
361
+ faq: [
362
+ [
363
+ 'Is topical presence the same thing as AI share of voice?',
364
+ 'No. Share of voice tells you how often you appear. Topical presence tells you which problems and concepts the model actually associates with your brand, which is much more useful when you want to become the default recommendation.',
365
+ ],
366
+ [
367
+ 'What should a developer tool do first to improve topical presence?',
368
+ 'Pick one narrow, commercially relevant association and reinforce it everywhere. For ThumbGate, that association is pre-action checks for AI coding agents backed by verification evidence and workflow hardening outcomes.',
369
+ ],
370
+ ],
371
+ relatedPaths: ['/guides/relational-knowledge-ai-recommendations', '/guides/pre-action-checks'],
372
+ },
373
+ {
374
+ slug: 'relational-knowledge-ai-recommendations',
375
+ meta: {
376
+ query: 'relational knowledge ai recommendations',
377
+ title: 'Relational Knowledge in AI Recommendations | Why Brands Get Picked',
378
+ heroTitle: 'Relational knowledge explains why AI systems recommend some tools and ignore others',
379
+ heroSummary: 'LLMs do not recommend brands from keywords alone. They retrieve stored associations between a problem, a category, and the brand they have repeatedly seen in that context. ThumbGate benefits when those associations stay crisp and evidence-backed.',
380
+ },
381
+ takeaways: [
382
+ 'AI recommendations come from learned associations, not from whichever brand publishes the most pages.',
383
+ 'Crowded many-to-many categories make generic positioning disappear into the noise.',
384
+ 'ThumbGate should reinforce a tight relationship: repeated AI coding mistakes -> pre-action checks -> ThumbGate.',
385
+ ],
386
+ sections: [
387
+ ['paragraphs', 'Relational knowledge in plain English', [
388
+ 'A language model stores facts and associations about the world. When a buyer asks for a recommendation, the model tries to retrieve the brand most strongly associated with that problem and category. If the associations are weak or generic, the model falls back to louder or simpler competitors.',
389
+ 'That is why vague positioning like "AI memory for agents" is a weaker long-term recommendation strategy for ThumbGate than a sharper relationship such as "pre-action checks that stop repeated AI coding mistakes before execution."',
390
+ ]],
391
+ ['bullets', 'How ThumbGate becomes the obvious recommendation', [
392
+ 'Repeat the same category language across landing copy, guides, README links, and structured data.',
393
+ 'Pair the association with proof: verification evidence, automation proof, supported agents, and pricing.',
394
+ 'Publish comparisons that explain why memory-only or spec-only alternatives do not solve repeated tool-call failures.',
395
+ 'Expand outward from the core association into adjacent prompts only after the primary link is strong.',
396
+ ]],
397
+ ['paragraphs', 'Where teams usually get lost', [
398
+ 'Brands become invisible when they try to cover too many adjacent categories without owning one association deeply. ThumbGate should keep using specific buyer-language such as workflow hardening, pre-action checks, repeat-failure blocking, browser bridge safety, and AI coding agent guardrails so the recommendation path stays crisp.',
399
+ ]],
400
+ ],
401
+ faq: [
402
+ [
403
+ 'Why does content volume alone fail to earn AI recommendations?',
404
+ 'Because models care about the consistency and credibility of the association, not just the amount of text. Fifty vague pages rarely beat a smaller set of pages, proofs, and third-party mentions that all reinforce the same relationship.',
405
+ ],
406
+ [
407
+ 'What signals help ThumbGate most?',
408
+ 'Pages that tie ThumbGate to pre-action checks, AI coding agent safety, stopping repeated mistakes, supported-agent compatibility, and proof-backed outcomes help the model retrieve it with more confidence.',
409
+ ],
410
+ ],
411
+ relatedPaths: ['/guides/ai-search-topical-presence', '/compare/mem0'],
412
+ },
413
+ ]);
414
+
415
+ function buildAiRecommendationVisibilityGuide(spec) {
416
+ return preActionGuide(spec.slug, {
417
+ ...spec.meta,
418
+ takeaways: spec.takeaways,
419
+ sections: spec.sections.map(([kind, heading, entries]) => buildSectionFromSpec(kind, heading, entries)),
420
+ faq: spec.faq.map(([question, text]) => answer(question, text)),
421
+ relatedPaths: spec.relatedPaths,
422
+ });
423
+ }
424
+
141
425
  const PAGE_BLUEPRINTS = [
142
426
  {
143
427
  query: 'thumbgate vs speclock',
@@ -146,7 +430,7 @@ const PAGE_BLUEPRINTS = [
146
430
  pillar: 'comparison',
147
431
  title: 'ThumbGate vs SpecLock | Thumbs Feedback vs Manual Specs',
148
432
  heroTitle: 'ThumbGate vs SpecLock',
149
- heroSummary: 'SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action gates that block repeated mistakes.',
433
+ heroSummary: 'SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action checks that block repeated mistakes.',
150
434
  takeaways: [
151
435
  'ThumbGate learns from thumbs-up and thumbs-down feedback without requiring a separate spec-writing workflow.',
152
436
  'SpecLock is strongest when a team already has strong specifications and wants enforcement tied to those documents.',
@@ -156,7 +440,7 @@ const PAGE_BLUEPRINTS = [
156
440
  {
157
441
  heading: 'The product difference in one sentence',
158
442
  paragraphs: [
159
- 'SpecLock helps a team codify rules before the work begins. ThumbGate helps a team convert real thumbs-up/down feedback into live pre-action gates after the work reveals what actually breaks.',
443
+ 'SpecLock helps a team codify rules before the work begins. ThumbGate helps a team convert real thumbs-up/down feedback into live pre-action checks after the work reveals what actually breaks.',
160
444
  'That means ThumbGate is better for fast-moving agent workflows where the problem is not writing more specs, but preventing the same mistake from happening again tomorrow.',
161
445
  ],
162
446
  },
@@ -180,14 +464,14 @@ const PAGE_BLUEPRINTS = [
180
464
  faq: [
181
465
  {
182
466
  question: 'Is ThumbGate trying to replace specs?',
183
- answer: 'No. ThumbGate complements specs by capturing thumbs-up/down feedback from live agent behavior and enforcing the learned rules as pre-action gates.',
467
+ answer: 'No. ThumbGate complements specs by capturing thumbs-up/down feedback from live agent behavior and enforcing the learned rules as pre-action checks.',
184
468
  },
185
469
  {
186
470
  question: 'What does ThumbGate do that SpecLock does not?',
187
- answer: 'ThumbGate turns explicit feedback into searchable memory, auto-generated prevention rules, and runtime gates that block repeated mistakes before the next tool call executes.',
471
+ answer: 'ThumbGate turns explicit feedback into searchable memory, auto-generated prevention rules, and runtime checks that block repeated mistakes before the next tool call executes.',
188
472
  },
189
473
  ],
190
- relatedPaths: ['/compare/mem0', '/guides/pre-action-gates'],
474
+ relatedPaths: ['/compare/mem0', '/guides/pre-action-checks'],
191
475
  },
192
476
  {
193
477
  query: 'thumbgate vs mem0',
@@ -196,7 +480,7 @@ const PAGE_BLUEPRINTS = [
196
480
  pillar: 'comparison',
197
481
  title: 'ThumbGate vs Mem0 | Enforcement vs Memory for AI Agents',
198
482
  heroTitle: 'ThumbGate vs Mem0',
199
- heroSummary: 'Mem0 is memory. ThumbGate is memory plus enforcement. It captures thumbs-up/down feedback, promotes the signal into rules, and blocks repeat failures with pre-action gates.',
483
+ heroSummary: 'Mem0 is memory. ThumbGate is memory plus enforcement. It captures thumbs-up/down feedback, promotes the signal into rules, and blocks repeat failures with pre-action checks.',
200
484
  takeaways: [
201
485
  'Mem0 is useful when you mainly need retrieval and cross-session context.',
202
486
  'ThumbGate is useful when retrieval alone is not enough and the system has to stop the same mistake before execution.',
@@ -212,7 +496,7 @@ const PAGE_BLUEPRINTS = [
212
496
  {
213
497
  heading: 'Where ThumbGate fits',
214
498
  paragraphs: [
215
- 'ThumbGate begins with the same need to remember, but it goes further. A thumbs down can become a prevention rule, and that rule can become a pre-action gate that blocks a repeated tool call.',
499
+ 'ThumbGate begins with the same need to remember, but it goes further. A thumbs down can become a prevention rule, and that rule can become a pre-action check that blocks a repeated tool call.',
216
500
  ],
217
501
  bullets: [
218
502
  'Thumbs up reinforces good behavior.',
@@ -240,12 +524,12 @@ const PAGE_BLUEPRINTS = [
240
524
  relatedPaths: ['/compare/speclock', '/guides/claude-code-feedback'],
241
525
  },
242
526
  {
243
- query: 'pre-action gates for ai coding agents',
244
- path: '/guides/pre-action-gates',
527
+ query: 'pre-action checks for ai coding agents',
528
+ path: '/guides/pre-action-checks',
245
529
  pageType: 'guide',
246
- pillar: 'pre-action-gates',
247
- title: 'Pre-Action Gates for AI Coding Agents | ThumbGate Guide',
248
- heroTitle: 'What Are Pre-Action Gates?',
530
+ pillar: 'pre-action-checks',
531
+ title: 'Pre-Action Checks for AI Coding Agents | ThumbGate Guide',
532
+ heroTitle: 'What Are Pre-Action Checks?',
249
533
  heroSummary: 'Pre-action gates stop the risky move before the agent executes it. ThumbGate uses thumbs-up/down feedback to decide what should be reinforced, warned, or blocked.',
250
534
  takeaways: [
251
535
  'Prompt rules are advisory. Pre-action gates are enforcement.',
@@ -257,7 +541,7 @@ const PAGE_BLUEPRINTS = [
257
541
  heading: 'Why this matters',
258
542
  paragraphs: [
259
543
  'Most AI coding failures are not mysterious. They are repeated mistakes: force-pushes, destructive scripts, missed verification steps, or breaking architectural constraints.',
260
- 'A pre-action gate turns that failure pattern into a runtime checkpoint. The agent sees the stop before the bad action lands.',
544
+ 'A pre-action check turns that failure pattern into a runtime checkpoint. The agent sees the stop before the bad action lands.',
261
545
  ],
262
546
  },
263
547
  {
@@ -278,7 +562,7 @@ const PAGE_BLUEPRINTS = [
278
562
  ],
279
563
  faq: [
280
564
  {
281
- question: 'How are pre-action gates different from prompt rules?',
565
+ question: 'How are pre-action checks different from prompt rules?',
282
566
  answer: 'Prompt rules ask the model nicely. Pre-action gates intercept the tool call and block it before execution when the known-bad pattern matches.',
283
567
  },
284
568
  {
@@ -288,14 +572,78 @@ const PAGE_BLUEPRINTS = [
288
572
  ],
289
573
  relatedPaths: ['/compare/speclock', '/guides/claude-code-feedback'],
290
574
  },
575
+ {
576
+ query: 'best tools to stop ai agents from breaking production',
577
+ path: '/guides/best-tools-stop-ai-agents-breaking-production',
578
+ pageType: 'guide',
579
+ pillar: 'pre-action-checks',
580
+ title: 'Best Tools to Stop AI Agents From Breaking Production | ThumbGate Listicle',
581
+ heroTitle: 'Best Tools to Stop AI Agents From Breaking Production',
582
+ heroSummary: 'A practical listicle for teams adopting Claude Code, Cursor, Codex, Gemini, and other coding agents: the winning reliability stack is workflow-first, inspection-driven, and enforced before tool execution.',
583
+ takeaways: [
584
+ 'Answer engines cite specific blog posts and listicles more readily than generic product pages, so this guide names the buyer prompt directly.',
585
+ 'Production agent safety starts with predefined workflows when possible, then gates open-ended agents when autonomy is actually needed.',
586
+ 'ThumbGate is the pre-action enforcement layer that checks workflow shape, environment inspection evidence, and parallel branch budgets before risky execution.',
587
+ ],
588
+ sections: [
589
+ {
590
+ heading: 'The short list',
591
+ bullets: [
592
+ 'Workflow templates for known paths: use repeatable plans for deploys, migrations, release checks, and PR cleanup instead of asking an agent to improvise every time.',
593
+ 'Environment inspection requirements: require file reads, screenshots, API responses, or command output before the agent claims the state of the world.',
594
+ 'Pre-action enforcement: block risky tool calls before execution when the action violates a learned rule, budget, or inspection requirement.',
595
+ 'Parallel branch budgets: cap fan-out so multi-agent desktop sessions do not burn tokens, duplicate work, or merge conflicting changes blindly.',
596
+ 'Repeated-failure memory: turn thumbs-down reviews into prevention rules and thumbs-up reviews into reinforced safe patterns.',
597
+ ],
598
+ },
599
+ {
600
+ heading: 'Where ThumbGate fits',
601
+ paragraphs: [
602
+ 'ThumbGate is not another prompt reminder. It sits at the action boundary, where a coding agent is about to edit files, run commands, call tools, or promote a result.',
603
+ 'That makes it a strong answer to long-tail buyer prompts like "how do I stop Claude Code from repeating a production mistake" or "what guardrails should I add before running parallel AI coding agents."',
604
+ ],
605
+ },
606
+ {
607
+ heading: 'What to look for in any tool',
608
+ bullets: [
609
+ 'Can it tell whether the work should be a workflow or an open-ended agent?',
610
+ 'Can it prove the agent inspected the environment before acting?',
611
+ 'Can it block the next bad action, not just remember that the last one was bad?',
612
+ 'Can it expose evidence that auditors, teammates, and future agents can read?',
613
+ ],
614
+ },
615
+ {
616
+ heading: 'Promotion angle',
617
+ paragraphs: [
618
+ 'This page is designed as AEO fuel: it gives AI answer engines a quotable, specific, buyer-intent explanation of why production AI agents need pre-action checks, inspection evidence, and workflow budgets.',
619
+ ],
620
+ },
621
+ ],
622
+ faq: [
623
+ {
624
+ question: 'What is the best tool to stop AI coding agents from breaking production?',
625
+ answer: 'Use workflow templates for predictable tasks, then add ThumbGate as the pre-action enforcement layer so repeated mistakes, missing inspection evidence, and unsafe parallel fan-out can be blocked before execution.',
626
+ },
627
+ {
628
+ question: 'Why are listicles useful for AI search visibility?',
629
+ answer: 'AI answer engines often cite specific educational pages that match the buyer prompt. A focused listicle gives the model a clear source for production-agent guardrails instead of forcing it to infer the category from generic landing-page copy.',
630
+ },
631
+ {
632
+ question: 'Do I need an agent or a workflow?',
633
+ answer: 'Use a workflow when the path is known and testable. Use an agent when the path is genuinely uncertain, but require environment inspection and pre-action gates before risky tool use.',
634
+ },
635
+ ],
636
+ relatedPaths: ['/guides/pre-action-checks', '/guides/agent-harness-optimization', '/guides/ai-search-topical-presence'],
637
+ },
638
+ buildHarnessOptimizationGuide(),
291
639
  {
292
640
  query: 'stop ai coding agents from repeating mistakes',
293
641
  path: '/guides/stop-repeated-ai-agent-mistakes',
294
642
  pageType: 'guide',
295
- pillar: 'pre-action-gates',
643
+ pillar: 'pre-action-checks',
296
644
  title: 'How to Stop AI Coding Agents From Repeating Mistakes | ThumbGate',
297
645
  heroTitle: 'How to Stop AI Coding Agents From Repeating Mistakes',
298
- heroSummary: 'If your agent keeps repeating the same bad move, the fix is not more memory alone. The fix is a feedback loop that turns repeated failures into pre-action gates before the next tool call executes.',
646
+ heroSummary: 'If your agent keeps repeating the same bad move, the fix is not more memory alone. The fix is a feedback loop that turns repeated failures into pre-action checks before the next tool call executes.',
299
647
  takeaways: [
300
648
  'Repeated mistakes are a workflow problem, not just a context-window problem.',
301
649
  'ThumbGate turns thumbs-down feedback into prevention rules and runtime gates.',
@@ -328,14 +676,14 @@ const PAGE_BLUEPRINTS = [
328
676
  faq: [
329
677
  {
330
678
  question: 'Is memory alone enough to stop repeated mistakes?',
331
- answer: 'Usually no. Memory helps retrieval, but ThumbGate adds pre-action gates so the same risky move can be blocked before the next command executes.',
679
+ answer: 'Usually no. Memory helps retrieval, but ThumbGate adds pre-action checks so the same risky move can be blocked before the next command executes.',
332
680
  },
333
681
  {
334
682
  question: 'Does ThumbGate only punish bad behavior?',
335
683
  answer: 'No. Thumbs up reinforces good behavior, so the loop captures safe patterns as well as failures.',
336
684
  },
337
685
  ],
338
- relatedPaths: ['/guides/pre-action-gates', '/guides/claude-code-feedback'],
686
+ relatedPaths: ['/guides/pre-action-checks', '/guides/claude-code-feedback'],
339
687
  },
340
688
  {
341
689
  query: 'claude code feedback memory',
@@ -376,14 +724,14 @@ const PAGE_BLUEPRINTS = [
376
724
  faq: [
377
725
  {
378
726
  question: 'Does this only work with Claude Code?',
379
- answer: 'No. Claude Code is a strong entry point, but the same thumbs-up/down feedback loop and pre-action gates work across other MCP-compatible coding agents too.',
727
+ answer: 'No. Claude Code is a strong entry point, but the same thumbs-up/down feedback loop and pre-action checks work across other MCP-compatible coding agents too.',
380
728
  },
381
729
  {
382
730
  question: 'Why mention thumbs up as well as thumbs down?',
383
731
  answer: 'Because reinforcement matters. Good behavior should become easier to repeat, not only bad behavior harder to repeat.',
384
732
  },
385
733
  ],
386
- relatedPaths: ['/guides/pre-action-gates', '/compare/mem0'],
734
+ relatedPaths: ['/guides/pre-action-checks', '/compare/mem0'],
387
735
  },
388
736
  {
389
737
  query: 'cursor prevent repeated mistakes',
@@ -392,7 +740,7 @@ const PAGE_BLUEPRINTS = [
392
740
  pillar: 'agent-workflows',
393
741
  title: 'Cursor Agent Guardrails | Stop Repeated Mistakes with ThumbGate',
394
742
  heroTitle: 'Cursor Guardrails That Block Repeated Mistakes',
395
- heroSummary: 'Cursor moves fast, which makes repeated mistakes expensive. ThumbGate gives Cursor users a feedback loop that turns thumbs-down corrections into pre-action gates before the next risky step fires.',
743
+ heroSummary: 'Cursor moves fast, which makes repeated mistakes expensive. ThumbGate gives Cursor users a feedback loop that turns thumbs-down corrections into pre-action checks before the next risky step fires.',
396
744
  takeaways: [
397
745
  'Cursor users want speed without trusting the agent blindly.',
398
746
  'ThumbGate adds enforcement without forcing a platform switch.',
@@ -410,7 +758,7 @@ const PAGE_BLUEPRINTS = [
410
758
  bullets: [
411
759
  'Capture thumbs-up/down feedback on agent behavior.',
412
760
  'Promote repeated failures into prevention rules.',
413
- 'Block known-bad commands with pre-action gates before execution.',
761
+ 'Block known-bad commands with pre-action checks before execution.',
414
762
  'Keep the memory and gates local-first so the operator retains control.',
415
763
  ],
416
764
  },
@@ -431,7 +779,7 @@ const PAGE_BLUEPRINTS = [
431
779
  answer: 'Repeated failures like risky git actions, destructive scripts, skipped verification, or any other known-bad pattern you have already corrected once.',
432
780
  },
433
781
  ],
434
- relatedPaths: ['/guides/stop-repeated-ai-agent-mistakes', '/guides/pre-action-gates'],
782
+ relatedPaths: ['/guides/stop-repeated-ai-agent-mistakes', '/guides/pre-action-checks'],
435
783
  },
436
784
  {
437
785
  query: 'codex cli guardrails',
@@ -458,7 +806,7 @@ const PAGE_BLUEPRINTS = [
458
806
  bullets: [
459
807
  'Feedback capture with explicit thumbs-up/down signals.',
460
808
  'Searchable lessons and linked prevention rules.',
461
- 'Pre-action gates that block repeated bad commands before they run.',
809
+ 'Pre-action checks that block repeated bad commands before they run.',
462
810
  'Verification evidence that gives teams something concrete to audit.',
463
811
  ],
464
812
  },
@@ -476,10 +824,10 @@ const PAGE_BLUEPRINTS = [
476
824
  },
477
825
  {
478
826
  question: 'How are Codex CLI guardrails different from prompt instructions?',
479
- answer: 'Prompt instructions are advisory. ThumbGate pre-action gates intercept the tool call itself and block the known-bad pattern before execution.',
827
+ answer: 'Prompt instructions are advisory. ThumbGate pre-action checks intercept the tool call itself and block the known-bad pattern before execution.',
480
828
  },
481
829
  ],
482
- relatedPaths: ['/guides/pre-action-gates', '/compare/mem0'],
830
+ relatedPaths: ['/guides/pre-action-checks', '/compare/mem0'],
483
831
  },
484
832
  {
485
833
  query: 'gemini cli feedback memory',
@@ -488,7 +836,7 @@ const PAGE_BLUEPRINTS = [
488
836
  pillar: 'agent-workflows',
489
837
  title: 'Gemini CLI Feedback Memory | Memory Plus Enforcement with ThumbGate',
490
838
  heroTitle: 'Gemini CLI Feedback Memory That Leads to Enforcement',
491
- heroSummary: 'Gemini CLI users often start by asking for better memory. ThumbGate answers the bigger need: memory that can become prevention rules and pre-action gates when the same mistake shows up twice.',
839
+ heroSummary: 'Gemini CLI users often start by asking for better memory. ThumbGate answers the bigger need: memory that can become prevention rules and pre-action checks when the same mistake shows up twice.',
492
840
  takeaways: [
493
841
  'Gemini CLI searchers often begin with memory but buy because of enforcement.',
494
842
  'ThumbGate keeps the local-first memory story while adding runtime blocking.',
@@ -529,16 +877,18 @@ const PAGE_BLUEPRINTS = [
529
877
  ],
530
878
  relatedPaths: ['/compare/mem0', '/guides/stop-repeated-ai-agent-mistakes'],
531
879
  },
880
+ ...BROWSER_BRIDGE_GUIDE_SPECS.map(buildBrowserBridgeGuide),
881
+ ...AI_RECOMMENDATION_VISIBILITY_GUIDE_SPECS.map(buildAiRecommendationVisibilityGuide),
532
882
  guideBlueprint({
533
883
  query: 'autoresearch agent safety',
534
884
  path: '/guides/autoresearch-agent-safety',
535
- pillar: 'pre-action-gates',
885
+ pillar: 'pre-action-checks',
536
886
  title: 'Autoresearch Agent Safety | Gates for Self-Improving Coding Agents',
537
887
  heroTitle: 'Autoresearch Agent Safety for Self-Improving Coding Agents',
538
888
  heroSummary: 'Autoresearch-style loops can search for better code, but they need gates for holdout tests, proof trails, reward hacking, and unsafe self-improvement.',
539
889
  takeaways: [
540
890
  'Self-improving coding loops need a control plane before they promote their own wins.',
541
- 'ThumbGate turns failed experiment reviews into prevention rules and pre-action gates.',
891
+ 'ThumbGate turns failed experiment reviews into prevention rules and pre-action checks.',
542
892
  'The sales wedge is concrete: let the agent search, but gate the evidence before it accepts a variant.',
543
893
  ],
544
894
  sections: [
@@ -572,10 +922,10 @@ const PAGE_BLUEPRINTS = [
572
922
  ),
573
923
  answer(
574
924
  'What does ThumbGate add to an Autoresearch loop?',
575
- 'ThumbGate adds structured thumbs-up/down feedback, prevention rules, Thompson Sampling, ContextFS proof packs, and pre-action gates for risky experiment and promotion steps.',
925
+ 'ThumbGate adds structured thumbs-up/down feedback, prevention rules, Thompson Sampling, ContextFS proof packs, and pre-action checks for risky experiment and promotion steps.',
576
926
  ),
577
927
  ],
578
- relatedPaths: ['/guides/pre-action-gates', '/guides/codex-cli-guardrails'],
928
+ relatedPaths: ['/guides/pre-action-checks', '/guides/codex-cli-guardrails'],
579
929
  }),
580
930
  {
581
931
  query: 'claude desktop extension plugin thumbgate',
@@ -584,7 +934,7 @@ const PAGE_BLUEPRINTS = [
584
934
  pillar: 'agent-workflows',
585
935
  title: 'ThumbGate for Claude Desktop | Install the Plugin in 60 Seconds',
586
936
  heroTitle: 'ThumbGate for Claude Desktop',
587
- heroSummary: 'Install ThumbGate as a Claude Desktop plugin and get pre-action gates running in under a minute. No build step, no cloud account, no config files.',
937
+ heroSummary: 'Install ThumbGate as a Claude Desktop plugin and get pre-action checks running in under a minute. No build step, no cloud account, no config files.',
588
938
  takeaways: [
589
939
  'One command installs ThumbGate into Claude Desktop with zero config.',
590
940
  'The packaged .mcpb bundle is available on GitHub Releases for drag-and-drop install.',
@@ -616,7 +966,7 @@ const PAGE_BLUEPRINTS = [
616
966
  bullets: [
617
967
  'Thumbs-up/down feedback capture inside Claude Desktop.',
618
968
  'Prevention rules auto-generated from repeated failures.',
619
- 'Pre-action gates that block known-bad patterns before execution.',
969
+ 'Pre-action checks that block known-bad patterns before execution.',
620
970
  'Full-text search across your lesson history.',
621
971
  'Health checks and system diagnostics.',
622
972
  ],
@@ -642,7 +992,7 @@ const PAGE_BLUEPRINTS = [
642
992
  answer: 'Yes. The same npx thumbgate init command works for both Claude Desktop and Claude Code. Use --claude-desktop for the Desktop-specific setup.',
643
993
  },
644
994
  ],
645
- relatedPaths: ['/guides/claude-code-feedback', '/guides/pre-action-gates'],
995
+ relatedPaths: ['/guides/claude-code-feedback', '/guides/pre-action-checks'],
646
996
  },
647
997
  ];
648
998
 
@@ -749,7 +1099,7 @@ function classifyIntent(query) {
749
1099
  return 'commercial';
750
1100
  }
751
1101
  if (/\b(what is|how to|guide|best practices|why)\b/.test(normalized)) return 'informational';
752
- if (/\b(guardrails|pre-action gates|feedback|prevent repeated mistakes|repeating mistakes|memory)\b/.test(normalized)) {
1102
+ if (/\b(guardrails|pre-action checks|feedback|prevent repeated mistakes|repeating mistakes|memory|harness optimization)\b/.test(normalized)) {
753
1103
  return 'commercial';
754
1104
  }
755
1105
  return 'informational';
@@ -759,8 +1109,10 @@ function inferPillar(query) {
759
1109
  const normalized = normalizeText(query).toLowerCase();
760
1110
  if (/\b(speclock|mem0|alternative|vs|compare|comparison)\b/.test(normalized)) return 'comparison';
761
1111
  if (/\b(thumbs up|thumbs down|feedback|reinforce|mistake)\b/.test(normalized)) return 'feedback-loop';
762
- if (/\b(autoresearch|self-improving|benchmark|reward hacking)\b/.test(normalized)) return 'pre-action-gates';
763
- if (/\b(pre-action gates|guardrails|block|prevent repeated mistakes|repeating mistakes)\b/.test(normalized)) return 'pre-action-gates';
1112
+ if (/\b(topical presence|relational knowledge|recommend(?:ation|ed)? brands?|ai search visibility)\b/.test(normalized)) return 'ai-agent-reliability';
1113
+ if (/\b(browser automation|native messaging|browser bridge|prompt injection)\b/.test(normalized)) return 'pre-action-checks';
1114
+ if (/\b(autoresearch|self-improving|benchmark|reward hacking|harness optimization)\b/.test(normalized)) return 'pre-action-checks';
1115
+ if (/\b(pre-action checks|guardrails|block|prevent repeated mistakes|repeating mistakes)\b/.test(normalized)) return 'pre-action-checks';
764
1116
  if (/\b(claude code|cursor|codex|gemini|amp|opencode|integration|plugin)\b/.test(normalized)) return 'agent-workflows';
765
1117
  return 'ai-agent-reliability';
766
1118
  }
@@ -773,7 +1125,7 @@ function inferPersona(query) {
773
1125
  if (normalized.includes('gemini')) return 'gemini-builder';
774
1126
  if (normalized.includes('autoresearch') || normalized.includes('self-improving')) return 'ai-research-engineer';
775
1127
  if (/\b(vs|alternative|compare)\b/.test(normalized)) return 'tool-evaluator';
776
- if (/\b(guardrails|pre-action gates)\b/.test(normalized)) return 'engineering-lead';
1128
+ if (/\b(guardrails|pre-action checks)\b/.test(normalized)) return 'engineering-lead';
777
1129
  return 'ai-engineer';
778
1130
  }
779
1131
 
@@ -806,7 +1158,7 @@ function scoreOpportunity(row) {
806
1158
  };
807
1159
  const pillarWeight = {
808
1160
  comparison: 14,
809
- 'pre-action-gates': 12,
1161
+ 'pre-action-checks': 12,
810
1162
  'feedback-loop': 12,
811
1163
  'agent-workflows': 11,
812
1164
  'ai-agent-reliability': 9,
@@ -923,7 +1275,7 @@ function createPageSpec(blueprint, row) {
923
1275
  path: blueprint.path,
924
1276
  slug: blueprint.path.split('/').filter(Boolean).join('-'),
925
1277
  query: row.query,
926
- pillar: row.pillar,
1278
+ pillar: blueprint.pillar || row.pillar,
927
1279
  intent: row.intent,
928
1280
  pageType: blueprint.pageType,
929
1281
  persona: row.persona,
@@ -943,6 +1295,9 @@ function createPageSpec(blueprint, row) {
943
1295
  proofLinks: [
944
1296
  { label: 'Verification evidence', href: PRODUCT.verificationUrl },
945
1297
  { label: 'Automation proof', href: PRODUCT.automationUrl },
1298
+ ...(blueprint.path === '/guides/agent-harness-optimization'
1299
+ ? [{ label: 'Harness proof', href: 'https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/harnesses-report.json' }]
1300
+ : []),
946
1301
  { label: 'GitHub repository', href: PRODUCT.repoUrl },
947
1302
  ],
948
1303
  changefreq: blueprint.pageType === 'comparison' ? 'weekly' : 'monthly',
@@ -1139,6 +1494,7 @@ function renderSeoPageHtml(page, runtimeConfig = {}) {
1139
1494
  <meta property="og:type" content="article" />
1140
1495
  <meta property="og:url" content="${escapeHtml(canonicalUrl)}" />
1141
1496
  <link rel="canonical" href="${escapeHtml(canonicalUrl)}" />
1497
+ <link rel="llm-context" href="/public/llm-context.md" type="text/markdown" />
1142
1498
  <link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
1143
1499
  <link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
1144
1500
  <meta property="og:image" content="/og.png" />
@@ -1379,6 +1735,7 @@ ${renderWebPageJsonLd(page, { appOrigin })}
1379
1735
  <p><strong>Opportunity score:</strong> ${page.opportunityScore}</p>
1380
1736
  <p><strong>Primary persona:</strong> ${escapeHtml(page.persona)}</p>
1381
1737
  <p><strong>Keyword cluster:</strong> ${escapeHtml(page.keywordCluster.join(', '))}</p>
1738
+ <p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
1382
1739
  <div class="proof-links">${proofLinks}</div>
1383
1740
  <a class="cta-button" href="${escapeHtml(page.cta.href)}" target="_blank" rel="noopener">${escapeHtml(page.cta.label)}</a>
1384
1741
  </div>