jev-enhanced-plugin
An Agent Plugin for OpenAI Codex, Claude Code, and Oh My Pi with six judgment-bearing skills. Each one is a skill already in use plus a single addition: a typed judgment from TypeSafe Jev (System One) at the points where the skill previously relied on the agent's own impression. A seventh skill, s1-migrate-skill, is the procedure for bringing further skills in.
Jev output here is advisory. It never approves a change, never removes a finding, and never decides anything on the user's behalf. Anything a program can check exactly (string matches, dependency graphs, diff boundaries) is checked in code and never sent to a model.
Skills
| Skill | Judgment pack | What the pack answers |
|---|---|---|
s1-code-review | review-findings | Per finding: does the quoted evidence support, contradict, or say nothing about the claim; does the finding's own axis (standards or spec) document its basis; is it covered by a supplied test; and which supplied code excerpt is the best citation (noMatch allowed). Diff membership and verbatim quoting are computed in code and never sent. |
s1-code-simplifier | simplify-gate | Risk that a rewrite changes observable behavior, drops a handled case, changes the contract surface, or changes failure paths. |
s1-grilling | grilling-frontier | Whether a question is already answered by context and whether it needs a user decision. Prerequisite eligibility is computed from the dependency graph in code, not judged. |
s1-humanizer | humanizer | Per passage: states anything specific, restates another passage, claims more than the context supports, would still be reworded by an editor in the target language. |
s1-humanizer-zh-tw | humanizer | Same pack, zh-TW locale. |
s1-i-have-adhd-zh-tw | reply-check | Whether a draft's opening paragraph answers, whether it delegates work back to the user, whether it covers each request item, and whether it adds unrequested scope. |
Every skill keeps its original procedure. The pack runs alongside it and adds probabilities the human reader can use or ignore.
How the packs prompt Jev
The packs follow TypeSafe's patterns, cookbooks, and jev-1.13 jaggedness notes:
- Each pack sends a model state built by its own
buildState, not the job file. Code-only fields (diffs, watch lists, graph ids, paths, line numbers) never leave the machine. - Reference material comes first in the state and the material under judgment after it.
- Every question is one narrow judgment that names the state field it reads. Anything code can compute is computed first.
- A question whose field is empty is not asked, and is reported as
not askedrather than as a reading. - All questions for one job go out in one request.
Several questions were reworded after live checks on synthetic labeled cases, where the old wording missed and the new one did not. These were small spot checks, not a benchmark, and they support no claim about Jev's accuracy on your data.
Adding a skill
s1-migrate-skill is the procedure for bringing another skill into this plugin: license audit, deciding which steps become judgments and which stay code, the pack, the adapted SKILL.md, tests, and documentation. It has no pack of its own. Its references/pack-template.mjs is the starting point for a new pack.
Install
Each host reads the manifest it knows: Codex loads the portable plugin.json at the repository root, while Claude Code and Oh My Pi read their own marketplace catalogs under .claude-plugin/ and .omp-plugin/. All three discover the same seven skills under skills/.
OpenAI Codex
Add this GitHub repository as a marketplace, then install its plugin:
codex plugin marketplace add JiaWeiXie/jev-enhanced-plugin
codex plugin add jev-enhanced-plugin@jev-enhanced-plugin
Restart an existing Codex session after installation so the s1- skills become available.
Claude Code
Add this GitHub repository as a marketplace, then install its plugin:
claude plugin marketplace add JiaWeiXie/jev-enhanced-plugin
claude plugin install jev-enhanced-plugin@jev-enhanced-plugin
The first command registers the marketplace. The second installs this plugin from that marketplace. Restart Claude Code after installation; its seven skills are then available by their s1- names.
To update later, run claude plugin update jev-enhanced-plugin@jev-enhanced-plugin and restart Claude Code. The plugin package requires Node 20 or newer.
For development only, Claude Code can load the repository for one session with claude --plugin-dir /absolute/path/to/jev-enhanced-plugin.
Oh My Pi
Add this repository as a marketplace, verify its catalog entry, then install the plugin globally:
omp plugin marketplace add JiaWeiXie/jev-enhanced-plugin
omp plugin discover jev-enhanced-plugin
omp plugin install jev-enhanced-plugin@jev-enhanced-plugin --scope user
For development, omp plugin link /absolute/path/to/jev-enhanced-plugin links the current checkout globally so edits take effect immediately.
The seven skills are discovered under their s1- names. Because the repository root includes the Agent Plugins 1.0 plugin.json, Oh My Pi routes skills/ through the agent-plugins discovery provider: keep agent-plugins enabled in ~/.omp/agent/config.yml, or add ~/.omp/plugins/node_modules/jev-enhanced-plugin/skills to skills.customDirectories if agent-plugins is disabled. To prevent upstream copies from competing for triggers, add skill:code-review, skill:grilling, skill:humanizer, skill:humanizer-zh-tw, and skill:i-have-adhd-zh-tw to disabledExtensions. Restart an existing Oh My Pi session after changing these settings.
Avoiding duplicate skills
Five of these skills adapt upstream skills you may already have installed: code-review, grilling, humanizer, humanizer-zh-tw, and i-have-adhd-zh-tw. When both copies are listed, the host picks between two near-identical descriptions, and the s1- copy often loses. Turn the upstream copy off in the host you use:
- Claude Code: add
"skillOverrides": { "code-review": "off", "grilling": "off", "humanizer": "off", "humanizer-zh-tw": "off", "i-have-adhd-zh-tw": "off" }to~/.claude/settings.json, or cycle them in the/skillsmenu. - OpenAI Codex: add one
[[skills.config]]table per upstream skill to~/.codex/config.toml, for examplename = "humanizer"andenabled = false. - Oh My Pi: see
disabledExtensionsabove.
Instructions that name a skill directly, such as a CLAUDE.md or AGENTS.md line saying "use the humanizer-zh-tw skill for every response", override descriptions. Point them at the s1- names, or the upstream copy keeps winning.
Requirements
- Node 20 or newer (
package.jsonengines); this repo pins 24.18.0 inmise.toml. TYPESAFE_API_KEYin the environment for live judgments. Without it, the skills run their original procedure and state plainly that no judgment was available.
mise install
mise run install
mise run test
CI runs syntax checks and offline tests on Node 20 and 24, verifies the vendored SDK against its audit.json hash, and checks the exact buildState field projection for every registered pack. These checks use no API key and make no TypeSafe calls. The boundary tests cover model state, not redaction inside approved text fields or the code excerpts included in review questions.
Running a pack directly
node src/cli.mjs <pack> --state state.json --json
Flags: --state <file|-> (- reads the state from stdin), --dry-run (build questions, contact nothing), --mock <file> (replay recorded answers), --json, --help, --list. The pack's own validateState runs before any request is made; a malformed state is reported on stderr and exits 2. npm install -g . or npx exposes the same CLI as jev-pack.
Exit codes: 0 success, 2 input error, 3 no judgment available. Exit 3 also sets "mode": "unavailable" in the JSON body, so a skill can distinguish a missing service from a negative answer.
Each pack's --state shape is documented at the top of its file in packs/. That shape is the job file; the state the model actually receives is what the pack's buildState derives from it, and --dry-run prints that under request.state. State text is judged as given: a path or a shell command placed in a code field is provenance, and the packs judge only the text supplied.
Failure behavior
A missing key, a network failure, an HTTP error, or a malformed answer all resolve to the same thing: unknown, reported as unknown. unknown means the absence of a signal. The packs never invent a probability, and service failures do not leak response contents into the report.
Evaluation
evals/evals.json holds three synthetic cases comparing each adapted skill against its original: two-axis review retention, zh-TW rewriting with evidence preserved, and grilling with unsettled prerequisites. Results live outside this repository in the workspace directory.
These are single runs on synthetic inputs. They measure instruction-following only, and they support no claim about Jev accuracy, calibration, or speed.
The live wording checks described under How the packs prompt Jev are separate: a few synthetic labeled cases per question, sent to jev-latest to compare candidate wordings and state orders. They were used to choose between wordings, they are not kept in this repository, and the same caveat applies.
License
This plugin is distributed under MIT AND Apache-2.0 AND CC-BY-SA-4.0. New code in src/, packs/, test/, and skills/s1-migrate-skill/ is MIT (LICENSE). Adapted material keeps the license it arrived with, listed below. Full texts are in licenses/; per-file provenance, source hashes, and the audit of every candidate considered (included, redirected, and excluded) are in NOTICE and audit.json.
Adapted skills
| Packaged skill | Upstream | Provenance / credits | License |
|---|---|---|---|
s1-code-review | mattpocock/skills: skills/engineering/code-review | Matt Pocock | MIT |
s1-grilling | mattpocock/skills: skills/productivity/grilling | Matt Pocock | MIT |
s1-humanizer | blader/humanizer | Siqi Chen; Wikipedia contributors and WikiProject AI Cleanup for the catalog | MIT; CC BY-SA 4.0 for the Wikipedia-derived catalog |
s1-humanizer-zh-tw | kevintsai1202/Humanizer-zh-TW | Repository maintainer: kevintsai1202; Traditional Chinese adaptation of op7418/Humanizer-zh; source material: blader/humanizer; practical sections reference hardikpandya/stop-slop; MIT copyright holder: 歸藏; catalog: Wikipedia contributors and WikiProject AI Cleanup | MIT; CC BY-SA 4.0 for the Wikipedia-derived catalog |
s1-i-have-adhd-zh-tw | panda850819/i-have-adhd-zh-tw | Repository maintainer: panda850819; non-official Traditional Chinese derivative of ayghri/i-have-adhd, whose original English version was created by Ayoub Ghriss; MIT copyright retained from Ayoub Ghriss | MIT |
s1-code-simplifier | claude-plugins-official/code-simplifier 1.0.0, agents/code-simplifier.md | Anthropic | Apache-2.0 |
Every packaged skill in this table is modified from its upstream. The s1-humanizer and s1-humanizer-zh-tw catalogs include Wikipedia-derived CC BY-SA 4.0 material; their attribution and required redistribution notice are in NOTICE. The Apache-2.0 material carries its required statement of changes in NOTICE, section 4(b).
Design reference only
devagrawal09/jev-review (MIT, Dev Agrawal) informed the evidence shape used by s1-code-review: bounded candidate excerpts carrying file and line, an explicit noMatch answer, and covering tests supplied as context. No code or prose was copied, and its threshold filtering, list truncation, cross-axis severity ranking, and dashboard were deliberately not adopted.
grill-me from mattpocock/skills is a one-line trampoline into grilling and was not copied.
Share-alike material
The pattern catalogs in both humanizer skills derive from Wikipedia's "Signs of AI writing" by Wikipedia contributors, including WikiProject AI Cleanup. That material is CC BY-SA 4.0 and stays CC BY-SA 4.0: the plugin-level MIT grant does not override share-alike terms. If you redistribute an adapted catalog, keep the attribution and the license. No endorsement by Wikipedia or its contributors is implied.
Runtime dependency
@typesafe-ai/sdk 0.6.0 is vendored at src/vendor/typesafe-sdk.mjs so Git marketplace installations work without an install hook. It remains MIT-licensed by TypeSafe; its license is licenses/MIT-typesafe-ai-sdk.txt and its exact source hash is recorded in audit.json. Using it requires a TypeSafe account and sends a filtered version of the state you pass to a pack to the TypeSafe API. Packs send only what their buildState keeps from --state; run with --dry-run to see exactly that payload before a live call.