<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Souren Khetcho</title>
    <description>The latest articles on DEV Community by Souren Khetcho (@skhetcho).</description>
    <link>https://dev.to/skhetcho</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F374555%2Fc6d8df97-31c1-4aca-b8a6-d9b04fb54295.jpg</url>
      <title>DEV Community: Souren Khetcho</title>
      <link>https://dev.to/skhetcho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/skhetcho"/>
    <language>en</language>
    <item>
      <title>Claude Code Plan Mode: When to Plan, When to Build, and When to Add a Reviewer</title>
      <dc:creator>Souren Khetcho</dc:creator>
      <pubDate>Sat, 26 Sep 2026 09:05:17 +0000</pubDate>
      <link>https://dev.to/skhetcho/claude-code-plan-mode-when-to-plan-when-to-build-and-when-to-add-a-reviewer-k2</link>
      <guid>https://dev.to/skhetcho/claude-code-plan-mode-when-to-plan-when-to-build-and-when-to-add-a-reviewer-k2</guid>
      <description>&lt;p&gt;&lt;em&gt;AI-drafted for AgentGrid, which makes the agent workspace discussed below. Documentation checked September 26, 2026. The prompts and diagrams propose a workflow; they are not a benchmark or a report of an executed session.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI-generated editorial illustration of planning, building and reviewing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use Claude Code Plan Mode when you need to settle a consequential decision before implementation. Build directly when the intended change is clear and easy to check. Add a separate reviewer when a plausible mistake could survive your own inspection or the existing tests.&lt;/p&gt;

&lt;p&gt;The difficult part is deciding how much process a task deserves. A long plan can consume the attention you needed for the diff. Another agent adds another handoff to check. Neither earns its place simply because the tools make it easy to start.&lt;/p&gt;

&lt;p&gt;Ayman Nadeem's September 24 essay, &lt;a href="https://www.aymannadeem.com/artificial/intelligence,/developer/tools/2026/09/24/plan-mode-is-dead.html" rel="noopener noreferrer"&gt;“Plan mode is dead”&lt;/a&gt;, describes lessons from building Nuanced: lengthy generated specifications and a rigid separation between planning and building did not deliver the clarity intended. The account raises a useful question: what information helps a person stay oriented as code changes?&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://www.reddit.com/r/ClaudeCode/comments/1wmax2u/whats_your_actual_claude_code_workflow_by_task/" rel="noopener noreferrer"&gt;Claude Code community discussion&lt;/a&gt; asks the practical version: when do planning frameworks and parallel agents repay their review and coordination overhead? That is a workflow question, not evidence that one method wins everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Plan Mode does
&lt;/h2&gt;

&lt;p&gt;Claude Code's &lt;a href="https://code.claude.com/docs/en/common-workflows#plan-before-editing" rel="noopener noreferrer"&gt;common-workflows documentation&lt;/a&gt; presents Plan Mode as a way to explore and propose changes before implementation. Start in Plan Mode from the terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--permission-mode&lt;/span&gt; plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During a session, cycle modes with &lt;code&gt;Shift+Tab&lt;/code&gt; and check the status bar. The detailed &lt;a href="https://code.claude.com/docs/en/permission-modes#analyze-before-you-edit-with-plan-mode" rel="noopener noreferrer"&gt;permission-mode documentation&lt;/a&gt; also documents &lt;code&gt;/plan&lt;/code&gt; for a single prompt. When Claude presents a plan, you can request revisions or approve it and move into the selected execution mode.&lt;/p&gt;

&lt;p&gt;Plan Mode is not a universal read-only sandbox. It can run exploratory shell commands, whose handling depends on session settings. The docs specifically say interactive terminal sessions with bypass permissions available do not enforce Plan Mode's blocks. Check your session configuration before relying on the mode to prevent changes.&lt;/p&gt;

&lt;p&gt;Anthropic's &lt;a href="https://code.claude.com/docs/en/best-practices#explore-first-then-plan-then-code" rel="noopener noreferrer"&gt;best-practices guide&lt;/a&gt; recommends planning for uncertainty or unfamiliar code and direct implementation for small, clear changes. Our suggested extension is to consider the consequence of being wrong as well as task size.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose by uncertainty and consequence
&lt;/h2&gt;

&lt;p&gt;These are editorial starting points. Your repository's required reviews still apply.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task situation&lt;/th&gt;
&lt;th&gt;Start here&lt;/th&gt;
&lt;th&gt;What earns more process&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A wording fix with a known location&lt;/td&gt;
&lt;td&gt;Build directly; inspect the diff and affected view&lt;/td&gt;
&lt;td&gt;Unexpected behavior or wider scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A reproducible bug in familiar code&lt;/td&gt;
&lt;td&gt;Investigate briefly, then implement one fix&lt;/td&gt;
&lt;td&gt;Several plausible causes or unclear expected behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A feature with unsettled product behavior&lt;/td&gt;
&lt;td&gt;Plan the decisions and acceptance criteria&lt;/td&gt;
&lt;td&gt;A choice that changes the API, data model, or user experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A small change to access control or data deletion&lt;/td&gt;
&lt;td&gt;Plan first; arrange focused independent review&lt;/td&gt;
&lt;td&gt;Consequences that a happy-path test cannot settle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An unfamiliar change across components&lt;/td&gt;
&lt;td&gt;Map dependencies; choose one testable slice&lt;/td&gt;
&lt;td&gt;Hidden coupling, migration risk, or missing checks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A one-line permission change may deserve more scrutiny than a large mechanical rename. Ask what you would have to undo if the assumption were wrong, and whether your checks would notice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0mowdmn0syjvq36x34ve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0mowdmn0syjvq36x34ve.png" alt="Decision tree: resolve consequential uncertainty through planning; otherwise build one bounded slice. Add focused review for consequential missed defects, or inspect the diff and checks for low-consequence work. Follow required project reviews on every path." width="360" height="980"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proposed decision guide: settle uncertain decisions, build one bounded change, then choose review depth by the consequences of a missed defect.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop planning when you can check the next change
&lt;/h2&gt;

