thumbgate 1.27.16 → 1.27.18

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 (165) hide show
  1. package/.claude-plugin/marketplace.json +85 -0
  2. package/.claude-plugin/plugin.json +3 -4
  3. package/.well-known/llms.txt +12 -33
  4. package/.well-known/mcp/server-card.json +8 -8
  5. package/README.md +30 -215
  6. package/adapters/chatgpt/openapi.yaml +1695 -0
  7. package/adapters/claude/.mcp.json +2 -2
  8. package/adapters/gemini/function-declarations.json +0 -1
  9. package/adapters/mcp/server-stdio.js +11 -263
  10. package/adapters/opencode/opencode.json +1 -1
  11. package/bench/thumbgate-bench.json +2 -2
  12. package/bin/cli.js +122 -1421
  13. package/bin/postinstall.js +27 -11
  14. package/config/gate-templates.json +0 -216
  15. package/config/gates/claim-verification.json +0 -12
  16. package/config/gates/default.json +2 -31
  17. package/config/github-about.json +2 -2
  18. package/config/mcp-allowlists.json +13 -23
  19. package/config/merge-quality-checks.json +1 -0
  20. package/config/model-candidates.json +6 -121
  21. package/openapi/openapi.yaml +0 -12
  22. package/package.json +98 -228
  23. package/public/blog.html +4 -4
  24. package/public/codex-plugin.html +20 -72
  25. package/public/compare.html +8 -31
  26. package/public/dashboard.html +166 -930
  27. package/public/federal.html +2 -2
  28. package/public/guide.html +9 -33
  29. package/public/index.html +116 -495
  30. package/public/learn.html +18 -191
  31. package/public/lessons.html +10 -168
  32. package/public/numbers.html +7 -7
  33. package/public/pro.html +11 -34
  34. package/scripts/agent-memory-lifecycle.js +0 -211
  35. package/scripts/agent-readiness.js +3 -167
  36. package/scripts/agent-reward-model.js +1 -53
  37. package/scripts/auto-promote-gates.js +10 -82
  38. package/scripts/auto-wire-hooks.js +0 -14
  39. package/scripts/billing.js +1 -93
  40. package/scripts/build-metadata.js +10 -50
  41. package/scripts/cli-feedback.js +6 -18
  42. package/scripts/cli-schema.js +0 -90
  43. package/scripts/cli-telemetry.js +1 -6
  44. package/scripts/commercial-offer.js +2 -82
  45. package/scripts/context-manager.js +6 -74
  46. package/scripts/dashboard.js +2 -68
  47. package/scripts/durability/step.js +3 -3
  48. package/scripts/export-databricks-bundle.js +1 -5
  49. package/scripts/export-dpo-pairs.js +2 -7
  50. package/scripts/feedback-loop.js +1 -123
  51. package/scripts/feedback-quality.js +0 -87
  52. package/scripts/filesystem-search.js +10 -35
  53. package/scripts/gate-stats.js +0 -89
  54. package/scripts/gates-engine.js +85 -1105
  55. package/scripts/gemini-embedding-policy.js +1 -2
  56. package/scripts/hook-runtime.js +14 -20
  57. package/scripts/hook-thumbgate-cache-updater.js +2 -18
  58. package/scripts/hybrid-feedback-context.js +7 -142
  59. package/scripts/lesson-inference.js +3 -8
  60. package/scripts/lesson-search.js +1 -17
  61. package/scripts/license.js +1 -0
  62. package/scripts/llm-client.js +9 -390
  63. package/scripts/local-model-profile.js +8 -15
  64. package/scripts/memory-scope-readiness.js +0 -159
  65. package/scripts/meta-agent-loop.js +0 -36
  66. package/scripts/operational-integrity.js +5 -39
  67. package/scripts/oss-pr-opportunity-scout.js +5 -35
  68. package/scripts/plausible-server-events.js +6 -9
  69. package/scripts/pro-local-dashboard.js +4 -4
  70. package/scripts/proxy-pointer-rag-guardrails.js +1 -42
  71. package/scripts/rate-limiter.js +13 -64
  72. package/scripts/secret-scanner.js +5 -44
  73. package/scripts/security-scanner.js +10 -260
  74. package/scripts/self-distill-agent.js +1 -3
  75. package/scripts/seo-gsd.js +2 -916
  76. package/scripts/statusline-cache-path.js +2 -17
  77. package/scripts/statusline-local-stats.js +1 -9
  78. package/scripts/statusline-meta.js +2 -28
  79. package/scripts/statusline.sh +4 -20
  80. package/scripts/telemetry-analytics.js +0 -357
  81. package/scripts/thompson-sampling.js +10 -31
  82. package/scripts/thumbgate-bench.js +1 -16
  83. package/scripts/thumbgate-search.js +19 -85
  84. package/scripts/tool-registry.js +1 -169
  85. package/scripts/vector-store.js +0 -45
  86. package/scripts/workflow-sentinel.js +53 -286
  87. package/scripts/workspace-evolver.js +2 -62
  88. package/src/api/server.js +290 -2578
  89. package/.claude/commands/dashboard.md +0 -15
  90. package/.claude/commands/thumbgate-blocked.md +0 -27
  91. package/.claude/commands/thumbgate-dashboard.md +0 -15
  92. package/.claude/commands/thumbgate-doctor.md +0 -30
  93. package/.claude/commands/thumbgate-guard.md +0 -36
  94. package/.claude/commands/thumbgate-protect.md +0 -30
  95. package/.claude/commands/thumbgate-rules.md +0 -30
  96. package/.well-known/agentic-verify.txt +0 -1
  97. package/adapters/gcp/dfcx-webhook-gate.js +0 -295
  98. package/adapters/letta/README.md +0 -41
  99. package/adapters/letta/thumbgate-letta-adapter.js +0 -133
  100. package/adapters/policy-engine/ethicore-guardian-client.js +0 -68
  101. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +0 -260
  102. package/bench/observability-eval-suite.json +0 -26
  103. package/bin/dashboard-cli.js +0 -7
  104. package/commands/dashboard.md +0 -15
  105. package/commands/thumbgate-dashboard.md +0 -15
  106. package/config/builtin-lessons.json +0 -23
  107. package/config/gate-classifier-routing.json +0 -98
  108. package/config/post-deploy-marketing-pages.json +0 -61
  109. package/public/about.html +0 -162
  110. package/public/agent-manager.html +0 -179
  111. package/public/agents-cost-savings.html +0 -153
  112. package/public/ai-malpractice-prevention.html +0 -818
  113. package/public/assets/brand/github-social-preview.png +0 -0
  114. package/public/assets/brand/thumbgate-icon-512.png +0 -0
  115. package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
  116. package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
  117. package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
  118. package/public/assets/brand/thumbgate-logo-transparent.svg +0 -22
  119. package/public/assets/brand/thumbgate-mark-inline-v3.svg +0 -19
  120. package/public/assets/brand/thumbgate-mark-pro.svg +0 -23
  121. package/public/assets/brand/thumbgate-mark-team.svg +0 -26
  122. package/public/assets/brand/thumbgate-mark.svg +0 -21
  123. package/public/assets/brand/thumbgate-wordmark.svg +0 -20
  124. package/public/assets/claude-thumbgate-statusbar.svg +0 -8
  125. package/public/assets/codex-thumbgate-statusbar-test.svg +0 -9
  126. package/public/assets/legal-intake-control-flow.svg +0 -66
  127. package/public/brand/thumbgate-mark.svg +0 -19
  128. package/public/brand/thumbgate-og.svg +0 -16
  129. package/public/chatgpt-app.html +0 -330
  130. package/public/codex-enterprise.html +0 -123
  131. package/public/js/buyer-intent.js +0 -672
  132. package/public/pricing.html +0 -399
  133. package/scripts/action-receipts.js +0 -324
  134. package/scripts/activation-quickstart.js +0 -187
  135. package/scripts/agent-operations-planner.js +0 -621
  136. package/scripts/ai-component-inventory.js +0 -367
  137. package/scripts/async-eval-observability.js +0 -236
  138. package/scripts/audit.js +0 -65
  139. package/scripts/aws-blocks-guardrails.js +0 -228
  140. package/scripts/classifier-routing.js +0 -130
  141. package/scripts/dashboard-chat.js +0 -332
  142. package/scripts/feedback-aggregate.js +0 -281
  143. package/scripts/feedback-sanitizer.js +0 -105
  144. package/scripts/hob-pack.js +0 -591
  145. package/scripts/hook-stop-anti-claim.js +0 -301
  146. package/scripts/install-shim.js +0 -87
  147. package/scripts/mcp-oauth.js +0 -293
  148. package/scripts/noop-detect.js +0 -285
  149. package/scripts/omlx-smoke.js +0 -192
  150. package/scripts/parallel-workflow-orchestrator.js +0 -293
  151. package/scripts/plan-gate.js +0 -243
  152. package/scripts/plausible-domain-config.js +0 -99
  153. package/scripts/qa-scenario-planner.js +0 -136
  154. package/scripts/repeat-metric.js +0 -137
  155. package/scripts/secret-fixture-tokens.js +0 -61
  156. package/scripts/secret-redaction.js +0 -166
  157. package/scripts/self-harness-optimizer.js +0 -141
  158. package/scripts/self-healing-check.js +0 -193
  159. package/scripts/silent-failure-cluster.js +0 -531
  160. package/scripts/statusline-cache-read.js +0 -57
  161. package/scripts/sync-telemetry-from-prod.js +0 -374
  162. package/scripts/tool-contract-validator.js +0 -76
  163. package/scripts/trajectory-scorer.js +0 -63
  164. package/scripts/verify-marketing-pages-deployed.js +0 -195
  165. package/scripts/visitor-journey.js +0 -172
