{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-09-22-llm-typesafe-0-1a0/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "I built this new plugin for [LLM](https://llm.datasette.io/) to add support for [TypeSafe AI's new Jev model](https://simonwillison.net/2026/Sep/21/jev/). Install it like this:\n\n```\nllm install llm-typesafe\n```\n\nThen set an API key ([get one here](https://console.typesafe.ai/), the waitlist seems to move pretty fast):\n\n```\nllm keys set typesafe\n# Paste key\n```\n\nAnd now you can ask yes/no \"noul\" questions like this:\n\n```\nllm -m jev 'Please refund my last payment.' \\\n  -s 'Does this message explicitly request a refund?'\n```\n\nOutput:\n\n```\n{\"type\": \"noul\", \"noul\": 0.99}\n```\n\nOr choice questions like this:\n\n```\ncat message.txt | llm -m jev \\\n  -s 'Which team should handle this message? If billing and technical issues both occur, choose billing.' \\\n  -o answer_type choice \\\n  -o criteria '{\n    \"billing\":\"Charges, invoices, payments, or refunds\",\n    \"technical\":\"Problems installing or using the product\",\n    \"other\":\"Neither category fits\"\n  }'\n```\n\nOr scoring questions like this:\n\n```\ncat report.txt | llm -m jev \\\n  -s 'How reproducible is the problem described in this report?' \\\n  -o answer_type score \\\n  -o criteria '[\n    \"No reproduction instructions\",\n    \"Some instructions, but important steps are missing\",\n    \"Complete steps with expected and actual results\"\n  ]'\n```\n\nSee [the README](https://github.com/simonw/llm-typesafe/blob/main/README.md) for more details.\n",
  "authors": [],
  "captured_at": "2026-09-22T18:47:44.447844335+00:00",
  "category": "programming",
  "content_html": "<p>I built this new plugin for <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://llm.datasette.io/\">LLM</a> to add support for <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://simonwillison.net/2026/Sep/21/jev/\">TypeSafe AI's new Jev model</a>. Install it like this:</p>\n<pre><code><span class=\"code-snippet\">llm install llm-typesafe\n</span></code></pre>\n<p>Then set an API key (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://console.typesafe.ai/\">get one here</a>, the waitlist seems to move pretty fast):</p>\n<pre><code><span class=\"code-snippet\">llm keys set typesafe\n# Paste key\n</span></code></pre>\n<p>And now you can ask yes/no &quot;noul&quot; questions like this:</p>\n<pre><code><span class=\"code-snippet\">llm -m jev &#39;Please refund my last payment.&#39; \\\n  -s &#39;Does this message explicitly request a refund?&#39;\n</span></code></pre>\n<p>Output:</p>\n<pre><code><span class=\"code-snippet\" data-language=\"JSON\"><span class=\"syntax-source syntax-json\"><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-json\"><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-begin syntax-json\">{</span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>type<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>noul<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-pair syntax-json\">,</span></span> <span class=\"syntax-meta syntax-structure syntax-dictionary syntax-key syntax-json\"><span class=\"syntax-string syntax-quoted syntax-double syntax-json\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-json\">&quot;</span>noul<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-json\">&quot;</span></span></span><span class=\"syntax-meta syntax-structure syntax-dictionary syntax-value syntax-json\"><span class=\"syntax-punctuation syntax-separator syntax-dictionary syntax-key-value syntax-json\">:</span> <span class=\"syntax-constant syntax-numeric syntax-json\">0.99</span></span><span class=\"syntax-punctuation syntax-section syntax-dictionary syntax-end syntax-json\">}</span></span>\n</span></span></code></pre>\n<p>Or choice questions like this:</p>\n<pre><code><span class=\"code-snippet\">cat message.txt | llm -m jev \\\n  -s &#39;Which team should handle this message? If billing and technical issues both occur, choose billing.&#39; \\\n  -o answer_type choice \\\n  -o criteria &#39;{\n    &quot;billing&quot;:&quot;Charges, invoices, payments, or refunds&quot;,\n    &quot;technical&quot;:&quot;Problems installing or using the product&quot;,\n    &quot;other&quot;:&quot;Neither category fits&quot;\n  }&#39;\n</span></code></pre>\n<p>Or scoring questions like this:</p>\n<pre><code><span class=\"code-snippet\">cat report.txt | llm -m jev \\\n  -s &#39;How reproducible is the problem described in this report?&#39; \\\n  -o answer_type score \\\n  -o criteria &#39;[\n    &quot;No reproduction instructions&quot;,\n    &quot;Some instructions, but important steps are missing&quot;,\n    &quot;Complete steps with expected and actual results&quot;\n  ]&#39;\n</span></code></pre>\n<p>See <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm-typesafe/blob/main/README.md\">the README</a> for more details.</p>\n",
  "content_markdown": "I built this new plugin for [LLM](https://llm.datasette.io/) to add support for [TypeSafe AI's new Jev model](https://simonwillison.net/2026/Sep/21/jev/). Install it like this:\n\n```\nllm install llm-typesafe\n```\n\nThen set an API key ([get one here](https://console.typesafe.ai/), the waitlist seems to move pretty fast):\n\n```\nllm keys set typesafe\n# Paste key\n```\n\nAnd now you can ask yes/no \"noul\" questions like this:\n\n```\nllm -m jev 'Please refund my last payment.' \\\n  -s 'Does this message explicitly request a refund?'\n```\n\nOutput:\n\n```\n{\"type\": \"noul\", \"noul\": 0.99}\n```\n\nOr choice questions like this:\n\n```\ncat message.txt | llm -m jev \\\n  -s 'Which team should handle this message? If billing and technical issues both occur, choose billing.' \\\n  -o answer_type choice \\\n  -o criteria '{\n    \"billing\":\"Charges, invoices, payments, or refunds\",\n    \"technical\":\"Problems installing or using the product\",\n    \"other\":\"Neither category fits\"\n  }'\n```\n\nOr scoring questions like this:\n\n```\ncat report.txt | llm -m jev \\\n  -s 'How reproducible is the problem described in this report?' \\\n  -o answer_type score \\\n  -o criteria '[\n    \"No reproduction instructions\",\n    \"Some instructions, but important steps are missing\",\n    \"Complete steps with expected and actual results\"\n  ]'\n```\n\nSee [the README](https://github.com/simonw/llm-typesafe/blob/main/README.md) for more details.\n",
  "dateCreated": "2026-09-22T18:47:44.447844335+00:00",
  "date_created": "2026-09-22T15:54:16+00:00",
  "date_modified": "2026-09-22T15:54:16+00:00",
  "date_published": "2026-09-22T15:54:16+00:00",
  "description": "Release: llm-typesafe 0.1a0 I built this new plugin for LLM to add support for TypeSafe AI's new Jev model. Install it like this: llm install llm-typesafe Then set an API key (get one here, the waitlist seems to move pretty fast): llm keys…",
  "external_url": "https://simonwillison.net/2026/Sep/22/llm-typesafe/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/simonwillison-net/2026/09/2026-09-22-llm-typesafe-0-1a0.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/simonwillison-net/2026/09/2026-09-22-llm-typesafe-0-1a0.md"
  },
  "id": "urn:aggr:item:c5612837cb7832b4294001751991ad14efc2a09b",
  "isBasedOn": {
    "@id": "https://simonwillison.net/2026/Sep/22/llm-typesafe/"
  },
  "mainEntity": {
    "@id": "https://simonwillison.net/2026/Sep/22/llm-typesafe/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-09-22-llm-typesafe-0-1a0/#webpage"
    },
    "dateModified": "2026-09-22T15:54:16+00:00",
    "datePublished": "2026-09-22T15:54:16+00:00",
    "headline": "llm-typesafe 0.1a0",
    "timeRequired": "PT1M",
    "url": "https://simonwillison.net/2026/Sep/22/llm-typesafe/",
    "wordCount": 173
  },
  "name": "Archived snapshot: llm-typesafe 0.1a0",
  "preview": null,
  "reading_minutes": 1,
  "replicated_at": null,
  "source": "simonwillison-net",
  "source_name": "Simon Willison's Weblog",
  "summary": "Release: llm-typesafe 0.1a0 I built this new plugin for LLM to add support for TypeSafe AI's new Jev model. Install it like this: llm install llm-typesafe Then set an API key (get one here, the waitlist seems to move pretty fast): llm keys set typesafe # Paste key And now you can ask yes/no \"noul\" questions like this: llm -m jev 'Please refund my last payment.' \\ -s 'Does this message explicitly request a refund?' Output: {\"type\": \"noul\", \"noul\": 0.99} Or choice questions like this: cat message.txt | llm -m jev \\ -s 'Which team should handle this message? If billing and technical issues both occur, choose billing.' \\ -o answer_type choice \\ -o criteria '{ \"billing\":\"Charges, invoices, payments, or refunds\", \"technical\":\"Problems installing or using the product\", \"other\":\"Neither category fits\" }' Or scoring questions like this: cat report.txt | llm -m jev \\ -s 'How reproducible is the problem described in this report?' \\ -o answer_type score \\ -o criteria '[ \"No reproduction instructions\", \"Some instructions, but important steps are missing\", \"Complete steps with expected and actual results\" ]' See the README for more details. Tags: projects, llm, jev",
  "tags": [
    "jev",
    "llm",
    "projects"
  ],
  "temporalCoverage": "2026-09-22T18:47:44.447844335+00:00",
  "title": "llm-typesafe 0.1a0",
  "url": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-09-22-llm-typesafe-0-1a0/",
  "word_count": 173
}