&lt;p&gt;A useful plan names the unresolved decision, the evidence needed to settle it, and the next change that will test the answer. It need not predict every edit.&lt;/p&gt;

&lt;p&gt;Consider a hypothetical search page where changing filters sometimes leaves the user on an empty results page. Before implementation, settle whether changing a filter should reset pagination. That product decision matters more than a detailed list of helper functions.&lt;/p&gt;

&lt;p&gt;Here is an original prompt to adapt in Plan Mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Investigate the filter/pagination behavior without implementing yet.
Find the relevant state transitions and existing tests.
Propose the smallest fix for this expected behavior:
changing any filter resets the page to 1; changing pages preserves filters.
Identify unresolved decisions, likely affected files, and meaningful checks.
Keep the plan short enough to review in one sitting.
Stop when we can agree on one testable implementation slice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acceptance criteria could be three sentences: changing a filter resets the page; selecting page two keeps the filters; clearing filters restores the default results on page one. Add relevant constraints, such as preserving shareable URLs, only if the product requires them.&lt;/p&gt;

&lt;p&gt;Review those criteria yourself. A model can propose internally consistent behavior that is wrong for your users. If you cannot decide between two behaviors, another implementation paragraph will not make that decision for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a slice that can change your mind
&lt;/h2&gt;

&lt;p&gt;Once the behavior is agreed, implement the filter/page transition and its relevant checks. Leave unrelated search redesigns for another task. A bounded change gives you something concrete to inspect before extending the approach.&lt;/p&gt;

&lt;p&gt;Proposed implementation prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement the agreed filter/page behavior only.
Preserve unrelated local changes and follow the repository instructions.
Run the relevant existing checks and add coverage for the changed behavior.
If the fix needs an API or persistence change, stop and explain the decision.
Return the diff, exact commands and outcomes, and anything you could not verify.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If implementation exposes a false assumption, revise the affected decision and criteria. There is no benefit in preserving a plan that the code has disproved. Avoid regenerating the whole document when one assumption changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give a reviewer evidence and a specific question
&lt;/h2&gt;

&lt;p&gt;Add a reviewer when you can name a worthwhile challenge: could an older search response overwrite newer results, could a URL restore the wrong page, or could the change affect another caller? Review can be useful even when the plan was short.&lt;/p&gt;

&lt;p&gt;Give the reviewer the original criteria, base and current revisions, full diff including relevant untracked files, exact check results, and known gaps. Ask for a reproduction or code-based explanation of each finding. A separate conversation can challenge the builder's reasoning; it does not guarantee different assumptions or a correct verdict.&lt;/p&gt;

&lt;p&gt;If the question is whether the chosen behavior is right, review the criteria before building. If it is whether the code satisfies them, review the implementation. More reviewers are not a substitute for choosing the right question.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw2tdlrbs9is4ma1l5zv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw2tdlrbs9is4ma1l5zv1.png" alt="Agreed criteria go to both builder and separate reviewer. The builder supplies the revision, diff, check results and gaps. Actionable findings return for fixes and renewed checks; the final handoff identifies the reviewed revision, verdict and limits." width="360" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proposed evidence handoff: criteria travel with the change; findings return to the builder; review and checks must describe the final revision.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A passing test is evidence about what it exercised. A test that never changes filters cannot establish that pagination resets. Ask the reviewer to identify the missing scenario rather than request “more tests” in general. For interface behavior, try the actual interaction as well.&lt;/p&gt;

&lt;p&gt;After a fix, rerun the relevant checks and review the revised code. Stop the loop when the criteria have supporting evidence and material findings are resolved, or when a specific unresolved decision needs your attention. Report blocked checks plainly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the handoff visible in AgentGrid
&lt;/h2&gt;

&lt;p&gt;AgentGrid supports visible agent and terminal panes. Its &lt;a href="https://agentgrid.sh/workflows/build-and-review" rel="noopener noreferrer"&gt;build-and-review workflow&lt;/a&gt; sets up a builder and a reviewer in separate conversations, with findings returned to the builder. Use that fuller setup when the task warrants coordination; a straightforward fix may need only one working conversation and your inspection.&lt;/p&gt;

&lt;p&gt;Those separate conversations can still access the same files. Asking a reviewer not to edit is an instruction, not a filesystem boundary. The workflow's value depends on supplying and inspecting evidence; placing panes beside each other does not automatically trace requirements to correct behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentgrid.sh/download" rel="noopener noreferrer"&gt;Download AgentGrid&lt;/a&gt; if you want the builder, review conversation, and test terminal together for your next consequential change. Start with one bounded slice and one review question you can actually answer.&lt;/p&gt;

