Skip to content

Add the lean-jev plugin - #18

Merged
mishioo merged 1 commit into
mainfrom
add-lean-jev
Sep 23, 2026
Merged

mishioo merged 1 commit into
mainfrom
add-lean-jev

Conversation

@mishioo

@mishioo mishioo commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Brings lean-jev over from the internal marketplace, per the #ai-workplace thread where the blocker for going public (a third-party MCP binary) was removed and you said to go ahead.

What it is

Jev is TypeSafe's System One model: typed questions in, numbers out. A probability for a yes/no, a position on a rubric you wrote, a pick from a fixed set with the distribution behind it. No prose, ~$0.0004 a call, so an agent can judge every item in a list rather than three and a generalisation.

The plugin is the framing discipline around that, because Jev reads a question literally and explains nothing, so a question bundling severity with confidence with "does the author already know" comes back as a confident number about none of the three. General guidelines handle a one-off question; a recurring one earns a recipe, a written decomposition with the criteria in full and an honest note on what it does not answer. One recipe ships: judging whether a unit test is worth its lines.

Where it does not work is in the README as prominently as where it does. I ranked eleven candidate uses with Jev itself before writing the skill, including two I expected to fail. Test-quality and house-pattern conformance came out around 0.86 on single-hop; "which architecture approach should we use" scored 0.19 and "which SDK should we adopt" 0.29 at confidence 0.98.

Shape, and where it differs from the Flutter plugins here

  • scripts/jev.py, a stdlib-only client for the one endpoint the API exposes. This is the first script in this repo, so the precedent is worth a look rather than a nod: it posts to https://api.typesafe.ai/v1/systemone, reads the key itself, validates criteria shapes before spending a call, and retries throttling.
  • tests/test_jev.py, 21 stdlib tests over key resolution, request validation, state handling, and the assertion that the key travels in the header rather than the payload. No test harness exists here, so nothing runs them in CI. Say the word and I will drop them and keep them internal.
  • No plugin.json fields beyond what flutter-marionette carries, no rules, no owners file.

Two decisions inside the script, in case they are worth arguing with:

  • The key lives in a 600 file rather than the environment, because an exported key is inherited by every command the agent spawns, including build scripts from whatever repository happens to be open. An environment variable still wins when set, for a one-off.
  • urllib, not curl. A Bearer header passed to curl is an argv element that any ps on the machine can read while the request is in flight.

What reviewers should weigh

Whatever goes in state reaches TypeSafe: the diff, the test, the ticket. Their docs say customer requests are not used for training, and zero-data-retention is enterprise-only. The README says so under its own heading rather than inside the setup steps, because it is the part someone has to decide about rather than follow.

Checks

claude plugin validate . --strict and the per-plugin validation both pass. The script and its tests were exercised from this tree: a trivial noul came back 0.96 from jev-1.13.0, and the 21 tests pass. The README carries no em-dashes, matching the recent cleanup.

Adds __pycache__/ to .gitignore, since this is the first Python in the repo.

🤖 Generated with Claude Code

Hands a judgment call to Jev, TypeSafe's System One model, and frames it the way
Jev needs it framed: one factor per question, a type chosen deliberately, state
filtered to what the question needs, and every number reported next to the
question that produced it. General guidelines cover a one-off question; a
recurring one earns a written decomposition, and the first ships with the
plugin.

scripts/jev.py is a stdlib-only client for the single endpoint the API exposes.
It reads the key from ~/.config/typesafe/env rather than the environment,
because an exported key is inherited by every command the agent spawns, and it
uses urllib rather than curl so the Bearer header never becomes an argv element.

Carried over from LeanCode's internal marketplace at 0.2.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mishioo
mishioo requested a review from wzslr321 September 23, 2026 10:13

@wzslr321 wzslr321 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

@mishioo
mishioo merged commit 898edb8 into main Sep 23, 2026
4 checks passed
@wzslr321
wzslr321 deleted the add-lean-jev branch September 23, 2026 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants