thumbgate 1.27.18 → 1.27.20

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 (170) hide show
  1. package/.claude/commands/dashboard.md +15 -0
  2. package/.claude/commands/thumbgate-blocked.md +27 -0
  3. package/.claude/commands/thumbgate-dashboard.md +15 -0
  4. package/.claude/commands/thumbgate-doctor.md +30 -0
  5. package/.claude/commands/thumbgate-guard.md +36 -0
  6. package/.claude/commands/thumbgate-protect.md +30 -0
  7. package/.claude/commands/thumbgate-rules.md +30 -0
  8. package/.claude-plugin/plugin.json +4 -3
  9. package/.well-known/agentic-verify.txt +1 -0
  10. package/.well-known/llms.txt +33 -12
  11. package/.well-known/mcp/server-card.json +8 -8
  12. package/README.md +246 -30
  13. package/adapters/claude/.mcp.json +2 -2
  14. package/adapters/codex/config.toml +2 -2
  15. package/adapters/gcp/dfcx-webhook-gate.js +295 -0
  16. package/adapters/gemini/function-declarations.json +1 -0
  17. package/adapters/letta/README.md +41 -0
  18. package/adapters/letta/thumbgate-letta-adapter.js +133 -0
  19. package/adapters/mcp/server-stdio.js +263 -11
  20. package/adapters/opencode/opencode.json +1 -1
  21. package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
  22. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
  23. package/bench/observability-eval-suite.json +26 -0
  24. package/bench/thumbgate-bench.json +2 -2
  25. package/bin/cli.js +1456 -122
  26. package/bin/dashboard-cli.js +7 -0
  27. package/bin/postinstall.js +11 -27
  28. package/commands/dashboard.md +15 -0
  29. package/commands/thumbgate-dashboard.md +15 -0
  30. package/config/gate-classifier-routing.json +98 -0
  31. package/config/gate-templates.json +216 -0
  32. package/config/gates/claim-verification.json +12 -0
  33. package/config/gates/default.json +31 -2
  34. package/config/github-about.json +2 -2
  35. package/config/mcp-allowlists.json +23 -13
  36. package/config/merge-quality-checks.json +0 -1
  37. package/config/model-candidates.json +121 -6
  38. package/config/post-deploy-marketing-pages.json +80 -0
  39. package/config/tessl-tiles.json +1 -3
  40. package/openapi/openapi.yaml +12 -0
  41. package/package.json +225 -100
  42. package/public/about.html +162 -0
  43. package/public/agent-manager.html +179 -0
  44. package/public/agents-cost-savings.html +153 -0
  45. package/public/ai-malpractice-prevention.html +818 -0
  46. package/public/assets/brand/github-social-preview.png +0 -0
  47. package/public/assets/brand/thumbgate-icon-512.png +0 -0
  48. package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
  49. package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
  50. package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
  51. package/public/assets/brand/thumbgate-logo-transparent.svg +28 -0
  52. package/public/assets/brand/thumbgate-mark-inline-v3.svg +18 -0
  53. package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
  54. package/public/assets/brand/thumbgate-mark-team.svg +26 -0
  55. package/public/assets/brand/thumbgate-mark.svg +21 -0
  56. package/public/assets/brand/thumbgate-wordmark.svg +20 -0
  57. package/public/assets/claude-thumbgate-statusbar.svg +8 -0
  58. package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
  59. package/public/assets/legal-intake-control-flow.svg +66 -0
  60. package/public/blog.html +4 -4
  61. package/public/brand/thumbgate-mark.svg +19 -0
  62. package/public/brand/thumbgate-og.svg +16 -0
  63. package/public/chatgpt-app.html +330 -0
  64. package/public/codex-enterprise.html +123 -0
  65. package/public/codex-plugin.html +72 -20
  66. package/public/compare.html +31 -8
  67. package/public/dashboard.html +930 -166
  68. package/public/diagnostic.html +345 -0
  69. package/public/federal.html +2 -2
  70. package/public/guide.html +33 -13
  71. package/public/index.html +469 -111
  72. package/public/install.html +193 -0
  73. package/public/js/buyer-intent.js +672 -0
  74. package/public/learn.html +183 -18
  75. package/public/lessons.html +168 -10
  76. package/public/numbers.html +7 -7
  77. package/public/pricing.html +399 -0
  78. package/public/pro.html +34 -11
  79. package/scripts/action-receipts.js +324 -0
  80. package/scripts/activation-quickstart.js +187 -0
  81. package/scripts/agent-memory-lifecycle.js +211 -0
  82. package/scripts/agent-operations-planner.js +621 -0
  83. package/scripts/agent-readiness.js +20 -3
  84. package/scripts/agent-reward-model.js +53 -1
  85. package/scripts/ai-component-inventory.js +367 -0
  86. package/scripts/async-eval-observability.js +236 -0
  87. package/scripts/audit.js +65 -0
  88. package/scripts/auto-promote-gates.js +82 -10
  89. package/scripts/auto-wire-hooks.js +14 -0
  90. package/scripts/aws-blocks-guardrails.js +272 -0
  91. package/scripts/billing.js +93 -1
  92. package/scripts/bot-detection.js +61 -3
  93. package/scripts/build-metadata.js +50 -10
  94. package/scripts/classifier-routing.js +130 -0
  95. package/scripts/cli-feedback.js +4 -2
  96. package/scripts/cli-schema.js +97 -0
  97. package/scripts/cli-telemetry.js +6 -1
  98. package/scripts/commercial-offer.js +82 -2
  99. package/scripts/context-manager.js +74 -6
  100. package/scripts/dashboard-chat.js +332 -0
  101. package/scripts/dashboard.js +68 -2
  102. package/scripts/export-databricks-bundle.js +5 -1
  103. package/scripts/export-dpo-pairs.js +7 -2
  104. package/scripts/feedback-aggregate.js +281 -0
  105. package/scripts/feedback-loop.js +123 -1
  106. package/scripts/feedback-quality.js +87 -0
  107. package/scripts/feedback-sanitizer.js +105 -0
  108. package/scripts/filesystem-search.js +35 -10
  109. package/scripts/gate-stats.js +89 -0
  110. package/scripts/gates-engine.js +1176 -85
  111. package/scripts/gemini-embedding-policy.js +2 -1
  112. package/scripts/hook-runtime.js +20 -14
  113. package/scripts/hook-stop-anti-claim.js +301 -0
  114. package/scripts/hook-thumbgate-cache-updater.js +18 -2
  115. package/scripts/hybrid-feedback-context.js +142 -7
  116. package/scripts/install-shim.js +87 -0
  117. package/scripts/lesson-inference.js +8 -3
  118. package/scripts/lesson-search.js +17 -1
  119. package/scripts/license.js +10 -10
  120. package/scripts/llm-client.js +169 -4
  121. package/scripts/local-model-profile.js +15 -8
  122. package/scripts/mcp-config.js +7 -1
  123. package/scripts/mcp-oauth.js +293 -0
  124. package/scripts/memory-scope-readiness.js +159 -0
  125. package/scripts/meta-agent-loop.js +36 -0
  126. package/scripts/noop-detect.js +285 -0
  127. package/scripts/operational-integrity.js +39 -5
  128. package/scripts/oss-pr-opportunity-scout.js +35 -5
  129. package/scripts/parallel-workflow-orchestrator.js +293 -0
  130. package/scripts/plan-gate.js +243 -0
  131. package/scripts/plausible-domain-config.js +99 -0
  132. package/scripts/plausible-server-events.js +9 -6
  133. package/scripts/pro-local-dashboard.js +4 -4
  134. package/scripts/proxy-pointer-rag-guardrails.js +42 -1
  135. package/scripts/published-cli.js +0 -8
  136. package/scripts/qa-scenario-planner.js +136 -0
  137. package/scripts/rate-limiter.js +64 -13
  138. package/scripts/repeat-metric.js +137 -0
  139. package/scripts/secret-fixture-tokens.js +61 -0
  140. package/scripts/secret-redaction.js +166 -0
  141. package/scripts/secret-scanner.js +44 -5
  142. package/scripts/security-scanner.js +260 -10
  143. package/scripts/self-distill-agent.js +3 -1
  144. package/scripts/self-harness-optimizer.js +141 -0
  145. package/scripts/self-healing-check.js +193 -0
  146. package/scripts/self-protection.js +90 -0
  147. package/scripts/seo-gsd.js +916 -7
  148. package/scripts/silent-failure-cluster.js +531 -0
  149. package/scripts/statusline-cache-path.js +17 -2
  150. package/scripts/statusline-cache-read.js +57 -0
  151. package/scripts/statusline-local-stats.js +9 -1
  152. package/scripts/statusline-meta.js +28 -2
  153. package/scripts/statusline.sh +20 -4
  154. package/scripts/sync-telemetry-from-prod.js +374 -0
  155. package/scripts/telemetry-analytics.js +357 -0
  156. package/scripts/thompson-sampling.js +31 -10
  157. package/scripts/thumbgate-bench.js +16 -1
  158. package/scripts/thumbgate-search.js +85 -19
  159. package/scripts/tool-contract-validator.js +76 -0
  160. package/scripts/tool-registry.js +169 -1
  161. package/scripts/trajectory-scorer.js +63 -0
  162. package/scripts/vector-store.js +45 -0
  163. package/scripts/verify-marketing-pages-deployed.js +212 -0
  164. package/scripts/visitor-journey.js +172 -0
  165. package/scripts/workflow-sentinel.js +286 -53
  166. package/scripts/workspace-evolver.js +62 -2
  167. package/src/api/server.js +2683 -319
  168. package/.claude-plugin/marketplace.json +0 -85
  169. package/adapters/chatgpt/openapi.yaml +0 -1695
  170. package/scripts/bot-detector.js +0 -50