&lt;p&gt;Original article: &lt;a href="https://agentgrid.sh/stories/claude-code-plan-mode" rel="noopener noreferrer"&gt;Claude Code Plan Mode: When to Plan, When to Build, and When to Add a Reviewer&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Jev vs. Laya: Which AI Decision Model Should You Choose?</title>
      <dc:creator>Souren Khetcho</dc:creator>
      <pubDate>Tue, 22 Sep 2026 22:51:54 +0000</pubDate>
      <link>https://dev.to/skhetcho/jev-vs-laya-which-ai-decision-model-should-you-choose-1di4</link>
      <guid>https://dev.to/skhetcho/jev-vs-laya-which-ai-decision-model-should-you-choose-1di4</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was drafted with AI and reviewed for factual accuracy against primary sources. Any hands-on testing and its limitations are described in the article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources checked September 21, 2026, Pacific time. This comparison combines documentation with a small local Laya smoke test on authored synthetic cases. We did not call the hosted Jev API or run a controlled head-to-head benchmark.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with Jev if you want a hosted service and your inputs fit its documented API. Start with Laya if running inference on your own infrastructure or adapting the weights is a requirement, and you can take on the deployment work.&lt;/strong&gt; Those are recommendations about where to begin evaluating. Neither establishes which model will make better decisions on your tickets.&lt;/p&gt;

&lt;p&gt;Imagine the same issue arriving in both systems: “The CSV export button does nothing.” You want a category, a judgment about missing reproduction details, and a suggestion for the review queue. A usable answer must preserve what the report says, respect your category definitions and arrive within your application's time budget. That is the comparison worth making.&lt;/p&gt;

&lt;h2&gt;
  
  
  The differences that should drive your choice
&lt;/h2&gt;

