thumbgate 1.28.4 → 1.29.2

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 (87) hide show
  1. package/.claude/commands/dashboard.md +11 -1
  2. package/.claude/commands/thumbgate-dashboard.md +23 -8
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/.well-known/llms.txt +18 -10
  5. package/.well-known/mcp/server-card.json +1 -1
  6. package/README.md +66 -3
  7. package/adapters/claude/.mcp.json +2 -2
  8. package/adapters/forge/forge.yaml +3 -3
  9. package/adapters/mcp/server-stdio.js +88 -2
  10. package/adapters/opencode/opencode.json +1 -1
  11. package/bin/cli.js +8 -8
  12. package/bin/postinstall.js +4 -13
  13. package/commands/dashboard.md +11 -1
  14. package/commands/thumbgate-dashboard.md +23 -8
  15. package/config/agent-outcome-monitor-thresholds.json +63 -0
  16. package/config/evals/agent-outcomes-baseline.json +17 -0
  17. package/config/evals/agent-outcomes-golden.json +412 -0
  18. package/config/evals/prompt-eval-baseline.json +23 -0
  19. package/config/github-about.json +5 -4
  20. package/config/post-deploy-marketing-pages.json +6 -6
  21. package/config/schemas/task-outcome-receipt.schema.json +296 -0
  22. package/docs/integrations/grafana/README.md +109 -0
  23. package/docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json +1930 -0
  24. package/openapi/openapi.yaml +475 -5
  25. package/package.json +75 -22
  26. package/public/agent-manager.html +10 -11
  27. package/public/agents-cost-savings.html +2 -2
  28. package/public/assets/brand/thumbgate-logo-transparent.svg +6 -11
  29. package/public/assets/brand/thumbgate-mark-inline-v3.svg +11 -10
  30. package/public/assets/brand/thumbgate-mark.svg +10 -11
  31. package/public/blog/inside-your-boundary.html +114 -0
  32. package/public/blog/process-over-outcome-gates.html +119 -0
  33. package/public/blog.html +296 -402
  34. package/public/brand/thumbgate-mark.svg +5 -9
  35. package/public/codex-enterprise.html +2 -2
  36. package/public/compare.html +12 -3
  37. package/public/diagnostic.html +79 -29
  38. package/public/guide.html +4 -4
  39. package/public/index.html +1090 -2098
  40. package/public/install.html +3 -3
  41. package/public/js/buyer-intent.js +33 -18
  42. package/public/numbers.html +2 -2
  43. package/public/pricing.html +268 -408
  44. package/public/pro.html +4 -4
  45. package/scripts/agent-outcome-eval.js +130 -0
  46. package/scripts/agent-outcome-monitor.js +261 -0
  47. package/scripts/agent-reasoning-traces.js +8 -9
  48. package/scripts/async-job-runner.js +107 -13
  49. package/scripts/billing.js +456 -126
  50. package/scripts/buyer-paths.js +102 -0
  51. package/scripts/cli-feedback.js +2 -2
  52. package/scripts/commercial-offer.js +18 -10
  53. package/scripts/durability/step.js +121 -12
  54. package/scripts/external-customer-audit.js +881 -0
  55. package/scripts/feedback-loop.js +26 -0
  56. package/scripts/gates-engine.js +554 -19
  57. package/scripts/grafana-revenue-evidence.js +856 -0
  58. package/scripts/human-escalation.js +265 -0
  59. package/scripts/hybrid-feedback-context.js +93 -50
  60. package/scripts/jsonl-window.js +89 -0
  61. package/scripts/judge-reward-function.js +30 -18
  62. package/scripts/lesson-embedding-index.js +3 -7
  63. package/scripts/meta-agent-loop.js +20 -2
  64. package/scripts/observability-env.js +139 -0
  65. package/scripts/observability-setup.js +55 -0
  66. package/scripts/plausible-domain-config.js +4 -0
  67. package/scripts/prompt-eval.js +81 -4
  68. package/scripts/provider-live-evidence.js +1290 -0
  69. package/scripts/provider-payment-reconciler.js +442 -0
  70. package/scripts/provider-revenue-evidence.js +249 -0
  71. package/scripts/rate-limiter.js +1 -5
  72. package/scripts/revenue-action-eligibility.js +414 -0
  73. package/scripts/revenue-evidence-remediation.js +694 -0
  74. package/scripts/revenue-offer-system.js +709 -0
  75. package/scripts/sales-pipeline.js +1117 -0
  76. package/scripts/schedule-manager.js +249 -0
  77. package/scripts/seo-gsd.js +8 -4
  78. package/scripts/stripe-credentials.js +37 -0
  79. package/scripts/stripe-revenue-catalog-audit.js +363 -0
  80. package/scripts/stripe-revenue-catalog.js +164 -0
  81. package/scripts/task-outcomes.js +425 -0
  82. package/scripts/telemetry-analytics.js +23 -3
  83. package/scripts/tool-contract-validator.js +287 -59
  84. package/scripts/tool-registry.js +143 -0
  85. package/scripts/vector-store.js +83 -7
  86. package/scripts/workflow-intake-queue.js +483 -0
  87. package/src/api/server.js +647 -118