@@ -0,0 +1,345 @@
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">
6
+ <title>ThumbGate Workflow Hardening Diagnostic</title>
7
+ <meta name="description" content="A focused diagnostic for one repeated AI-agent workflow failure. ThumbGate maps the failure taxonomy, block/warn/human-review split, and proof checklist before rollout.">
8
+ <link rel="canonical" href="__APP_ORIGIN__/diagnostic">
9
+ <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
10
+ <meta property="og:title" content="ThumbGate Workflow Hardening Diagnostic">
11
+ <meta property="og:description" content="Send one repeated AI-agent workflow failure. Get the gate/review split and proof checklist before implementation.">
12
+ <meta property="og:url" content="__APP_ORIGIN__/diagnostic">
13
+ <meta property="og:type" content="website">
14
+ <style>
15
+ :root {
16
+ color-scheme: dark;
17
+ --bg: #05080a;
18
+ --panel: #0d1418;
19
+ --panel-2: #12181d;
20
+ --line: #24323a;
21
+ --text: #eef7f9;
22
+ --muted: #a9b7bd;
23
+ --cyan: #28d5ee;
24
+ --green: #48dd83;
25
+ --red: #ff7676;
26
+ --white: #ffffff;
27
+ }
28
+ * { box-sizing: border-box; }
29
+ body {
30
+ margin: 0;
31
+ min-height: 100vh;
32
+ background: var(--bg);
33
+ color: var(--text);
34
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
35
+ line-height: 1.5;
36
+ }
37
+ a { color: inherit; }
38
+ header, main, footer { width: min(1120px, calc(100% - 32px)); margin: 0 auto; }
39
+ header {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ gap: 24px;
44
+ padding: 24px 0;
45
+ }
46
+ .brand {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 10px;
50
+ font-weight: 800;
51
+ letter-spacing: 0;
52
+ }
53
+ .mark {
54
+ width: 28px;
55
+ height: 28px;
56
+ display: block;
57
+ }
58
+ nav { display: flex; gap: 18px; color: var(--muted); font-size: 14px; }
59
+ .hero {
60
+ display: grid;
61
+ grid-template-columns: minmax(0, 1.05fr) minmax(340px, 0.95fr);
62
+ gap: 36px;
63
+ align-items: start;
64
+ padding: 54px 0 40px;
65
+ }
66
+ .eyebrow {
67
+ color: var(--cyan);
68
+ font-size: 13px;
69
+ font-weight: 800;
70
+ text-transform: uppercase;
71
+ letter-spacing: .08em;
72
+ }
73
+ h1 {
74
+ margin: 14px 0 18px;
75
+ max-width: 720px;
76
+ font-size: clamp(42px, 6vw, 76px);
77
+ line-height: .92;
78
+ letter-spacing: 0;
79
+ }
80
+ .lede {
81
+ max-width: 650px;
82
+ margin: 0 0 26px;
83
+ color: var(--muted);
84
+ font-size: 20px;
85
+ }
86
+ .actions { display: flex; flex-wrap: wrap; gap: 12px; }
87
+ .button {
88
+ min-height: 48px;
89
+ display: inline-flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ padding: 0 18px;
93
+ border: 1px solid var(--line);
94
+ border-radius: 7px;
95
+ text-decoration: none;
96
+ font-weight: 800;
97
+ color: var(--text);
98
+ }
99
+ .button.primary {
100
+ border-color: var(--cyan);
101
+ background: var(--cyan);
102
+ color: #031014;
103
+ }
104
+ .proof-strip {
105
+ display: grid;
106
+ grid-template-columns: repeat(3, minmax(0, 1fr));
107
+ gap: 12px;
108
+ margin-top: 34px;
109
+ }
110
+ .proof {
111
+ min-height: 90px;
112
+ padding: 16px;
113
+ border: 1px solid var(--line);
114
+ background: var(--panel);
115
+ border-radius: 8px;
116
+ }
117
+ .proof strong { display: block; font-size: 20px; }
118
+ .proof span { color: var(--muted); font-size: 14px; }
119
+ .intake-card {
120
+ border: 1px solid var(--line);
121
+ background: var(--panel);
122
+ border-radius: 8px;
123
+ padding: 24px;
124
+ }
125
+ .intake-card h2 { margin: 0 0 10px; font-size: 24px; }
126
+ .intake-card p { color: var(--muted); margin: 0 0 18px; }
127
+ label {
128
+ display: block;
129
+ margin: 14px 0 7px;
130
+ color: var(--text);
131
+ font-size: 14px;
132
+ font-weight: 750;
133
+ }
134
+ input, textarea, select {
135
+ width: 100%;
136
+ border: 1px solid #32424a;
137
+ border-radius: 7px;
138
+ background: #070b0d;
139
+ color: var(--text);
140
+ padding: 12px;
141
+ font: inherit;
142
+ }
143
+ textarea { min-height: 116px; resize: vertical; }
144
+ button {
145
+ width: 100%;
146
+ min-height: 50px;
147
+ margin-top: 18px;
148
+ border: 0;
149
+ border-radius: 7px;
150
+ background: var(--cyan);
151
+ color: #031014;
152
+ font: inherit;
153
+ font-weight: 900;
154
+ cursor: pointer;
155
+ }
156
+ .hint { font-size: 13px; color: var(--muted); }
157
+ section {
158
+ padding: 40px 0;
159
+ border-top: 1px solid var(--line);
160
+ }
161
+ .grid {
162
+ display: grid;
163
+ grid-template-columns: repeat(3, minmax(0, 1fr));
164
+ gap: 16px;
165
+ }
166
+ .box {
167
+ min-height: 170px;
168
+ padding: 20px;
169
+ border: 1px solid var(--line);
170
+ border-radius: 8px;
171
+ background: var(--panel-2);
172
+ }
173
+ .box h3 { margin: 0 0 8px; }
174
+ .box p { margin: 0; color: var(--muted); }
175
+ footer { padding: 32px 0 44px; color: var(--muted); }
176
+ @media (max-width: 860px) {
177
+ header { align-items: flex-start; flex-direction: column; }
178
+ .hero, .grid, .proof-strip { grid-template-columns: 1fr; }
179
+ h1 { font-size: 42px; }
180
+ }
181
+ </style>
182
+ <script type="application/ld+json">
183
+ {
184
+ "@context": "https://schema.org",
185
+ "@type": "Service",
186
+ "name": "ThumbGate Workflow Hardening Diagnostic",
187
+ "provider": {
188
+ "@type": "Organization",
189
+ "name": "ThumbGate",
190
+ "url": "__APP_ORIGIN__"
191
+ },
192
+ "description": "A focused diagnostic for one repeated AI-agent workflow failure, including failure taxonomy, block/warn/human-review split, and proof checklist.",
193
+ "offers": {
194
+ "@type": "Offer",
195
+ "price": "__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__",
196
+ "priceCurrency": "USD",
197
+ "availability": "https://schema.org/InStock",
198
+ "url": "__APP_ORIGIN__/diagnostic"
199
+ }
200
+ }
201
+ </script>
202
+ </head>
203
+ <body>
204
+ <header>
205
+ <a class="brand" href="/">
206
+ <img class="mark" src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="ThumbGate" width="28" height="28" />
207
+ <span>ThumbGate</span>
208
+ </a>
209
+ <nav aria-label="Primary">
210
+ <a href="/pro">Pro</a>
211
+ <a href="/pricing">Pricing</a>
212
+ <a href="/llm-context.md">LLM Context</a>
213
+ </nav>
214
+ </header>
215
+ <main>
216
+ <div class="hero">
217
+ <div>
218
+ <div class="eyebrow">Workflow Hardening Diagnostic</div>
219
+ <h1>Turn one repeated AI-agent failure into a gate you can prove.</h1>
220
+ <p class="lede">Send the workflow that keeps failing. ThumbGate maps what should block, warn, or route to human review before an agent writes, sends, deploys, or spends.</p>
221
+ <div class="actions">
222
+ <a class="button primary" href="/go/diagnostic?utm_source=diagnostic_page&amp;utm_medium=onsite&amp;utm_campaign=workflow_hardening_diagnostic&amp;utm_content=hero_paid_diagnostic" data-revenue-cta data-cta-id="diagnostic_hero_paid" data-cta-placement="hero">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</a>
223
+ <a class="button" href="#intake" data-revenue-cta data-cta-id="diagnostic_hero_intake" data-cta-placement="hero">Send workflow first</a>
224
+ </div>
225
+ <div class="proof-strip" aria-label="Diagnostic proof points">
226
+ <div class="proof"><strong>$__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__</strong><span>Credited toward a sprint when implementation follows.</span></div>
227
+ <div class="proof"><strong>One workflow</strong><span>Scoped tightly so the proof is shippable.</span></div>
228
+ <div class="proof"><strong>Fit fallback</strong><span>Use the intake if the workflow needs scoping first.</span></div>
229
+ </div>
230
+ </div>
231
+ <form id="intake" class="intake-card" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form data-diagnostic-intake-form>
232
+ <h2>Submit for diagnostic scope</h2>
233
+ <p>Use this when an AI-assisted workflow has already caused rework, review drag, or release risk.</p>
234
+ <input type="hidden" name="ctaId" value="diagnostic_page_intake">
235
+ <input type="hidden" name="ctaPlacement" value="diagnostic_page">
236
+ <input type="hidden" name="utmMedium" value="diagnostic_intake">
237
+ <input type="hidden" name="utmCampaign" value="workflow_hardening_diagnostic">
238
+ <input type="hidden" name="planId" value="diagnostic">
239
+ <input type="hidden" name="page" value="/diagnostic">
240
+ <label for="name">Name</label>
241
+ <input id="name" name="name" autocomplete="name" required>
242
+ <label for="email">Work email</label>
243
+ <input id="email" name="email" type="email" autocomplete="email" required>
244
+ <label for="company">Company or project</label>
245
+ <input id="company" name="company" autocomplete="organization">
246
+ <label for="workflow">What workflow keeps failing?</label>
247
+ <textarea id="workflow" name="workflow" required placeholder="Example: agent opens PRs without the right proof, sends the wrong customer update, or deploys before approvals are clear."></textarea>
248
+ <label for="urgency">Urgency</label>
249
+ <select id="urgency" name="urgency">
250
+ <option>Repeated failure already cost us time</option>
251
+ <option>We are about to roll this workflow out</option>
252
+ <option>We need an independent proof checklist first</option>
253
+ </select>
254
+ <button type="submit" data-revenue-cta data-cta-id="diagnostic_page_submit" data-cta-placement="intake">Submit for diagnostic scope</button>
255
+ <p class="hint">Ready to pay now? Use the $499 diagnostic checkout above. If the workflow needs fit review first, submit it here and we will route you to the diagnostic or sprint only when the scope is real.</p>
256
+ </form>
257
+ </div>
258
+ <section>
259
+ <div class="grid">
260
+ <div class="box">
261
+ <h3>Failure taxonomy</h3>
262
+ <p>Classify the repeated action: bad context, missing approval, unsafe write, wrong target, or proof gap.</p>
263
+ </div>
264
+ <div class="box">
265
+ <h3>Gate split</h3>
266
+ <p>Define what should block automatically, warn the operator, or route to human review with evidence attached.</p>
267
+ </div>
268
+ <div class="box">
269
+ <h3>Proof checklist</h3>
270
+ <p>Leave with the verification steps needed to prove the next similar action is caught before execution.</p>
271
+ </div>
272
+ </div>
273
+ </section>
274
+ <section>
275
+ <h2>Use this for real agent workflows</h2>
276
+ <div class="grid">
277
+ <div class="box">
278
+ <h3>Code and PR agents</h3>
279
+ <p>Repeated bad diffs, missing tests, unsafe merges, or unclear ownership around generated changes.</p>
280
+ </div>
281
+ <div class="box">
282
+ <h3>Browser and ops agents</h3>
283
+ <p>Agents clicking, posting, updating CRMs, or moving money without the right boundary proof.</p>
284
+ </div>
285
+ <div class="box">
286
+ <h3>Customer-visible automation</h3>
287
+ <p>Email, support, billing, or publishing workflows where a repeat mistake costs trust.</p>
288
+ </div>
289
+ </div>
290
+ </section>
291
+ </main>
292
+ <footer>
293
+ ThumbGate is local-first agent governance. Use <a href="/pro">Pro</a> for self-serve operator proof, or submit one workflow above for a diagnostic.
294
+ </footer>
295
+ <script>
296
+ (function () {
297
+ const search = new URLSearchParams(window.location.search);
298
+ const form = document.querySelector('[data-diagnostic-intake-form]');
299
+ if (form) {
300
+ for (const [key, value] of search.entries()) {
301
+ if (!/^utm_|^(source|campaign|content|term)$/i.test(key)) continue;
302
+ let input = form.querySelector(`input[name="${CSS.escape(key)}"]`);
303
+ if (!input) {
304
+ input = document.createElement('input');
305
+ input.type = 'hidden';
306
+ input.name = key;
307
+ form.appendChild(input);
308
+ }
309
+ input.value = value;
310
+ }
311
+ }
312
+
313
+ function telemetry(eventName, props) {
314
+ try {
315
+ navigator.sendBeacon && navigator.sendBeacon('/v1/telemetry/event', JSON.stringify({
316
+ event: eventName,
317
+ page: '/diagnostic',
318
+ source: 'diagnostic_page',
319
+ props
320
+ }));
321
+ } catch (_) {}
322
+ }
323
+
324
+ document.addEventListener('click', function (event) {
325
+ const cta = event.target.closest('[data-revenue-cta]');
326
+ if (!cta) return;
327
+ telemetry('diagnostic_cta_click', {
328
+ ctaId: cta.getAttribute('data-cta-id'),
329
+ ctaPlacement: cta.getAttribute('data-cta-placement'),
330
+ planId: cta.getAttribute('data-cta-id') === 'diagnostic_secondary_pro' ? 'pro' : 'diagnostic'
331
+ });
332
+ });
333
+
334
+ document.addEventListener('submit', function (event) {
335
+ if (!event.target.matches('[data-diagnostic-intake-form]')) return;
336
+ telemetry('workflow_sprint_intake_submit_attempted', {
337
+ ctaId: 'diagnostic_page_submit',
338
+ ctaPlacement: 'diagnostic_page',
339
+ planId: 'diagnostic'
340
+ });
341
+ });
342
+ })();
343
+ </script>
344
+ </body>
345
+ </html>
@@ -16,7 +16,7 @@ __GOOGLE_SITE_VERIFICATION_META__
16
16
  <meta property="og:image" content="/og.png">
