@jini-ai/agent-plugins 0.6.16 → 0.6.19

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 (335) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/NOTICE +14 -0
  3. package/README.md +35 -14
  4. package/charts-echarts/plugin.json +39 -0
  5. package/charts-echarts/skills/charts-echarts/SKILL.md +110 -0
  6. package/charts-recharts/plugin.json +32 -0
  7. package/charts-recharts/skills/charts-recharts/SKILL.md +108 -0
  8. package/cloudflare/NOTES.md +16 -0
  9. package/cloudflare/form-destinations/cloudflare-d1.mjs +9 -0
  10. package/cloudflare/lib/api.mjs +96 -0
  11. package/cloudflare/lib/assets.mjs +65 -0
  12. package/cloudflare/lib/dns.mjs +32 -0
  13. package/cloudflare/lib/domain-inventory.mjs +61 -0
  14. package/cloudflare/lib/domain-status.mjs +48 -0
  15. package/cloudflare/lib/domains.mjs +95 -0
  16. package/cloudflare/lib/forms.mjs +254 -0
  17. package/cloudflare/lib/pages-upload.mjs +51 -0
  18. package/cloudflare/lib/target.mjs +165 -0
  19. package/cloudflare/lib/workers-upload.mjs +48 -0
  20. package/cloudflare/lib/zones.mjs +25 -0
  21. package/cloudflare/mcp.json +4 -0
  22. package/cloudflare/plugin.json +96 -0
  23. package/cloudflare/skills/cloudflare/SKILL.md +57 -0
  24. package/cloudflare/skills/cloudflare/references/domains.md +31 -0
  25. package/cloudflare/skills/cloudflare/references/pages.md +18 -0
  26. package/cloudflare/skills/cloudflare/references/permissions.md +29 -0
  27. package/cloudflare/skills/cloudflare/references/troubleshooting.md +20 -0
  28. package/cloudflare/skills/cloudflare/references/workers.md +42 -0
  29. package/cloudflare/targets/cloudflare-pages.mjs +12 -0
  30. package/cloudflare/targets/cloudflare-workers.mjs +17 -0
  31. package/cloudflare/tovu-consent.json +6 -0
  32. package/cloudflare/tovu-deploy-targets.json +630 -0
  33. package/cloudflare/tovu-form-destinations.json +12 -0
  34. package/cloudflare/worker/forms-receiver.mjs +249 -0
  35. package/composio/mcp.json +10 -0
  36. package/composio/plugin.json +68 -0
  37. package/composio/skills/composio/SKILL.md +85 -0
  38. package/dist/core/identity-namespace.d.ts +12 -0
  39. package/dist/core/identity-namespace.js +20 -0
  40. package/dist/folder-zip-node.js +29 -7
  41. package/dist/lifecycle/bundled-digests.js +4 -3
  42. package/dist/lifecycle/install.d.ts +7 -0
  43. package/dist/lifecycle/install.js +45 -3
  44. package/dist/lifecycle/manifest.d.ts +2 -2
  45. package/dist/lifecycle/manifest.js +5 -3
  46. package/dist/lifecycle/node.js +2 -0
  47. package/dist/lifecycle/persistent-state.js +1 -1
  48. package/dist/lifecycle/ports.d.ts +8 -0
  49. package/dist/lifecycle/seed-bundled.js +4 -1
  50. package/dist/manifest.d.ts +1 -1
  51. package/dist/manifest.js +3 -2
  52. package/fly/deploy-configs/fly.mjs +115 -0
  53. package/fly/deploy-ops/fly.mjs +102 -0
  54. package/fly/mcp.json +4 -0
  55. package/fly/plugin.json +81 -0
  56. package/fly/scripts/render-deploy-workflow.mjs +150 -0
  57. package/fly/skills/fly/SKILL.md +43 -0
  58. package/fly/skills/fly/references/fly-deploy.template.yml +117 -0
  59. package/fly/skills/fly/references/fly.template.toml +81 -0
  60. package/fly/tovu-credential-schemes.json +11 -0
  61. package/fly/tovu-deploy-configs.json +21 -0
  62. package/fly/tovu-deploy-ops.json +14 -0
  63. package/github/deploy-ops/github-actions.mjs +164 -0
  64. package/github/deployments/github.mjs +415 -0
  65. package/github/mcp.json +4 -0
  66. package/github/plugin.json +105 -0
  67. package/github/skills/github/SKILL.md +249 -0
  68. package/github/skills/github/references/actions.md +224 -0
  69. package/github/skills/github/references/auth-and-tokens.md +140 -0
  70. package/github/skills/github/references/repo-files.md +135 -0
  71. package/github/skills/github/references/site-backup.md +159 -0
  72. package/github/skills/github/references/source-control.md +123 -0
  73. package/github/source-control/backup-push.mjs +242 -0
  74. package/github/source-control/commit-site.mjs +459 -0
  75. package/github/source-control/github.mjs +93 -0
  76. package/github/source-control/write-files.mjs +468 -0
  77. package/github/tovu-deploy-ops.json +13 -0
  78. package/github/tovu-source-control.json +117 -0
  79. package/github-pages/NOTES.md +19 -0
  80. package/github-pages/mcp.json +4 -0
  81. package/github-pages/plugin.json +48 -0
  82. package/github-pages/skills/github-pages/SKILL.md +44 -0
  83. package/github-pages/targets/github-pages.mjs +543 -0
  84. package/github-pages/tovu-deploy-targets.json +327 -0
  85. package/google-login/exports/google-g.svg +1 -0
  86. package/google-login/exports/sign-in-button.css +68 -0
  87. package/google-login/exports/sign-in-button.html +4 -0
  88. package/google-login/mcp.json +4 -0
  89. package/google-login/plugin.json +59 -0
  90. package/google-login/skills/google-login/SKILL.md +96 -0
  91. package/google-login/tovu-login-providers.json +21 -0
  92. package/google-workspace/README.md +132 -0
  93. package/google-workspace/form-destinations/README.md +87 -0
  94. package/google-workspace/form-destinations/dedupe.mjs +43 -0
  95. package/google-workspace/form-destinations/delivery-result.mjs +69 -0
  96. package/google-workspace/form-destinations/mapping.mjs +152 -0
  97. package/google-workspace/form-destinations/sheets.mjs +202 -0
  98. package/google-workspace/lib/auth.mjs +81 -0
  99. package/google-workspace/lib/drive-files.mjs +54 -0
  100. package/google-workspace/lib/form-destination-settings.mjs +72 -0
  101. package/google-workspace/lib/http.mjs +168 -0
  102. package/google-workspace/lib/picker-flow.mjs +171 -0
  103. package/google-workspace/lib/picker-selection.mjs +107 -0
  104. package/google-workspace/lib/product-state.mjs +93 -0
  105. package/google-workspace/lib/request-policy.mjs +163 -0
  106. package/google-workspace/lib/sheets-a1.mjs +79 -0
  107. package/google-workspace/lib/sheets-admin-csv.mjs +82 -0
  108. package/google-workspace/lib/sheets-admin-request-kinds.mjs +183 -0
  109. package/google-workspace/lib/sheets-client.mjs +286 -0
  110. package/google-workspace/lib/surface-actions.mjs +107 -0
  111. package/google-workspace/mcp.json +4 -0
  112. package/google-workspace/plugin.json +77 -0
  113. package/google-workspace/products.json +12 -0
  114. package/google-workspace/skills/google-workspace/SKILL.md +82 -0
  115. package/google-workspace/skills/google-workspace/references/connection.md +102 -0
  116. package/google-workspace/skills/google-workspace/references/form-delivery.md +50 -0
  117. package/google-workspace/skills/google-workspace/references/sheets.md +149 -0
  118. package/google-workspace/skills/google-workspace/references/troubleshooting.md +31 -0
  119. package/google-workspace/tools/account-info.mjs +18 -0
  120. package/google-workspace/tools/sheets/README.md +54 -0
  121. package/google-workspace/tools/sheets/copy-tab.mjs +23 -0
  122. package/google-workspace/tools/sheets/copy.mjs +23 -0
  123. package/google-workspace/tools/sheets/create.mjs +35 -0
  124. package/google-workspace/tools/sheets/find-replace.mjs +38 -0
  125. package/google-workspace/tools/sheets/find.mjs +52 -0
  126. package/google-workspace/tools/sheets/get-by-data-filter.mjs +23 -0
  127. package/google-workspace/tools/sheets/get.mjs +22 -0
  128. package/google-workspace/tools/sheets/values-append.mjs +27 -0
  129. package/google-workspace/tools/sheets/values-batch-clear.mjs +20 -0
  130. package/google-workspace/tools/sheets/values-batch-get.mjs +20 -0
  131. package/google-workspace/tools/sheets/values-batch-update.mjs +29 -0
  132. package/google-workspace/tools/sheets/values-by-data-filter.mjs +62 -0
  133. package/google-workspace/tools/sheets/values-clear.mjs +20 -0
  134. package/google-workspace/tools/sheets/values-get.mjs +21 -0
  135. package/google-workspace/tools/sheets/values-update.mjs +26 -0
  136. package/google-workspace/tools/sheets-admin/README.md +45 -0
  137. package/google-workspace/tools/sheets-admin/basic-filter.mjs +32 -0
  138. package/google-workspace/tools/sheets-admin/batch-update.mjs +25 -0
  139. package/google-workspace/tools/sheets-admin/developer-metadata.mjs +28 -0
  140. package/google-workspace/tools/sheets-admin/export-csv.mjs +67 -0
  141. package/google-workspace/tools/sheets-admin/filter-views.mjs +38 -0
  142. package/google-workspace/tools/sheets-admin/format.mjs +70 -0
  143. package/google-workspace/tools/sheets-admin/named-ranges.mjs +42 -0
  144. package/google-workspace/tools/sheets-admin/open-existing.mjs +34 -0
  145. package/google-workspace/tools/sheets-admin/protected-ranges-get.mjs +18 -0
  146. package/google-workspace/tools/sheets-admin/sort.mjs +18 -0
  147. package/google-workspace/tools/sheets-admin/tab-modify.mjs +36 -0
  148. package/google-workspace/tovu-admin-surfaces.json +63 -0
  149. package/google-workspace/tovu-agent-tools.json +1178 -0
  150. package/google-workspace/tovu-connections.json +35 -0
  151. package/google-workspace/tovu-form-destinations.json +10 -0
  152. package/google-workspace/ui/README.md +73 -0
  153. package/google-workspace/ui/connection-panel.handler.mjs +167 -0
  154. package/google-workspace/ui/connection-panel.html +17 -0
  155. package/google-workspace/ui/connection-panel.mjs +189 -0
  156. package/google-workspace/ui/connection-view.mjs +120 -0
  157. package/google-workspace/ui/destination-panel.handler.mjs +106 -0
  158. package/google-workspace/ui/destination-panel.html +17 -0
  159. package/google-workspace/ui/destination-panel.mjs +150 -0
  160. package/google-workspace/ui/dom.mjs +140 -0
  161. package/google-workspace/ui/panel.css +170 -0
  162. package/google-workspace/ui/picker-flow.mjs +87 -0
  163. package/google-workspace/ui/picker-view.mjs +44 -0
  164. package/google-workspace/ui/picker.handler.mjs +56 -0
  165. package/google-workspace/ui/picker.html +17 -0
  166. package/google-workspace/ui/picker.mjs +88 -0
  167. package/google-workspace/ui/surface-client.mjs +227 -0
  168. package/higgsfield-media/mcp.json +9 -0
  169. package/higgsfield-media/plugin.json +109 -0
  170. package/higgsfield-media/skills/higgsfield-media/SKILL.md +325 -0
  171. package/higgsfield-media/skills/higgsfield-media/references/failure-modes.md +116 -0
  172. package/higgsfield-media/skills/higgsfield-media/references/models-and-plan-gates.md +142 -0
  173. package/jev/mcp.json +4 -0
  174. package/jev/plugin.json +44 -0
  175. package/jev/skills/jev/SKILL.md +308 -0
  176. package/jev/skills/jev/references/cookbooks.md +197 -0
  177. package/jev/skills/jev/references/jaggedness.md +135 -0
  178. package/jev/skills/jev/references/javascript-sdk.md +146 -0
  179. package/jev/skills/jev/references/patterns.md +123 -0
  180. package/jev/skills/jev/references/primitives-reference.md +187 -0
  181. package/langfuse/plugin.json +22 -0
  182. package/meilisearch/mcp.json +4 -0
  183. package/meilisearch/plugin.json +54 -0
  184. package/meilisearch/providers/meilisearch.mjs +651 -0
  185. package/meilisearch/skills/meilisearch/SKILL.md +43 -0
  186. package/meilisearch/tovu-search-providers.json +10 -0
  187. package/netlify/NOTES.md +13 -0
  188. package/netlify/mcp.json +4 -0
  189. package/netlify/plugin.json +47 -0
  190. package/netlify/skills/netlify/SKILL.md +39 -0
  191. package/netlify/targets/netlify.mjs +384 -0
  192. package/netlify/tovu-consent.json +6 -0
  193. package/netlify/tovu-deploy-targets.json +163 -0
  194. package/opentelemetry/mcp.json +4 -0
  195. package/opentelemetry/plugin.json +52 -0
  196. package/opentelemetry/skills/opentelemetry/SKILL.md +39 -0
  197. package/package.json +161 -6
  198. package/posthog/mcp.json +4 -0
  199. package/posthog/plugin.json +46 -0
  200. package/posthog/skills/posthog/SKILL.md +36 -0
  201. package/railway/deploy-configs/railway.mjs +135 -0
  202. package/railway/deploy-ops/railway.mjs +167 -0
  203. package/railway/mcp.json +4 -0
  204. package/railway/plugin.json +45 -0
  205. package/railway/skills/railway/SKILL.md +66 -0
  206. package/railway/tovu-deploy-configs.json +16 -0
  207. package/railway/tovu-deploy-ops.json +11 -0
  208. package/render/deploy-configs/render.mjs +141 -0
  209. package/render/deploy-ops/render.mjs +152 -0
  210. package/render/mcp.json +4 -0
  211. package/render/plugin.json +47 -0
  212. package/render/skills/render/SKILL.md +63 -0
  213. package/render/tovu-deploy-configs.json +16 -0
  214. package/render/tovu-deploy-ops.json +11 -0
  215. package/resend/NOTES.md +52 -0
  216. package/resend/adapters/resend.mjs +161 -0
  217. package/resend/lib/domains.mjs +137 -0
  218. package/resend/lib/errors.mjs +25 -0
  219. package/resend/lib/feedback.mjs +118 -0
  220. package/resend/mcp.json +13 -0
  221. package/resend/plugin.json +192 -0
  222. package/resend/skills/resend/SKILL.md +107 -0
  223. package/resend/tovu-mail-adapters.json +22 -0
  224. package/s3-compatible/NOTES.md +11 -0
  225. package/s3-compatible/mcp.json +4 -0
  226. package/s3-compatible/object-stores/s3-compatible.mjs +287 -0
  227. package/s3-compatible/plugin.json +56 -0
  228. package/s3-compatible/skills/s3-compatible/SKILL.md +39 -0
  229. package/s3-compatible/targets/s3-compatible.mjs +1054 -0
  230. package/s3-compatible/tovu-deploy-targets.json +432 -0
  231. package/s3-compatible/tovu-object-stores.json +29 -0
  232. package/sentry/mcp.json +4 -0
  233. package/sentry/plugin.json +49 -0
  234. package/sentry/skills/sentry/SKILL.md +34 -0
  235. package/shopify/mcp.json +4 -0
  236. package/shopify/plugin.json +22 -0
  237. package/shopify/skills/shopify/SKILL.md +103 -0
  238. package/shopify/skills/shopify/references/catalog-sync.md +74 -0
  239. package/shopify/skills/shopify/references/domains.md +26 -0
  240. package/shopify/skills/shopify/references/live-storefront.md +34 -0
  241. package/shopify/skills/shopify/references/storefront-snippets.md +21 -0
  242. package/site-compliance/mcp.json +4 -0
  243. package/site-compliance/plugin.json +34 -0
  244. package/site-compliance/skills/site-compliance/SKILL.md +220 -0
  245. package/site-compliance/skills/site-compliance/references/ccpa-cpra.md +115 -0
  246. package/site-compliance/skills/site-compliance/references/gdpr-eu-uk.md +143 -0
  247. package/site-compliance/skills/site-compliance/references/wcag-2-2.md +129 -0
  248. package/site-import/mcp.json +4 -0
  249. package/site-import/plugin.json +41 -0
  250. package/site-import/skills/site-import/SKILL.md +232 -0
  251. package/site-import/skills/site-import/references/content-mapping.md +166 -0
  252. package/site-import/skills/site-import/references/discovery-and-classification.md +117 -0
  253. package/site-import/skills/site-import/references/theme-extraction.md +34 -0
  254. package/slide-design/com.anthropic.claude-code/hooks/hooks.json +4 -0
  255. package/slide-design/mcp.json +4 -0
  256. package/slide-design/plugin.json +26 -0
  257. package/slide-design/skills/slide-design/SKILL.md +103 -0
  258. package/slide-design/skills/slide-design/references/charts-and-exhibits.md +100 -0
  259. package/slide-design/skills/slide-design/references/html-deck.md +175 -0
  260. package/slide-design/skills/slide-design/references/layout-and-style.md +131 -0
  261. package/slide-design/skills/slide-design/references/review.md +93 -0
  262. package/slide-design/skills/slide-design/references/storyline.md +118 -0
  263. package/stripe/plugin.json +22 -0
  264. package/supabase/mcp.json +26 -0
  265. package/supabase/plugin.json +78 -0
  266. package/supabase/skills/supabase/SKILL.md +169 -0
  267. package/supabase/skills/supabase/references/failure-modes.md +101 -0
  268. package/ui-ux-design/CHANGELOG.md +28 -0
  269. package/ui-ux-design/LICENSE +201 -0
  270. package/ui-ux-design/NOTICE +14 -0
  271. package/ui-ux-design/README.md +62 -0
  272. package/ui-ux-design/com.anthropic.claude-code/hooks/hooks.json +4 -0
  273. package/ui-ux-design/mcp.json +4 -0
  274. package/ui-ux-design/plugin.json +26 -0
  275. package/ui-ux-design/skills/frontend-accessibility/SKILL.md +60 -0
  276. package/ui-ux-design/skills/gstack-design/SKILL.md +53 -0
  277. package/ui-ux-design/skills/gstack-design/references/consultation.md +30 -0
  278. package/ui-ux-design/skills/gstack-design/references/html.md +29 -0
  279. package/ui-ux-design/skills/gstack-design/references/review.md +28 -0
  280. package/ui-ux-design/skills/gstack-design/references/shotgun.md +33 -0
  281. package/ui-ux-design/skills/gstack-design/references/upstream-notes.md +23 -0
  282. package/ui-ux-design/skills/interface-design/ORIGINAL.md +16 -0
  283. package/ui-ux-design/skills/interface-design/SKILL.md +41 -0
  284. package/ui-ux-design/skills/interface-design/references/commands/audit.md +40 -0
  285. package/ui-ux-design/skills/interface-design/references/commands/critique.md +21 -0
  286. package/ui-ux-design/skills/interface-design/references/commands/extract.md +34 -0
  287. package/ui-ux-design/skills/interface-design/references/commands/init.md +31 -0
  288. package/ui-ux-design/skills/interface-design/references/commands/status.md +22 -0
  289. package/ui-ux-design/skills/interface-design/references/examples/system-precision.md +29 -0
  290. package/ui-ux-design/skills/interface-design/references/examples/system-warmth.md +29 -0
  291. package/ui-ux-design/skills/interface-design/references/system-template.md +57 -0
  292. package/ui-ux-design/skills/shadcn-ui/README.md +244 -0
  293. package/ui-ux-design/skills/shadcn-ui/SKILL.md +333 -0
  294. package/ui-ux-design/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
  295. package/ui-ux-design/skills/shadcn-ui/examples/data-table.tsx +313 -0
  296. package/ui-ux-design/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
  297. package/ui-ux-design/skills/shadcn-ui/resources/component-catalog.md +481 -0
  298. package/ui-ux-design/skills/shadcn-ui/resources/customization-guide.md +516 -0
  299. package/ui-ux-design/skills/shadcn-ui/resources/migration-guide.md +463 -0
  300. package/ui-ux-design/skills/shadcn-ui/resources/setup-guide.md +412 -0
  301. package/ui-ux-design/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
  302. package/ui-ux-design/skills/ui-ux-design/SKILL.md +171 -0
  303. package/ui-ux-design/skills/ui-ux-design/references/brand-and-voice.md +78 -0
  304. package/ui-ux-design/skills/ui-ux-design/references/chrome-mobile-test-matrix.md +137 -0
  305. package/ui-ux-design/skills/ui-ux-design/references/components-and-states.md +112 -0
  306. package/ui-ux-design/skills/ui-ux-design/references/delight-and-motion.md +54 -0
  307. package/ui-ux-design/skills/ui-ux-design/references/foundations.md +145 -0
  308. package/ui-ux-design/skills/ui-ux-design/references/inclusive-ai-imagery.md +57 -0
  309. package/ui-ux-design/skills/ui-ux-design/references/kole-jain-uiux-concepts.md +104 -0
  310. package/ui-ux-design/skills/ui-ux-design/references/kuinetic-reference.md +184 -0
  311. package/ui-ux-design/skills/ui-ux-design/references/openai-frontend-skill.md +139 -0
  312. package/ui-ux-design/skills/ui-ux-design/references/premium-ui.md +55 -0
  313. package/ui-ux-design/skills/ui-ux-design/references/research-and-validation.md +88 -0
  314. package/ui-ux-design/skills/ui-ux-design/references/sam-crawford-premium-websites.md +103 -0
  315. package/ui-ux-design/skills/ui-ux-design/references/self-made-web-designer-core-skills.md +119 -0
  316. package/ui-ux-design/skills/ui-ux-design/references/ui-animation.md +173 -0
  317. package/ui-ux-design/skills/ui-ux-design/references/ui-loop.md +234 -0
  318. package/ui-ux-design/skills/ui-ux-design/references/visual-storytelling.md +54 -0
  319. package/ui-ux-design/skills/vercel-web-design-guidelines/SKILL.md +39 -0
  320. package/ui-ux-design/skills/web-compliance/SKILL.md +134 -0
  321. package/ui-ux-design/skills/web-compliance/references/audit-evidence.md +59 -0
  322. package/vercel/NOTES.md +23 -0
  323. package/vercel/mcp.json +4 -0
  324. package/vercel/object-stores/vercel-blob.mjs +147 -0
  325. package/vercel/plugin.json +47 -0
  326. package/vercel/skills/vercel/SKILL.md +48 -0
  327. package/vercel/targets/vercel.mjs +586 -0
  328. package/vercel/tovu-consent.json +6 -0
  329. package/vercel/tovu-deploy-targets.json +219 -0
  330. package/vercel/tovu-object-stores.json +10 -0
  331. package/wordpress/NOTES.md +33 -0
  332. package/wordpress/plugin.json +30 -0
  333. package/wordpress/skills/wordpress/SKILL.md +43 -0
  334. package/wordpress/skills/wordpress/references/free-site-redirect.md +46 -0
  335. package/wordpress/skills/wordpress/references/subdomain.md +66 -0