package/public/blog.html CHANGED
@@ -3,472 +3,366 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>ThumbGate Blog — Agent Governance Engineering</title>
6
+ <title>ThumbGate Blog — Self-Improving Firewall Engineering</title>
7
7
  <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
8
8
  <meta
9
9
  name="description"
10
- content="Technical breakdowns, release notes, and agent governance insights from the ThumbGate team."
11
- />
12
- <link
13
- rel="canonical"
14
- href="https://thumbgate.ai/blog"
15
- />
16
- <meta
17
- property="og:title"
18
- content="ThumbGate Blog — Agent Governance Engineering"
10
+ content="Engineering notes on pre-action checks, process-over-outcome gates, and local-first agent governance from the ThumbGate team."
19
11
  />
12
+ <link rel="canonical" href="https://thumbgate.ai/blog" />
13
+ <meta property="og:title" content="ThumbGate Blog — Self-Improving Firewall Engineering" />
20
14
  <meta
21
15
  property="og:description"
22
- content="Technical breakdowns, release notes, and agent governance insights from the ThumbGate team."
16
+ content="Process-over-outcome gates, boundary-local enforcement, and release notes for ThumbGate."
23
17
  />
24
18
  <meta property="og:type" content="website" />
25
- <meta
26
- property="og:url"
27
- content="https://thumbgate.ai/blog"
28
- />
19
+ <meta property="og:url" content="https://thumbgate.ai/blog" />
20
+ <meta property="og:image" content="https://thumbgate.ai/og.png" />
21
+ <link rel="icon" type="image/png" href="/thumbgate-icon.png" />
29
22
  <script type="application/ld+json">
30
23
  {
31
24
  "@context": "https://schema.org",
32
25
  "@type": "Blog",
33
26
  "name": "ThumbGate Blog",
34
27
  "url": "https://thumbgate.ai/blog",
35
- "publisher": { "@type": "Organization", "name": "ThumbGate" },
28
+ "description": "Engineering notes on pre-action checks, process-over-outcome gates, and local-first agent governance.",
29
+ "publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate.ai" },
36
30
  "blogPost": [
37
31
  {
38
32
  "@type": "BlogPosting",
39
- "headline": "Your AI agent is a supply chain attack surface. Here's how to gate it.",
40
- "datePublished": "2026-04-10",
41
- "keywords": "AI agent security, supply chain attack, pre-action checks, agent governance, ThumbGate"
33
+ "headline": "Process over outcome: gates for self-improving coding loops",
34
+ "url": "https://thumbgate.ai/blog/process-over-outcome-gates",
35
+ "datePublished": "2026-07-23",
36
+ "keywords": "reward hacking, autoresearch, process over outcome, self-improving agents, ThumbGate"
42
37
  },
43
38
  {
44
39
  "@type": "BlogPosting",
45
- "headline": "The Claude Code Leak Proves Why Pre-Action Checks Matter",
46
- "datePublished": "2026-04-01",
47
- "keywords": "Claude Code security, Claude Code guardrails, AI agent safety, pre-action checks"
40
+ "headline": "AI inside your boundary: governance without relaxing controls",
41
+ "url": "https://thumbgate.ai/blog/inside-your-boundary",
42
+ "datePublished": "2026-07-23",
43
+ "keywords": "local-first, security boundary, audit trail, enterprise agent governance, ThumbGate"
44
+ },
45
+ {
46
+ "@type": "BlogPosting",
47
+ "headline": "Your AI agent is a supply chain attack surface. Here's how to gate it.",
48
+ "url": "https://thumbgate.ai/blog#supply-chain",
49
+ "datePublished": "2026-04-10"
48
50
  },
49
51
  {
50
52
  "@type": "BlogPosting",
51
- "headline": "v0.8.5: Gate Reasoning Chains, Org Dashboard, and the Checkout Funnel That Didn't Exist",
52
- "datePublished": "2026-03-31"
53
+ "headline": "The Claude Code Leak Proves Why Pre-Action Checks Matter",
54
+ "url": "https://thumbgate.ai/blog#claude-code-leak",
55
+ "datePublished": "2026-04-01"
53
56
  }
54
57
  ]
55
58
  }
56
59
  </script>
57
60
  <style>