17
17
  <meta name="keywords" content="ThumbGate federal, AI agent governance federal, NIST 800-53 AI agent, OMB M-24-10, EO 14110, FedRAMP AI coding agent, federal AI use case inventory, agent audit log, agency AI policy enforcement, Bedrock GovCloud, Azure Government AI, SBIR AI governance">
18
18
 
19
- <script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
19
+ <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
20
20
  __GA_BOOTSTRAP__
21
21
 
22
22
  <script>
@@ -179,7 +179,7 @@ __GA_BOOTSTRAP__
179
179
  <nav>
180
180
  <div class="container">
181
181
  <a class="nav-logo" href="/">
182
- <img class="logo-mark" src="/assets/brand/thumbgate-mark.svg" alt="" />
182
+ <img class="logo-mark" src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="" />
183
183
  ThumbGate <span>/ federal</span>
184
184
  </a>
185
185
  <div class="nav-links">
package/public/guide.html CHANGED
@@ -5,14 +5,14 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>How to Stop AI Coding Agents From Repeating Mistakes — ThumbGate Guide</title>
7
7
  <!-- Privacy-friendly analytics by Plausible -->
8
- <script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
8
+ <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
9
9
  <meta name="description" content="The complete guide to preventing AI coding agent mistakes with pre-action checks, history-aware lesson distillation, and automatic prevention rules.">