&lt;p&gt;Both products expose typed decisions: &lt;code&gt;choice&lt;/code&gt; for selecting an option, &lt;code&gt;score&lt;/code&gt; for an ordered rating and &lt;code&gt;noul&lt;/code&gt; for a yes/no probability. These can feed application logic without asking a chatbot to write and format a response. A correctly shaped answer can still be wrong. &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;TypeSafe API&lt;/a&gt;, &lt;a href="https://huggingface.co/convaiinnovations/laya" rel="noopener noreferrer"&gt;Laya model card&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your constraint&lt;/th&gt;
&lt;th&gt;Jev (&lt;code&gt;jev-1.13.0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Laya&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where inference runs&lt;/td&gt;
&lt;td&gt;TypeSafe's hosted API&lt;/td&gt;
&lt;td&gt;Your chosen local machine or server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you must arrange&lt;/td&gt;
&lt;td&gt;Account access, credentials and an HTTP client&lt;/td&gt;
&lt;td&gt;Python environment, model files, compatible runtime and enough memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Larger inputs&lt;/td&gt;
&lt;td&gt;Documented 64k-token request budget, with a separate 32k limit for state plus the longest question&lt;/td&gt;
&lt;td&gt;Much smaller default per-question budgets; inspect the selected checkpoint and preprocessing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Many candidate labels&lt;/td&gt;
&lt;td&gt;Up to 255 options per Choice&lt;/td&gt;
&lt;td&gt;Options compete for a limited prompt budget; the publisher recommends fewer than about 20 options at default settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain adaptation&lt;/td&gt;
&lt;td&gt;Change the supplied state, instructions and criteria&lt;/td&gt;
&lt;td&gt;Change those inputs; you can also fine-tune an appropriate checkpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost to operate&lt;/td&gt;
&lt;td&gt;Listed input-token charge, plus your integration costs&lt;/td&gt;
&lt;td&gt;Compute, memory, storage and operating time; downloadable weights do not make those free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Jev limits and customization details come from its &lt;a href="https://docs.typesafe.ai/models" rel="noopener noreferrer"&gt;model reference&lt;/a&gt; and &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;API contract&lt;/a&gt;. Laya's &lt;a href="https://github.com/NandhaKishorM/laya" rel="noopener noreferrer"&gt;repository&lt;/a&gt; documents the local runtime and tuning workflow; its &lt;a href="https://github.com/NandhaKishorM/laya/blob/573e5b62696ba441230cd6be71d593331b5d23af/BENCHMARKS.md" rel="noopener noreferrer"&gt;benchmark limitations&lt;/a&gt; explain the option-budget constraint.&lt;/p&gt;

&lt;h2&gt;
  
  
  With Laya, name the checkpoint before discussing results
&lt;/h2&gt;

&lt;p&gt;“Laya” refers to a family. The root checkpoint is aimed at English, a multilingual checkpoint serves other languages, and a separate checkpoint is fine-tuned for the typed-decisions benchmark workflows. Its router can choose a checkpoint for a request. Record what it actually selected rather than reporting every result under one model name. &lt;a href="https://huggingface.co/convaiinnovations/laya" rel="noopener noreferrer"&gt;Laya family and router&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This matters because the publisher reports substantially different results for the base and fine-tuned versions. A result from the typed-decisions checkpoint is not evidence that the root English model will reproduce it on a new issue-triage task. The &lt;a href="https://huggingface.co/convaiinnovations/laya-typed-decisions" rel="noopener noreferrer"&gt;fine-tuned model card&lt;/a&gt; identifies that specialization. Start with the language and task you have, then evaluate that particular artifact.&lt;/p&gt;

&lt;p&gt;There is a second trap: a model's architectural capacity is not the amount of text your current configuration uses. The pinned English configuration sets a 512-token sequence budget and a 192-token question/options budget. The bundled multilingual configuration uses 1,024 and 256 respectively. The remaining space must hold the state, including formatting overhead. Long descriptions and large option sets consume that budget quickly. &lt;a href="https://huggingface.co/convaiinnovations/laya/blob/1c5edc17a7acd8701df6fc341c0d179f1c62c982/rl_agent_config.json" rel="noopener noreferrer"&gt;English configuration&lt;/a&gt;, &lt;a href="https://huggingface.co/convaiinnovations/laya/blob/1c5edc17a7acd8701df6fc341c0d179f1c62c982/multilingual/rl_agent_config.json" rel="noopener noreferrer"&gt;multilingual configuration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a short report with four categories, this is a manageable constraint to investigate. For a long incident history and 80 possible queues, I would evaluate Jev first or redesign the task into smaller decisions. That is an inference from the documented budgets, not a claim that Jev has won an 80-label test. A larger accepted input also does not guarantee better reasoning: TypeSafe explicitly warns that irrelevant context can reduce accuracy. &lt;a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13" rel="noopener noreferrer"&gt;Jev limitations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfkoxvf6aa0ncnmbyn73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfkoxvf6aa0ncnmbyn73.png" alt="AgentGrid terminal showing Laya 0.3.5 on CPU, the pinned root English checkpoint, 512-token sequence and 192-token head budgets, and ten input checks without clipping." width="413" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The local run used a pinned Laya checkpoint on CPU. We checked the complete token sequences for these five cases; the Jev API was not called.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Local control comes with a runtime to manage
&lt;/h2&gt;

&lt;p&gt;Laya's package requires Python 3.10 or newer and depends on PyTorch, Transformers and model-loading libraries. The inspected runtime supports CPU execution and accelerator selection, with CPU fallbacks in some failure cases. Log the device actually used; a requested GPU is not proof that inference stayed on it. &lt;a href="https://github.com/NandhaKishorM/laya/blob/573e5b62696ba441230cd6be71d593331b5d23af/pyproject.toml" rel="noopener noreferrer"&gt;Package requirements&lt;/a&gt;, &lt;a href="https://github.com/NandhaKishorM/laya/blob/573e5b62696ba441230cd6be71d593331b5d23af/laya/agent.py" rel="noopener noreferrer"&gt;runtime source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check available memory after loading the checkpoint, then measure your intended batch size. Model-file size alone is not a RAM or GPU-memory requirement: loading, intermediate computations and additional resident checkpoints need room too. Avoid choosing hardware from a download-size label.&lt;/p&gt;

&lt;p&gt;Jev moves that model-serving work to TypeSafe. You still need working account access, network connectivity and error handling. The API documents authentication, rate-limit and overload failures. Confirm access before planning a launch around it. &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;TypeSafe API errors&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What “local” means for privacy
&lt;/h3&gt;

&lt;p&gt;Running Laya on infrastructure you control can keep inference inputs there. That does not automatically cover the surrounding workflow. A cloud coding agent reviewing a private ticket, a remote log collector or a hosted demo introduces another data path. Use synthetic tickets while setting up the comparison, and decide separately where real inputs may go.&lt;/p&gt;

&lt;p&gt;TypeSafe says it does not train on customer data and offers zero data retention for enterprise customers. The latter is a separate offering, not a retention guarantee to assume for every account. Check the terms applicable to your account. &lt;a href="https://docs.typesafe.ai/legal" rel="noopener noreferrer"&gt;TypeSafe data-handling documents&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the benchmark tables do not settle this
&lt;/h2&gt;

&lt;p&gt;Laya's published comparison explicitly says its Jev figures come from third parties and that prompts and sample sizes differ. Its own checkpoint comparisons can be informative, but that does not turn the Jev column into a controlled head-to-head test. We would not use those figures to claim that Laya is a particular multiple faster or more accurate than Jev. &lt;a href="https://github.com/NandhaKishorM/laya/blob/573e5b62696ba441230cd6be71d593331b5d23af/BENCHMARKS.md" rel="noopener noreferrer"&gt;Benchmark methods and limitations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For speed, record the time the application actually waits: input preparation, local prediction or network request, and response validation. Separate first-load time from repeated predictions after loading. Keep the hardware, batch size, input lengths and number of repetitions with the result. Comparing a warm GPU forward pass with an end-to-end API request answers a different question from comparing two complete application paths.&lt;/p&gt;

&lt;p&gt;For cost, TypeSafe currently lists Jev at &lt;strong&gt;$0.042 per million input tokens&lt;/strong&gt;, with output tokens free. Laya's weights are listed under Apache 2.0, but self-hosting still consumes resources and staff time. Measure total cost for your expected workload before calling either cheaper. &lt;a href="https://docs.typesafe.ai/models" rel="noopener noreferrer"&gt;Jev pricing&lt;/a&gt;, &lt;a href="https://huggingface.co/convaiinnovations/laya" rel="noopener noreferrer"&gt;Laya license&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confidence needs its own evaluation
&lt;/h3&gt;

&lt;p&gt;A model can be confidently wrong. Laya's multilingual card warns about overconfidence and recommends fitting calibration on representative held-out data. Calibration asks whether predicted probabilities line up with observed outcomes; it does not fix a model that routinely chooses the wrong category. &lt;a href="https://huggingface.co/convaiinnovations/laya-multilingual" rel="noopener noreferrer"&gt;Multilingual calibration limits&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;TypeSafe's Choice and Score confidence values summarize the returned probability distribution. Noul does not have a separate confidence field. Laya's inspected implementation does return an additional Noul confidence value. Do not copy a threshold between providers just because fields have familiar names. &lt;a href="https://docs.typesafe.ai/confidence" rel="noopener noreferrer"&gt;TypeSafe confidence&lt;/a&gt;, &lt;a href="https://github.com/NandhaKishorM/laya/blob/573e5b62696ba441230cd6be71d593331b5d23af/laya/agent.py" rel="noopener noreferrer"&gt;Laya response implementation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What our local Laya smoke test showed
&lt;/h2&gt;

&lt;p&gt;We ran the root English checkpoint on five authored issue reports, twice each, using Laya 0.3.5 on Windows with Python 3.12, CPU PyTorch 2.8.0 and four processing threads. The model revision was pinned to &lt;code&gt;1c5edc17a7acd8701df6fc341c0d179f1c62c982&lt;/code&gt;. Expected labels stayed outside the model input. Checks found no additional truncation from the configured sequence budgets in these cases.&lt;/p&gt;

&lt;p&gt;The category choices matched all five authored labels in both repetitions. The separate missing-reproduction question was less useful:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Authored report&lt;/th&gt;
&lt;th&gt;Expected missing information?&lt;/th&gt;
&lt;th&gt;Laya's probability of yes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bug report with steps, expected and actual behavior, and environment supplied&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;0.8054&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug report with steps and environment missing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;0.8664&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The other three cases also exceeded 0.5 despite an expected "no." Getting the category right did not make the second judgment reliable. These were five simple examples with one rubric, not a representative accuracy test; repeating them did not create five additional independent cases.&lt;/p&gt;

&lt;p&gt;The illustrative policy kept all ten outputs in &lt;code&gt;manual-triage&lt;/code&gt;, with human review required. Separately, eight adapter tests passed; their Jev transport checks used mocks. There was no hosted Jev result to compare.&lt;/p&gt;

&lt;p&gt;This run supports a modest conclusion: the local inference path worked, and inspecting each question exposed a problem that a category-only check would have missed. Before using this rubric on real issues, we would investigate those false positives and evaluate revised criteria on fresh cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7s490rgetjufdfnxn6b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7s490rgetjufdfnxn6b.png" alt="AgentGrid terminal showing five saved Laya case results, a 0.8054 missing-details result for the complete bug report, four false positives at an illustrative 0.5 split, and all ten outcomes routed to human review." width="407" height="708"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Laya matched the five category labels in both repetitions, but the missing-details question produced false positives. The example policy kept all ten outcomes in manual triage.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare one useful workflow in AgentGrid
&lt;/h2&gt;

&lt;p&gt;Use the issue-triage scenario from our &lt;a href="https://agentgrid.sh/stories/what-is-jev?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=jev-vs-laya" rel="noopener noreferrer"&gt;Jev getting-started guide&lt;/a&gt;. Its downloadable example separates question criteria from the code that suggests a review queue. The published run used synthetic responses; it is a starting point for integration work, not a Jev accuracy result.&lt;/p&gt;

&lt;p&gt;Open a separate comparison project in AgentGrid. Keep the shared cases, provider adapters, coding-agent review and terminal results together. Jev and Laya are the decision components called by your scripts; this workflow does not require either to be a native AgentGrid coding-agent harness.&lt;/p&gt;

&lt;p&gt;Before executing either model, write the expected outcome for each case:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case to include&lt;/th&gt;
&lt;th&gt;What you are checking&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A clear feature request&lt;/td&gt;
&lt;td&gt;New functionality stays distinct from a reported defect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A defect report with missing steps&lt;/td&gt;
&lt;td&gt;Missing context triggers review rather than an invented explanation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A question about existing behavior&lt;/td&gt;
&lt;td&gt;Help requests do not become bug reports by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A report with competing intentions&lt;/td&gt;
&lt;td&gt;The system can defer an ambiguous case&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A long report or expanded label set&lt;/td&gt;
&lt;td&gt;Relevant evidence and label descriptions survive preprocessing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use separate examples for tuning criteria or calibration and for the final evaluation. Preserve the intended meaning across adapters, and record any difference in the actual serialized requests. Identical source JSON is not enough if one runtime truncates it or interprets fields differently.&lt;/p&gt;

&lt;p&gt;This is a prompt you can give the coding agent to begin the work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a reviewable Jev/Laya issue-triage comparison in this project.
Read project instructions first. Use synthetic cases with expected
categories and human-review actions recorded before model execution.

Keep provider adapters separate. Record package/model/checkpoint versions,
actual device, input limits and execution mode with every result.
Check that each adapter preserves the intended criteria and input text.
Show skipped, fixture, local-inference and hosted-API runs distinctly.

Start with offline adapter and policy tests. Do not read credentials,
download weights, call hosted inference or modify real issues yet.
Report what passed, what remains untested and the resources needed next.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prompt is a suggested next step; it was not used to produce the smoke-test results above. When you add real model runs, retain the raw outputs and failures. A few successful examples establish that the path works, not that it is generally accurate. For this first comparison, keep every suggested action subject to human review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which should you try first?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Try Jev first&lt;/strong&gt; when your priority is integrating a hosted component, especially when larger inputs or many options matter. Verify access, then test whether its decisions justify the dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try Laya first&lt;/strong&gt; when local execution or control over the weights is central to the project. Budget time for checkpoint selection, deployment, input handling and calibration. A strong result for another checkpoint is a reason to investigate, not a result you have inherited.&lt;/p&gt;

&lt;p&gt;If either option meets the deployment constraints, let the same-task evaluation decide. The useful winner is the one that handles your cases, makes acceptable mistakes and fits the cost of operating it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentgrid.sh/download?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=jev-vs-laya" rel="noopener noreferrer"&gt;Download AgentGrid&lt;/a&gt; to keep that comparison in one workspace. Start with the offline review, then use the &lt;a href="https://agentgrid.sh/workflows/build-and-review?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=jev-vs-laya" rel="noopener noreferrer"&gt;build-and-review workflow&lt;/a&gt; when you are ready to implement and independently check the adapters.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://agentgrid.sh/stories/jev-vs-laya?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=jev-vs-laya" rel="noopener noreferrer"&gt;AgentGrid&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Is Jev and How to Get Started</title>
      <dc:creator>Souren Khetcho</dc:creator>
      <pubDate>Tue, 22 Sep 2026 22:43:12 +0000</pubDate>
      <link>https://dev.to/skhetcho/what-is-jev-and-how-to-get-started-4fm9</link>
      <guid>https://dev.to/skhetcho/what-is-jev-and-how-to-get-started-4fm9</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was drafted with AI and reviewed for factual accuracy against primary sources. Any hands-on testing and its limitations are described in the article.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Documentation checked September 21, 2026. The example below passed local tests with synthetic responses. We have not tested it against the live Jev API.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An issue arrives: the CSV export button does nothing. Before anyone starts fixing it, someone has to decide what the report actually asks for—and whether it contains enough information to investigate.&lt;/p&gt;

&lt;p&gt;That is a useful place to try Jev. You supply the issue and a few specific questions. Your program gets structured answers it can use to suggest a next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Jev?
&lt;/h2&gt;

&lt;p&gt;Jev is TypeSafe's first &lt;strong&gt;System One model&lt;/strong&gt;, introduced on September 15, 2026. TypeSafe uses that term for models built to make structured decisions that software can consume. You send the information to evaluate, called the &lt;em&gt;state&lt;/em&gt;, along with typed questions. Jev returns decisions and probabilities rather than writing a chat response. &lt;a href="https://docs.typesafe.ai/introduction" rel="noopener noreferrer"&gt;TypeSafe's introduction&lt;/a&gt;, &lt;a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" rel="noopener noreferrer"&gt;launch announcement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the issue above, the useful output could be a suggested category and a signal that reproduction details are missing. Your application decides what happens next: display the suggestion, ask a person to review it, or request more information.&lt;/p&gt;

&lt;p&gt;A valid category can still be the wrong category. Restricting the output to known values helps the integration; it does not establish that the model understood the issue correctly. TypeSafe's own limitations page describes mistakes involving literal wording, numbers, irrelevant context and adversarial input. &lt;a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13" rel="noopener noreferrer"&gt;Jev 1.13 limitations&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three kinds of questions
&lt;/h2&gt;

&lt;p&gt;Choose the question type that matches the decision your code needs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Use it for&lt;/th&gt;
&lt;th&gt;What comes back&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.typesafe.ai/primitives/choice" rel="noopener noreferrer"&gt;Choice&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pick a category from options you supply&lt;/td&gt;
&lt;td&gt;The selected option, a probability for each option, and confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.typesafe.ai/primitives/noul" rel="noopener noreferrer"&gt;Noul&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Judge a yes/no question, such as whether reproduction details are missing&lt;/td&gt;
&lt;td&gt;A number from 0 to 1 representing the probability of yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.typesafe.ai/primitives/score" rel="noopener noreferrer"&gt;Score&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rate something against ordered descriptions, such as relevance levels&lt;/td&gt;
&lt;td&gt;A score along those levels, their probabilities, and confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Several questions can share one request, but each is evaluated independently against the state. A question cannot depend on another question's answer in that same call. Combine the answers in your code. &lt;a href="https://docs.typesafe.ai/introduction" rel="noopener noreferrer"&gt;How TypeSafe evaluates questions&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where would you use it?
&lt;/h2&gt;

&lt;p&gt;Start with a decision you can inspect quickly. These are possible applications, not results we have measured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Issue or support intake:&lt;/strong&gt; suggest a known category, then let a person confirm the destination and missing information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context selection:&lt;/strong&gt; rate retrieved passages for relevance before passing them to a coding or answering agent. Check that useful evidence is not being discarded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow selection:&lt;/strong&gt; suggest whether a request belongs in a bug-fix, documentation or research process. Keep the permission to start work in your application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These fit the classification, relevance and routing patterns in TypeSafe's &lt;a href="https://docs.typesafe.ai/concepts/use-case-map" rel="noopener noreferrer"&gt;use-case examples&lt;/a&gt;. If the job is to draft a reply or implement a feature, a generative coding or writing agent still has work to do. Jev's contribution is the bounded judgment inside that larger process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a local project in AgentGrid
&lt;/h2&gt;

&lt;p&gt;In this walkthrough, &lt;strong&gt;a regular coding agent reviews the client, a terminal runs it, and the client can call Jev&lt;/strong&gt;. You do not select Jev as a native AgentGrid harness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentgrid.sh/stories/what-is-jev/jev-starter.zip" rel="noopener noreferrer"&gt;Download the starter project&lt;/a&gt; and extract it. In AgentGrid, set your project's folder to the extracted &lt;code&gt;jev-starter&lt;/code&gt; directory. Open your configured coding agent and a terminal in that project. Keep the &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;TypeSafe API reference&lt;/a&gt; nearby while you inspect the request. AgentGrid's &lt;a href="https://agentgrid.sh/guides/claude-code-and-codex?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-jev" rel="noopener noreferrer"&gt;Claude Code and Codex guide&lt;/a&gt; covers coding-agent setup if you need it.&lt;/p&gt;

&lt;p&gt;The example needs Node.js 20 or newer and no package installation. We ran its local checks on Node 24.11.0 on Windows; Node 20 and a POSIX shell were not separately tested. TypeSafe also provides an &lt;a href="https://docs.typesafe.ai/sdk/javascript" rel="noopener noreferrer"&gt;official JavaScript SDK&lt;/a&gt;; this small example uses Node's built-in &lt;code&gt;fetch&lt;/code&gt; so you can inspect the HTTP request directly.&lt;/p&gt;

&lt;p&gt;You can use an ordinary terminal too. AgentGrid is useful here because the criteria, coding-agent review and test output stay together while you change the integration.&lt;/p&gt;

&lt;p&gt;Give the coding agent this task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this Jev issue-triage starter. Read any project instructions first.
Compare triage.mjs and client.mjs with https://docs.typesafe.ai/api.
Explain the label criteria and how reviewDecision handles uncertainty.
Run node --test __tests__/triage.test.mjs and report the actual result.
Keep API execution offline: do not read credentials, install packages,
call the API or change GitHub issues. Suggest changes before editing files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt is a starting point for your review. The test results below come from local command-line checks, not a live Jev call.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxa5qq6j1o6conzw8x0mo.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxa5qq6j1o6conzw8x0mo.webp" alt="AgentGrid terminal showing the resumed Codex review of the Jev starter, its review policy and offline-only limits." width="404" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfogdpajweebg10941tp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfogdpajweebg10941tp.webp" alt="AgentGrid terminal showing Node 24.11.0 and all 28 local starter tests passing." width="404" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Review the client with a coding agent and run its checks in a project terminal. The Node script can call Jev through the TypeSafe API.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the decision before you run it
&lt;/h2&gt;

&lt;p&gt;The starter has three main files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;triage.mjs&lt;/code&gt; defines the questions, validates the response and chooses a review queue.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client.mjs&lt;/code&gt; makes the HTTP request when live mode is selected.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cli.mjs&lt;/code&gt; lets you preview the request, use a fixture or call the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The synthetic issue is in &lt;code&gt;fixtures/issue.json&lt;/code&gt;. It describes a failed CSV export but leaves the reproduction steps and environment empty. The category question distinguishes four intentions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;What this example means by it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A report that existing behavior differs from an explicit expectation; the defect is not yet verified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A request for a new capability or intentional enhancement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;question&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A request for help with existing functionality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;needs-context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ambiguous, conflicting or insufficient evidence to identify one intention&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A separate Noul question asks whether a reported defect lacks necessary reproduction information. Code uses that answer only on the bug branch. Missing steps should not turn every clear defect report into an unknown category.&lt;/p&gt;

&lt;p&gt;Put the actual meaning in the question's instructions and criteria. The API's question IDs, such as &lt;code&gt;missing_reproduction&lt;/code&gt;, identify answers in the response; they are not sent to the underlying model as instructions. &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;API request format&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvskhxei977xlsh9dxu9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvskhxei977xlsh9dxu9.webp" alt="AgentGrid terminal displaying the starter's bug, feature, question and needs-context criteria, followed by its missing-reproduction criteria." width="404" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyltgyklgehh3ooidhxog.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyltgyklgehh3ooidhxog.webp" alt="AgentGrid terminal displaying the starter's reviewDecision function and example thresholds, with requiresHumanReview set to true." width="404" height="790"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The request asks two bounded questions. Ordinary code chooses a review queue; every suggestion still requires human review.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the offline checks first
&lt;/h2&gt;

&lt;p&gt;From the extracted project folder, these commands are the same in PowerShell and a POSIX shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;
node &lt;span class="nt"&gt;--test&lt;/span&gt; __tests__/triage.test.mjs
node cli.mjs &lt;span class="nt"&gt;--request&lt;/span&gt;
node cli.mjs &lt;span class="nt"&gt;--fixture&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 28 local tests cover the review rules, malformed responses and simulated HTTP failures. All passed in our Windows run. They do not measure Jev's accuracy or establish API access.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--request&lt;/code&gt; prints the planned request without sending it. &lt;code&gt;--fixture&lt;/code&gt; uses hand-written response values to exercise the review logic. Its output explicitly says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYNTHETIC RESPONSE FIXTURE — NOT A JEV RESULT; no network call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For that fixture, the proposed category is &lt;code&gt;bug&lt;/code&gt; and the review queue is &lt;code&gt;request-context&lt;/code&gt;. The code reaches that branch because the fixture's category confidence is 0.85 and its missing-reproduction value is 0.95. Those numbers were chosen for the example; Jev did not produce them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fidk3zohvglddoic59mst.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fidk3zohvglddoic59mst.webp" alt="AgentGrid terminal showing synthetic fixture output with the request-context review queue." width="404" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Local fixture output tests the review policy; it is not a Jev result.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here is the policy the starter applies, in order:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Condition&lt;/th&gt;
&lt;th&gt;Suggested queue&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Category confidence below 0.8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;manual-triage&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otherwise, category is &lt;code&gt;needs-context&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;request-context&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otherwise, category is &lt;code&gt;bug&lt;/code&gt; and missing-reproduction is at least 0.8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;request-context&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otherwise, category is &lt;code&gt;bug&lt;/code&gt; and missing-reproduction is above 0.2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;manual-triage&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otherwise&lt;/td&gt;
&lt;td&gt;&lt;code&gt;review-suggestion&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every branch keeps &lt;code&gt;requiresHumanReview: true&lt;/code&gt;. The script never labels, closes or comments on a GitHub issue.&lt;/p&gt;

&lt;p&gt;The thresholds are illustrative, not tuned recommendations. Choice confidence summarizes its probability distribution; it is not interchangeable with the winning option's probability. Noul has no separate confidence field. Evaluate the decisions on your own labeled examples before treating a threshold as useful. &lt;a href="https://docs.typesafe.ai/confidence" rel="noopener noreferrer"&gt;TypeSafe's confidence documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make a live call when you have access
&lt;/h2&gt;

&lt;p&gt;TypeSafe's launch announcement describes staged early access. Check your access in the &lt;a href="https://console.typesafe.ai/" rel="noopener noreferrer"&gt;TypeSafe console&lt;/a&gt; rather than assuming installing the client grants it. &lt;a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" rel="noopener noreferrer"&gt;Early-access announcement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The starter pins &lt;code&gt;jev-1.13.0&lt;/code&gt;, the current version listed when we checked. TypeSafe lists input pricing of &lt;strong&gt;$0.042 per million tokens&lt;/strong&gt;, with output tokens free. Check the &lt;a href="https://docs.typesafe.ai/models" rel="noopener noreferrer"&gt;current model and pricing page&lt;/a&gt; before running a batch. This walkthrough has no measured API cost or latency.&lt;/p&gt;

&lt;p&gt;Set &lt;code&gt;TYPESAFE_API_KEY&lt;/code&gt; privately in the terminal that will run the script, following the &lt;a href="https://docs.typesafe.ai/sdk/javascript" rel="noopener noreferrer"&gt;TypeSafe setup instructions&lt;/a&gt;. Keep the key out of the agent conversation, repository and screenshots. Once it is available in that terminal, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node cli.mjs &lt;span class="nt"&gt;--live&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sends the synthetic issue and its two questions to &lt;code&gt;https://api.typesafe.ai/v1/systemone&lt;/code&gt;. The script prints the returned model, answers and usage alongside its review suggestion. Read the probabilities as well as the chosen category; a plausible label alone tells you little about the alternatives. &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;HTTP API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If the key is missing, the script stops before sending. Authentication, request or response errors also stop the run. It deliberately does not retry automatically: after a timeout, it cannot tell whether the server processed the request. Check the failure before trying again. We have not performed this live step, so there is no live result to reproduce yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide whether it helps on your issues
&lt;/h2&gt;

&lt;p&gt;Try a clear feature request, an incomplete defect report and an ambiguous report with competing intentions. Write down your expected category and review action before making each call. Inspect disagreements, including confident wrong answers, and keep the input and model version with the result.&lt;/p&gt;

&lt;p&gt;Change a criterion when it fails to express what you mean. Change the application policy when it allows a suggestion to go further than it should. Those are different problems. Keep exact arithmetic and permission checks in code; TypeSafe documents limitations in numerical tasks and adversarial input. &lt;a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13" rel="noopener noreferrer"&gt;Known limitations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this first prototype, a useful result is straightforward: you can explain the suggestion, see why it reached a particular review queue, and correct the criteria without losing track of what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build and review it in AgentGrid
&lt;/h2&gt;

&lt;p&gt;Keep the issue fixture, question criteria, coding agent and terminal together while you work through those disagreements. When you are ready to change the client, use AgentGrid's &lt;a href="https://agentgrid.sh/workflows/build-and-review?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-jev" rel="noopener noreferrer"&gt;Build with Claude. Review with Codex. workflow&lt;/a&gt; to have a separate reviewer check the implementation and tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agentgrid.sh/download?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-jev" rel="noopener noreferrer"&gt;Download AgentGrid&lt;/a&gt; and open the starter project. Begin with the offline review, then make a live call when you have TypeSafe access and a decision worth testing.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://agentgrid.sh/stories/what-is-jev?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=what-is-jev" rel="noopener noreferrer"&gt;AgentGrid&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