@@ -0,0 +1,308 @@
1
+ ---
2
+ name: jev
3
+ description: Design and write code that calls Jev, TypeSafe's System One model — a fast, non-generative model that turns state plus a typed Choice/Score/Noul question into a typed answer with a calibrated probability distribution. Use this for classification, routing, scoring, ranking, extraction-by-selection, and confidence-gated automation; not for generating prose. Covers the three primitives' exact request/response shapes, confidence, the documented patterns, known jev-1.13 limitations, and the HTTP API / JavaScript SDK. This plugin declares no MCP server — nothing here lets the assistant call Jev directly in chat.
4
+ ---
5
+
6
+ # Jev (TypeSafe System One)
7
+
8
+ ## The one thing to say before anything else
9
+
10
+ **This plugin has no MCP server.** `mcp.json` declares `"mcpServers": {}` on purpose. Jev has no
11
+ official MCP server, and TypeSafe's docs index lists no MCP integration. There
12
+ is no `mcp__jev__*` tool, and enabling this plugin does not let the assistant call the Jev API
13
+ during a chat turn. What this skill is for: **helping design and write code** — a host product feature, a
14
+ script, a separate service — that calls Jev itself, over plain HTTP or the JavaScript SDK. If an
15
+ operator asks "can you check with Jev right now," the honest answer is no, not yet; what you can do
16
+ is write the code that will.
17
+
18
+ **The API key goes in `TYPESAFE_API_KEY`, never in chat.** That's the env var TypeSafe's SDKs read
19
+ by default. The JS SDK also accepts an explicit `new TypeSafeClient({ apiKey })`, and that value takes
20
+ precedence over the env var, so a key loaded from a secret store works too. Whoever sets up the
21
+ integration puts the key in the environment or a secret store, the same way any other API credential
22
+ belongs in this codebase. Never ask for it in chat, never paste one into code you write, and never
23
+ echo one back if a user pastes it anyway. Tell them to treat it as compromised and rotate it at
24
+ TypeSafe's dashboard (`console.typesafe.ai/keys`).
25
+
26
+ ---
27
+
28
+ ## What Jev is
29
+
30
+ Jev is TypeSafe's flagship model and the first "System One" model: instead of generating text, it
31
+ takes a **state** (the content to reason about — a string, JSON object, or array of text) and one or
32
+ more typed **questions**, and returns a typed **answer** per question with a calibrated probability
33
+ distribution. All questions in one request are evaluated in parallel, independently, against the
34
+ same state — asking more questions barely changes response time. It is served at one HTTP endpoint,
35
+ `POST https://api.typesafe.ai/v1/systemone`, and there are official Python and JavaScript SDKs.
36
+ Jev currently accepts **text input only** — no images, audio, or video — and its primary training
37
+ language is English; other languages (including CJK scripts) are accepted but currently less
38
+ accurate.
39
+
40
+ ## When Jev fits
41
+
42
+ Jev is for judgments with a **bounded, structured answer space** over content you hand it directly:
43
+
44
+ - **Classification / routing** — which team, which intent, which handler should this go to (Choice).
45
+ - **Scoring / rubrics** — how severe, how frustrated, how relevant, on a rubric you define (Score).
46
+ - **Yes/no gating** — is this urgent, does this need a human, does this contain X (Noul).
47
+ - **Ranking / re-ranking** — score each candidate independently, sort by the returned probability.
48
+ - **Extraction by selection** — find candidates with code (regex, retrieval), have Jev pick which one
49
+ answers the question, then copy that value verbatim — never have it generate the value.
50
+ - **Confidence-gated automation** — act automatically above a threshold, ask for confirmation in the
51
+ middle, and route to a human below it; see [Confidence](#confidence) below.
52
+ - **A cheap feature layer in front of classical ML** — turn free text into structured Score/Noul
53
+ columns for a downstream model, rather than hand-writing feature extraction.
54
+
55
+ ## When Jev does not fit
56
+
57
+ - **Generating prose, summaries, or free text.** Jev is not trained to generate text. "You can force
58
+ it to by chaining choices, [but] this will not work well and will be very slow" (jaggedness #9).
59
+ Use a generative LLM for that half of the workflow, and Jev for the structured judgments around it.
60
+ - **Exact arithmetic, counting, or date/time math.** "Jev is not a calculator." It does not count
61
+ reliably (characters, occurrences, list length), performs worse on numeric/hex/RGB/binary
62
+ representations than semantic ones, and reads dates as text, not as ordered quantities. Do the math
63
+ in code; ask Jev only for the judgment calls code cannot make (see
64
+ [references/jaggedness.md](references/jaggedness.md), items 2–3).
65
+ - **Deep multi-hop or "property of a property" reasoning.** Instructions with double negatives or
66
+ several hops of indirection are answered less reliably. Decompose into direct, atomic questions and
67
+ combine them in code instead (jaggedness #4).
68
+ - **Anything needing images, audio, or video.** Text only, today.
69
+ - **A decision where getting fooled by adversarial input is unacceptable, without hardening it
70
+ first.** "State is data, and jev-1.13 does not treat it as hostile by default" — content written to
71
+ steer the model can move the answer. Be explicit in criteria and test before trusting it at scale
72
+ (jaggedness #6).
73
+ - **Non-English content where accuracy is critical**, without testing first — accuracy is currently
74
+ lower outside English.
75
+
76
+ When in doubt, read [references/jaggedness.md](references/jaggedness.md) before designing a new
77
+ question — it is the single most load-bearing reference here for "will this actually work well."
78
+
79
+ ---
80
+
81
+ ## The three primitives
82
+
83
+ Every question has an **id** (your key — never sent to the model; write the full question in
84
+ `instructions` even if the id looks self-explanatory), a **`type`**, `instructions`, and `criteria`.
85
+ Full field-by-field reference, including the "structured `instructions`/`criteria`" mechanism (every
86
+ one of these fields accepts a string, object, array, or `null`, not just plain text) is in
87
+ [references/primitives-reference.md](references/primitives-reference.md).
88
+
89
+ | Type | Answers | Request `criteria` | Answer fields |
90
+ |---|---|---|---|
91
+ | **Choice** | Which of these options? | Required map: option name → description (`string\|object\|array\|null`). Max **255** options. | `choice` (winning option), `probabilities` (map, sums to 1), `confidence` |
92
+ | **Score** | Where on this rubric? | Required ordered array of level descriptions, low → high. Min 2, max **10** levels. | `score` (probability-weighted mean of level index — can land between levels), `legend`, `probabilities`, `confidence` |
93
+ | **Noul** | Is this true? | Optional `{true, false}` clarification. | `noul` only — probability the answer is yes, 0 to 1. **No `confidence` field.** |
94
+
95
+ One combined example (request and response both real, quoted from the docs — a Choice, a Score, and
96
+ a Noul batched into one call):
97
+
98
+ ```json
99
+ // POST https://api.typesafe.ai/v1/systemone
100
+ // Authorization: Bearer <TYPESAFE_API_KEY>
101
+ // Content-Type: application/json
102
+ {
103
+ "state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
104
+ "model": "jev-latest",
105
+ "questions": {
106
+ "department": {
107
+ "type": "choice",
108
+ "instructions": "Which team should handle this",
109
+ "criteria": { "billing": "Payment or subscription issues", "technical": "Bugs or integration problems", "sales": "Pricing or account questions" }
110
+ },
111
+ "frustration": {
112
+ "type": "score",
113
+ "instructions": "How frustrated the customer appears",
114
+ "criteria": ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"]
115
+ },
116
+ "is_urgent": { "type": "noul", "instructions": "The message conveys urgency or time-sensitivity" }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ```json
122
+ // response
123
+ {
124
+ "model": "jev-1.13.0",
125
+ "answers": {
126
+ "department": { "type": "choice", "choice": "technical", "confidence": 0.78, "probabilities": { "technical": 0.85, "sales": 0.0, "billing": 0.15 } },
127
+ "frustration": { "type": "score", "score": 1.0, "confidence": 1.0, "legend": { "0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language" }, "probabilities": { "0": 0.0, "1": 1.0, "2": 0.0 } },
128
+ "is_urgent": { "type": "noul", "noul": 1.0 }
129
+ },
130
+ "usage": { "input_tokens": 392, "output_tokens": 65 }
131
+ }
132
+ ```
133
+
134
+ Note the request sent `model: "jev-latest"` (an alias) and the response reports the concrete
135
+ resolved version, `"jev-1.13.0"`. See [Cost, latency, and limits](#cost-latency-and-limits).
136
+
137
+ **Batch, don't chain.** Put every question a workflow might need — including ones that only matter
138
+ for some inputs — into one request (the "speculative fan-out" pattern below); evaluating them is
139
+ parallel, so extra questions cost little latency and only the tokens for the extra text. Only split
140
+ into two sequential requests when code genuinely cannot build the second request until it has the
141
+ first answer (see [references/patterns.md](references/patterns.md)).
142
+
143
+ ## Confidence
144
+
145
+ `confidence` (0 to 1) is on every Choice and Score answer, derived from the shape of `probabilities`
146
+ — **Noul has no `confidence`**, since a yes/no distribution is already fully described by the single
147
+ `noul` value. TypeSafe does not publish the exact formula ("a convenient measure that fits most
148
+ use-cases... you are never locked into our definition" — use `probabilities` directly for a custom
149
+ statistic). Use it as a second axis alongside the answer itself, in three bands:
150
+
151
+ - **High** → act automatically.
152
+ - **Medium** → proceed with caution — confirm, flag, or gather more information.
153
+ - **Low** → do not act — route to a human, ask a clarifying question, or fall back.
154
+
155
+ There is no universal threshold; the docs' own worked examples use different cutoffs per action
156
+ based on the cost of being wrong (a low-stakes balance check acts at 0.5+, a high-stakes transfer
157
+ approval waits for >0.9). Start conservative, test against your own data, and put the threshold
158
+ constants in one place in your code so they're easy to review — see
159
+ [references/patterns.md](references/patterns.md) for the confidence-gated-routing pattern with a
160
+ worked example.
161
+
162
+ If you only need the single best option, read the Choice answer's `choice` field, which is already
163
+ the highest-probability option. Don't compare it against a fixed threshold. A threshold decides
164
+ *whether to act*, not which option wins. For your own statistic, use `probabilities`.
165
+
166
+ ## Patterns
167
+
168
+ Four named patterns, each with a worked example, are documented in
169
+ [references/patterns.md](references/patterns.md):
170
+
171
+ | Pattern | What it does | Why |
172
+ |---|---|---|
173
+ | **Speculative fan-out** | Send every question a workflow might need in one call; let code decide what's relevant after. | Parallel evaluation makes extra questions nearly free. |
174
+ | **Confidence-gated routing** | Use `confidence` as a second axis, with a different floor per action based on its stakes. | Reliability, safety. |
175
+ | **Composite scoring** | Split one complex judgment into several independent Score questions, normalize, combine with code-owned weights. | Auditability — you can see exactly how the final number was built, and reuse the same raw scores with different weights for different downstream decisions. |
176
+ | **Intent routing** | Use Jev as a cheap up-front classifier that sends each request to deterministic code, a specialist LLM, or a human. | Cost, speed — most requests never need an expensive model call. |
177
+
178
+ ## Known limitations (jev-1.13 jaggedness)
179
+
180
+ TypeSafe publishes a dated list of known failure modes for the current model version, each with a
181
+ "do this instead." Full detail, including worked examples, is in
182
+ [references/jaggedness.md](references/jaggedness.md); the headline ones, worth internalizing before
183
+ writing any question:
184
+
185
+ 1. **Literal reading** — answers the question you wrote, not the one you meant. Be exact; put
186
+ boundary cases in `criteria`.
187
+ 2. **Not a calculator** — counting, numeric/hex/RGB comparisons, and interpolating an exact number
188
+ from a Score are all unreliable. Do math in code.
189
+ 3. **Dates are read as text**, not ordered quantities — extract the parts with a bounded Choice, do
190
+ date arithmetic in code.
191
+ 4. **Indirection costs accuracy** — double negatives and multi-hop "property of a property" questions
192
+ degrade. Ask directly.
193
+ 5. **Large, mostly-irrelevant state hurts accuracy** — "Jev suffers from context rot" when `state`
194
+ carries content the question doesn't need. (This is a different claim from "more questions don't
195
+ cost accuracy," which is about batching questions, not about bloating shared state — both are true,
196
+ they are not in tension.) Filter in code before sending, or use a Noul as a relevance pre-filter.
197
+ 6. **State is not treated as adversarial by default** — content written to steer the model can move
198
+ the answer. Be explicit in criteria; test before trusting it at scale.
199
+ 7. **Contradictory instructions and criteria degrade the answer** — keep them aligned.
200
+ 8. **No guaranteed structural invariants** — a Noul and an equivalent Choice can disagree; a Noul and
201
+ its logical negation are not guaranteed to sum to 1. Don't assume arithmetic identities across
202
+ separate questions, and don't reuse a confidence threshold tuned on one question type for another.
203
+ 9. **Not built to generate text** — use Choice over a bounded option set instead of forcing free-text
204
+ generation.
205
+
206
+ ## Cost, latency, and limits
207
+
208
+ Everything here is stated by TypeSafe's docs directly, not estimated (see
209
+ [references/primitives-reference.md](references/primitives-reference.md) for the full Models-page
210
+ table):
211
+
212
+ - **Current model:** `jev-1.13.0`. Aliases: `jev-latest` (most recent *stable* release — the SDK
213
+ default) and `jev-preview` (most recent release, stable or not; currently identical to
214
+ `jev-latest`). The response's `model` field always reports the resolved versioned id — pin that id
215
+ instead of an alias once you've tuned confidence thresholds against it, since an alias can move
216
+ answers out from under you when TypeSafe ships a new release.
217
+ - **Pricing:** $42 per billion input tokens ($0.042 / million). **Output tokens are free**. `usage`
218
+ still reports `output_tokens`, but only input tokens are billed.
219
+ - **Latency:** the only figure TypeSafe states directly is "most queries complete in about 100 ms."
220
+ TypeSafe's own cookbooks measured 111–114 ms for a multi-question batched call, consistent with
221
+ that figure.
222
+ - **Context limits:** 64k tokens per request (`state` + every question combined); 32k tokens for
223
+ `state` plus the single longest question.
224
+ - **Rate limits:** 250,000 tokens/second, 1,200 requests/minute — TypeSafe states these are adjusting
225
+ dynamically as demand grows and may change without notice; a `429` means back off and retry with
226
+ exponential backoff (SDKs do this by default).
227
+ - **Errors:** `401` bad/missing key, `422` invalid request body, `429` rate-limited, `529`
228
+ TypeSafe-side overload.
229
+
230
+ ## Calling Jev: HTTP or the JavaScript SDK
231
+
232
+ **HTTP**, directly:
233
+
234
+ ```http
235
+ POST https://api.typesafe.ai/v1/systemone
236
+ Authorization: Bearer <TYPESAFE_API_KEY>
237
+ Content-Type: application/json
238
+ ```
239
+
240
+ Body: `{ "state": ..., "model": "jev-latest", "questions": { "<id>": { "type": ..., "instructions": ..., "criteria": ... } } }`.
241
+ Response: `{ "model": ..., "answers": { "<id>": {...} }, "usage": { "input_tokens": ..., "output_tokens": ... } }`.
242
+ Full field reference and the error table are in
243
+ [references/primitives-reference.md](references/primitives-reference.md).
244
+
245
+ **JavaScript SDK** (`@typesafe-ai/sdk`, requires Node 20+):
246
+
247
+ ```sh
248
+ npm install @typesafe-ai/sdk
249
+ ```
250
+
251
+ ```ts
252
+ import { choice, score, noul, TypeSafeClient } from "@typesafe-ai/sdk";
253
+
254
+ const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY from the environment
255
+
256
+ const response = await client.systemOne({
257
+ state: { document: "I was charged twice. Please fix this ASAP." },
258
+ questions: {
259
+ category: choice("What is this ticket about?", { billing: null, technical: null, other: null }),
260
+ frustration: score("How frustrated the customer appears", [
261
+ "Calm, just stating facts",
262
+ "Frustrated but civil",
263
+ "Very angry, strong language",
264
+ ]),
265
+ billing: noul("Is this about billing?"),
266
+ },
267
+ });
268
+
269
+ console.log(response.answers.category.choice, response.answers.frustration.score, response.answers.billing.noul);
270
+ ```
271
+
272
+ The helpers are documented on the SDK reference pages as `choice(instructions, criteria)`,
273
+ `score(instructions, criteria)` (an ordered array, at least two levels) and
274
+ `noul(instructions?, criteria?)` (optional `{ true, false }`). `model` is optional on `systemOne()`.
275
+ It falls back to the client's default model, which is `jev-latest` unless configured. Retries are
276
+ on by default. Config options, retry defaults, error classes, and the one browser-safety flag are in
277
+ [references/javascript-sdk.md](references/javascript-sdk.md). Check it before you invent an option
278
+ name.
279
+
280
+ ## Cookbooks
281
+
282
+ TypeSafe publishes worked, benchmarked cookbooks for common shapes — self-consistency, re-ranking,
283
+ semantic search, structure recovery, function calling, skill suggestion, entity alignment, RAG
284
+ passage classification, citation verification, LLM guardrails, extraction cascades, date extraction,
285
+ value extraction, hierarchical classification, feature discovery, and confidence-based classification.
286
+ Short digests of all 18, with their measured numbers and the one generalizable lesson from each, are
287
+ in [references/cookbooks.md](references/cookbooks.md) — read the relevant one before designing a
288
+ workflow that looks similar; it often shows a better decomposition than a first-pass design would.
289
+
290
+ ## References
291
+
292
+ - [references/primitives-reference.md](references/primitives-reference.md) — full field-by-field
293
+ reference for Choice/Score/Noul/structured questions, the HTTP API, and the Models/pricing/limits
294
+ table.
295
+ - [references/patterns.md](references/patterns.md) — the four named patterns with worked examples.
296
+ - [references/jaggedness.md](references/jaggedness.md) — all 9 known jev-1.13 failure modes with
297
+ mitigations. Read this before designing a new question.
298
+ - [references/javascript-sdk.md](references/javascript-sdk.md): JS SDK client config and env vars,
299
+ question helpers, retry defaults, and error classes, each checked against the SDK reference pages.
300
+ - [references/cookbooks.md](references/cookbooks.md) — digests of all 18 published cookbooks.
301
+ - TypeSafe's own docs are the live source of truth and move faster than this skill:
302
+ [docs.typesafe.ai](https://docs.typesafe.ai) (append `.md` to any page path for raw Markdown;
303
+ index at [docs.typesafe.ai/llms.txt](https://docs.typesafe.ai/llms.txt)). Some structure in this
304
+ skill (the doc-index walking convention, the task table under "find the useful shape") was informed
305
+ by TypeSafe's own MIT-licensed agent skill,
306
+ [github.com/typesafe-ai/skills](https://github.com/typesafe-ai/skills) — read live docs over this
307
+ file when the two disagree; TypeSafe ships new model versions and jaggedness notes faster than a
308
+ bundled plugin can track them.
@@ -0,0 +1,197 @@
1
+ # Cookbook digests
2
+
3
+ Short digests of all 18 cookbooks TypeSafe publishes at `docs.typesafe.ai/cookbooks/*` (crawled
4
+ 2026-09-21). Every cookbook's own code uses the Python SDK (`client.system_one(...)`,
5
+ `Choice`/`Score`/`Noul` classes) — the call shape differs cosmetically from the JavaScript SDK's
6
+ `client.systemOne(...)` / lowercase `choice(...)` helper (see `javascript-sdk.md`), but the
7
+ primitives, request/response shapes, and lessons are identical across languages. Read the full page
8
+ for a shape close to what you're building — these are worth more than a first-pass design from
9
+ scratch.
10
+
11
+ ## Self-consistency: nouls
12
+
13
+ `cookbooks/consistency_noul_cookbook.md` — Runs a 14-question Noul rubric over one insurance claim,
14
+ 15 times each, across non-reasoning LLMs, reasoning LLMs, and Jev. Jev's mean per-question
15
+ probability std dev (0.0102) beats every LLM condition; a 14-question Jev call runs ~111ms /
16
+ $0.000043, vs. the cheapest LLM condition at 1113ms / $0.000950 (10x slower, 22x costlier) up to a
17
+ reasoning-model condition at 13886ms / $0.034275 (125x slower, 805x costlier). **Lesson:** repeated
18
+ calls still wobble even for Jev — pair a raw probability with an "uncertain band" (e.g. 0.30–0.70)
19
+ that routes borderline cases to human review, rather than trusting one call's label outright.
20
+
21
+ ## Self-consistency: choices
22
+
23
+ `cookbooks/consistency_choice_cookbook.md` — Same test, an 8-question moderation Choice rubric, 15
24
+ repeats. Jev's plurality-label agreement (90.8%) is lower than some LLM conditions (87.5–100%) on
25
+ raw repeats, but gating on `confidence ≥ 0.6` raises Jev's agreement to 99.2% with 74.2%
26
+ auto-labeled. Cost/speed: ~114ms / $0.000046 per call vs. 826ms–12978ms / $0.000936–$0.041255 for LLM
27
+ conditions. **Lesson:** confidence-gating turns Jev's imperfect self-consistency into a reliable
28
+ automated majority, at a fraction of LLM cost/latency.
29
+
30
+ ## Parallel questions
31
+
32
+ `cookbooks/parallel_questions.md` — Batches a 13-question regulatory briefing (8 Noul + 2 Choice + 3
33
+ Score) over the ~54k-character GDPR Wikipedia article, one request vs. 13 separate requests, 5
34
+ repeats. Batching: **12.2x cheaper, 10.0x faster** ($0.000497/0.27s vs. $0.006090/2.71s), with
35
+ near-identical answers across repeats regardless of batching. **Lesson:** batching multiple
36
+ independent questions about the same state collapses the document-resend cost — the larger the
37
+ shared state relative to the questions, the closer the saving is to a full Nx.
38
+
39
+ ## Re-ranking
40
+
41
+ `cookbooks/rerank_typesafe.md` — Two-stage legal search: BM25 builds a 30-candidate shortlist per
42
+ query (3,565 CLERC passages, 40 queries), then one Jev Noul question per (query, candidate) pair
43
+ re-ranks by the returned probability. Top-1 accuracy 5%→18%, top-5 15%→35%, top-10 38%→62%.
44
+ **Lesson:** cheap retrieval is good at shortlisting, bad at picking the single best match; a per-pair
45
+ Noul re-ranker meaningfully improves precision at the top of the list. The cookbook asks one
46
+ question per pair for clarity. It says a real application would ask several questions about the
47
+ same pair in one call.
48
+
49
+ ## Line-by-line search
50
+
51
+ `cookbooks/semantic_find.md` — Tags every line of GitHub's ToS with an id, then one request asks a
52
+ Choice question ranking all 218 line ids by relevance plus a Noul checking whether the document
53
+ actually contains an answer at all. A ranking-only approach can look confident (top-ranked line at
54
+ 0.86 relevance) even when the real answer isn't in the document (`exists` probability only 0.14).
55
+ **Lesson:** pair a ranking Choice with a separate existence-check Noul so you can distinguish "found
56
+ it," "not in the document," and "partially answered," instead of returning the top rank uncritically.
57
+
58
+ ## Structure recovery
59
+
60
+ `cookbooks/autoformat.md` — Reconstructs lost Markdown structure from hard-wrapped plain text in two
61
+ sequential requests: Pass 1 asks one Noul per adjacent line pair ("did this break split a
62
+ sentence?"); Pass 2 asks one Choice per merged block (heading/list/code/callout/paragraph) plus
63
+ companion questions read only when relevant. The model never generates text — every output character
64
+ still traces to the input. Example: 2 round trips, 10,211 tokens, 0.8s, $0.0015. **Lesson:** keep
65
+ anything code can already determine (blank lines, explicit markers) out of the model call entirely —
66
+ send only the judgment calls code genuinely can't make, and let code do all the rendering.
67
+
68
+ ## Function calling
69
+
70
+ `cookbooks/function_calling.md` — Maps natural-language trading requests to ten typed Python
71
+ functions: each closed-set/`Literal` argument becomes a Choice question, one request answers every
72
+ argument for the call, and a confidence-aware `Dispatcher` returns the function name plus arguments.
73
+ Example: `rolling_correlation(symbol='AMD', benchmark='NVDA')` at confidence 0.82 overall, with
74
+ per-argument probabilities (0.87, 0.78) and omitted arguments falling back to function defaults
75
+ (p=0.96/0.99). **Lesson:** a compound call's confidence should be the *minimum* across its parts
76
+ (the weakest judgment), not a product — a product understates confidence as argument count grows.
77
+ An explicit "was this stated?" question lets an argument fall back to its default instead of being
78
+ forced into a confident-sounding guess.
79
+
80
+ ## Skill suggestion
81
+
82
+ `cookbooks/skill_suggestion.md` — Picks at most one skill per agent turn from a 182-skill roster in
83
+ two sequential requests: request 1 ranks all 182 skills cheaply and decides whether the turn needs
84
+ one at all; request 2 re-reads only the top 3 in full and can reject all of them. Across 488 turns:
85
+ agent alone with the roster — 16.8% wrong-skill loads, 9.8% loads-when-nothing-fits; agent +
86
+ suggestion — 7.3% / 4.0% (more than half reduction); agent handed the right answer directly — 2.5% /
87
+ 1.2% (the floor isn't zero even with a perfect hint). **Lesson:** for large rosters, don't truncate
88
+ descriptions into the prompt — cheap rank-all-candidates, then read-and-verify only the top few, with
89
+ the ability to reject all of them.
90
+
91
+ ## Knowledge graph entity alignment
92
+
93
+ `cookbooks/entity_alignment.md` — Decides which of 450 candidate pairs across two beer-catalogue
94
+ sources describe the same product, using one Score question with exactly 3 ordered levels (different
95
+ / related-but-maybe-not-same / same → merge), plus 3 riding Noul questions telling a curator which
96
+ field two records disagree on. Of 450 pairs: 40 (8.9%) auto-merged, 50 (11.1%) queued for a curator,
97
+ 360 (80.0%) left unlinked. **Lesson:** use Score (not a Noul threshold or Choice) when outcome levels
98
+ are genuinely ordered and each needs its own criteria — it avoids inventing an arbitrary probability
99
+ cutoff, since the levels map directly onto the outcomes.
100
+
101
+ ## Classifying RAG passages
102
+
103
+ `cookbooks/classifying_rag_passages.md` — Inserts a classification stage between retrieval and
104
+ generation: for each retrieved passage, one request carries 4 Noul questions (relevant? states
105
+ usable evidence? contradicts the query's premise? tries to instruct the model?), and ordinary
106
+ threshold code decides accept / flag-conflict / drop. Catches a planted prompt-injection passage and
107
+ flags queries with false premises against real evidence. **Lesson:** keep the accept/flag/drop policy
108
+ as explicit code-level thresholds over structured probabilities. The jaggedness page links this
109
+ cookbook as the worked example for #5 (irrelevant state). It also shows one way to screen out
110
+ prompt injection (#6), though the jaggedness page doesn't cite it for that.
111
+
112
+ ## Double-checking citations
113
+
114
+ `cookbooks/citation_check.md` — Verifies an LLM's cited quotes: a plain string match first checks
115
+ whether the quote exists verbatim in the source (free, catches fabrication outright), then a Choice
116
+ question classifies how the quote's context relates to the claim (supports / contradicts /
117
+ says-nothing), gated at `confidence ≥ 0.8` before accepting the verdict without human review.
118
+ 8 citations tested: 4 accurate ones verified at confidence ≥0.93; all 4 planted failures caught.
119
+ **Lesson:** don't send every check to the model — a free code-level pre-filter (string match) should
120
+ catch what it can before spending a model call on the judgment it actually requires.
121
+
122
+ ## Guardrails for LLMs
123
+
124
+ `cookbooks/llm_guardrails.md` — Screens inbound and outbound LLM messages with one request per
125
+ message: a battery of Noul questions gives P(hazard) per named hazard (jailbreak, policy-breaking
126
+ reply, harm/crime, medical dosage, self-harm), plus one Score question rating how much harm
127
+ complying would do; app code thresholds the results into pass/review/block/route. **Lesson:** put
128
+ safety policy in externally-readable, editable code-level thresholds over structured probabilities,
129
+ not buried in a system prompt or a second general-purpose "judge" LLM call — and run the same guard
130
+ on both input and output, since a safe-looking prompt can still produce an unsafe reply.
131
+
132
+ ## SDE cascade
133
+
134
+ `cookbooks/sde_cascade.md` — A 2-stage structured-data-extraction cascade: extract with a cheap
135
+ small model in plain-text mode, verify each extracted field with a per-field Jev Noul question
136
+ ("is this value absent from the source?", framed so `true` = escalate), escalate only flagged items
137
+ to an expensive reasoning model. Stage pricing: cheap extractor $0.75/$4.50 per 1M tokens (in/out);
138
+ reasoning escalation $5.00/$30.00 (~7x); Jev verifier $0.042/$0.00. The swept-threshold cascade's
139
+ Pareto frontier beats every single model tested on quality-per-dollar. **Lesson:** a good verifier
140
+ question must be narrow and grounded (one checkable yes/no per field against the source), framed so
141
+ the *escalate* case is `true`, and aggregated per-field with `max` (any single flag escalates) rather
142
+ than averaged — averaging silences one confident red flag among many quiet fields.
143
+
144
+ ## Date extraction
145
+
146
+ `cookbooks/date_extraction_cookbook.md` — Extracts absolute and relative dates by asking Choice
147
+ questions about which date parts (month/day/year/weekday, date kind) the text actually states, then
148
+ resolving those parts to a real date entirely in code. Example: 6 questions across 4 documents — 5
149
+ auto-accepted (confidence 0.91–0.97), 1 sent to review at confidence 0.46 (correctly flagged as
150
+ incomplete rather than the model inventing a date). Review threshold used: confidence < 0.60.
151
+ **Lesson:** let code do all date arithmetic; the model only reads what the text literally names —
152
+ this directly implements jaggedness #3's mitigation.
153
+
154
+ ## Pre-parsed value extraction
155
+
156
+ `cookbooks/pre_parsed_value_extraction_cookbook.md` — A regex finds candidate spans (emails, phone
157
+ numbers, dollar amounts); Jev's Choice then picks which candidate answers a specific question, and
158
+ code copies that span verbatim and normalizes it — the returned value is always literally one of the
159
+ regex's own matches, never invented. Two stated hard limits: Choice allows at most 255 options (past
160
+ that, narrow in two stages); and result quality depends on having a good candidate-finder (regex,
161
+ NER, or another cheap proposer) — names in particular have no simple regex. **Lesson:** when a value
162
+ must come verbatim from the source with zero risk of alteration, never let the model output free
163
+ text — have code enumerate exhaustive candidates and let Choice only ever select among them.
164
+
165
+ ## Hierarchical classification
166
+
167
+ `cookbooks/hierarchical_classification.md` — Classifies documents down deep taxonomies (patents,
168
+ product categories, biomedical subjects, a codebase file tree) by walking node-to-node with Choice
169
+ questions, comparing greedy search (always take the top child) against beam search (keep top-K
170
+ paths, score by length-normalized geometric-mean edge probability, explored via parallel requests).
171
+ Beam search (K=3) matched 4/4 expected leaves across 4 hierarchies; greedy matched 2/4 (an early
172
+ wrong turn couldn't be recovered). **Lesson:** for deep/branching taxonomies, prefer beam search over
173
+ greedy — parallel requests make exploring several candidate paths cheap, and it recovers from an
174
+ ambiguous early decision that greedy can't undo. This directly implements the "walking a taxonomy"
175
+ technique in `primitives-reference.md`.
176
+
177
+ ## Autoresearch feature discovery
178
+
179
+ `cookbooks/autoresearch_feature_discovery.md` — An LLM proposes candidate numeric features (as
180
+ natural-language questions) for a gradient-boosting model predicting a wine score from tasting notes;
181
+ each round, Jev answers all proposed questions for every row (intensity → Score, presence → Noul),
182
+ k-fold CV judges whether to keep/revise/drop each question. Over 5 rounds (1,200 dev / 800 held-out
183
+ rows), held-out RMSE improved 0.097 points; ended with 38 kept questions. **Lesson:** Jev questions
184
+ can serve as an LLM-designed, numerically-scored feature layer in front of an ordinary ML model — the
185
+ LLM proposes what to ask, Jev answers it cheaply and consistently at scale, and a held-out set that
186
+ the loop never reads is what actually validates whether new questions help.
187
+
188
+ ## Classification using confidence
189
+
190
+ `cookbooks/classification_using_confidence.md` — Classifies SEC filings into 1 of 75 industry groups
191
+ with a single Choice question, then uses that answer's own `confidence` to decide whether to report
192
+ the specific group or fall back to its broader parent division. Across 60 filings, a confidence cutoff
193
+ of 0.9 splits them roughly in half: the confident half is correct 90% of the time at the specific
194
+ level, the unsure half only 40% — but reporting the unsure half at the broader division level raises
195
+ it to 70% correct. **Lesson:** a Choice answer's own confidence is a free built-in signal for
196
+ "trust the specific label, or hedge" — when labels form a hierarchy, hedging to the parent category is
197
+ a nearly-free way to trade specificity for reliability exactly where it's needed.
@@ -0,0 +1,135 @@
1
+ # jev-1.13 jaggedness — known limitations
2
+
3
+ Source: `docs.typesafe.ai/model-jaggedness/jev-1.13.md`, TypeSafe's own dated list ("Last reviewed
4
+ 2026-09-17" at crawl time, 2026-09-21) of known failure modes for the current model version, each
5
+ with a stated mitigation. TypeSafe expects some of these to be fixed in later versions — check the
6
+ live page before assuming a mitigation is still required for whichever `jev-*` version you're
7
+ actually calling.
8
+
9
+ This is the single most load-bearing reference for "will this question actually work well" — read
10
+ it before designing a new question, not after it misbehaves in production.
11
+
12
+ ## 1. Literal reading
13
+
14
+ Jev "answers the question you wrote, not the one you meant." Scoping words, negations, and implied
15
+ conditions are read at face value, not interpreted the way a person reading between the lines would.
16
+
17
+ **Do instead:** state the exact condition you mean; be specific rather than relying on implication;
18
+ put boundary cases directly into `criteria`; if a question unavoidably needs interpretation, split it
19
+ into two literal sub-questions and combine the results in code rather than trusting one question to
20
+ carry the nuance.
21
+
22
+ ## 2. Math and numbers
23
+
24
+ **"Jev is not a calculator. We strongly recommend implementing any mathematical logic in code."**
25
+
26
+ - **Counting** does not work reliably — characters in a word, occurrences of a term, items in a long
27
+ list. Error grows with the size of the thing being counted. **Do instead:** count in code. For a
28
+ *filtered* count (count items matching some semantic condition), ask one Noul per candidate item
29
+ and sum the true/false results in code, rather than asking Jev to count directly.
30
+ - **Numeric representations** (hex, RGB, binary, low-level/assembly forms) perform worse than
31
+ semantic or high-level representations of the same information — Jev "cannot reliably judge
32
+ whether two [RGB/hex] values are near each other." **Do instead:** convert to semantic form or
33
+ named buckets in code before asking.
34
+ - **Using `score` for exact magnitude:** don't use a Score answer's probability-weighted `score` (or
35
+ the underlying `probabilities`) to compute the *exact* numeric value between two levels of a
36
+ criterion — score can be thresholded or compared, but treating `1.43` as a precise interpolated
37
+ measurement is not supported.
38
+
39
+ ## 3. Date and time comparison
40
+
41
+ Jev "reads dates as text, not as ordered quantities." Ordering, distance, and window-membership
42
+ judgments over dates are unreliable, and get worse with mixed formats, relative references ("next
43
+ Thursday"), and domain-specific boundaries.
44
+
45
+ **Do instead:** extract date *components* as a bounded Choice (e.g. one of 12 months, one of 31
46
+ days, a bounded year range) — including an explicit "not stated" option for text that doesn't
47
+ actually name a date — then do all ordering, duration, and offset/weekday arithmetic in code. See
48
+ `references/cookbooks.md`'s "Date extraction" entry for a full worked example, including a case where
49
+ this approach correctly flagged a date the source text never actually stated, instead of the model
50
+ inventing one.
51
+
52
+ ## 4. Indirection
53
+
54
+ "Instructions carrying double negatives or complex indirection are answered less reliably. A
55
+ question about a property of a property, or something that requires multiple hops of reasoning,
56
+ costs accuracy."
57
+
58
+ **Do instead:** write instructions directly; name the relevant part of `state` explicitly rather
59
+ than making the model infer which part you mean.
60
+
61
+ ## 5. Large state full of irrelevant detail
62
+
63
+ "Accuracy falls as the state grows with content unrelated to the decision." Jev has a bounded
64
+ context window (see `primitives-reference.md`'s Models table for the exact 64k/32k token limits) —
65
+ but the accuracy cost of irrelevant content in `state` is a separate, independent problem from the
66
+ token limit itself.
67
+
68
+ **Do instead:** filter in code first and send only the fields a given question actually needs. When
69
+ code-side filtering isn't feasible (e.g. you don't know in advance which chunk of a document is
70
+ relevant), use a Noul question as a relevance pre-filter before the real question — see
71
+ `references/cookbooks.md`'s "Classifying RAG passages" entry.
72
+
73
+ **Note on an apparent tension:** the introduction docs say that batching *more questions* into one
74
+ request "does not create context-rot" — that claim is true and is about parallel, independent
75
+ question evaluation. This jaggedness item is a different claim: irrelevant material *in the shared
76
+ `state`* does cost accuracy. Both are true at once; don't conflate "add more questions" (safe) with
77
+ "pad the state with content the question doesn't need" (costly).
78
+
79
+ ## 6. Adversarial content
80
+
81
+ "State is data, and jev-1.13 does not treat it as hostile by default." Content written to
82
+ adversarially steer the model (prompt injection embedded in retrieved or user-supplied text) can
83
+ move the answer. TypeSafe states it expects to improve this in future versions.
84
+
85
+ **Do instead:** be explicit in `criteria` about what would and wouldn't count; test thoroughly with
86
+ adversarial inputs before deploying a question over untrusted content to many users. See
87
+ `references/cookbooks.md`'s "Classifying RAG passages" entry for a worked example that specifically
88
+ screens for and drops a planted prompt-injection passage using a dedicated Noul question.
89
+
90
+ ## 7. Contradictory instructions and criteria
91
+
92
+ A mismatch between `instructions` and `criteria` (e.g., a Noul where the `criteria.true` description
93
+ actually describes what most people would call "no") degrades performance.
94
+
95
+ **Do instead:** treat `criteria` as an extension of the instruction, not a separate spec — keep both
96
+ aligned in clear, plain language, and re-read a structured question as a whole rather than writing
97
+ `instructions` and `criteria` independently.
98
+
99
+ ## 8. No guaranteed structural invariants
100
+
101
+ Jev is "extremely consistent [for] semantically similar inputs" but does **not** guarantee the kind
102
+ of structural invariants a person might assume hold:
103
+
104
+ - The same underlying question asked as a Noul vs. an equivalent yes/no Choice can disagree
105
+ materially — a documented example gives `noul: 0.22` for one framing and `{choice: "no",
106
+ probabilities: {yes: 0.01, no: 0.99}, confidence: 0.97}` for the logically equivalent Choice
107
+ framing of the same input. Neither is simply derivable from the other.
108
+ - A Noul and its logical negation are not guaranteed to sum to 1 — a documented example has
109
+ `refund: 0.72` and `not_refund: 0.47` for the same message (sum 1.19, not 1.0). There are several reasons `P(noul)` and `1 - P(not noul)` may diverge; don't rely on the
110
+ identity holding.
111
+
112
+ **Do instead:** don't rely on structural/arithmetic invariance between separate questions. Don't
113
+ carry a confidence threshold tuned on one question (or question type) over to a different one without
114
+ separately validating it.
115
+
116
+ ## 9. Generation
117
+
118
+ "[Jev is] not trained to generate text. While you can force it to by chaining choices, this will not
119
+ work well and will be very slow."
120
+
121
+ **Do instead:** when the answer space is genuinely bounded, use Choice over the explicit option set
122
+ rather than trying to make Jev produce the value as free text. When free text generation is actually
123
+ required, use a generative model for that part of the workflow — Jev is not a substitute for one.
124
+
125
+ ## Closing checklist (from the docs' own "avoid" callout)
126
+
127
+ Avoid:
128
+
129
+ - Asking Jev something code can compute exactly (counting, dates, arithmetic).
130
+ - Hiding several separate judgments inside one question — decompose instead.
131
+ - "System Two" tasks — anything needing several layers of indirect reasoning.
132
+ - Giving a question more `state` context than it actually needs — "Jev suffers from context rot,"
133
+ specifically with respect to unrelated material in the shared state (see item 5 above).
134
+
135
+ Community feedback channel TypeSafe links from this page: Discord, `discord.com/invite/WUujKYBp8s`.