10
10
  <meta name="keywords" content="AI agent mistakes, Claude Code force push, AI coding agent memory, MCP server guardrails, pre-action checks, vibe coding safety, PreToolUse hooks, ThumbGate, SpecLock alternative, Mem0 alternative">
11
11
  <meta property="og:title" content="How to Stop AI Coding Agents From Repeating Mistakes">
12
12
  <meta property="og:description" content="Pre-action checks that physically block AI agents from repeating known mistakes. The complete guide.">
13
13
  <meta property="og:type" content="article">
14
- <meta property="og:url" content="https://thumbgate-production.up.railway.app/guide">
15
- <link rel="canonical" href="https://thumbgate-production.up.railway.app/guide">
14
+ <meta property="og:url" content="https://thumbgate.ai/guide">
15
+ <link rel="canonical" href="https://thumbgate.ai/guide">
16
16
 
17
17
  <script type="application/ld+json">
18
18
  {
@@ -28,11 +28,11 @@
28
28
  "publisher": {
29
29
  "@type": "Organization",
30
30
  "name": "ThumbGate",
31
- "url": "https://thumbgate-production.up.railway.app"
31
+ "url": "https://thumbgate.ai"
32
32
  },
33
33
  "datePublished": "2026-03-27",
34
34
  "dateModified": "2026-04-25",
35
- "mainEntityOfPage": "https://thumbgate-production.up.railway.app/guide",
35
+ "mainEntityOfPage": "https://thumbgate.ai/guide",
36
36
  "about": [
37
37
  {"@type": "Thing", "name": "AI coding agents"},
38
38
  {"@type": "Thing", "name": "Model Context Protocol"},
@@ -246,6 +246,29 @@ npx thumbgate init --agent codex
246
246
  npx thumbgate init --agent cursor
247
247
  npx thumbgate init --agent gemini</code></pre>
248
248
 
249
+ <h3>Install scope: machine-wide vs per-project</h3>
250
+ <p>ThumbGate supports two install scopes. Pick once when you install — you can switch later by re-running with the other flag.</p>
251
+ <table>
252
+ <thead>
253
+ <tr><th>Scope</th><th>Command</th><th>Where lessons + dashboard live</th><th>When to use</th></tr>
254
+ </thead>
255
+ <tbody>
256
+ <tr>
257
+ <td><strong>Machine-wide</strong> (default)</td>
258
+ <td><code>npx thumbgate init</code></td>
259
+ <td><code>~/.claude/memory/feedback/</code> — <strong>one shared dashboard across every repo on the machine</strong></td>
260
+ <td>Solo developer. A lesson learned in <code>repo-A</code> automatically blocks the same mistake in <code>repo-B</code>.</td>
261
+ </tr>
262
+ <tr>
263
+ <td><strong>Per-project</strong></td>
264
+ <td><code>npx thumbgate init --project</code> (run inside the repo)</td>
265
+ <td><code>&lt;repo&gt;/.claude/memory/feedback/</code> — <strong>separate dashboard per repo</strong></td>
266
+ <td>Client work, compliance, or multi-tenant. Lessons stay isolated; the audit trail belongs to the repo.</td>
267
+ </tr>
268
+ </tbody>
269
+ </table>
270
+ <p>Both scopes wire the same MCP server and PreToolUse / UserPromptSubmit / PostToolUse / SessionStart hooks — only the storage location differs. Machine-wide is the right default for most developers. Per-project lesson DBs live under each repo's <code>.claude/memory/feedback/</code> and <strong>must stay gitignored</strong>; ThumbGate's bundled <code>.gitignore</code> handles that.</p>
271
+
249
272
  <h2>How It Works</h2>
250
273
 
251
274
  <h3>1. You give feedback</h3>
@@ -307,7 +330,7 @@ npx thumbgate init --agent gemini</code></pre>
307
330
  <tr><td>Auto-generates rules</td><td>Yes — from repeated failures</td><td>No</td><td>No</td></tr>
308
331
  <tr><td>Agent support</td><td>Claude Code, Codex, Gemini, Amp, Cursor, OpenCode</td><td>Claude Code, Cursor, Windsurf, Cline</td><td>Claude, Cursor</td></tr>
309
332
  <tr><td>Install</td><td><code>npx thumbgate init</code></td><td><code>npx speclock setup</code></td><td>Cloud signup</td></tr>
310
- <tr><td>Cost</td><td>Free (Pro $19/mo or $149/yr, Team rollout $49/seat/mo)</td><td>Free</td><td>Free tier + paid</td></tr>
333
+ <tr><td>Cost</td><td>Free (Pro $19/mo or $149/yr, Enterprise custom pricing)</td><td>Free</td><td>Free tier + paid</td></tr>
311
334
  </table>
312
335
 
313
336
  <h2>Common Scenarios</h2>
@@ -343,21 +366,18 @@ npx thumbgate init --agent gemini</code></pre>
343
366
  <strong>Verification Evidence</strong>
344
367
  <span>Human-readable proof log for the engineering and workflow claims used across the site.</span>
345
368
  </a>
346
- <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json" target="_blank" rel="noopener">
347
- <strong>Automation Proof</strong>
348
- <span>Machine-readable report for the feedback, enforcement, and automation surfaces behind ThumbGate.</span>
349
- </a>
350
369
  </div>
351
370
 
352
371
  <h2>Get Started</h2>
353
372
  <pre><code>npx thumbgate init</code></pre>
354
373
  <p>One command. Works with Claude Code, Cursor, Codex, Gemini, Amp, and OpenCode. Claude Code can also call Codex for review, adversarial review, and second-pass handoffs through the repo-local bridge plugin.</p>
355
374
  <a href="https://thumbgate.ai/checkout/pro?utm_source=guide&utm_medium=cta_button&utm_campaign=pro_pack" class="cta">Get Pro — $19/mo or $149/yr</a>
356
- <a rel="nofollow noopener noreferrer" target="_blank" href="https://buy.stripe.com/00w14neyUcXA5pL5e33sI0e" class="cta cta-secondary">Pay $499 diagnostic</a>
357
- <a rel="nofollow noopener noreferrer" target="_blank" href="https://buy.stripe.com/fZu9AT76saPsg4pbCr3sI0f" class="cta cta-secondary">Pay $1500 sprint</a>
375
+ <a href="__SPRINT_DIAGNOSTIC_CHECKOUT_URL__" class="cta cta-secondary">Pay $499 diagnostic</a>
376
+ <a href="__WORKFLOW_SPRINT_CHECKOUT_URL__" class="cta cta-secondary">Pay $1500 sprint</a>
358
377
  <a href="https://thumbgate.ai/#workflow-sprint-intake" class="cta cta-secondary">Send workflow first</a>
359
- <p style="color:var(--muted); font-size:0.85rem;">Free: unlimited captures, 5 active prevention rules, hook blocking. Pro: dashboard, recall, lesson search, unlimited rules, DPO export. Team: intake first, then $49/seat/mo with a 3-seat minimum.</p>
378
+ <p style="color:var(--muted); font-size:0.85rem;">Free: 2 captures/day, 10 total captures, 3 active prevention rules, hook blocking. Pro: hosted sync, dashboard, recall, lesson search, unlimited captures/rules, DPO export. Enterprise: intake first, then custom pricing scoped to your rollout.</p>
360
379
 
361
380
  </div>
381
+ <script src="/js/buyer-intent.js"></script>
362
382
  </body>
363
383
  </html>