@@ -1,22 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 360" role="img" aria-labelledby="tg-logo-transparent-title tg-logo-transparent-desc">
2
- <title id="tg-logo-transparent-title">ThumbGate</title>
3
- <desc id="tg-logo-transparent-desc">Transparent ThumbGate sponsor logo with TG gate monogram and wordmark for dark or colored event backgrounds.</desc>
4
- <defs>
5
- <linearGradient id="tg-logo-transparent-frame" x1="66" y1="66" x2="294" y2="294" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- <filter id="tg-logo-transparent-glow" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
10
- <feDropShadow dx="0" dy="0" stdDeviation="8" flood-color="#22d3ee" flood-opacity="0.30"/>
11
- </filter>
12
- </defs>
13
- <g filter="url(#tg-logo-transparent-glow)">
14
- <rect x="66" y="66" width="228" height="228" rx="54" fill="#061015" fill-opacity="0.78"/>
15
- <rect x="103" y="103" width="154" height="154" rx="36" fill="#0b1820" stroke="url(#tg-logo-transparent-frame)" stroke-width="9"/>
16
- <path d="M132 216V147c0-16 12-28 28-28h40c16 0 28 12 28 28v69" fill="none" stroke="#8cf5d1" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"/>
17
- <text x="180" y="196" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="58" font-weight="900" letter-spacing="-3.5">TG</text>
18
- <rect x="129" y="211" width="102" height="13" rx="6.5" fill="#22d3ee"/>
19
- </g>
20
- <text x="340" y="178" fill="#f4fdff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="82" font-weight="900">ThumbGate</text>
21
- <text x="344" y="235" fill="#9ca3af" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="30" font-weight="600">Pre-Action Checks for AI coding agents</text>
22
- </svg>
@@ -1,19 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="tg-inline-title tg-inline-desc">
2
- <title id="tg-inline-title">ThumbGate</title>
3
- <desc id="tg-inline-desc">ThumbGate simplified gate mark for inline site headers.</desc>
4
- <defs>
5
- <linearGradient id="tg-inline-frame" x1="8" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- <linearGradient id="tg-inline-fill" x1="20" y1="18" x2="44" y2="48" gradientUnits="userSpaceOnUse">
10
- <stop offset="0" stop-color="#123142"/>
11
- <stop offset="1" stop-color="#071116"/>
12
- </linearGradient>
13
- </defs>
14
- <rect x="5" y="5" width="54" height="54" rx="15" fill="#061015"/>
15
- <path d="M32 10.5c12.2 3.9 19 11.4 19 22.1 0 11.9-9.4 19.2-19 22.1-9.6-2.9-19-10.2-19-22.1 0-10.7 6.8-18.2 19-22.1Z" fill="url(#tg-inline-fill)" stroke="url(#tg-inline-frame)" stroke-width="4" stroke-linejoin="round"/>
16
- <path d="M22 43V29.4c0-6 4.4-10.4 10-10.4s10 4.4 10 10.4V43" fill="none" stroke="#8cf5d1" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
17
- <path d="M25 43h14" stroke="#22d3ee" stroke-width="5" stroke-linecap="round"/>
18
- <circle cx="32" cy="31" r="3.2" fill="#e7fbff"/>
19
- </svg>
@@ -1,23 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate Pro mark</title>
3
- <desc id="desc">ThumbGate TG gate monogram with a gold Pro ribbon badge.</desc>
4
- <defs>
5
- <linearGradient id="tg-frame-pro" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- <linearGradient id="pro-ribbon" x1="312" y1="48" x2="472" y2="144" gradientUnits="userSpaceOnUse">
10
- <stop offset="0" stop-color="#fbbf24"/>
11
- <stop offset="1" stop-color="#f59e0b"/>
12
- </linearGradient>
13
- </defs>
14
- <rect width="512" height="512" rx="112" fill="#061015"/>
15
- <rect x="78" y="78" width="356" height="356" rx="84" fill="#0b1820" stroke="url(#tg-frame-pro)" stroke-width="18"/>
16
- <path d="M146 354V192c0-36 29-65 65-65h90c36 0 65 29 65 65v162" fill="none" stroke="#8cf5d1" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
17
- <text x="256" y="310" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="132" font-weight="900" letter-spacing="-8">TG</text>
18
- <rect x="140" y="344" width="232" height="28" rx="14" fill="#22d3ee"/>
19
- <g transform="translate(296 40)">
20
- <path d="M0 0 H176 V84 L156 66 L136 84 L116 66 L96 84 L76 66 L56 84 L36 66 L16 84 L0 66 Z" fill="url(#pro-ribbon)"/>
21
- <text x="88" y="54" text-anchor="middle" fill="#1a1305" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="44" font-weight="900" letter-spacing="4">PRO</text>
22
- </g>
23
- </svg>
@@ -1,26 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate Team mark</title>
3
- <desc id="desc">ThumbGate TG gate monogram with a violet Team badge and three stacked member glyphs.</desc>
4
- <defs>
5
- <linearGradient id="tg-frame-team" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- <linearGradient id="team-badge" x1="296" y1="40" x2="472" y2="136" gradientUnits="userSpaceOnUse">
10
- <stop offset="0" stop-color="#a78bfa"/>
11
- <stop offset="1" stop-color="#7c3aed"/>
12
- </linearGradient>
13
- </defs>
14
- <rect width="512" height="512" rx="112" fill="#061015"/>
15
- <rect x="78" y="78" width="356" height="356" rx="84" fill="#0b1820" stroke="url(#tg-frame-team)" stroke-width="18"/>
16
- <path d="M146 354V192c0-36 29-65 65-65h90c36 0 65 29 65 65v162" fill="none" stroke="#8cf5d1" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
17
- <text x="256" y="310" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="132" font-weight="900" letter-spacing="-8">TG</text>
18
- <rect x="140" y="344" width="232" height="28" rx="14" fill="#22d3ee"/>
19
- <g transform="translate(296 40)">
20
- <rect x="0" y="0" width="176" height="84" rx="42" fill="url(#team-badge)"/>
21
- <circle cx="34" cy="42" r="12" fill="#ede9fe"/>
22
- <circle cx="58" cy="42" r="12" fill="#ede9fe"/>
23
- <circle cx="82" cy="42" r="12" fill="#ede9fe"/>
24
- <text x="130" y="54" text-anchor="middle" fill="#1e1033" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="28" font-weight="900" letter-spacing="2">TEAM</text>
25
- </g>
26
- </svg>
@@ -1,21 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate mark</title>
3
- <desc id="desc">A crisp shield and thumbs-up mark for ThumbGate.</desc>
4
- <defs>
5
- <linearGradient id="tg-frame" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- </defs>
10
- <rect width="512" height="512" rx="112" fill="#061015"/>
11
- <g transform="translate(78, 78) scale(5.5625)">
12
- <!-- Outer Shield / Gate -->
13
- <path d="M32 9 C20 13 15 20 15 33 C15 45 26 53 32 56 C38 53 49 45 49 33 C49 20 44 13 32 9 Z"
14
- fill="#0b1820" stroke="url(#tg-frame)" stroke-width="3.5" stroke-linejoin="round"/>
15
-
16
- <!-- Proportional Thumbs Up -->
17
- <g transform="translate(19, 17) scale(1.1)" stroke="#8cf5d1" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none">
18
- <path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"/>
19
- </g>
20
- </g>
21
- </svg>
@@ -1,20 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 360" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate wordmark</title>
3
- <desc id="desc">ThumbGate wordmark with the TG gate monogram.</desc>
4
- <defs>
5
- <linearGradient id="tg-frame" x1="47" y1="47" x2="205" y2="205" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- </defs>
10
- <rect width="1200" height="360" rx="56" fill="#ffffff"/>
11
- <g transform="translate(54 54)">
12
- <rect width="252" height="252" rx="56" fill="#061015"/>
13
- <rect x="39" y="39" width="174" height="174" rx="41" fill="#0b1820" stroke="url(#tg-frame)" stroke-width="9"/>
14
- <path d="M72 174V95c0-18 14-32 32-32h44c18 0 32 14 32 32v79" fill="none" stroke="#8cf5d1" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
15
- <text x="126" y="152" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="66" font-weight="900" letter-spacing="-4">TG</text>
16
- <rect x="69" y="169" width="114" height="14" rx="7" fill="#22d3ee"/>
17
- </g>
18
- <text x="356" y="176" fill="#061015" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="86" font-weight="800" letter-spacing="0">ThumbGate</text>
19
- <text x="360" y="230" fill="#475569" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="32" font-weight="600" letter-spacing="0">Pre-Action Checks for AI coding agents</text>
20
- </svg>
@@ -1,8 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="320" viewBox="0 0 1600 320" fill="none">
2
- <rect width="1600" height="320" rx="24" fill="#050816"/>
3
- <rect x="24" y="24" width="1552" height="272" rx="20" fill="#0B1220" stroke="#1F2A44"/>
4
- <text x="56" y="72" fill="#7DD3FC" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="28">Claude Code · live ThumbGate footer</text>
5
- <rect x="56" y="116" width="1488" height="108" rx="16" fill="#111827" stroke="#243041"/>
6
- <text x="88" y="180" fill="#E5E7EB" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="28">ThumbGate v1.5.1 · Pro · 21👍 107👎 → · Dashboard · Lessons</text>
7
- <text x="88" y="258" fill="#94A3B8" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="24">Latest mistake 04/15/2026 20:24:42: Treated user as QA instead of doing TDD. Went in circles ...</text>
8
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="360" viewBox="0 0 1600 360" fill="none">
2
- <rect width="1600" height="360" rx="24" fill="#050816"/>
3
- <rect x="24" y="24" width="1552" height="312" rx="20" fill="#0B1220" stroke="#1F2A44"/>
4
- <text x="56" y="72" fill="#A78BFA" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="28">OpenAI Codex v0.120.0 · published ThumbGate test lane</text>
5
- <rect x="56" y="116" width="1488" height="96" rx="16" fill="#111827" stroke="#243041"/>
6
- <text x="88" y="176" fill="#E5E7EB" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="28">gpt-5.4 xhigh fast · fix/codex-statusline · Context [ ] · 0 in · 0 out</text>
7
- <text x="56" y="270" fill="#7DD3FC" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="24">Published branch installs ThumbGate PreToolUse, UserPromptSubmit, PostToolUse, SessionStart, and statusLine wiring.</text>
8
- <text x="56" y="310" fill="#94A3B8" font-family="SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, monospace" font-size="22">Current Codex CLI footer remains native on v0.120.0, so this is the reproducible test lane you can run after npx thumbgate init --agent codex.</text>
9
- </svg>
@@ -1,66 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="780" viewBox="0 0 1200 780" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate legal intake control flow</title>
3
- <desc id="desc">A four-step diagram showing a prospect question, a ThumbGate pre-action check, an attorney review handoff, and an exportable audit event.</desc>
4
- <defs>
5
- <linearGradient id="bg" x1="0" x2="1" y1="0" y2="1">
6
- <stop offset="0" stop-color="#101318"/>
7
- <stop offset="1" stop-color="#08090b"/>
8
- </linearGradient>
9
- <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
10
- <feDropShadow dx="0" dy="18" stdDeviation="22" flood-color="#000000" flood-opacity="0.35"/>
11
- </filter>
12
- </defs>
13
- <rect width="1200" height="780" rx="34" fill="url(#bg)"/>
14
- <rect x="44" y="42" width="1112" height="696" rx="26" fill="#14161a" stroke="#2c313a" stroke-width="2"/>
15
- <text x="86" y="105" fill="#f2f4f8" font-family="Inter, Arial, sans-serif" font-size="34" font-weight="800">Legal AI intake: pre-action control flow</text>
16
- <text x="86" y="145" fill="#a7afbd" font-family="Inter, Arial, sans-serif" font-size="19">The agent can help with intake, but risky actions pass through policy checks before execution.</text>
17
-
18
- <g filter="url(#shadow)">
19
- <rect x="86" y="210" width="238" height="250" rx="18" fill="#1b1f26" stroke="#2c313a" stroke-width="2"/>
20
- <circle cx="122" cy="250" r="20" fill="#2dd4bf"/>
21
- <text x="116" y="257" fill="#071116" font-family="Inter, Arial, sans-serif" font-size="20" font-weight="900">1</text>
22
- <text x="86" y="504" fill="#a7afbd" font-family="Inter, Arial, sans-serif" font-size="15">Prospect asks</text>
23
- <text x="116" y="306" fill="#f2f4f8" font-family="Inter, Arial, sans-serif" font-size="24" font-weight="800">Intake question</text>
24
- <text x="116" y="350" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">Can I sue my</text>
25
- <text x="116" y="378" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">former employer in</text>
26
- <text x="116" y="406" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">Florida?</text>
27
- </g>
28
-
29
- <path d="M348 334 H430" stroke="#62a4ff" stroke-width="5" stroke-linecap="round"/>
30
- <path d="M430 334 l-18 -13 v26 z" fill="#62a4ff"/>
31
-
32
- <g filter="url(#shadow)">
33
- <rect x="454" y="188" width="292" height="294" rx="18" fill="#21161a" stroke="#fb7185" stroke-opacity="0.72" stroke-width="2"/>
34
- <circle cx="490" cy="230" r="20" fill="#fb7185"/>
35
- <text x="484" y="237" fill="#19070a" font-family="Inter, Arial, sans-serif" font-size="20" font-weight="900">2</text>
36
- <text x="486" y="286" fill="#f2f4f8" font-family="Inter, Arial, sans-serif" font-size="24" font-weight="800">ThumbGate check</text>
37
- <text x="486" y="329" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">Advice-shaped response</text>
38
- <text x="486" y="357" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">detected before delivery.</text>
39
- <rect x="486" y="393" width="220" height="42" rx="10" fill="#fb7185" fill-opacity="0.18" stroke="#fb7185" stroke-opacity="0.55"/>
40
- <text x="508" y="421" fill="#ffd9df" font-family="Inter, Arial, sans-serif" font-size="17" font-weight="800">Route to review</text>
41
- </g>
42
-
43
- <path d="M770 334 H852" stroke="#62a4ff" stroke-width="5" stroke-linecap="round"/>
44
- <path d="M852 334 l-18 -13 v26 z" fill="#62a4ff"/>
45
-
46
- <g filter="url(#shadow)">
47
- <rect x="876" y="210" width="238" height="250" rx="18" fill="#16231d" stroke="#72e3a5" stroke-opacity="0.65" stroke-width="2"/>
48
- <circle cx="912" cy="250" r="20" fill="#72e3a5"/>
49
- <text x="906" y="257" fill="#06120b" font-family="Inter, Arial, sans-serif" font-size="20" font-weight="900">3</text>
50
- <text x="906" y="306" fill="#f2f4f8" font-family="Inter, Arial, sans-serif" font-size="24" font-weight="800">Safe handoff</text>
51
- <text x="906" y="350" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">Collect neutral facts.</text>
52
- <text x="906" y="378" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">Schedule attorney</text>
53
- <text x="906" y="406" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="18">review.</text>
54
- </g>
55
-
56
- <path d="M994 484 V566 H724" stroke="#62a4ff" stroke-width="5" stroke-linecap="round" fill="none"/>
57
- <path d="M724 566 l18 -13 v26 z" fill="#62a4ff"/>
58
-
59
- <g filter="url(#shadow)">
60
- <rect x="414" y="548" width="286" height="122" rx="18" fill="#1b1f26" stroke="#2c313a" stroke-width="2"/>
61
- <circle cx="450" cy="588" r="20" fill="#62a4ff"/>
62
- <text x="444" y="595" fill="#06111f" font-family="Inter, Arial, sans-serif" font-size="20" font-weight="900">4</text>
63
- <text x="486" y="592" fill="#f2f4f8" font-family="Inter, Arial, sans-serif" font-size="23" font-weight="800">Audit event</text>
64
- <text x="486" y="631" fill="#d8deea" font-family="Inter, Arial, sans-serif" font-size="17">Rule, source, action, outcome, reviewer, timestamp.</text>
65
- </g>
66
- </svg>
@@ -1,19 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title desc">
2
- <title id="title">ThumbGate</title>
3
- <desc id="desc">ThumbGate premium shield and thumbs-up mark.</desc>
4
- <defs>
5
- <linearGradient id="tg-frame" x1="8" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
6
- <stop offset="0" stop-color="#8cf5d1"/>
7
- <stop offset="1" stop-color="#22d3ee"/>
8
- </linearGradient>
9
- </defs>
10
- <rect width="64" height="64" rx="14" fill="#061015"/>
11
- <!-- Outer Shield / Gate -->
12
- <path d="M32 9 C20 13 15 20 15 33 C15 45 26 53 32 56 C38 53 49 45 49 33 C49 20 44 13 32 9 Z"
13
- fill="#0b1820" stroke="url(#tg-frame)" stroke-width="3.5" stroke-linejoin="round"/>
14
-
15
- <!-- Proportional Thumbs Up -->
16
- <g transform="translate(19, 17) scale(1.1)" stroke="#8cf5d1" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none">
17
- <path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"/>
18
- </g>
19
- </svg>
@@ -1,16 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-label="ThumbGate">
2
- <title>ThumbGate</title>
3
- <rect width="1200" height="630" fill="#0a1929"/>
4
- <!-- Mark, scaled and positioned -->
5
- <g transform="translate(430 155) scale(5)">
6
- <rect width="64" height="64" rx="12" fill="#0c2239"/>
7
- <g fill="#40e0d0">
8
- <path d="M20 30 h22 a4 4 0 0 1 4 4 v14 a4 4 0 0 1 -4 4 h-22 a4 4 0 0 1 -4 -4 v-14 a4 4 0 0 1 4 -4 z"/>
9
- <path d="M28 12 a5 5 0 0 1 10 0 v16 a2 2 0 0 1 -2 2 h-6 a2 2 0 0 1 -2 -2 z"/>
10
- <rect x="18" y="50" width="26" height="4" rx="1.5" fill="#0c2239"/>
11
- </g>
12
- </g>
13
- <!-- Wordmark -->
14
- <text x="600" y="540" text-anchor="middle" font-family="-apple-system, 'Segoe UI', system-ui, sans-serif" font-weight="700" font-size="72" fill="#f5f7fb" letter-spacing="-2">ThumbGate</text>
15
- <text x="600" y="590" text-anchor="middle" font-family="-apple-system, 'Segoe UI', system-ui, sans-serif" font-weight="500" font-size="24" fill="#40e0d0" letter-spacing="1">Pre-action checks for AI coding agents</text>
16
- </svg>
@@ -1,330 +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">
6
- <title>ThumbGate for ChatGPT - GPT Action + Agent Guardrails</title>
7
- <meta name="description" content="Open the ThumbGate GPT, import the GPT Action schema, and connect ChatGPT lessons to local Codex, Claude Code, Cursor, and MCP agent enforcement.">
8
- <link rel="canonical" href="https://thumbgate.ai/chatgpt-app">
9
- <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="https://thumbgate.ai/llm-context.md">
10
- <meta property="og:title" content="ThumbGate for ChatGPT">
11
- <meta property="og:description" content="A first-class ChatGPT entrypoint for preflighting risky agent actions and feeding typed lessons into ThumbGate enforcement.">
12
- <meta property="og:type" content="website">
13
- <meta property="og:url" content="https://thumbgate.ai/chatgpt-app">
14
- <meta property="og:image" content="https://thumbgate.ai/assets/brand/thumbgate-logo-1200x360.png">
15
- <meta name="twitter:card" content="summary_large_image">
16
- <script type="application/ld+json">
17
- {
18
- "@context": "https://schema.org",
19
- "@type": "SoftwareApplication",
20
- "name": "ThumbGate for ChatGPT",
21
- "applicationCategory": "DeveloperApplication",
22
- "operatingSystem": "Web, macOS, Linux, Windows",
23
- "url": "https://thumbgate.ai/chatgpt-app",
24
- "description": "ChatGPT GPT Action entrypoint for checking risky agent actions and carrying typed thumbs-up/down lessons into ThumbGate local enforcement.",
25
- "offers": [
26
- { "@type": "Offer", "price": "0", "priceCurrency": "USD", "name": "Free GPT entrypoint" },
27
- { "@type": "Offer", "price": "19", "priceCurrency": "USD", "name": "ThumbGate Pro", "url": "https://thumbgate.ai/checkout/pro" }
28
- ]
29
- }
30
- </script>
31
- <style>
32
- :root {
33
- color-scheme: dark;
34
- --bg: #050607;
35
- --panel: #111418;
36
- --panel-2: #171b20;
37
- --line: #2a3038;
38
- --cyan: #20d8ef;
39
- --green: #55e38b;
40
- --text: #f3f6f8;
41
- --muted: #aab3bd;
42
- --warning: #ffd166;
43
- }
44
- * { box-sizing: border-box; }
45
- body {
46
- margin: 0;
47
- background: var(--bg);
48
- color: var(--text);
49
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
50
- letter-spacing: 0;
51
- }
52
- a { color: inherit; }
53
- .shell { max-width: 1120px; margin: 0 auto; padding: 28px 20px 72px; }
54
- .nav { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 6px 0 28px; }
55
- .brand { display: inline-flex; align-items: center; gap: 12px; font-weight: 800; text-decoration: none; }
56
- .brand img { width: 28px; height: 28px; }
57
- .navlinks { display: flex; gap: 18px; flex-wrap: wrap; color: var(--muted); font-size: 14px; }
58
- .navlinks a { text-decoration: none; }
59
- .hero {
60
- display: grid;
61
- grid-template-columns: minmax(0, 1.04fr) minmax(320px, 0.96fr);
62
- gap: 28px;
63
- align-items: stretch;
64
- padding: 34px 0 26px;
65
- }
66
- .eyebrow { color: var(--cyan); font-size: 13px; font-weight: 800; text-transform: uppercase; margin-bottom: 14px; }
67
- h1 { font-size: clamp(42px, 6vw, 72px); line-height: 0.98; margin: 0 0 18px; letter-spacing: 0; max-width: 740px; }
68
- .lead { color: var(--muted); font-size: 19px; line-height: 1.58; max-width: 720px; margin: 0 0 24px; }
69
- .actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 24px 0; }
70
- .btn {
71
- display: inline-flex;
72
- align-items: center;
73
- justify-content: center;
74
- min-height: 46px;
75
- padding: 0 18px;
76
- border-radius: 8px;
77
- border: 1px solid var(--line);
78
- background: var(--panel);
79
- color: var(--text);
80
- text-decoration: none;
81
- font-weight: 800;
82
- font-size: 14px;
83
- white-space: nowrap;
84
- }
85
- .btn.primary { background: var(--cyan); color: #001316; border-color: var(--cyan); }
86
- .btn.secondary { border-color: rgba(32, 216, 239, 0.55); color: var(--cyan); }
87
- .proof {
88
- display: flex;
89
- flex-wrap: wrap;
90
- gap: 10px;
91
- margin-top: 22px;
92
- color: var(--muted);
93
- font-size: 13px;
94
- }
95
- .pill { border: 1px solid var(--line); border-radius: 999px; padding: 7px 10px; background: rgba(255,255,255,0.03); }
96
- .panel {
97
- border: 1px solid var(--line);
98
- border-radius: 8px;
99
- background: var(--panel);
100
- overflow: hidden;
101
- min-width: 0;
102
- }
103
- .panel-head {
104
- display: flex;
105
- justify-content: space-between;
106
- gap: 12px;
107
- border-bottom: 1px solid var(--line);
108
- padding: 13px 14px;
109
- color: var(--muted);
110
- font-size: 13px;
111
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
112
- }
113
- .screen { padding: 16px; display: grid; gap: 12px; }
114
- .message {
115
- background: var(--panel-2);
116
- border: 1px solid var(--line);
117
- border-radius: 8px;
118
- padding: 14px;
119
- font-size: 14px;
120
- line-height: 1.55;
121
- }
122
- .message strong { color: var(--green); }
123
- .code {
124
- display: block;
125
- background: #07090b;
126
- border: 1px solid #222932;
127
- border-radius: 8px;
128
- padding: 13px;
129
- overflow-x: auto;
130
- color: #d8f7ff;
131
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
132
- font-size: 13px;
133
- line-height: 1.55;
134
- }
135
- section { padding: 34px 0; }
136
- .section-title { font-size: 28px; margin: 0 0 12px; letter-spacing: 0; }
137
- .section-copy { margin: 0 0 20px; color: var(--muted); line-height: 1.65; max-width: 840px; }
138
- .grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
139
- .card {
140
- border: 1px solid var(--line);
141
- border-radius: 8px;
142
- background: var(--panel);
143
- padding: 18px;
144
- min-width: 0;
145
- }
146
- .card h3 { margin: 0 0 10px; font-size: 18px; letter-spacing: 0; }
147
- .card p, .card li { color: var(--muted); line-height: 1.6; font-size: 14px; }
148
- .card ul { padding-left: 18px; margin: 0; }
149
- .steps { counter-reset: step; display: grid; gap: 12px; }
150
- .step {
151
- display: grid;
152
- grid-template-columns: 46px minmax(0, 1fr);
153
- gap: 14px;
154
- align-items: start;
155
- border: 1px solid var(--line);
156
- border-radius: 8px;
157
- background: var(--panel);
158
- padding: 16px;
159
- }
160
- .step::before {
161
- counter-increment: step;
162
- content: counter(step);
163
- display: grid;
164
- place-items: center;
165
- width: 34px;
166
- height: 34px;
167
- border-radius: 8px;
168
- background: rgba(32, 216, 239, 0.12);
169
- color: var(--cyan);
170
- border: 1px solid rgba(32, 216, 239, 0.4);
171
- font-weight: 900;
172
- }
173
- .step h3 { margin: 2px 0 7px; font-size: 17px; }
174
- .step p { color: var(--muted); margin: 0; line-height: 1.6; }
175
- .notice {
176
- border: 1px solid rgba(255, 209, 102, 0.45);
177
- background: rgba(255, 209, 102, 0.08);
178
- color: #fff0bf;
179
- border-radius: 8px;
180
- padding: 15px 16px;
181
- line-height: 1.6;
182
- margin-top: 18px;
183
- }
184
- footer { color: var(--muted); border-top: 1px solid var(--line); padding-top: 24px; margin-top: 24px; font-size: 14px; }
185
- @media (max-width: 860px) {
186
- .hero { grid-template-columns: 1fr; }
187
- .grid { grid-template-columns: 1fr; }
188
- .nav { align-items: flex-start; flex-direction: column; }
189
- h1 { font-size: 44px; }
190
- .btn { width: 100%; }
191
- }
192
- </style>
193
- </head>
194
- <body>
195
- <main class="shell">
196
- <nav class="nav" aria-label="Primary">
197
- <a class="brand" href="/">
198
- <img src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="ThumbGate logo">
199
- <span>ThumbGate</span>
200
- </a>
201
- <div class="navlinks">
202
- <a href="/codex-plugin">Codex plugin</a>
203
- <a href="/guide">Install</a>
204
- <a href="/pricing">Pricing</a>
205
- <a href="https://github.com/IgorGanapolsky/ThumbGate" rel="noopener">GitHub</a>
206
- </div>
207
- </nav>
208
-
209
- <section class="hero" aria-labelledby="chatgpt-title">
210
- <div>
211
- <div class="eyebrow">ChatGPT surface for ThumbGate</div>
212
- <h1 id="chatgpt-title">ThumbGate for ChatGPT</h1>
213
- <p class="lead">Use the live ThumbGate GPT to preflight risky agent actions, capture typed thumbs-up/down lessons, and route those lessons into local enforcement for Codex, Claude Code, Cursor, Gemini CLI, and MCP-compatible agents.</p>
214
- <div class="actions">
215
- <a class="btn primary" href="/go/gpt?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=chatgpt_app_install&cta_id=chatgpt_app_open_gpt&cta_placement=hero" target="_blank" rel="noopener">Open ThumbGate GPT</a>
216
- <a class="btn secondary" href="/openapi.yaml?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=chatgpt_action_schema&cta_id=chatgpt_app_openapi&cta_placement=hero">Download GPT Action schema</a>
217
- <a class="btn" href="/guide?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=local_enforcement&cta_id=chatgpt_app_local_install&cta_placement=hero">Install local enforcement</a>
218
- </div>
219
- <div class="proof" aria-label="Current proof">
220
- <span class="pill">Live GPT link: /go/gpt</span>
221
- <span class="pill">Action schema: /openapi.yaml</span>
222
- <span class="pill">Local gate: npx thumbgate init</span>
223
- </div>
224
- </div>
225
-
226
- <div class="panel" aria-label="ThumbGate ChatGPT workflow preview">
227
- <div class="panel-head">
228
- <span>ChatGPT + ThumbGate</span>
229
- <span>typed feedback -> rules</span>
230
- </div>
231
- <div class="screen">
232
- <div class="message">Before I run this migration, check whether this repeats a rejected deploy pattern.</div>
233
- <div class="message"><strong>ThumbGate:</strong> Require evidence first: test output, rollback path, and the exact affected tables. Then install the local gate so future agents are blocked before execution.</div>
234
- <code class="code">thumbs down: agent claimed the release was published before checking npm and CI</code>
235
- <code class="code">npx thumbgate init --agent codex</code>
236
- </div>
237
- </div>
238
- </section>
239
-
240
- <section aria-labelledby="what-ships">
241
- <h2 class="section-title" id="what-ships">What ships today</h2>
242
- <p class="section-copy">This is the ChatGPT-facing distribution page. It keeps the claim precise: ChatGPT is the discovery, advice, checkpointing, and typed-feedback surface. The hard block still runs in the local agent or CI lane.</p>
243
- <div class="grid">
244
- <article class="card">
245
- <h3>Live GPT entrypoint</h3>
246
- <p>The public GPT lets users paste proposed actions, risky commands, PR steps, deploys, refunds, and agent plans before running them.</p>
247
- </article>
248
- <article class="card">
249
- <h3>GPT Action schema</h3>
250
- <p>The OpenAPI schema is publicly served for GPT Actions import and kept in the package so installs do not depend on hidden docs.</p>
251
- </article>
252
- <article class="card">
253
- <h3>Local enforcement path</h3>
254
- <p>ThumbGate still blocks repeated mistakes where work happens: Codex, Claude Code, Cursor, Gemini CLI, Amp, OpenCode, MCP, and CI.</p>
255
- </article>
256
- </div>
257
- </section>
258
-
259
- <section aria-labelledby="install-flow">
260
- <h2 class="section-title" id="install-flow">Install flow</h2>
261
- <div class="steps">
262
- <div class="step">
263
- <div>
264
- <h3>Open the ThumbGate GPT</h3>
265
- <p>Use the GPT for setup help, action review, and typed feedback. If the direct link does not open, search Explore GPTs for ThumbGate by Igor Ganapolsky.</p>
266
- </div>
267
- </div>
268
- <div class="step">
269
- <div>
270
- <h3>Import the GPT Action schema when configuring a custom GPT</h3>
271
- <p>Use <code>https://thumbgate.ai/openapi.yaml</code> as the Actions schema. API key auth uses a bearer token from the ThumbGate environment.</p>
272
- </div>
273
- </div>
274
- <div class="step">
275
- <div>
276
- <h3>Install the local gate</h3>
277
- <p>Run <code>npx thumbgate init</code> or the agent-specific command so lessons can become pre-action checks in the coding session.</p>
278
- </div>
279
- </div>
280
- </div>
281
- <div class="notice"><strong>Honest capture note:</strong> ChatGPT's native thumbs rating buttons are not the ThumbGate memory path. Type <code>thumbs up:</code> or <code>thumbs down:</code> with one concrete sentence so ThumbGate can store a structured lesson.</div>
282
- </section>
283
-
284
- <section aria-labelledby="enterprise">
285
- <h2 class="section-title" id="enterprise">Enterprise packaging</h2>
286
- <p class="section-copy">Teams can use ChatGPT as the human-facing review surface while ThumbGate enforces policy in the local or server-side execution lane. That gives buyers a simple story: one GPT for triage, one Codex plugin for coding, one shared lesson/rule store for repeat prevention.</p>
287
- <div class="grid">
288
- <article class="card">
289
- <h3>Buyer-ready links</h3>
290
- <ul>
291
- <li><a href="/chatgpt-app">ChatGPT app page</a></li>
292
- <li><a href="/codex-plugin">Codex plugin page</a></li>
293
- <li><a href="/pricing">Team pricing</a></li>
294
- </ul>
295
- </article>
296
- <article class="card">
297
- <h3>Implementation docs</h3>
298
- <ul>
299
- <li><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/adapters/chatgpt/INSTALL.md" rel="noopener">ChatGPT Actions setup</a></li>
300
- <li><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/chatgpt-gpt-instructions.md" rel="noopener">GPT instructions</a></li>
301
- <li><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/plugins/codex-profile/INSTALL.md" rel="noopener">Codex plugin install</a></li>
302
- </ul>
303
- </article>
304
- <article class="card">
305
- <h3>Proof lane</h3>
306
- <ul>
307
- <li><a href="/dashboard">Local dashboard</a></li>
308
- <li><a href="/llm-context.md">LLM context</a></li>
309
- <li><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest" rel="noopener">Latest release assets</a></li>
310
- </ul>
311
- </article>
312
- </div>
313
- </section>
314
-
315
- <section aria-labelledby="next-step">
316
- <h2 class="section-title" id="next-step">Use both OpenAI surfaces</h2>
317
- <p class="section-copy">Codex gets the execution-side plugin. ChatGPT gets the review and lesson-capture entrypoint. Together they make ThumbGate visible before the mistake and enforceable when the agent reaches for tools.</p>
318
- <div class="actions">
319
- <a class="btn primary" href="/go/gpt?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=chatgpt_app_install&cta_id=chatgpt_app_footer_gpt&cta_placement=footer" target="_blank" rel="noopener">Open ThumbGate GPT</a>
320
- <a class="btn secondary" href="/codex-plugin?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=codex_plugin_cross_sell&cta_id=chatgpt_app_footer_codex&cta_placement=footer">Install Codex plugin</a>
321
- <a class="btn" href="/checkout/pro?utm_source=chatgpt_app&utm_medium=landing&utm_campaign=chatgpt_app_pro&cta_id=chatgpt_app_footer_checkout&cta_placement=footer">Upgrade to Pro</a>
322
- </div>
323
- </section>
324
-
325
- <footer>
326
- ThumbGate for ChatGPT is an owned ThumbGate distribution surface. It does not claim official OpenAI marketplace approval; it links the live GPT, public GPT Action schema, and local enforcement install path.
327
- </footer>
328
- </main>
329
- </body>
330
- </html>