thumbgate 1.27.12 → 1.27.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +2 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +2 -4
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bin/cli.js +78 -259
- package/config/gate-templates.json +0 -228
- package/config/gates/claim-verification.json +0 -18
- package/package.json +35 -25
- package/public/assets/brand/thumbgate-logo-transparent.svg +22 -0
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +19 -0
- package/public/assets/brand/thumbgate-mark.svg +11 -5
- package/public/blog.html +0 -30
- package/public/brand/thumbgate-mark.svg +9 -5
- package/public/chatgpt-app.html +2 -2
- package/public/compare.html +2 -1
- package/public/dashboard.html +1 -1
- package/public/federal.html +1 -1
- package/public/index.html +95 -216
- package/public/learn.html +59 -35
- package/public/lessons.html +1 -1
- package/public/numbers.html +2 -2
- package/public/pro.html +7 -7
- package/scripts/aws-blocks-guardrails.js +228 -0
- package/scripts/cli-schema.js +22 -10
- package/scripts/dashboard-chat.js +2 -1
- package/scripts/document-intake.js +1 -49
- package/scripts/durability/step.js +3 -3
- package/scripts/gate-stats.js +5 -11
- package/scripts/gates-engine.js +0 -49
- package/scripts/gemini-embedding-policy.js +2 -1
- package/scripts/hook-stop-anti-claim.js +116 -184
- package/scripts/hosted-config.js +0 -12
- package/scripts/lesson-search.js +1 -15
- package/scripts/llm-client.js +187 -5
- package/scripts/plausible-domain-config.js +3 -1
- package/scripts/seo-gsd.js +240 -1
- package/scripts/tool-registry.js +2 -2
- package/scripts/vector-store.js +44 -0
- package/scripts/workspace-evolver.js +62 -2
- package/src/api/server.js +340 -131
- package/public/assets/brand/thumbgate-mark-inline.svg +0 -15
- package/public/compare/adopt-ai.html +0 -219
- package/public/compare/agentix-labs.html +0 -197
- package/public/compare/ai-experience-orchestration.html +0 -216
- package/public/compare/anthropic-claude-for-legal.html +0 -260
- package/public/compare/anthropic-containment.html +0 -280
- package/public/compare/arcade.html +0 -175
- package/public/compare/arcjet.html +0 -239
- package/public/compare/bumblebee.html +0 -307
- package/public/compare/claude-code-hooks.html +0 -294
- package/public/compare/databricks-unity-ai-gateway.html +0 -215
- package/public/compare/fallow.html +0 -351
- package/public/compare/heidi.html +0 -233
- package/public/compare/mem0.html +0 -342
- package/public/compare/oak-and-sparrow-gatekeeper.html +0 -289
- package/public/compare/rein.html +0 -236
- package/public/compare/sigmashake.html +0 -256
- package/public/compare/speclock.html +0 -342
- package/public/guides/agent-harness-optimization.html +0 -342
- package/public/guides/agentic-web-governance.html +0 -406
- package/public/guides/ai-agent-governance-sprint.html +0 -415
- package/public/guides/ai-agent-pre-action-approval-gates.html +0 -401
- package/public/guides/ai-agent-workflow-migration-checklist.html +0 -392
- package/public/guides/ai-deployment-readiness.html +0 -415
- package/public/guides/ai-mode-ads-agent-governance.html +0 -401
- package/public/guides/ai-search-topical-presence.html +0 -342
- package/public/guides/autoresearch-agent-safety.html +0 -342
- package/public/guides/background-agent-governance.html +0 -358
- package/public/guides/best-tools-stop-ai-agents-breaking-production.html +0 -363
- package/public/guides/browser-automation-safety.html +0 -342
- package/public/guides/chatgpt-ads-trust.html +0 -353
- package/public/guides/claude-code-feedback.html +0 -339
- package/public/guides/claude-code-prevent-repeated-mistakes.html +0 -161
- package/public/guides/claude-code-skills-guardrails.html +0 -343
- package/public/guides/claude-desktop.html +0 -356
- package/public/guides/code-knowledge-graph-guardrails.html +0 -365
- package/public/guides/codex-cli-guardrails.html +0 -339
- package/public/guides/cursor-agent-guardrails.html +0 -339
- package/public/guides/cursor-prevent-repeated-mistakes.html +0 -161
- package/public/guides/database-agent-safety.html +0 -406
- package/public/guides/deepseek-v4-runtime-guardrails.html +0 -346
- package/public/guides/developer-machine-supply-chain-guardrails.html +0 -358
- package/public/guides/gcp-mcp-guardrails.html +0 -147
- package/public/guides/gemini-cli-feedback-memory.html +0 -339
- package/public/guides/gpt-5-5-model-evaluation.html +0 -358
- package/public/guides/internal-ai-engineering-stack-guardrails.html +0 -348
- package/public/guides/long-running-agent-context-management.html +0 -346
- package/public/guides/mcp-tool-governance.html +0 -401
- package/public/guides/multica-thumbgate-setup.html +0 -134
- package/public/guides/native-messaging-host-security.html +0 -342
- package/public/guides/policy-engine-pre-action-gates.html +0 -346
- package/public/guides/pre-action-checks.html +0 -342
- package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +0 -342
- package/public/guides/prompt-tricks-to-workflow-rules.html +0 -365
- package/public/guides/proxy-pointer-rag-guardrails.html +0 -352
- package/public/guides/rag-precision-tuning-guardrails.html +0 -352
- package/public/guides/reasoning-compression-guardrails.html +0 -346
- package/public/guides/relational-knowledge-ai-recommendations.html +0 -342
- package/public/guides/roo-code-alternative-cline.html +0 -339
- package/public/guides/semantic-programmatic-seo-guardrails.html +0 -352
- package/public/guides/seo-agent-skills-guardrails.html +0 -344
- package/public/guides/stop-repeated-ai-agent-mistakes.html +0 -342
- package/public/learn/ac-dc-runtime-enforcement.html +0 -277
- package/public/learn/agent-harness-pattern.html +0 -181
- package/public/learn/agent-identity-connector-governance.html +0 -146
- package/public/learn/agent-swarms-shared-gates.html +0 -173
- package/public/learn/agentic-enterprise-context-brain.html +0 -117
- package/public/learn/agentic-os-team-governance.html +0 -146
- package/public/learn/ai-agent-governance.html +0 -158
- package/public/learn/ai-agent-persistent-memory.html +0 -211
- package/public/learn/anthropomorphic-claim-gates.html +0 -180
- package/public/learn/background-agent-control-layer.html +0 -184
- package/public/learn/claude-code-goal-with-rubrics.html +0 -205
- package/public/learn/codex-role-plugins-need-governance.html +0 -125
- package/public/learn/cost-aware-agent-gate-routing.html +0 -173
- package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +0 -157
- package/public/learn/deterministic-agent-workflows.html +0 -185
- package/public/learn/feedback-loop-vs-decision-layer.html +0 -283
- package/public/learn/from-prototype-to-production.html +0 -223
- package/public/learn/learn.css +0 -51
- package/public/learn/mcp-pre-action-checks-explained.html +0 -172
- package/public/learn/pretix-stripe-connect-marketplaces.html +0 -161
- package/public/learn/regulated-agent-execution-boundary.html +0 -196
- package/public/learn/spec-driven-development.html +0 -168
- package/public/learn/stop-ai-agent-force-push.html +0 -134
- package/public/learn/vibe-coding-safety-net.html +0 -142
- package/scripts/reddit-browser-notification-watch.js +0 -230
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>ThumbGate vs SpecLock | Thumbs Feedback vs Manual Specs</title>
|
|
7
|
-
<meta name="description" content="SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action checks that block repeated mist..." />
|
|
8
|
-
<meta property="og:title" content="ThumbGate vs SpecLock | Thumbs Feedback vs Manual Specs" />
|
|
9
|
-
<meta property="og:description" content="SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action checks that block repeated mist..." />
|
|
10
|
-
<meta property="og:type" content="article" />
|
|
11
|
-
<meta property="og:url" content="https://thumbgate.ai/compare/speclock" />
|
|
12
|
-
<link rel="canonical" href="https://thumbgate.ai/compare/speclock" />
|
|
13
|
-
<link rel="llm-context" href="/llm-context.md" type="text/markdown" />
|
|
14
|
-
<link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
|
|
15
|
-
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
|
|
16
|
-
<meta property="og:image" content="/og.png" />
|
|
17
|
-
<style>
|
|
18
|
-
:root {
|
|
19
|
-
--bg: #0a0a0b;
|
|
20
|
-
--bg-raised: #111113;
|
|
21
|
-
--bg-card: #161618;
|
|
22
|
-
--line: #222225;
|
|
23
|
-
--text: #e8e8ec;
|
|
24
|
-
--muted: #8b8b96;
|
|
25
|
-
--cyan: #22d3ee;
|
|
26
|
-
--green: #4ade80;
|
|
27
|
-
--red: #f87171;
|
|
28
|
-
}
|
|
29
|
-
* { box-sizing: border-box; }
|
|
30
|
-
body {
|
|
31
|
-
margin: 0;
|
|
32
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
33
|
-
background: var(--bg);
|
|
34
|
-
color: var(--text);
|
|
35
|
-
line-height: 1.65;
|
|
36
|
-
}
|
|
37
|
-
a { color: var(--cyan); text-decoration: none; }
|
|
38
|
-
a:hover { text-decoration: underline; }
|
|
39
|
-
.container { max-width: 980px; margin: 0 auto; padding: 0 24px; }
|
|
40
|
-
.topbar {
|
|
41
|
-
position: sticky;
|
|
42
|
-
top: 0;
|
|
43
|
-
z-index: 20;
|
|
44
|
-
backdrop-filter: blur(12px);
|
|
45
|
-
background: rgba(10, 10, 11, 0.88);
|
|
46
|
-
border-bottom: 1px solid var(--line);
|
|
47
|
-
}
|
|
48
|
-
.topbar .container {
|
|
49
|
-
display: flex;
|
|
50
|
-
justify-content: space-between;
|
|
51
|
-
align-items: center;
|
|
52
|
-
padding-top: 14px;
|
|
53
|
-
padding-bottom: 14px;
|
|
54
|
-
}
|
|
55
|
-
.brand {
|
|
56
|
-
font-weight: 700;
|
|
57
|
-
color: var(--text);
|
|
58
|
-
display: inline-flex;
|
|
59
|
-
align-items: center;
|
|
60
|
-
gap: 8px;
|
|
61
|
-
text-decoration: none;
|
|
62
|
-
}
|
|
63
|
-
.brand .logo-mark { width: 28px; height: 28px; display: block; }
|
|
64
|
-
.hero { padding: 72px 0 32px; }
|
|
65
|
-
.eyebrow {
|
|
66
|
-
display: inline-flex;
|
|
67
|
-
align-items: center;
|
|
68
|
-
gap: 8px;
|
|
69
|
-
padding: 6px 12px;
|
|
70
|
-
border-radius: 999px;
|
|
71
|
-
border: 1px solid rgba(34, 211, 238, 0.22);
|
|
72
|
-
background: rgba(34, 211, 238, 0.1);
|
|
73
|
-
color: var(--cyan);
|
|
74
|
-
text-transform: uppercase;
|
|
75
|
-
letter-spacing: 0.08em;
|
|
76
|
-
font-size: 12px;
|
|
77
|
-
font-weight: 700;
|
|
78
|
-
}
|
|
79
|
-
h1 {
|
|
80
|
-
font-size: clamp(34px, 5vw, 56px);
|
|
81
|
-
line-height: 1.06;
|
|
82
|
-
letter-spacing: -0.04em;
|
|
83
|
-
margin: 16px 0;
|
|
84
|
-
max-width: 760px;
|
|
85
|
-
}
|
|
86
|
-
.hero p {
|
|
87
|
-
max-width: 720px;
|
|
88
|
-
color: var(--muted);
|
|
89
|
-
font-size: 18px;
|
|
90
|
-
}
|
|
91
|
-
.signal-row {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-wrap: wrap;
|
|
94
|
-
gap: 12px;
|
|
95
|
-
margin: 28px 0 0;
|
|
96
|
-
}
|
|
97
|
-
.signal-pill {
|
|
98
|
-
display: inline-flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
gap: 8px;
|
|
101
|
-
padding: 10px 14px;
|
|
102
|
-
border-radius: 999px;
|
|
103
|
-
border: 1px solid var(--line);
|
|
104
|
-
background: var(--bg-raised);
|
|
105
|
-
font-weight: 600;
|
|
106
|
-
font-size: 14px;
|
|
107
|
-
}
|
|
108
|
-
.signal-pill.up {
|
|
109
|
-
border-color: rgba(74, 222, 128, 0.28);
|
|
110
|
-
color: #b8f7c8;
|
|
111
|
-
background: rgba(74, 222, 128, 0.1);
|
|
112
|
-
}
|
|
113
|
-
.signal-pill.down {
|
|
114
|
-
border-color: rgba(248, 113, 113, 0.28);
|
|
115
|
-
color: #ffc0c0;
|
|
116
|
-
background: rgba(248, 113, 113, 0.1);
|
|
117
|
-
}
|
|
118
|
-
.grid {
|
|
119
|
-
display: grid;
|
|
120
|
-
grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
|
|
121
|
-
gap: 24px;
|
|
122
|
-
padding-bottom: 72px;
|
|
123
|
-
}
|
|
124
|
-
.card, .detail-section, .sidebar-card {
|
|
125
|
-
background: var(--bg-card);
|
|
126
|
-
border: 1px solid var(--line);
|
|
127
|
-
border-radius: 16px;
|
|
128
|
-
}
|
|
129
|
-
.card { padding: 24px; }
|
|
130
|
-
.detail-section { padding: 24px; margin-bottom: 18px; }
|
|
131
|
-
.detail-section h2 { margin: 0 0 12px; font-size: 24px; letter-spacing: -0.03em; }
|
|
132
|
-
.detail-section p { color: var(--muted); }
|
|
133
|
-
.detail-section ul, .card ul { padding-left: 18px; color: var(--muted); }
|
|
134
|
-
.card h2 { margin-top: 0; }
|
|
135
|
-
.sidebar {
|
|
136
|
-
display: flex;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
gap: 18px;
|
|
139
|
-
}
|
|
140
|
-
.sidebar-card {
|
|
141
|
-
padding: 20px;
|
|
142
|
-
}
|
|
143
|
-
/* Only the first sidebar card sticks. Stacking multiple stickies at the
|
|
144
|
-
same top offset makes them overlap each other on scroll. The related-
|
|
145
|
-
pages card flows normally below. */
|
|
146
|
-
.sidebar-card:first-child {
|
|
147
|
-
position: sticky;
|
|
148
|
-
top: 84px;
|
|
149
|
-
max-height: calc(100vh - 104px);
|
|
150
|
-
overflow-y: auto;
|
|
151
|
-
-webkit-overflow-scrolling: touch;
|
|
152
|
-
}
|
|
153
|
-
.proof-links {
|
|
154
|
-
display: flex;
|
|
155
|
-
flex-wrap: wrap;
|
|
156
|
-
gap: 12px;
|
|
157
|
-
margin-top: 16px;
|
|
158
|
-
}
|
|
159
|
-
.cta-button {
|
|
160
|
-
display: inline-flex;
|
|
161
|
-
align-items: center;
|
|
162
|
-
justify-content: center;
|
|
163
|
-
margin-top: 18px;
|
|
164
|
-
padding: 12px 16px;
|
|
165
|
-
border-radius: 10px;
|
|
166
|
-
background: var(--cyan);
|
|
167
|
-
color: #071116;
|
|
168
|
-
font-weight: 700;
|
|
169
|
-
text-decoration: none;
|
|
170
|
-
}
|
|
171
|
-
.faq-item {
|
|
172
|
-
border-top: 1px solid var(--line);
|
|
173
|
-
padding: 14px 0;
|
|
174
|
-
}
|
|
175
|
-
.faq-item summary {
|
|
176
|
-
cursor: pointer;
|
|
177
|
-
font-weight: 600;
|
|
178
|
-
}
|
|
179
|
-
.faq-item p {
|
|
180
|
-
color: var(--muted);
|
|
181
|
-
}
|
|
182
|
-
.related-card {
|
|
183
|
-
display: block;
|
|
184
|
-
padding: 14px;
|
|
185
|
-
border-radius: 12px;
|
|
186
|
-
border: 1px solid var(--line);
|
|
187
|
-
background: var(--bg-raised);
|
|
188
|
-
margin-top: 12px;
|
|
189
|
-
color: var(--text);
|
|
190
|
-
}
|
|
191
|
-
.related-label {
|
|
192
|
-
display: block;
|
|
193
|
-
color: var(--muted);
|
|
194
|
-
font-size: 12px;
|
|
195
|
-
text-transform: uppercase;
|
|
196
|
-
letter-spacing: 0.08em;
|
|
197
|
-
margin-bottom: 4px;
|
|
198
|
-
}
|
|
199
|
-
@media (max-width: 860px) {
|
|
200
|
-
.grid {
|
|
201
|
-
grid-template-columns: 1fr;
|
|
202
|
-
}
|
|
203
|
-
.sidebar-card:first-child {
|
|
204
|
-
position: static;
|
|
205
|
-
max-height: none;
|
|
206
|
-
overflow: visible;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
</style>
|
|
210
|
-
<script type="application/ld+json">
|
|
211
|
-
{
|
|
212
|
-
"@context": "https://schema.org",
|
|
213
|
-
"@type": "TechArticle",
|
|
214
|
-
"headline": "ThumbGate vs SpecLock",
|
|
215
|
-
"description": "SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action checks that block repeated mist...",
|
|
216
|
-
"about": [
|
|
217
|
-
"thumbgate vs speclock",
|
|
218
|
-
"thumbgate vs mem0",
|
|
219
|
-
"thumbgate vs fallow",
|
|
220
|
-
"roo code alternative cline"
|
|
221
|
-
],
|
|
222
|
-
"url": "https://thumbgate.ai/compare/speclock",
|
|
223
|
-
"publisher": {
|
|
224
|
-
"@type": "Organization",
|
|
225
|
-
"name": "ThumbGate",
|
|
226
|
-
"url": "https://thumbgate.ai"
|
|
227
|
-
},
|
|
228
|
-
"mainEntityOfPage": "https://thumbgate.ai/compare/speclock"
|
|
229
|
-
}
|
|
230
|
-
</script>
|
|
231
|
-
<script type="application/ld+json">
|
|
232
|
-
{
|
|
233
|
-
"@context": "https://schema.org",
|
|
234
|
-
"@type": "FAQPage",
|
|
235
|
-
"mainEntity": [
|
|
236
|
-
{
|
|
237
|
-
"@type": "Question",
|
|
238
|
-
"name": "Is ThumbGate trying to replace specs?",
|
|
239
|
-
"acceptedAnswer": {
|
|
240
|
-
"@type": "Answer",
|
|
241
|
-
"text": "No. ThumbGate complements specs by capturing thumbs-up/down feedback from live agent behavior and enforcing the learned rules as pre-action checks."
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"@type": "Question",
|
|
246
|
-
"name": "What does ThumbGate do that SpecLock does not?",
|
|
247
|
-
"acceptedAnswer": {
|
|
248
|
-
"@type": "Answer",
|
|
249
|
-
"text": "ThumbGate turns explicit feedback into searchable memory, auto-generated prevention rules, and runtime checks that block repeated mistakes before the next tool call executes."
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
</script>
|
|
255
|
-
</head>
|
|
256
|
-
<body>
|
|
257
|
-
<div class="topbar">
|
|
258
|
-
<div class="container">
|
|
259
|
-
<a class="brand" href="/"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
|
|
260
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a>
|
|
261
|
-
</div>
|
|
262
|
-
</div>
|
|
263
|
-
|
|
264
|
-
<main class="container">
|
|
265
|
-
<section class="hero">
|
|
266
|
-
<div class="eyebrow">comparison | thumbgate vs speclock</div>
|
|
267
|
-
<h1>ThumbGate vs SpecLock</h1>
|
|
268
|
-
<p>SpecLock starts from manually written constraints. ThumbGate starts from thumbs-up/down feedback and turns it into pre-action checks that block repeated mistakes.</p>
|
|
269
|
-
<div class="signal-row">
|
|
270
|
-
<div class="signal-pill up">👍 Thumbs up reinforces good behavior</div>
|
|
271
|
-
<div class="signal-pill down">👎 Thumbs down blocks repeated mistakes</div>
|
|
272
|
-
</div>
|
|
273
|
-
</section>
|
|
274
|
-
|
|
275
|
-
<section class="grid">
|
|
276
|
-
<div>
|
|
277
|
-
<div class="card">
|
|
278
|
-
<h2>Why this page exists</h2>
|
|
279
|
-
<ul><li>ThumbGate learns from thumbs-up and thumbs-down feedback without requiring a separate spec-writing workflow.</li><li>SpecLock is strongest when a team already has strong specifications and wants enforcement tied to those documents.</li><li>ThumbGate is strongest when the pain is repeated agent mistakes across Claude Code, Cursor, Codex, Gemini, Amp, and OpenCode.</li></ul>
|
|
280
|
-
</div>
|
|
281
|
-
|
|
282
|
-
<section class="detail-section">
|
|
283
|
-
<h2>The product difference in one sentence</h2>
|
|
284
|
-
<p>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.</p><p>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.</p>
|
|
285
|
-
|
|
286
|
-
</section>
|
|
287
|
-
<section class="detail-section">
|
|
288
|
-
<h2>Choose ThumbGate when</h2>
|
|
289
|
-
|
|
290
|
-
<ul><li>Your agent already repeats known mistakes and you need the block to happen before tool execution.</li><li>You want one feedback loop that supports both reinforcement from thumbs up and prevention from thumbs down.</li><li>You need proof assets, automation reports, and compatibility across multiple coding agents.</li></ul>
|
|
291
|
-
</section>
|
|
292
|
-
<section class="detail-section">
|
|
293
|
-
<h2>Choose SpecLock when</h2>
|
|
294
|
-
|
|
295
|
-
<ul><li>Your team already maintains strong PRDs or system specs and wants the model constrained against those artifacts.</li><li>Your primary problem is uncontrolled file edits, not a missing feedback-to-enforcement loop.</li><li>You are willing to invest in manual constraint authoring as part of the workflow.</li></ul>
|
|
296
|
-
</section>
|
|
297
|
-
<div class="detail-section">
|
|
298
|
-
<h2>FAQ</h2>
|
|
299
|
-
|
|
300
|
-
<details class="faq-item">
|
|
301
|
-
<summary>Is ThumbGate trying to replace specs?</summary>
|
|
302
|
-
<p>No. ThumbGate complements specs by capturing thumbs-up/down feedback from live agent behavior and enforcing the learned rules as pre-action checks.</p>
|
|
303
|
-
</details>
|
|
304
|
-
<details class="faq-item">
|
|
305
|
-
<summary>What does ThumbGate do that SpecLock does not?</summary>
|
|
306
|
-
<p>ThumbGate turns explicit feedback into searchable memory, auto-generated prevention rules, and runtime checks that block repeated mistakes before the next tool call executes.</p>
|
|
307
|
-
</details>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
<aside class="sidebar">
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
<div class="sidebar-card">
|
|
317
|
-
<h2>GSD execution brief</h2>
|
|
318
|
-
<p>This page was prioritized because it captures high-intent demand around thumbgate vs speclock and feeds directly into ThumbGate's proof-led conversion path.</p>
|
|
319
|
-
<p><strong>Opportunity score:</strong> 100</p>
|
|
320
|
-
<p><strong>Primary persona:</strong> tool-evaluator</p>
|
|
321
|
-
<p><strong>Keyword cluster:</strong> thumbgate vs speclock, thumbgate vs mem0, thumbgate vs fallow, roo code alternative cline</p>
|
|
322
|
-
<p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
|
|
323
|
-
<div class="proof-links"><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json" target="_blank" rel="noopener">Automation proof</a><a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub repository</a></div>
|
|
324
|
-
<a class="cta-button" href="/checkout/pro?utm_source=website&utm_medium=seo_page&utm_campaign=compare_speclock&cta_placement=seo_brief&plan_id=pro" target="_blank" rel="noopener">Go Pro — $19/mo</a>
|
|
325
|
-
</div>
|
|
326
|
-
<div class="sidebar-card">
|
|
327
|
-
<h2>Related pages</h2>
|
|
328
|
-
|
|
329
|
-
<a class="related-card" href="/compare/mem0">
|
|
330
|
-
<span class="related-label">Related page</span>
|
|
331
|
-
<strong>ThumbGate vs Mem0</strong>
|
|
332
|
-
</a>
|
|
333
|
-
<a class="related-card" href="/guides/pre-action-checks">
|
|
334
|
-
<span class="related-label">Related page</span>
|
|
335
|
-
<strong>What Are Pre-Action Checks?</strong>
|
|
336
|
-
</a>
|
|
337
|
-
</div>
|
|
338
|
-
</aside>
|
|
339
|
-
</section>
|
|
340
|
-
</main>
|
|
341
|
-
</body>
|
|
342
|
-
</html>
|
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>AI Agent Harness Optimization | Progressive Disclosure + Pre-Action Checks</title>
|
|
7
|
-
<meta name="description" content="A better harness keeps global instructions lean, loads MCP schemas only when needed, and turns feedback into pre-action checks. ThumbGate makes that workflow..." />
|
|
8
|
-
<meta property="og:title" content="AI Agent Harness Optimization | Progressive Disclosure + Pre-Action Checks" />
|
|
9
|
-
<meta property="og:description" content="A better harness keeps global instructions lean, loads MCP schemas only when needed, and turns feedback into pre-action checks. ThumbGate makes that workflow..." />
|
|
10
|
-
<meta property="og:type" content="article" />
|
|
11
|
-
<meta property="og:url" content="https://thumbgate.ai/guides/agent-harness-optimization" />
|
|
12
|
-
<link rel="canonical" href="https://thumbgate.ai/guides/agent-harness-optimization" />
|
|
13
|
-
<link rel="llm-context" href="/llm-context.md" type="text/markdown" />
|
|
14
|
-
<link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
|
|
15
|
-
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
|
|
16
|
-
<meta property="og:image" content="/og.png" />
|
|
17
|
-
<style>
|
|
18
|
-
:root {
|
|
19
|
-
--bg: #0a0a0b;
|
|
20
|
-
--bg-raised: #111113;
|
|
21
|
-
--bg-card: #161618;
|
|
22
|
-
--line: #222225;
|
|
23
|
-
--text: #e8e8ec;
|
|
24
|
-
--muted: #8b8b96;
|
|
25
|
-
--cyan: #22d3ee;
|
|
26
|
-
--green: #4ade80;
|
|
27
|
-
--red: #f87171;
|
|
28
|
-
}
|
|
29
|
-
* { box-sizing: border-box; }
|
|
30
|
-
body {
|
|
31
|
-
margin: 0;
|
|
32
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
33
|
-
background: var(--bg);
|
|
34
|
-
color: var(--text);
|
|
35
|
-
line-height: 1.65;
|
|
36
|
-
}
|
|
37
|
-
a { color: var(--cyan); text-decoration: none; }
|
|
38
|
-
a:hover { text-decoration: underline; }
|
|
39
|
-
.container { max-width: 980px; margin: 0 auto; padding: 0 24px; }
|
|
40
|
-
.topbar {
|
|
41
|
-
position: sticky;
|
|
42
|
-
top: 0;
|
|
43
|
-
z-index: 20;
|
|
44
|
-
backdrop-filter: blur(12px);
|
|
45
|
-
background: rgba(10, 10, 11, 0.88);
|
|
46
|
-
border-bottom: 1px solid var(--line);
|
|
47
|
-
}
|
|
48
|
-
.topbar .container {
|
|
49
|
-
display: flex;
|
|
50
|
-
justify-content: space-between;
|
|
51
|
-
align-items: center;
|
|
52
|
-
padding-top: 14px;
|
|
53
|
-
padding-bottom: 14px;
|
|
54
|
-
}
|
|
55
|
-
.brand {
|
|
56
|
-
font-weight: 700;
|
|
57
|
-
color: var(--text);
|
|
58
|
-
display: inline-flex;
|
|
59
|
-
align-items: center;
|
|
60
|
-
gap: 8px;
|
|
61
|
-
text-decoration: none;
|
|
62
|
-
}
|
|
63
|
-
.brand .logo-mark { width: 28px; height: 28px; display: block; }
|
|
64
|
-
.hero { padding: 72px 0 32px; }
|
|
65
|
-
.eyebrow {
|
|
66
|
-
display: inline-flex;
|
|
67
|
-
align-items: center;
|
|
68
|
-
gap: 8px;
|
|
69
|
-
padding: 6px 12px;
|
|
70
|
-
border-radius: 999px;
|
|
71
|
-
border: 1px solid rgba(34, 211, 238, 0.22);
|
|
72
|
-
background: rgba(34, 211, 238, 0.1);
|
|
73
|
-
color: var(--cyan);
|
|
74
|
-
text-transform: uppercase;
|
|
75
|
-
letter-spacing: 0.08em;
|
|
76
|
-
font-size: 12px;
|
|
77
|
-
font-weight: 700;
|
|
78
|
-
}
|
|
79
|
-
h1 {
|
|
80
|
-
font-size: clamp(34px, 5vw, 56px);
|
|
81
|
-
line-height: 1.06;
|
|
82
|
-
letter-spacing: -0.04em;
|
|
83
|
-
margin: 16px 0;
|
|
84
|
-
max-width: 760px;
|
|
85
|
-
}
|
|
86
|
-
.hero p {
|
|
87
|
-
max-width: 720px;
|
|
88
|
-
color: var(--muted);
|
|
89
|
-
font-size: 18px;
|
|
90
|
-
}
|
|
91
|
-
.signal-row {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-wrap: wrap;
|
|
94
|
-
gap: 12px;
|
|
95
|
-
margin: 28px 0 0;
|
|
96
|
-
}
|
|
97
|
-
.signal-pill {
|
|
98
|
-
display: inline-flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
gap: 8px;
|
|
101
|
-
padding: 10px 14px;
|
|
102
|
-
border-radius: 999px;
|
|
103
|
-
border: 1px solid var(--line);
|
|
104
|
-
background: var(--bg-raised);
|
|
105
|
-
font-weight: 600;
|
|
106
|
-
font-size: 14px;
|
|
107
|
-
}
|
|
108
|
-
.signal-pill.up {
|
|
109
|
-
border-color: rgba(74, 222, 128, 0.28);
|
|
110
|
-
color: #b8f7c8;
|
|
111
|
-
background: rgba(74, 222, 128, 0.1);
|
|
112
|
-
}
|
|
113
|
-
.signal-pill.down {
|
|
114
|
-
border-color: rgba(248, 113, 113, 0.28);
|
|
115
|
-
color: #ffc0c0;
|
|
116
|
-
background: rgba(248, 113, 113, 0.1);
|
|
117
|
-
}
|
|
118
|
-
.grid {
|
|
119
|
-
display: grid;
|
|
120
|
-
grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
|
|
121
|
-
gap: 24px;
|
|
122
|
-
padding-bottom: 72px;
|
|
123
|
-
}
|
|
124
|
-
.card, .detail-section, .sidebar-card {
|
|
125
|
-
background: var(--bg-card);
|
|
126
|
-
border: 1px solid var(--line);
|
|
127
|
-
border-radius: 16px;
|
|
128
|
-
}
|
|
129
|
-
.card { padding: 24px; }
|
|
130
|
-
.detail-section { padding: 24px; margin-bottom: 18px; }
|
|
131
|
-
.detail-section h2 { margin: 0 0 12px; font-size: 24px; letter-spacing: -0.03em; }
|
|
132
|
-
.detail-section p { color: var(--muted); }
|
|
133
|
-
.detail-section ul, .card ul { padding-left: 18px; color: var(--muted); }
|
|
134
|
-
.card h2 { margin-top: 0; }
|
|
135
|
-
.sidebar {
|
|
136
|
-
display: flex;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
gap: 18px;
|
|
139
|
-
}
|
|
140
|
-
.sidebar-card {
|
|
141
|
-
padding: 20px;
|
|
142
|
-
}
|
|
143
|
-
/* Only the first sidebar card sticks. Stacking multiple stickies at the
|
|
144
|
-
same top offset makes them overlap each other on scroll. The related-
|
|
145
|
-
pages card flows normally below. */
|
|
146
|
-
.sidebar-card:first-child {
|
|
147
|
-
position: sticky;
|
|
148
|
-
top: 84px;
|
|
149
|
-
max-height: calc(100vh - 104px);
|
|
150
|
-
overflow-y: auto;
|
|
151
|
-
-webkit-overflow-scrolling: touch;
|
|
152
|
-
}
|
|
153
|
-
.proof-links {
|
|
154
|
-
display: flex;
|
|
155
|
-
flex-wrap: wrap;
|
|
156
|
-
gap: 12px;
|
|
157
|
-
margin-top: 16px;
|
|
158
|
-
}
|
|
159
|
-
.cta-button {
|
|
160
|
-
display: inline-flex;
|
|
161
|
-
align-items: center;
|
|
162
|
-
justify-content: center;
|
|
163
|
-
margin-top: 18px;
|
|
164
|
-
padding: 12px 16px;
|
|
165
|
-
border-radius: 10px;
|
|
166
|
-
background: var(--cyan);
|
|
167
|
-
color: #071116;
|
|
168
|
-
font-weight: 700;
|
|
169
|
-
text-decoration: none;
|
|
170
|
-
}
|
|
171
|
-
.faq-item {
|
|
172
|
-
border-top: 1px solid var(--line);
|
|
173
|
-
padding: 14px 0;
|
|
174
|
-
}
|
|
175
|
-
.faq-item summary {
|
|
176
|
-
cursor: pointer;
|
|
177
|
-
font-weight: 600;
|
|
178
|
-
}
|
|
179
|
-
.faq-item p {
|
|
180
|
-
color: var(--muted);
|
|
181
|
-
}
|
|
182
|
-
.related-card {
|
|
183
|
-
display: block;
|
|
184
|
-
padding: 14px;
|
|
185
|
-
border-radius: 12px;
|
|
186
|
-
border: 1px solid var(--line);
|
|
187
|
-
background: var(--bg-raised);
|
|
188
|
-
margin-top: 12px;
|
|
189
|
-
color: var(--text);
|
|
190
|
-
}
|
|
191
|
-
.related-label {
|
|
192
|
-
display: block;
|
|
193
|
-
color: var(--muted);
|
|
194
|
-
font-size: 12px;
|
|
195
|
-
text-transform: uppercase;
|
|
196
|
-
letter-spacing: 0.08em;
|
|
197
|
-
margin-bottom: 4px;
|
|
198
|
-
}
|
|
199
|
-
@media (max-width: 860px) {
|
|
200
|
-
.grid {
|
|
201
|
-
grid-template-columns: 1fr;
|
|
202
|
-
}
|
|
203
|
-
.sidebar-card:first-child {
|
|
204
|
-
position: static;
|
|
205
|
-
max-height: none;
|
|
206
|
-
overflow: visible;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
</style>
|
|
210
|
-
<script type="application/ld+json">
|
|
211
|
-
{
|
|
212
|
-
"@context": "https://schema.org",
|
|
213
|
-
"@type": "TechArticle",
|
|
214
|
-
"headline": "AI Agent Harness Optimization That Blocks Repeat Failures",
|
|
215
|
-
"description": "A better harness keeps global instructions lean, loads MCP schemas only when needed, and turns feedback into pre-action checks. ThumbGate makes that workflow...",
|
|
216
|
-
"about": [
|
|
217
|
-
"claude code masterclass guardrails",
|
|
218
|
-
"cursor prevent repeated mistakes",
|
|
219
|
-
"claude code prevent repeated mistakes",
|
|
220
|
-
"codex cli guardrails"
|
|
221
|
-
],
|
|
222
|
-
"url": "https://thumbgate.ai/guides/agent-harness-optimization",
|
|
223
|
-
"publisher": {
|
|
224
|
-
"@type": "Organization",
|
|
225
|
-
"name": "ThumbGate",
|
|
226
|
-
"url": "https://thumbgate.ai"
|
|
227
|
-
},
|
|
228
|
-
"mainEntityOfPage": "https://thumbgate.ai/guides/agent-harness-optimization"
|
|
229
|
-
}
|
|
230
|
-
</script>
|
|
231
|
-
<script type="application/ld+json">
|
|
232
|
-
{
|
|
233
|
-
"@context": "https://schema.org",
|
|
234
|
-
"@type": "FAQPage",
|
|
235
|
-
"mainEntity": [
|
|
236
|
-
{
|
|
237
|
-
"@type": "Question",
|
|
238
|
-
"name": "What is an AI agent harness?",
|
|
239
|
-
"acceptedAnswer": {
|
|
240
|
-
"@type": "Answer",
|
|
241
|
-
"text": "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."
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"@type": "Question",
|
|
246
|
-
"name": "How does ThumbGate optimize a harness?",
|
|
247
|
-
"acceptedAnswer": {
|
|
248
|
-
"@type": "Answer",
|
|
249
|
-
"text": "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."
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
</script>
|
|
255
|
-
</head>
|
|
256
|
-
<body>
|
|
257
|
-
<div class="topbar">
|
|
258
|
-
<div class="container">
|
|
259
|
-
<a class="brand" href="/"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
|
|
260
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a>
|
|
261
|
-
</div>
|
|
262
|
-
</div>
|
|
263
|
-
|
|
264
|
-
<main class="container">
|
|
265
|
-
<section class="hero">
|
|
266
|
-
<div class="eyebrow">guide | ai agent harness optimization</div>
|
|
267
|
-
<h1>AI Agent Harness Optimization That Blocks Repeat Failures</h1>
|
|
268
|
-
<p>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.</p>
|
|
269
|
-
<div class="signal-row">
|
|
270
|
-
<div class="signal-pill up">👍 Thumbs up reinforces good behavior</div>
|
|
271
|
-
<div class="signal-pill down">👎 Thumbs down blocks repeated mistakes</div>
|
|
272
|
-
</div>
|
|
273
|
-
</section>
|
|
274
|
-
|
|
275
|
-
<section class="grid">
|
|
276
|
-
<div>
|
|
277
|
-
<div class="card">
|
|
278
|
-
<h2>Why this page exists</h2>
|
|
279
|
-
<ul><li>Harness optimization is the control layer around the model: context, tools, guardrails, and feedback.</li><li>Progressive disclosure keeps agents out of prompt bloat while preserving proof and tool access.</li><li>ThumbGate adds a concrete audit path and Pre-Action Checks so harness lessons become runtime enforcement.</li></ul>
|
|
280
|
-
</div>
|
|
281
|
-
|
|
282
|
-
<section class="detail-section">
|
|
283
|
-
<h2>What changed</h2>
|
|
284
|
-
<p>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.</p><p>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.</p>
|
|
285
|
-
|
|
286
|
-
</section>
|
|
287
|
-
<section class="detail-section">
|
|
288
|
-
<h2>How ThumbGate improves the harness</h2>
|
|
289
|
-
|
|
290
|
-
<ul><li>Scores global agent docs so AGENTS.md, CLAUDE.md, and GEMINI.md stay lean instead of becoming unreviewable prompt bundles.</li><li>Publishes progressive MCP discovery through lightweight indexes and per-tool schema URLs.</li><li>Selects specialized gate harnesses for deploy, code-edit, and database-write actions instead of loading every gate for every workflow.</li><li>Turns thumbs-down feedback into prevention rules, then into hard Pre-Action Checks that block repeated mistakes.</li></ul>
|
|
291
|
-
</section>
|
|
292
|
-
<section class="detail-section">
|
|
293
|
-
<h2>Where this creates ROI</h2>
|
|
294
|
-
<p>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.</p>
|
|
295
|
-
|
|
296
|
-
</section>
|
|
297
|
-
<div class="detail-section">
|
|
298
|
-
<h2>FAQ</h2>
|
|
299
|
-
|
|
300
|
-
<details class="faq-item">
|
|
301
|
-
<summary>What is an AI agent harness?</summary>
|
|
302
|
-
<p>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.</p>
|
|
303
|
-
</details>
|
|
304
|
-
<details class="faq-item">
|
|
305
|
-
<summary>How does ThumbGate optimize a harness?</summary>
|
|
306
|
-
<p>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.</p>
|
|
307
|
-
</details>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
<aside class="sidebar">
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
<div class="sidebar-card">
|
|
317
|
-
<h2>GSD execution brief</h2>
|
|
318
|
-
<p>This page was prioritized because it captures high-intent demand around ai agent harness optimization and feeds directly into ThumbGate's proof-led conversion path.</p>
|
|
319
|
-
<p><strong>Opportunity score:</strong> 83</p>
|
|
320
|
-
<p><strong>Primary persona:</strong> ai-engineer</p>
|
|
321
|
-
<p><strong>Keyword cluster:</strong> claude code masterclass guardrails, cursor prevent repeated mistakes, claude code prevent repeated mistakes, codex cli guardrails</p>
|
|
322
|
-
<p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
|
|
323
|
-
<div class="proof-links"><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json" target="_blank" rel="noopener">Automation proof</a><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/harnesses-report.json" target="_blank" rel="noopener">Harness proof</a><a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub repository</a></div>
|
|
324
|
-
<a class="cta-button" href="/checkout/pro?utm_source=website&utm_medium=seo_page&utm_campaign=guides_agent-harness-optimization&cta_placement=seo_brief&plan_id=pro" target="_blank" rel="noopener">Go Pro — $19/mo</a>
|
|
325
|
-
</div>
|
|
326
|
-
<div class="sidebar-card">
|
|
327
|
-
<h2>Related pages</h2>
|
|
328
|
-
|
|
329
|
-
<a class="related-card" href="/guides/pre-action-checks">
|
|
330
|
-
<span class="related-label">Related page</span>
|
|
331
|
-
<strong>What Are Pre-Action Checks?</strong>
|
|
332
|
-
</a>
|
|
333
|
-
<a class="related-card" href="/guides/codex-cli-guardrails">
|
|
334
|
-
<span class="related-label">Related page</span>
|
|
335
|
-
<strong>Codex CLI Guardrails That Actually Enforce</strong>
|
|
336
|
-
</a>
|
|
337
|
-
</div>
|
|
338
|
-
</aside>
|
|
339
|
-
</section>
|
|
340
|
-
</main>
|
|
341
|
-
</body>
|
|
342
|
-
</html>
|