58
61
  :root {
59
- --bg: #0a0a0a;
60
- --surface: #141414;
61
- --border: #2a2a2a;
62
- --text: #e0e0e0;
63
- --text-dim: #888;
64
- --cyan: #00d4aa;
65
- }
66
- * {
67
- margin: 0;
68
- padding: 0;
69
- box-sizing: border-box;
62
+ color-scheme: dark;
63
+ --bg: #080b10;
64
+ --panel: #111722;
65
+ --text: #f5f7fb;
66
+ --muted: #9ca8ba;
67
+ --line: #273246;
68
+ --cyan: #38d7ff;
69
+ --green: #56e39f;
70
+ --max: 980px;
70
71
  }
72
+ * { box-sizing: border-box; }
71
73
  body {
72
- font-family:
73
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
74
- background: var(--bg);
74
+ margin: 0;
75
75
  color: var(--text);
76
- line-height: 1.7;
77
- }
78
- .container {
79
- max-width: 720px;
80
- margin: 0 auto;
81
- padding: 0 24px;
76
+ background:
77
+ radial-gradient(circle at 78% 0%, rgba(56, 215, 255, 0.12), transparent 28rem),
78
+ linear-gradient(180deg, #080b10 0%, #0b1018 50%, #080b10 100%);
79
+ font: 16px/1.65 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
82
80
  }
81
+ a { color: inherit; }
82
+ .shell { width: min(calc(100% - 40px), var(--max)); margin: 0 auto; }
83
83
  header {
84
- padding: 24px 0;
85
- border-bottom: 1px solid var(--border);
84
+ position: sticky;
85
+ top: 0;
86
+ z-index: 10;
87
+ border-bottom: 1px solid rgba(39, 50, 70, 0.75);
88
+ background: rgba(8, 11, 16, 0.9);
89
+ backdrop-filter: blur(14px);
86
90
  }
87
- header a {
88
- color: var(--cyan);
91
+ .nav {
92
+ min-height: 68px;
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: space-between;
96
+ gap: 18px;
97
+ }
98
+ .brand {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ gap: 10px;
102
+ font-weight: 850;
89
103
  text-decoration: none;
90
- font-weight: 600;
91
104
  }
92
- h1 {
93
- font-size: 18px;
94
- font-weight: 700;
105
+ .brand img { width: 28px; height: 28px; }
106
+ .nav-links { display: flex; gap: 18px; align-items: center; }
107
+ .nav-links a { color: var(--muted); text-decoration: none; font-size: 14px; font-weight: 700; }
108
+ .nav-links a:hover { color: var(--text); }
109
+ .nav-buy {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ min-height: 40px;
113
+ padding: 0 14px;
114
+ border-radius: 10px;
115
+ background: var(--green);
116
+ color: #06130d !important;
117
+ font-weight: 850;
118
+ text-decoration: none;
95
119
  }
96
- .post {
97
- padding: 48px 0;
98
- border-bottom: 1px solid var(--border);
120
+ .hero { padding: 72px 0 28px; }
121
+ .eyebrow {
122
+ color: var(--green);
123
+ font: 800 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
124
+ letter-spacing: 0.12em;
125
+ text-transform: uppercase;
99
126
  }
100
- .post-date {
101
- font-size: 13px;
102
- color: var(--text-dim);
103
- margin-bottom: 8px;
127
+ h1 {
128
+ max-width: 14em;
129
+ margin: 14px 0 12px;
130
+ font-size: clamp(36px, 6vw, 56px);
131
+ line-height: 1.02;
132
+ letter-spacing: -0.04em;
104
133
  }
105
- .post h2 {
106
- font-size: 24px;
107
- font-weight: 700;
108
- margin-bottom: 16px;
109
- letter-spacing: -0.02em;
134
+ .lede { max-width: 42em; margin: 0; color: var(--muted); font-size: 18px; }
135
+ .series { padding: 28px 0 10px; }
136
+ .series-title {
137
+ margin: 0 0 14px;
138
+ color: var(--cyan);
139
+ font: 800 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
140
+ letter-spacing: 0.12em;
141
+ text-transform: uppercase;
110
142
  }
111
- .post h3 {
112
- font-size: 18px;
113
- font-weight: 600;
114
- margin: 24px 0 8px;
143
+ .cards { display: grid; gap: 12px; }
144
+ .card {
145
+ display: block;
146
+ padding: 22px 22px 20px;
147
+ border: 1px solid var(--line);
148
+ border-radius: 14px;
149
+ background: var(--panel);
150
+ text-decoration: none;
151
+ transition: border-color 0.15s, background 0.15s;
115
152
  }
116
- .post p {
117
- margin-bottom: 16px;
118
- color: var(--text-dim);
153
+ .card:hover {
154
+ border-color: rgba(56, 215, 255, 0.35);
155
+ background: #141c2a;
119
156
  }
120
- .post ul {
121
- margin: 0 0 16px 24px;
122
- color: var(--text-dim);
157
+ .card-meta {
158
+ display: flex;
159
+ flex-wrap: wrap;
160
+ gap: 10px;
161
+ margin-bottom: 10px;
162
+ color: var(--muted);
163
+ font: 700 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
164
+ letter-spacing: 0.04em;
165
+ text-transform: uppercase;
123
166
  }
124
- .post li {
125
- margin-bottom: 6px;
167
+ .card h2 {
168
+ margin: 0 0 8px;
169
+ font-size: clamp(20px, 3vw, 26px);
170
+ line-height: 1.2;
171
+ letter-spacing: -0.03em;
126
172
  }
127
- .post code {
128
- background: var(--surface);
129
- padding: 2px 6px;
130
- border-radius: 4px;
131
- font-size: 14px;
173
+ .card p { margin: 0; color: var(--muted); font-size: 15px; }
174
+ .card .arrow { display: inline-block; margin-top: 12px; color: var(--cyan); font-weight: 750; font-size: 14px; }
175
+ .archive { padding: 36px 0 72px; border-top: 1px solid rgba(39, 50, 70, 0.65); margin-top: 36px; }
176
+ .archive h2 {
177
+ margin: 0 0 16px;
178
+ font-size: 22px;
179
+ letter-spacing: -0.03em;
132
180
  }
133
- .post strong {
181
+ .archive-list { display: grid; gap: 10px; }
182
+ .archive a {
183
+ display: flex;
184
+ justify-content: space-between;
185
+ gap: 16px;
186
+ padding: 14px 0;
187
+ border-bottom: 1px solid rgba(39, 50, 70, 0.55);
134
188
  color: var(--text);
135
- }
136
- .cta {
137
- display: inline-block;
138
- margin-top: 16px;
139
- padding: 10px 20px;
140
- background: var(--cyan);
141
- color: #000;
142
- border-radius: 6px;
143
189
  text-decoration: none;
144
- font-weight: 600;
145
- font-size: 14px;
146
190
  }
191
+ .archive a span { color: var(--muted); font-size: 13px; white-space: nowrap; }
147
192
  footer {
148
- padding: 48px 0 24px;
149
- text-align: center;
150
- color: var(--text-dim);
193
+ padding: 28px 0 48px;
194
+ border-top: 1px solid var(--line);
195
+ color: var(--muted);
151
196
  font-size: 13px;
152
197
  }
153
- footer a {
154
- color: var(--cyan);
155
- text-decoration: none;
198
+ footer a { color: var(--cyan); text-decoration: none; }
199
+ @media (max-width: 640px) {
200
+ .shell { width: min(calc(100% - 24px), var(--max)); }
201
+ .nav-links a:not(.nav-buy) { display: none; }
202
+ .archive a { flex-direction: column; gap: 4px; }
156
203
  }
157
204
  </style>
158
205
  </head>
159
206
  <body>
160
207
  <header>
161
- <div
162
- class="container"
163
- style="
164
- display: flex;
165
- justify-content: space-between;
166
- align-items: center;
167
- "
168
- >
169
- <h1><a href="/">ThumbGate</a> / Blog</h1>
170
- <a href="/">Back to home</a>
208
+ <div class="shell nav">
209
+ <a class="brand" href="/">
210
+ <img src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="" width="28" height="28" />
211
+ ThumbGate / Blog
212
+ </a>
213
+ <div class="nav-links">
214
+ <a href="/guide">Setup</a>
215
+ <a href="/learn">Learn</a>
216
+ <a href="/guides">Guides</a>
217
+ <a class="nav-buy" href="/#buy">Enterprise gate · $499</a>
218
+ </div>
171
219
  </div>
172
220
  </header>
173
221
 
174
- <div class="container">
175
- <article class="post">
176
- <div class="post-date">April 10, 2026</div>
177
- <h2>Your AI agent is a supply chain attack surface. Here's how to gate it.</h2>
178
-
179
- <p>
180
- Your AI coding agent runs shell commands. It installs packages. It
181
- modifies files, pushes commits, and calls external APIs &mdash; all
182
- without requiring you to type a single character. That's the pitch.
183
- That's also the attack surface.
184
- </p>
185
-
186
- <h3>The gap is pre-action enforcement</h3>
187
- <p>
188
- Static analysis catches known-bad patterns in code you've already
189
- written. Dependency scanners audit lock files <em>after</em> packages
190
- are installed. By the time your scanner flags a problem, the agent
191
- already ran the command.
192
- </p>
193
- <p>
194
- These tools operate on the <em>output</em> of agent actions. You need
195
- something that operates on the <em>input</em> &mdash; before execution.
196
- </p>
197
-
198
- <h3>Pre-Action Checks via PreToolUse hooks</h3>
199
- <p>
200
- ThumbGate implements pre-action checks via <code>PreToolUse</code> hooks
201
- &mdash; interception points that run before every tool invocation. No
202
- action reaches execution without passing through the gate. Not Bash
203
- commands, not file edits, not web fetches.
204
- </p>
205
- <p>
206
- What makes this more than a static blocklist is the
207
- <strong>feedback-to-enforcement pipeline</strong>. When something goes
208
- wrong, you record a thumbs-down with context. That failure feeds a
209
- promotion engine. One failure becomes a warning. Three confirmed
210
- failures of the same pattern become a hard block.
211
- </p>
212
-
213
- <h3>Real examples</h3>
214
- <ul>
215
- <li>
216
- <strong>Force-push to main</strong> &mdash; Gate fires and logs;
217
- the agent is redirected to create a branch and open a PR. Hard-blocked
218
- under strict enforcement.
219
- </li>
220
- <li>
221
- <strong>Unknown dependency install</strong> &mdash; Flagged for human
222
- review. Agent pauses until you approve.
223
- </li>
224
- <li>
225
- <strong>Destructive shell command</strong> &mdash; Hard-blocked by a
226
- prevention rule learned from a prior incident (destructive deletes are
227
- a hard-block class by default).
228
- </li>
229
- </ul>
230
-
231
- <h3>Five-minute setup</h3>
232
- <p>
233
- <code>npx thumbgate init</code> installs the PreToolUse hook and
234
- generates a starter gate config. Gates are just JSON &mdash; commit
235
- them, review them, share them across your team.
236
- </p>
237
- <p>
238
- <strong>Human judgment leads. AI supports. ThumbGate enforces it.</strong>
239
- </p>
240
-
241
- <a class="cta" href="/guide">Full setup guide &rarr;</a>
242
- </article>
243
-
244
- <article class="post">
245
- <div class="post-date">April 1, 2026</div>
246
- <h2>Dual-Signal Feedback: Why "What Failed" Isn't Enough</h2>
247
-
248
- <p>
249
- Standard thumbs-down tells you <em>something</em> went wrong. But was
250
- it a bad decision (wrong tool) or bad execution (right tool, wrong
251
- parameters)?
222
+ <main class="shell">
223
+ <section class="hero">
224
+ <div class="eyebrow">Work in the open</div>
225
+ <h1>Engineering notes on the self-improving firewall.</h1>
226
+ <p class="lede">
227
+ How pre-action checks learn from feedback, when outcome metrics get gamed, and how to keep agent control inside your boundary—without a monorepo of product docs on every page.
252
228
  </p>
253
-
254
- <p>
255
- Inspired by
256
- <a
257
- href="https://huggingface.co/papers/2603.28767"
258
- style="color: var(--cyan)"
259
- >Gen-Searcher's dual reward system</a
260
- >, ThumbGate now supports an optional <code>failureType</code> field
261
- on <code>capture_feedback</code>:
262
- </p>
263
-
264
- <ul>
265
- <li>
266
- <strong><code>"decision"</code></strong> — the agent chose the wrong
267
- action entirely
268
- </li>
269
- <li>
270
- <strong><code>"execution"</code></strong> right action, bad
271
- parameters or output
272
- </li>
273
- </ul>
274
-
275
- <p>
276
- Thompson Sampling creates separate sub-arms (e.g.,
277
- <code>git:decision</code> and <code>git:execution</code>) so
278
- reliability scores diverge per dimension. An agent might be great at
279
- choosing git commands but bad at parameterizing them — now you can see
280
- that distinction.
281
- </p>
282
-
283
- <p>
284
- Backward compatible. Existing feedback without
285
- <code>failureType</code> works unchanged.
286
- </p>
287
-
288
- <a class="cta" href="https://www.npmjs.com/package/thumbgate"
289
- >Try it now</a
290
- >
291
- </article>
292
-
293
- <article class="post">
294
- <div class="post-date">April 1, 2026</div>
295
- <h2>The Claude Code Leak Proves Why Pre-Action Checks Matter</h2>
296
-
297
- <p>
298
- A public Claude Code packaging incident showed why local agent
299
- guardrails need to be evaluated as runtime behavior, not only as
300
- documentation. When implementation details move quickly, teams need a
301
- way to verify what their agents are allowed to do before the next tool
302
- call runs.
303
- </p>
304
-
305
- <p>
306
- The lesson for agent builders is practical: permissions, hooks, retry
307
- loops, and local memory are product surfaces. Treat them as governed
308
- workflow boundaries, not as invisible plumbing.
309
- </p>
310
-
311
- <h3>What the leak revealed about agent security</h3>
312
- <p>
313
- Claude Code has a sophisticated permission model and tool-calling
314
- pipeline. What it does <strong>not</strong> have is feedback-driven
315
- enforcement — the ability to learn from past mistakes and flag the
316
- agent (hard-blocking the catastrophic ones, or any rule under strict
317
- enforcement) before it repeats them.
318
- </p>
319
-
320
- <p>
321
- That's exactly what ThumbGate does. Every Claude Code user — and every
322
- Claw-code user — can add pre-action checks today:
323
- </p>
324
-
325
- <ul>
326
- <li>
327
- <strong>Thumbs-down a mistake</strong> — it auto-generates a
328
- prevention rule
329
- </li>
330
- <li>
331
- <strong>Gates enforce</strong> — PreToolUse hooks flag and log the
332
- action before execution, and hard-block the catastrophic ones (or any
333
- rule under strict enforcement)
334
- </li>
335
- <li>
336
- <strong>Reasoning chains explain</strong> — every block tells you
337
- WHY
338
- </li>
339
- <li>
340
- <strong>Thompson Sampling adapts</strong> — confidence tiers prevent
341
- false blocks
342
- </li>
343
- </ul>
344
-
345
- <h3>Install in 30 seconds</h3>
346
- <p>
347
- <code>npx thumbgate init</code> works with Claude Code,
348
- Claw-code, Cursor, Codex, Gemini, Amp, and any MCP-compatible agent.
349
- </p>
350
-
351
- <p>
352
- Agents are powerful but fallible software. Memory without enforcement
353
- is a suggestion. ThumbGate adds a pre-action check layer so repeated
354
- mistakes can be caught before execution.
355
- </p>
356
-
357
- <a class="cta" href="https://www.npmjs.com/package/thumbgate"
358
- >Install ThumbGate</a
359
- >
360
- </article>
361
-
362
- <article class="post">
363
- <div class="post-date">March 31, 2026</div>
364
- <h2>
365
- v0.8.5: Gate Reasoning Chains, Org Dashboard, and the Checkout Funnel
366
- That Didn't Exist
367
- </h2>
368
-
369
- <p>
370
- ThumbGate v0.8.5 is our biggest release yet. Here's what shipped and
371
- why.
372
- </p>
373
-
374
- <h3>The problem we didn't see</h3>
375
- <p>
376
- The problem we missed was structural: users can arrive through npm or
377
- the GitHub README, run <code>npx thumbgate init</code>, use the free
378
- local install, and never visit the landing page. A checkout flow that
379
- only exists on the website is easy for CLI-first users to miss.
380
- </p>
381
-
382
- <h3>Gate reasoning chains</h3>
383
- <p>
384
- Every gate block and warning now explains <strong>WHY</strong> it
385
- fired. When ThumbGate blocks a <code>git push --force</code>, the
386
- response includes:
387
- </p>
388
- <ul>
389
- <li>Which pattern matched and what it matched against</li>
390
- <li>Gate identity: ID, action, layer, severity</li>
391
- <li>Source: manual policy rule vs auto-promoted from feedback</li>
392
- <li>
393
- How to bypass: <code>satisfy_gate("pr_threads_checked")</code>
394
- </li>
395
- <li>Historical fire count: "blocked 23x, warned 15x"</li>
396
- </ul>
397
- <p>
398
- This was inspired by the neuro-symbolic explainability trend in
399
- production AI systems. Gates are the symbolic rules; Thompson Sampling
400
- provides the statistical confidence. The reasoning chain bridges both.
401
- </p>
402
-
403
- <h3>Multi-agent org dashboard</h3>
404
- <p>
405
- "I'm not going to have 10,000 agents running in the environment that I
406
- don't know what they're doing." — CIO.com, March 2026
407
- </p>
408
- <p>
409
- The new <code>org_dashboard</code> MCP tool aggregates gate decisions
410
- across all registered agent sessions. CIOs and team leads see: total
411
- active agents, org-wide adherence rate, top blocked gates, and risk
412
- agents (those with the lowest adherence). Free tier shows 3 agents;
413
- Pro shows the full org.
414
- </p>
415
-
416
- <h3>Multi-hop agentic retrieval</h3>
417
- <p>
418
- Inspired by Chroma's Context-1,
419
- <code>constructMultiHopPack</code> iteratively retrieves context,
420
- prunes weak chunks, refines the query with expansion terms, and checks
421
- coverage — stopping when the coverage threshold (60%) is met or max
422
- hops are reached. Each hop is logged.
423
- </p>
424
-
425
- <h3>Thompson Sampling calibration</h3>
426
- <p>
427
- <code>MIN_SAMPLES_THRESHOLD</code> (5) prevents low-sample
428
- overconfidence. <code>getCalibration()</code> reports per-category
429
- confidence tiers: none (0 samples), low (1-4), medium (5-19), high
430
- (20+). Callers know when to trust the statistical arm vs fall back to
431
- rules.
432
- </p>
433
-
434
- <h3>The funnel fix</h3>
435
- <p>
436
- Four touchpoints now put the checkout URL closer to the CLI workflow:
437
- </p>
438
- <ul>
439
- <li>
440
- <strong>Post-install banner</strong> — prints after
441
- <code>npm install</code> (stderr, CI-safe)
442
- </li>
443
- <li>
444
- <strong>Free-tier rate limits</strong> — power features capped,
445
- upgrade URL in error
446
- </li>
447
- <li>
448
- <strong>MCP enforceLimit</strong> — agents surface the checkout URL
449
- when limits hit
450
- </li>
451
- <li>
452
- <strong>CLI upgrade nudge</strong> — after <code>init</code>,
453
- <code>capture</code>, <code>stats</code>
454
- </li>
455
- </ul>
456
- <p>
457
- 13 funnel invariant CI tests prevent this blindspot from ever
458
- regressing.
459
- </p>
460
-
461
- <a class="cta" href="https://www.npmjs.com/package/thumbgate"
462
- >Install v0.8.5 on npm</a
463
- >
464
- </article>
465
- </div>
229
+ </section>
230
+
231
+ <section class="series" aria-labelledby="series-reward">
232
+ <h2 class="series-title" id="series-reward">Process over outcome</h2>
233
+ <div class="cards">
234
+ <a class="card" href="/blog/process-over-outcome-gates">
235
+ <div class="card-meta"><span>2026-07-23</span><span>Self-improving loops</span></div>
236
+ <h2>Process over outcome: gates for self-improving coding loops</h2>
237
+ <p>
238
+ Reward hacks and metric gaming are not only a training problem. When coding agents optimize for “done,” the control layer has to inspect the process—holdouts, proof, and known-bad promotions—before the claim lands.
239
+ </p>
240
+ <span class="arrow">Read the post →</span>
241
+ </a>
242
+ <a class="card" href="/guides/autoresearch-agent-safety">
243
+ <div class="card-meta"><span>Guide</span><span>Autoresearch</span></div>
244
+ <h2>Autoresearch agent safety pack</h2>
245
+ <p>
246
+ Practical gates for holdout tests, proof trails, and unsafe self-improvement claims—the operational twin of the process-over-outcome essay.
247
+ </p>
248
+ <span class="arrow">Open the guide →</span>
249
+ </a>
250
+ </div>
251
+ </section>
252
+
253
+ <section class="series" aria-labelledby="series-boundary">
254
+ <h2 class="series-title" id="series-boundary">Inside your boundary</h2>
255
+ <div class="cards">
256
+ <a class="card" href="/blog/inside-your-boundary">
257
+ <div class="card-meta"><span>2026-07-23</span><span>Enterprise</span></div>
258
+ <h2>AI inside your boundary: governance without relaxing controls</h2>
259
+ <p>
260
+ Local pre-action checks, reviewable lessons, and one managed workflow gate—so teams do not have to trade security exceptions for agent speed.
261
+ </p>
262
+ <span class="arrow">Read the post →</span>
263
+ </a>
264
+ <a class="card" href="/diagnostic">
265
+ <div class="card-meta"><span>Offer</span><span>$499</span></div>
266
+ <h2>Land on one high-stakes workflow</h2>
267
+ <p>
268
+ The enterprise entry motion: one repeated failure, one configured local gate, one regression test, rollout and rollback proof within two business days.
269
+ </p>
270
+ <span class="arrow">See the offer →</span>
271
+ </a>
272
+ </div>
273
+ </section>
274
+
275
+ <section class="series" aria-labelledby="series-runtime">
276
+ <h2 class="series-title" id="series-runtime">Runtime enforcement</h2>
277
+ <div class="cards">
278
+ <a class="card" href="/learn/feedback-loop-vs-decision-layer">
279
+ <div class="card-meta"><span>Learn</span><span>Canonical loop</span></div>
280
+ <h2>Feedback loop vs decision layer</h2>
281
+ <p>
282
+ Capture remember re-rank → gate. Why memory alone is not enforcement, and how the decision layer stays inspectable.
283
+ </p>
284
+ <span class="arrow">Read →</span>
285
+ </a>
286
+ <a class="card" href="/guides/pretooluse-hooks-vs-advisory-prompt-rules">
287
+ <div class="card-meta"><span>Guide</span><span>PreToolUse</span></div>
288
+ <h2>PreToolUse hooks vs advisory prompt rules</h2>
289
+ <p>
290
+ Prompt rules are suggestions. Pre-action checks fire before the tool call and leave a decision trail.
291
+ </p>
292
+ <span class="arrow">Read →</span>
293
+ </a>
294
+ </div>
295
+ </section>
296
+
297
+ <section class="archive" id="archive">
298
+ <h2>Earlier notes</h2>
299
+ <div class="archive-list">
300
+ <a id="supply-chain" href="#supply-chain-body">
301
+ Your AI agent is a supply chain attack surface. Here's how to gate it.
302
+ <span>2026-04-10</span>
303
+ </a>
304
+ <a href="#dual-signal">
305
+ Dual-signal feedback: why “what failed” isn’t enough
306
+ <span>2026-04-01</span>
307
+ </a>
308
+ <a id="claude-code-leak" href="#claude-leak-body">
309
+ The Claude Code leak proves why pre-action checks matter
310
+ <span>2026-04-01</span>
311
+ </a>
312
+ <a href="#v085">
313
+ v0.8.5 release notes: reasoning chains and funnel fixes
314
+ <span>2026-03-31</span>
315
+ </a>
316
+ </div>
317
+ </section>
318
+
319
+ <!-- Full text retained for existing deep links and SEO; primary UX is the index above. -->
320
+ <section class="archive" style="border-top:0;padding-top:0;">
321
+ <article class="card" id="supply-chain-body" style="margin-bottom:12px;">
322
+ <div class="card-meta"><span>2026-04-10</span><span>Archive</span></div>
323
+ <h2>Your AI agent is a supply chain attack surface. Here's how to gate it.</h2>
324
+ <p>
325
+ Your AI coding agent runs shell commands, installs packages, modifies files, and calls external APIs. Static scanners audit output after the fact. ThumbGate runs pre-action checks via PreToolUse hooks so the action is inspected before execution. Thumbs-down feedback feeds a promotion path: repeated patterns can become warning or blocking gates.
326
+ </p>
327
+ <p style="margin-top:12px;color:var(--muted);">
328
+ Start with <code style="color:var(--cyan);">npx thumbgate init</code>. Gates are reviewable local policy—commit them, share them, tighten them from real incidents.
329
+ </p>
330
+ <a class="arrow" href="/guide">Full setup guide →</a>
331
+ </article>
332
+
333
+ <article class="card" id="dual-signal" style="margin-bottom:12px;">
334
+ <div class="card-meta"><span>2026-04-01</span><span>Archive</span></div>
335
+ <h2>Dual-signal feedback: why “what failed” isn’t enough</h2>
336
+ <p>
337
+ Optional <code style="color:var(--cyan);">failureType</code> on capture separates wrong decision from bad execution so reliability signals can diverge by dimension. Backward compatible with plain thumbs-down.
338
+ </p>
339
+ </article>
340
+
341
+ <article class="card" id="claude-leak-body" style="margin-bottom:12px;">
342
+ <div class="card-meta"><span>2026-04-01</span><span>Archive</span></div>
343
+ <h2>The Claude Code leak proves why pre-action checks matter</h2>
344
+ <p>
345
+ Permissions, hooks, retry loops, and local memory are product surfaces. Treat them as governed workflow boundaries. ThumbGate adds feedback-driven pre-action checks so repeated mistakes can be flagged—and catastrophic classes hard-blocked—before the next tool call.
346
+ </p>
347
+ <a class="arrow" href="https://www.npmjs.com/package/thumbgate">Install ThumbGate →</a>
348
+ </article>
349
+
350
+ <article class="card" id="v085">
351
+ <div class="card-meta"><span>2026-03-31</span><span>Archive</span></div>
352
+ <h2>v0.8.5: gate reasoning chains and funnel fixes</h2>
353
+ <p>
354
+ Blocks and warnings explain which pattern matched, the gate identity, and whether the source was manual policy or auto-promotion. CLI-first users get upgrade paths without relying only on the website checkout page.
355
+ </p>
356
+ </article>
357
+ </section>
358
+ </main>
466
359
 
467
360
  <footer>
468
- <div class="container">
361
+ <div class="shell">
469
362
  <a href="/">Home</a> ·
470
- <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> ·
471
- <a href="https://www.linkedin.com/in/igorganapolsky">LinkedIn</a>
363
+ <a href="/guide">Setup</a> ·
364
+ <a href="/diagnostic">$499 workflow gate</a> ·
365
+ <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a>
472
366
  <br /><br />© 2026 ThumbGate · MIT License
473
367
  </div>
474
368
  </footer>