{"_id":"ohmyjev","_rev":"23-9808784f84aac3981aa4c8a34379b003","name":"ohmyjev","dist-tags":{"latest":"0.14.0"},"versions":{"0.0.0-stage":{"name":"ohmyjev","version":"0.0.0-stage","_id":"ohmyjev@0.0.0-stage","stub":true,"maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"dist":{"shasum":"54f3f68ef5baf14634558aa73e119806083f5927","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-+4PnhMh6GZcZ1ZSNL0+MTRDAhXz99d9n+1wp0BeYXe1DZbcLNmU8ciGSB+IcG9nJWubflfhNMym+8rHdUK08Ig==","signatures":[{"sig":"MEYCIQCPIQZmRdYDR/4p2zRQQ7tOerijkmZM6vUu3kkRQO1NjQIhAIUrv9RpKOUhTr88t1T6w4ew4VebXhrX45KQqg0tP7Uj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329},"_npmUser":{"name":"novacon","email":"lord@novacon.io"},"deprecated":"placeholder; install ohmyjev@latest","description":"Temporary package placeholder for staged publishing","directories":{}},"0.2.0":{"name":"ohmyjev","version":"0.2.0","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.2.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"e1bcf21d753bb88d9b15a5759102853704f87120","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.2.0.tgz","fileCount":8,"integrity":"sha512-GYkVzJWXqw3xirj+mr6sdgQp4Kjcs4o6NzPo8od9FIHX/2EK+GWr5Ipc9HPtGpxlMgVENirYvQlVt8YHvqwHEQ==","signatures":[{"sig":"MEYCIQCgPqUg/Y3VXMsOjDrHbxSupTl+b8dBCJ6saS3LwhuP8AIhAMLRUpaSslPxoitygGNnxr76106gLIp1p5+sXQrxcsP/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCr+gZ+8/VUBT2kwcgnA8rfGDWh1cNeX8VUlQgZuxtg1wIhANhOSBYaqHmPKRYnV96NtIa7ar6q2DJ/SZWzfebNwk9A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112136},"type":"module","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"novacon","email":"lord@novacon.io"},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.19.1","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"26.9.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.2.0_1791518325595_0.7258204556557384","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"ohmyjev","version":"0.3.0","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.3.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"7c085029f7b95a976c7b2896b8f625c5dd52cb4b","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.3.0.tgz","fileCount":8,"integrity":"sha512-h3eTavDsdScN8d3ROKVKpqeOAu9q3QXDy76o4KfE/eZsia0PPEXOjJ9749Q0sW3q2pQC371MgMsNCFICXot+KA==","signatures":[{"sig":"MEYCIQClajc/fzyi08DkvpEmE4Rx2vKUsws4H5lqNZx0PW4uTAIhAO1i4y81REwe7f37DeFSbaJh0TALVVaWlbMGu2BWB3Wz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA0n+FoAFWlu0/wbtXCE+tqfzCk4HT7IE+h0jN+5IuX2AiAFWQPhiyxyJoZi3UZBQM1YgA1b6NyDXs7I2VbxTOo7uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":119775},"type":"module","gitHead":"b186c61bf88afe0a793b0d67bbd1115daeb9816d","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.3.0_1791613541643_0.7995551251745421","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"ohmyjev","version":"0.3.1","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.3.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"58e7f57332afa018c5e6d8a7be0a2915d6515076","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.3.1.tgz","fileCount":8,"integrity":"sha512-zye7H1GNAPx4XAd496MDrYWXIM93SHCRDlcQAwf1W55im41qq6UH4zpXALP+ZdREZ094kDKOR8MTsAx2TmjV8A==","signatures":[{"sig":"MEQCIBAZYhl/y0Qtj6LjR5ievPABCoENKx3gKaqe8EEh1FtUAiA5Cj7vZ0f3p6v1Z+VSrgDayRT9FCxcZdOR7rT21PGmPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTHF+DHx8P9waRYqQIEKo0acc2pPx1ZFEfzxbvaFZlOwIhAJa8NAaFcJd3RhDfaCGKmEX+DfpJymaCKpSHAP4zxdiX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120038},"type":"module","gitHead":"c56f08a5e3f78ce2e1942a978467d17108b7b352","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.3.1_1791651269247_0.3218995204739259","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"ohmyjev","version":"0.3.2","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.3.2","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"6f18626d18f2aafbd38941d8bb3a68b2964c1427","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.3.2.tgz","fileCount":9,"integrity":"sha512-++DGMtyYDZxuuLCdShr8UAKNOSlyakZ0YhN7NJBAS23FAXXvVzBKlH6/nQJcCBHqsIL0sAbvxZqrpe+CH8VOYA==","signatures":[{"sig":"MEUCIBQ+4sJitdGswQTEAJf+njCNerP5YGyIXxcEKBocRXg7AiEAyfvmUIMAuT3CVAkk6BfXrrGsaEPIKoPyJX+a9FToRmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDhrz8Hjw7d7uqofMLEfw+nDQgBS4Sa4uOMPkRpWcyOWAiABwjpuNi+Esp6zE//yuzXmb3pqLx4Rf0sXSEKTPJgI+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135254},"type":"module","gitHead":"14ea634b07ecb4e4abcf00b30fd7bbd1f8019b9b","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.3.2_1791651513411_0.5939101985575486","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"ohmyjev","version":"0.4.0","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.4.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"fbaef0fd2c41402ee6800d343bdc29f560bf9b05","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.4.0.tgz","fileCount":9,"integrity":"sha512-Adb2310ib4c46EFfp6QrgO5KfiyeCQYuDqwbwrQi37YUvJPybCep6HPxOL8rdBKsnIcOuRpCbazcYeF4A/yEsg==","signatures":[{"sig":"MEUCIDv+Q5hfnQnGCO8XFLkYBYiwd8HvomqRpL2Qs2hdVgLTAiEAnkVHiR/77XDoJOLM8/pa4erbTR1j0uRRmxmMAzQTvbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDLB3+o2bq0OvG492e2dg9H16FujwmTIg/SLgqmn293/AIgDpqVYkOaRg+Hn9VtwgXoAebmBWbzleJvnmG0ApQW2sw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138781},"type":"module","gitHead":"8189dfcae9d1ded7ee9aeba2fae85467d7572c3e","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.4.0_1791654280053_0.1644050495556717","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"ohmyjev","version":"0.5.0","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.5.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"6ea06dc149dc5a3e8a5ce21c456e891a8362a1c1","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.5.0.tgz","fileCount":9,"integrity":"sha512-2hBRlE1mqWUUv8NYqtxEK0HzXeImwSoo6yz9GSyuu6KrmdtjZ4+Yo960u3jNwNy2zW5+F+llQB+b3kxgPQCasQ==","signatures":[{"sig":"MEUCIQCG05Y34CVaK75p4EEwD/Jx02TNdbFVcfW9sVYoyVygSAIgckw2jRVxbIlncCx14oYUNMBRjrdnthJE1U1LffRlFLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC0saHFAJAhlFWpzQS70AXU1qFeChYlbOXLB9+zQQR9ewIgEgcMEOesclcSSP7P37TDKoWG9ZorB6oJ/WF/6PkSzTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144999},"type":"module","gitHead":"8bc7c9b9a1e78e4233a86b745f432d7328bc8059","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.5.0_1791655070743_0.47708970714846854","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"ohmyjev","version":"0.5.1","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.5.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"64cf60c8f9ed0d8a58680d75eb052f4c69236854","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.5.1.tgz","fileCount":9,"integrity":"sha512-MArfT61TvAHwroYvJMKUz0JPaprSRrOd0NPFH+JeTNR4/z0ivDDC7qfLEhroTTjQP57UiobQO9Da6kXFyKb8uQ==","signatures":[{"sig":"MEYCIQCM/okTra/FhowCCub2HvcElSqS5Dqp/UMW0Tyav6Ec8wIhAKg1TIjc9slkQSRaQ+epEdaJKLREFqYWjH4J/R/aze/c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEKE5WmlunMH73u6ErNQx/jEjbN2ilF2jjchWbcdEi2rAiEAyQuilKrwmouQulJ21uWICDkOIEqSY4esg3/8ypq+o/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145426},"type":"module","gitHead":"ab5bb017f498c148400613adf0076c8ecdf05e20","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.5.1_1791656369561_0.3720847007845227","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"ohmyjev","version":"0.5.2","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.5.2","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"a60b8e4c8ca537901ed253a72d4fbac4207aa024","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.5.2.tgz","fileCount":9,"integrity":"sha512-l8jYM621r+GFXyZ3wLVs9Xjz7yBR/g+Dvq+Vrywurys6UQzPCtNP6jx+w40j4OUL96Jq6oGQWy1L/4dGQAbeDA==","signatures":[{"sig":"MEYCIQClqRTpzggKmRs0xwQmNf/CPcgcMg2pXvXREREvM5teGwIhAPB2DL1kp0smxKOJ3yLP9H3RabiBSRNp06TsTKU9X1PZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCE+zWeihrg3Rn4KcBjmzFaboK3QG0NQ5b4Q8bgPKiOvwIhAKH8RF0v55lGnbYa+E236i+wHdqlkhSwm/TNWqO9s0oA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145870},"type":"module","gitHead":"984de4ef6d5ce0d1b183d5666ddd81f94076bdb2","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.5.2_1791656577723_0.04055522792654953","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"ohmyjev","version":"0.6.0","keywords":["pi-package","omp","pi","claude-code","jev","guardrails"],"license":"MIT","_id":"ohmyjev@0.6.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"05f705d2b12bfc6d4560e961b567494e9ad44645","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.6.0.tgz","fileCount":9,"integrity":"sha512-L3gWmZy3Mqcfcgvf1Q6lHSbeZo8/o36Rl0+AOksF8va+6KOLKTJ5QOoPj09LBnWvyKZcVYDlRhEMIlWlrPLssw==","signatures":[{"sig":"MEQCIGpIDecGHsWErTG/+ckX15mMbvOqhjgRkELP3Yy//J2MAiBlB2aqDD061a6RpRfadAow5m4OUZeKM/sSzS5hAyD0dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBFYFJ41nJbXFrUE6NzcV9B9u3JzoHEsgfQh19+jSjoJAiEAjxAPpm/tEyVOrYM7/rGH4w9wftUhVhU3swMJoJW80ec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148532},"type":"module","gitHead":"a2a6e906961d9908df3d85423eb252b5bfb76270","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.6.0_1791657911265_0.7763796720314349","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"ohmyjev","version":"0.6.1","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.6.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"6bc132f281a95f4b46102ff23e305d533307ca15","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.6.1.tgz","fileCount":10,"integrity":"sha512-kBcTBy7PmpFWKNjb8J/3UrhiCNBcH02giKSfrEkzcqbzfIH7V9TrfgS7tzSZ9ahriYEqeJzRbm668FuaxXo0nA==","signatures":[{"sig":"MEUCIHwL1gurkKxtCGI2GbG9lkL0HnVfWQi5FjfAHxDp1X2yAiEAwTY+E46o3YR9Aad8cLdijYNL68fS9JfVd/pgUgwFzhQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHbxsH6eQ6zSa4ePmJ94xegVXZPAUSGW4Lx5aOrhL/FbAiEA/Tz2R4UZgWTlVf5mGDqNp5giZRguiVvUmBRKd5BSdd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149773},"type":"module","gitHead":"7086ba3a160bb1f6034cd2fd08de485cf5c92b39","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.6.1_1791659428869_0.90841881065267","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"ohmyjev","version":"0.7.1","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.7.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"24c9e50e505de042e9a769175a060f1fec171ef6","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.7.1.tgz","fileCount":11,"integrity":"sha512-KCJoq7nguEHqig3fmPe3mOT1WgT5FU5ckUCe0ysNf8st2vtpXn83gLGei8vbGDImeGTS2VwGS1vbQNBWWcDUGA==","signatures":[{"sig":"MEUCIADKG16OZZaVD6bRsKIIsNz+MAghAAVSf8ti/2ovFOxrAiEAmRT7pKOy3f9dHltluThi9uZpNHI5nl7JN2NI/IF5100=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFa+Mz4wC2XsbrzZYv1XkMDeQ8XwZYk93xII9NGm4CtuAiEAg6t2hdxs2NZk2yy2TM4lUHf7cTIwxXR4oWGifQEeeMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":159230},"type":"module","gitHead":"6bb7934849c7e4a17f123d306b8c0e8f3650f970","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.7.1_1791671719101_0.10367288567506217","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"ohmyjev","version":"0.8.0","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.8.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"a7ee831732c8e1ee55736fa0e0226dcb761ac543","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.8.0.tgz","fileCount":11,"integrity":"sha512-awt1hlqRWCVTzOStPCrdm7WF9V3YiYOdBUwc3QYYNQEyiwjXMxVcPx1I0StRanZaUfdgOYKhbfyR98iV4SiAEg==","signatures":[{"sig":"MEQCID7fCWT0Og8nhmlfrtcng2kLefBJT439zvSFIeK1xQSSAiAEzZcnCw5kvaZZbho8rYElsY4mXhKC6yOOIfhJLTrRhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDslFzPKxLS950egYgLtqtFj6FkPDj/MY4CAOeBUPlvGAIgUovgyc12gwpijHCVUr9VkncP3RrGUI+sG1Js3VnUdJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":173900},"type":"module","gitHead":"82f2ba6952ccaa7eb15ae81799ca484fe513ae07","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.8.0_1791759204014_0.7222823689318822","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"ohmyjev","version":"0.9.0","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.9.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"379c733c9af82ff29838f7f9fe97d7ed2f1e1e3b","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.9.0.tgz","fileCount":11,"integrity":"sha512-WJgJ1sohQBQRluVo6ehPvDrB/Yqkp3BiS0Zmf0b/yD2yEnj8337Pf/n197TJYiBR5u0BHbyDfRR0bbS+tvXU9g==","signatures":[{"sig":"MEUCIFdJZHDCE2r06ActvYP7I5ptw2NefAsoK/s8ugdtVqQKAiEA6ygyqq+sqMsodCNbS32oKEsf2r2lamyu9+phXZDhnFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDTOrfy0B2WNlviISARIALnWIlKsBdZrOj5+YuTE5rfLAiAyiZZAuWHLMxfRrkBopVT656HCinHl3aP7NfqTl2ZHIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":192035},"type":"module","gitHead":"4ae4a4a8f78c9cca23bb5550429fe8592d595bdf","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.9.0_1791760189485_0.03373488312964357","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"ohmyjev","version":"0.9.1","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.9.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"1bdf78af193b11d4ecb7fb1609acd0437023c813","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.9.1.tgz","fileCount":11,"integrity":"sha512-a8wYsxo4oZKhjn1EtlGiV6/pdfISC93KGte1mCxmAygm7xLZxNl/9mqJ8JlCltq1IIA8CH8LItygHhydegOx2w==","signatures":[{"sig":"MEUCIQDmqJul9aMuKsJAMh9XmxlB4dQbV4W7q0z9WOV10cbMVQIgeFVU2G2U+BE9KxIM0WGYwADsl4U5W+/UDa7VZtn8N4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICsG5uOpdyQRDFh0NW76l+Gz37sUz4lDLZ7QwQJ4ua+KAiEAhpY+uYUybozbejJZ4XAppgKM0D9BoBq1Afl0jSxV6s0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191517},"type":"module","gitHead":"9d5794164f8f4d7daa2324ff249e0b3b29713d82","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.9.1_1791763324367_0.8362004908366558","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"ohmyjev","version":"0.9.2","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.9.2","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"694feaecda2640e4a55abfe62153dee992cf78f7","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.9.2.tgz","fileCount":11,"integrity":"sha512-oTZCNdojVME0YHaCq3md4/WqBXj8NqNEkY04PuVB0BkeUvzgPW7FRX06xEZybd9esuC2aAdfLos0hTWGLSYpvw==","signatures":[{"sig":"MEQCIF1wnqdwc2rqmjHdbZ5GYzHhiokn691AGz5x6t2ZQbc+AiBsDNZB25PRsIamqAp+YJGpTaxTVSyHJMXF6M6vYCCB3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGBv2bWsSTYlP6zrKKVOKm61UStUHia/YvfshT/5h5flAiAlhQO0Iyv+7Fa+zXm9j9/FxXPxg1cD8qUjfi1WQFg8Cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191694},"type":"module","gitHead":"9b2d11ad9f88f2ed0478c117dece728ecf3694bb","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.9.2_1791766470971_0.130542291081007","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"ohmyjev","version":"0.10.0","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.10.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"findCode":{"type":"boolean","default":true,"description":"Expose a find_code tool: Jev finds the files that carry out a described behaviour"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"readNarrow":{"type":"boolean","default":false,"description":"Claude Code only: a Read of a 400+ line file comes back as the fifth the request needs"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"6de28ad7eb65bb2773e5eae6bd87345d2ae12188","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.10.0.tgz","fileCount":12,"integrity":"sha512-Kj1njQ+pCcuNUX9VhCZZw7V5fM+0wfrGqQzqrggIWm5zd3fYLWDC3QMeJ6fl76pmJy/pugRZHJ/J/UdKI1eOFQ==","signatures":[{"sig":"MEUCIQDthM34xP6qMf6NlbarixErAd1F5f/RVFoUrGGbNMSQnwIgaUmIHJusbanDVy7uV0aDkcQySorPEo9y25YLbsWT98s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA8SXUhlImT+gQJ487n3qkwdmPX18pZ/BC0UrSYJi5eJAiBpEsXEb19wWu24CsyXFIHWNyClCLSH0DEjra/I3hlvdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":210496},"type":"module","gitHead":"67725f31830d0d02e088025216e0ce8cfeda89b0","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.10.0_1791833373193_0.39962169271033887","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"ohmyjev","version":"0.11.0","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.11.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"findCode":{"type":"boolean","default":true,"description":"Expose a find_code tool: Jev finds the files that carry out a described behaviour"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"proseCheck":{"type":"boolean","default":true,"description":"Check the final reply against the writing rules in CLAUDE.md and AGENTS.md, and ask for one rewrite when it breaks one (Claude Code)"},"readNarrow":{"type":"boolean","default":false,"description":"Claude Code only: a Read of a 400+ line file comes back as the fifth the request needs"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"fastCompact":{"type":"boolean","default":true,"description":"Compact in about a second: Jev keeps the messages that still matter, verbatim, instead of a model writing a summary"},"maskSecrets":{"type":"boolean","default":true,"description":"Replace keys, tokens, credentials in URLs, emails and your home folder with markers in everything sent to Jev"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"subagentCheck":{"type":"boolean","default":true,"description":"Send a vague subagent brief back once, and check a subagent's done against its own tool record"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"7b5c1b64488bc211fb3d6a1f040e1e33325aa28b","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.11.0.tgz","fileCount":14,"integrity":"sha512-nYqQFR7sCT+vWArhMd1ExD58NRdZ45JJK5dN5XYDiLdgm51NRJuqk20blpX36Yf45Ox0KRwtApGV23EDsj/Jqw==","signatures":[{"sig":"MEYCIQD6xopnd2i5m/U0TWAACzgV17Pq9+m33LndU2uigD9JGQIhAP0mw6j8h01TQCMDkYZNtzwTPoYKneKnSQqrYhlyQmfQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyNLQm5mcktFvFaLREFaCjHfboAlSEiUK2b8+CCcQKsgIhAOliIdeUfqgtriGJFgTSU7u9oSSGWig5ndRnnh9qBBBB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":231271},"type":"module","gitHead":"91852d0813340b1a2a10e08a930837263de016c3","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.11.0_1791834304410_0.49030390878039287","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"ohmyjev","version":"0.11.1","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.11.1","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"findCode":{"type":"boolean","default":true,"description":"Expose a find_code tool: Jev finds the files that carry out a described behaviour"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"proseCheck":{"type":"boolean","default":true,"description":"Check the final reply against the writing rules in CLAUDE.md and AGENTS.md, and ask for one rewrite when it breaks one (Claude Code)"},"readNarrow":{"type":"boolean","default":false,"description":"Claude Code only: a Read of a 400+ line file comes back as the fifth the request needs"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"fastCompact":{"type":"boolean","default":true,"description":"Compact in about a second: Jev keeps the messages that still matter, verbatim, instead of a model writing a summary"},"maskSecrets":{"type":"boolean","default":true,"description":"Replace keys, tokens, credentials in URLs, emails and your home folder with markers in everything sent to Jev"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"subagentCheck":{"type":"boolean","default":true,"description":"Send a vague subagent brief back once, and check a subagent's done against its own tool record"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"ae36bacafe925829d67035a94ea456f0c040d706","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.11.1.tgz","fileCount":14,"integrity":"sha512-VuxfKW41A5qoXAQrIUi5/Pz5D4h0WxzZQGayXp5DR1yWO70Pl4nngGierDihMd4fZfyYwwxwH7YuwiYnY89kIQ==","signatures":[{"sig":"MEUCIFaPuxQ2I/P+m50Zaf2IqmWtcdJu0sMtJURcYMeVA8/hAiEA2TILci1pnXD3NzmvgWbufUPoj7o0R0nQG5SttqKHHsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDqMu9mJtH2tUO+5uvPIt7KkjbEOvOmEu+2y5k/bpaOyAIhAIYZRBc8dr62sKBfy71lUr2JgaD8xOragiIQjTZKEPgY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":219352},"type":"module","gitHead":"66a3ff63eff09b29530334cf9f971457f5ceaea7","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.11.1_1791843907694_0.7785273235010057","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"ohmyjev","version":"0.12.0","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.12.0","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/Novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"exfil":{"type":"number","default":0.7,"description":"Deny when Jev rates a call as sending local data out at least this probably (0-1)"},"stuck":{"type":"number","default":0.7,"description":"How sure Jev must be that the failures repeat one approach before the note (0-1)"},"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"TypeSafe API key; empty uses TYPESAFE_API_KEY, then OPENROUTER_API_KEY"},"askJev":{"type":"boolean","default":true,"description":"Expose the ask_jev tool for quick judgments about repo files or text"},"browse":{"type":"boolean","default":false,"description":"Expose a browse tool: jev-ultrafast does a task in your Chrome, Jev picking each step. Needs uv, Chrome remote debugging, and OPENROUTER_API_KEY to type into fields"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"bashGate":{"type":"boolean","default":true,"description":"Deny irreversible or destructive shell and eval calls"},"findCode":{"type":"boolean","default":true,"description":"Expose a find_code tool: Jev finds the files that carry out a described behaviour"},"jevModel":{"type":"string","default":"jev-1.13.0","description":"Model id sent to the TypeSafe endpoint"},"policies":{"type":"string","default":"","description":"Semicolon-separated user policies that every gate weighs"},"skillMin":{"type":"number","default":0.4,"description":"Claude Code only: how sure Jev must be of which skill fits (0-1)"},"trimKeep":{"type":"number","default":0.3,"description":"How likely Jev must rate a part as needed for it to stay (0-1)"},"trimOver":{"type":"number","default":12000,"description":"Characters of shell output before trimming is considered"},"deepModel":{"type":"string","default":"@slow","description":"OMP model selector or role for the deep tier"},"doneCheck":{"type":"boolean","default":true,"description":"Push back once when the agent claims done without verifying"},"exfilGate":{"type":"boolean","default":true,"description":"Deny URL reads and MCP calls that send local data or credentials out"},"fastModel":{"type":"string","default":"@smol","description":"OMP model selector or role for the fast tier"},"injection":{"type":"number","default":0.7,"description":"Flag tool output as prompt injection at this probability (0-1)"},"requested":{"type":"number","default":0.8,"description":"A gate's Jev deny passes when Jev rates your latest message as asking for exactly that call at least this probable (0-1). Policy and path denies always stand"},"skillGate":{"type":"number","default":0.3,"description":"Claude Code only: how strongly Jev must rate a request as needing a skill (0-1)"},"skillPick":{"type":"boolean","default":true,"description":"Claude Code only: leave the skill listing out of every prompt; Jev names the one skill a request needs"},"timeoutMs":{"type":"number","default":1500,"description":"Milliseconds to wait for Jev before failing open"},"writeGate":{"type":"boolean","default":true,"description":"Deny writes outside the repo/allowPaths and writes holding credentials"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Semicolon-separated write paths outside the repo; ~ and TMPDIR expand"},"proseCheck":{"type":"boolean","default":true,"description":"Check the final reply against the writing rules in CLAUDE.md and AGENTS.md, and ask for one rewrite when it breaks one (Claude Code)"},"readNarrow":{"type":"boolean","default":false,"description":"Claude Code only: a Read of a 400+ line file comes back as the fifth the request needs"},"routeRisky":{"type":"number","default":0.7,"description":"At this probability a risky request routes deep with at least high effort (0-1)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev calls, denies and route in the OMP status area"},"stuckCheck":{"type":"boolean","default":true,"description":"After repeated failed calls, ask Jev whether the agent is stuck on one approach and tell it to change course"},"trimOutput":{"type":"boolean","default":true,"description":"Cut a long shell output to the parts your request needs, Jev rating each part"},"autoApprove":{"type":"boolean","default":true,"description":"Where the host would ask you, run a command or in-repo edit Jev is sure is safe instead"},"autoCompact":{"type":"boolean","default":true,"description":"Compact after Jev sees a task change at a natural boundary"},"doneClaimed":{"type":"number","default":0.7,"description":"Check only when Jev says completion was claimed at least this probably (0-1)"},"fastCompact":{"type":"boolean","default":true,"description":"Compact in about a second: Jev keeps the messages that still matter, verbatim, instead of a model writing a summary"},"maskSecrets":{"type":"boolean","default":true,"description":"Replace keys, tokens, credentials in URLs, emails and your home folder with markers in everything sent to Jev"},"routeEffort":{"type":"boolean","default":true,"description":"Raise or lower reasoning effort per prompt from Jev's classification"},"screenReads":{"type":"boolean","default":true,"description":"Run the injection screen on files read from outside the repo/allowPaths"},"writeSecret":{"type":"number","default":0.7,"description":"Deny when write content holds a credential at least this probably (0-1)"},"logDecisions":{"type":"boolean","default":true,"description":"Show display-only routing and lifecycle decision lines"},"routeUpgrade":{"type":"number","default":0.3,"description":"Raise effort or model tier at this confidence or above (0-1)"},"balancedModel":{"type":"string","default":"@default","description":"OMP model selector or role for the balanced tier"},"subagentCheck":{"type":"boolean","default":true,"description":"Send a vague subagent brief back once, and check a subagent's done against its own tool record"},"approveRiskMax":{"type":"number","default":0.2,"description":"Destructive, data-leaving or credential probability under which a call is approved (0-1)"},"routeDowngrade":{"type":"number","default":0.6,"description":"Lower effort or model tier at this confidence or above (0-1)"},"routeMainModel":{"type":"boolean","default":false,"description":"Also switch the main model per prompt"},"routeSubagents":{"type":"boolean","default":true,"description":"Pick the subagent model tier from the current request"},"bashDestructive":{"type":"number","default":0.7,"description":"Deny when destructive intent is at least this probable (0-1)"},"compactBoundary":{"type":"number","default":0.6,"description":"Compact when boundary probability also reaches this value (0-1)"},"compactSwitched":{"type":"number","default":0.8,"description":"Compact when task-switch probability reaches this value (0-1)"},"doneAsksUserMax":{"type":"number","default":0.5,"description":"Skip pushback when the reply asks the user at or above this probability (0-1)"},"doneVerifiedMax":{"type":"number","default":0.3,"description":"Push back when verification probability is below this value (0-1)"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the model when untrusted tool output contains instructions aimed at it"},"routeWithoutKey":{"type":"boolean","default":true,"description":"Use a host small-model classifier when available and no Jev key is configured"},"bashIrreversible":{"type":"number","default":0.6,"description":"Deny when Jev rates a command irreversible at least this confidently (0-1)"},"writeSecretsKind":{"type":"number","default":0.8,"description":"Deny when the destination is a secrets file at least this confidently (0-1)"},"approveConfidence":{"type":"number","default":0.9,"description":"How sure Jev must be that a command only reads or is reversible (0-1)"},"compactMinPercent":{"type":"number","default":40,"description":"Only compact once context usage reaches this percentage (0-100)"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"d72a82e404b29c40f3a0fffa507752ced8ab6685","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.12.0.tgz","fileCount":14,"integrity":"sha512-dqdUi32RnN4xIU6V46XjRW1j4p446SjKQmku8X98dIdYxzXiFQCM9IN2V+xbVHR/UzaNnD6sNSzKsc1gi2yJLA==","signatures":[{"sig":"MEUCICUmw27Pga/BfG85SfJHu1sfQZ1wJipR1QeKz9sP0HxRAiEArQwD3XP2pgw8i4r4xHI9MbtAmwSqCHMOXl4yNEpg+/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEwTDpoGxiGVQff6kZK7Vk7IlxeSSJnLInUL6aN/lbcBAiEAiO3IKFrnChUlU1/J2z2lVuCDYp8OekDXkN1Qlc+RJQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":222287},"type":"module","gitHead":"0af973e13cd54f4debefe4a77b2c1e9c17dbda2f","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"9725437c-ba04-48fb-bc03-69c8ccb7dbe5"}},"repository":{"url":"git+https://github.com/Novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.0","description":"Guardrails for coding agents, decided by TypeSafe's Jev: blocks destructive commands, catches prompt injection, pushes back on an unverified done and routes effort per turn. For Claude Code, pi and omp.","directories":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.12.0_1791845981237_0.009420440119499496","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"ohmyjev","version":"0.13.2","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"license":"MIT","_id":"ohmyjev@0.13.2","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"homepage":"https://ohmyjev.xyz","bugs":{"url":"https://github.com/novacon/ohmyjev/issues"},"pi":{"extensions":["./adapters/pi.ts"]},"omp":{"settings":{"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"Empty uses $TYPESAFE_API_KEY, then $OPENROUTER_API_KEY"},"browse":{"type":"boolean","default":false,"description":"Give the agent a browse tool that does a task in your Chrome. Needs uv and Chrome"},"nudges":{"type":"boolean","default":true,"description":"One-time notes: a reply that breaks your CLAUDE.md writing rules, a vague subagent brief, an agent stuck repeating one approach"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"routing":{"type":"string","default":"effort","description":"off, effort (reasoning effort and subagent model per request) or model (also switch the main model; discards the prompt cache)"},"jevTools":{"type":"boolean","default":true,"description":"Give the agent ask_jev and find_code: judgments about files and finding code without reading it into context"},"lockdown":{"type":"boolean","default":false,"description":"Block irreversible commands, writes outside the repo or holding credentials, data leaving through WebFetch or MCP, and an unverified done"},"policies":{"type":"string","default":"","description":"Rules lockdown weighs on every call, separated by ; (e.g. never touch prod; no deploys on Friday)"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Lockdown lets writes reach these too. Separated by ; (~ and $TMPDIR expand)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev's calls, denies and route under the prompt, with a dim line per decision"},"autoCompact":{"type":"boolean","default":true,"description":"Compact fast when the task changes, keeping the messages that still matter verbatim"},"trimContext":{"type":"boolean","default":true,"description":"Cut long shell output to what the request needs, and name the one skill a request needs instead of listing them all"},"githubReminders":{"type":"boolean","default":true,"description":"Ask the agent to double-check once before a push or a gh change; retrying goes through, no prompt for you"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the agent when tool output, or a file read from outside the repo, carries instructions aimed at it"}},"extensions":["./adapters/omp.ts"]},"dist":{"shasum":"76608011f078b489eb077d032ebb25ad2aefb3eb","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.13.2.tgz","fileCount":14,"integrity":"sha512-zagATOeNpNI2mo6YrxjXuc/TIpA88DknrlzFKjS9Y27+PeM+lu1ln2wHQ0707PU9WJ9pjXb4FAokhCCFShp5XQ==","signatures":[{"sig":"MEQCICSWk63jkuekCCobbrCwGWmAoFBsbd5IUWQhfo4M8sQwAiAcs0gKlpUvoSEVFaRSIMj+uRgfb38fyHEzgVGEVNM8cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICMwOPOtPDqx7pJi6FCpzgu5tvhQYwGOyjLn+Nl2wUr4AiBkMrNT8QCxz594sc5bsBTsnx3Vdcb0RXN6f7SwOtRK+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.13.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":217607},"type":"module","gitHead":"d307c399fbc4898200fb2c229c623df9a517f318","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"abad1a3c-e897-48a2-83a2-06992e31ac05"}},"repository":{"url":"git+https://github.com/novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.1","description":"Jev for coding agents: effort routing, output checks and GitHub reminders by default, with opt-in lockdown security gates.","directories":{},"_nodeVersion":"24.22.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ohmyjev_0.13.2_1793296948361_0.009312760026929823","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"pi":{"extensions":["./adapters/pi.ts"]},"_id":"ohmyjev@0.14.0","bin":{"ohmyjev":"bin/ohmyjev.mjs"},"omp":{"settings":{"apiKey":{"env":"TYPESAFE_API_KEY","type":"string","secret":true,"default":"","description":"Empty uses $TYPESAFE_API_KEY, then $OPENROUTER_API_KEY"},"browse":{"type":"boolean","default":false,"description":"Give the agent a browse tool that does a task in your Chrome. Needs uv and Chrome"},"nudges":{"type":"boolean","default":true,"description":"One-time notes: a reply that breaks your CLAUDE.md writing rules, a vague subagent brief, an agent stuck repeating one approach"},"shadow":{"type":"boolean","default":false,"description":"Run lockdown's checks but only log what they would block; /omj lists the calls. Nothing is blocked. Wins over lockdown"},"enabled":{"type":"boolean","default":true,"description":"Off lets every call through. /omj off and /omj on change it for one session"},"routing":{"type":"string","default":"effort","description":"off, effort (reasoning effort and subagent model per request) or model (also switch the main model; discards the prompt cache)"},"jevTools":{"type":"boolean","default":true,"description":"Give the agent ask_jev and find_code: judgments about files and finding code without reading it into context"},"lockdown":{"type":"boolean","default":false,"description":"Block irreversible commands, writes outside the repo or holding credentials, data leaving through WebFetch or MCP, and a done claim that a failed or missing check contradicts"},"policies":{"type":"string","default":"","description":"Rules lockdown weighs on every call, separated by ; (e.g. never touch prod; no deploys on Friday)"},"allowPaths":{"type":"string","default":"~/.claude;$TMPDIR;/tmp","description":"Lockdown lets writes reach these too. Separated by ; (~ and $TMPDIR expand)"},"statusLine":{"type":"boolean","default":true,"description":"Pin Jev's calls, denies and route under the prompt, with a dim line per decision"},"autoCompact":{"type":"boolean","default":true,"description":"Compact fast when the task changes, keeping the messages that still matter verbatim"},"trimContext":{"type":"boolean","default":true,"description":"Cut long shell output to what the request needs, and name the one skill a request needs instead of listing them all"},"githubReminders":{"type":"boolean","default":true,"description":"Ask the agent to double-check once before a push or a gh change; retrying goes through, no prompt for you"},"injectionScreen":{"type":"boolean","default":true,"description":"Warn the agent when tool output, or a file read from outside the repo, carries instructions aimed at it"}},"extensions":["./adapters/omp.ts"]},"bugs":{"url":"https://github.com/novacon/ohmyjev/issues"},"dist":{"shasum":"2d7e5ec2ef394a828ec01a1c574016942aaa7c26","tarball":"https://registry.npmjs.org/ohmyjev/-/ohmyjev-0.14.0.tgz","fileCount":15,"integrity":"sha512-237Zi+rVEwScxzAIDIHDABiYHAyWiR3cEnr/LY0mq+7Oaa7iDGGGR7QIOzNmrRpdRefP7n3YZRvwU57JB2AMlw==","signatures":[{"sig":"MEQCIATwJrmzBZ4XCTBrJsT+e1rV3059jO7khuBl08CzasXBAiBsRMoRNTtbcTtXicL+XMzpXsrFKRLhhdQCE2qi1Mma9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG0TKuQnl4P9p9Vy4lgOPEoKixC/YVT9S7l+oPIPed4tAiEA/UCxqXK5A/hYnRKROkLcN6KTvwWGGper9/gYT/awPJE="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ohmyjev@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":240546},"name":"ohmyjev","type":"module","gitHead":"fbc4ea49dc5d3e2bd9c164a5b57563739daa442e","license":"MIT","scripts":{"test":"bun test adapters && claude plugin test .","typecheck":"tsc -p . && tsc -p tsconfig.adapters.json","build:codex":"bun build codex/main.ts --target=node --format=esm --outfile=codex/ohmyjev.mjs"},"version":"0.14.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"abad1a3c-e897-48a2-83a2-06992e31ac05"}},"homepage":"https://ohmyjev.xyz","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"repository":{"url":"git+https://github.com/novacon/ohmyjev.git","type":"git"},"_npmVersion":"11.21.1","description":"Jev for coding agents: effort routing, output checks and GitHub reminders by default, with opt-in lockdown security gates.","directories":{},"maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"_nodeVersion":"24.22.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.2","typescript":"5.6.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ohmyjev_0.14.0_1793716346599_0.12711458805871956"}}},"time":{"created":"2026-10-09T03:54:37.061Z","modified":"2026-11-03T14:32:27.174Z","0.0.0-stage":"2026-10-09T03:54:37.061Z","0.2.0":"2026-10-09T03:58:45.690Z","0.3.0":"2026-10-10T06:25:41.734Z","0.3.1":"2026-10-10T16:54:29.334Z","0.3.2":"2026-10-10T16:58:33.504Z","0.4.0":"2026-10-10T17:44:40.148Z","0.5.0":"2026-10-10T17:57:50.831Z","0.5.1":"2026-10-10T18:19:29.659Z","0.5.2":"2026-10-10T18:22:57.816Z","0.6.0":"2026-10-10T18:45:11.350Z","0.6.1":"2026-10-10T19:10:28.984Z","0.7.1":"2026-10-10T22:35:19.192Z","0.8.0":"2026-10-11T22:53:24.101Z","0.9.0":"2026-10-11T23:09:49.563Z","0.9.1":"2026-10-12T00:02:04.464Z","0.9.2":"2026-10-12T00:54:31.056Z","0.10.0":"2026-10-12T19:29:33.274Z","0.11.0":"2026-10-12T19:45:04.556Z","0.11.1":"2026-10-12T22:25:07.786Z","0.12.0":"2026-10-12T22:59:41.333Z","0.13.2":"2026-10-29T18:02:28.528Z","0.14.0":"2026-11-03T14:32:26.724Z"},"bugs":{"url":"https://github.com/novacon/ohmyjev/issues"},"license":"MIT","homepage":"https://ohmyjev.xyz","keywords":["pi-package","omp","pi","claude-code","claude-code-plugin","codex","codex-plugin","jev","guardrails","ai-agent","ai-safety","llm-security","prompt-injection","coding-agent","agent-guardrails","bypass-permissions"],"repository":{"url":"git+https://github.com/novacon/ohmyjev.git","type":"git"},"description":"Jev for coding agents: effort routing, output checks and GitHub reminders by default, with opt-in lockdown security gates.","maintainers":[{"name":"novacon","email":"lord@novacon.io"}],"readme":"<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/logo-light.png\">\n    <img src=\"docs/logo.png\" alt=\"ohmyjev\" width=\"420\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://typesafe.ai\">Jev</a>, batteries included, for Claude Code, Codex, pi, and omp.<br>\n  Your coding agent, faster and safer. Safe commands skip the prompt, long output gets cut down, compaction takes a\n  second. GitHub changes get a reminder to the agent. Blocking security gates require opt-in lockdown mode.\n</p>\n\n<p align=\"center\">\n  <img alt=\"Claude Code 2.1.287+\" src=\"https://img.shields.io/badge/Claude_Code-2.1.287%2B-798186\">\n  <img alt=\"Decided by Jev\" src=\"https://img.shields.io/badge/decided_by-Jev-9d78ff\">\n  <img alt=\"Codex, pi, and omp\" src=\"https://img.shields.io/badge/also_for-Codex_·_pi_·_omp-b69cff\">\n  <a href=\"https://www.npmjs.com/package/ohmyjev\"><img alt=\"npm\" src=\"https://img.shields.io/npm/v/ohmyjev?color=9d78ff\"></a>\n  <img alt=\"MIT license\" src=\"https://img.shields.io/badge/license-MIT-798186\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ohmyjev.xyz\"><b>ohmyjev.xyz</b></a> ·\n  <a href=\"#quick-start\">Quick start</a> ·\n  <a href=\"#what-you-get\">What you get</a> ·\n  <a href=\"#install\">Install</a> ·\n  <a href=\"#using-it\">Using it</a> ·\n  <a href=\"#settings\">Settings</a> ·\n  <a href=\"#privacy\">Privacy</a> ·\n  <a href=\"#troubleshooting\">Troubleshooting</a>\n</p>\n\n---\n\nJev is TypeSafe's decision model. You send it a few typed questions and it sends back probabilities in about 160 ms,\nfor about $0.00003 a call. That's cheap enough to ask about every step your agent takes, so ohmyjev does. It runs as\nhooks inside your agent, with no server to run.\n\nNormal mode keeps the speed features and output checks, with a local reminder before recognized GitHub changes.\nEnable `lockdown` when you want OMJ to deny destructive commands, restrict writes and check data uploads.\nLockdown is off by default, including for existing installations with individual gate settings enabled.\n\n## Quick start\n\n```bash\nnpx ohmyjev install     # ohmyjev in Claude Code, Codex, omp and pi, whichever you have\nnpx ohmyjev key         # store your TypeSafe key once, for all of them\n```\n\n`install` uses each agent's own install command, and updates any that are behind. `--check` shows what it would do,\n`--uninstall` removes it. `key` opens a one-time page on your own computer; the key goes from there into the macOS\nKeychain (`secret-tool` on Linux, a file only you can read elsewhere), and the agent never sees it. On a machine with no\nbrowser, `npx ohmyjev key --tty` asks in the terminal. Restart running sessions, then `/omj` should end with\n`key: stored (ohmyjev key)`. To do it by hand instead, see [Install](#install).\n\n## Default behavior\n\n| | Normal mode, the default | Lockdown, opt in with `lockdown: true` |\n|---|---|---|\n| Commands and writes | OMJ's security gates are inactive. The agent's usual permissions still apply. | Enabled gates can deny destructive commands, writes outside allowed paths, credentials and data uploads. |\n| GitHub changes and workflow runs | A reminder asks the agent to double-check. The first call does not run; repeating the same call proceeds after review. | The configured security gates decide. |\n| Unverified \"done\" | The done-check does not push back. | The done-check can push back once per request. |\n| Routing, injection notes and auto-compaction | On by default. | On by default. |\n\nThe GitHub reminder goes to the agent. It does not require asking you for approval when the action is already\nauthorized. Recognized reads, including `gh pr view` and `gh run list`, pass through. Set `githubReminders: false`\nto disable the reminders. They work without a Jev key.\n\n### Lockdown mode\n\nFor the current session, run `/omj config lockdown on`. To keep it enabled in Claude Code, use\n`/plugin configure ohmyjev@ohmyjev`, then `/reload-plugins`. For omp:\n\n```bash\nomp plugin config set ohmyjev lockdown true\n```\n\nFor Codex, add `\"lockdown\": true` to `~/.codex/ohmyjev.json`. For pi, set `\"lockdown\": true` under `ohmyjev` in your settings.\nSet `lockdown` back to `false` to return to normal mode.\n\n**Try it in shadow first.** `shadow` runs every lockdown check and blocks nothing: each call it would have blocked is\nlogged with the reason, and `/omj` lists the last ten under `would block (shadow)`. Run `/omj config shadow on` for a day\nof normal work, read the list, and turn `lockdown` on once the list holds only calls you'd want stopped.\n\n**Code decides first.** Lockdown asks Jev only what code can't settle. `ls`, `git status` and other plain reads, and\nmoves inside the repo (`mkdir`, `touch`, `cp`, `mv`, `git mv` with relative paths, no `..`, no `-f`), pass without a Jev\ncall. The done-check reads the last check that ran this turn (tests, build, typecheck, lint): a failed one means not\ndone, a passing one with no edit after it means verified, whatever the transcript says. Jev decides only when no check\nran.\n\n## What you get\n\n### Faster\n\n| | |\n|---|---|\n| **Fast compaction** | Jev keeps the messages that still matter (your constraints, decisions, exact errors, and open work) word for word, instead of a model writing a summary. 60 messages took 336 ms with every planted constraint kept. Falls back to the normal summary if anything goes wrong. |\n| **Trim long output** | Shell output over 12,000 characters is cut to the parts your request needs, with a note naming the lines it left out. A 20,000-character test log came back as 4,600, failure included. File reads like `cat` and `sed -n` are never cut. |\n| **Skill picker** | Claude Code sends a line for every skill on every prompt. ohmyjev drops that list and loads only the one skill you need, or none. |\n| **Stuck check** | Same failure three times? The agent is told to stop, read the error, and try something else. |\n| **Router** | Picks effort and the subagent model for each request. With `routing` set to `model` it picks the main model too: it sent a flight search to Haiku, 108 s down to 44 s. |\n| **Auto-compact** | New task and the context is 40% full? It compacts and keeps your new request. |\n| **Narrow big reads** | Off by default. A `Read` of a 400+ line file comes back as the fifth you asked about, with a note on how to see the rest. |\n\n### Lockdown and output checks\n\n| | |\n|---|---|\n| **Bash gate** | In lockdown, blocks commands Jev rates irreversible (0.6) or sending your files or keys out (0.7). Normal edits, pushes, and uninstalls go through. |\n| **Say yes** | In lockdown, every gate checks whether your latest message asked for the call. \"Force push it\" works. After a block, a plain \"yes\" runs that exact command. Your `policies` and path blocks always stand. |\n| **Write gate** | In lockdown, blocks writes outside the repo or with a real key in them. Every worktree counts as the repo, and so does another repo the agent moves into. |\n| **Exfil gate** | In lockdown, blocks web and MCP calls that send your files or keys out. |\n| **Policies** | In lockdown, your own rules in plain English, checked on every call. |\n| **Injection screen** | Output that slips orders to the model where they don't belong, like a README or an error, gets a \"treat as data\" note. A prompt or transcript you're debugging doesn't. |\n| **Done-check** | In lockdown, \"Done\" with nothing tested gets pushed back once. Passing test output counts. |\n| **Subagent checks** | A vague subagent brief goes back once. A subagent's \"done\" is checked against what it actually ran. Claude Code. |\n| **Writing rules** | Your final reply is checked against the writing rules in `CLAUDE.md` and `AGENTS.md`, and rewritten once if it breaks one. Claude Code. |\n| **Secret masking** | Keys, tokens, URL credentials, emails, and your home folder become markers before anything goes to Jev. |\n| **GitHub reminders** | In normal mode, asks the agent to check the target and user intent before a GitHub change, workflow run or git push. The first call does not run; a deliberate repeat proceeds. No Jev key needed. |\n\n### Tools and commands\n\n| | |\n|---|---|\n| **`find_code`** | Finds code by what it does, even when it's named something else. Returns the file and line, or no match. |\n| **`ask_jev`** | Asks Jev about files without the model reading them. Give it a folder and it asks every file, returning the yes ones. |\n| **`browse`** | Off by default. Jev drives a headless browser click by click. A flight search took about 10 s. |\n| **`/omj`** | This session's calls, cost, and blocks. `/omj config` shows and changes settings, `/omj stats` opens a dashboard, and `/omj off` and `/omj on` switch it for the session. `/ohmyjev` works too. |\n\n### How lockdown decides\n\n```mermaid\nflowchart LR\n    A[Agent calls a tool] --> B{ohmyjev asks Jev}\n    B -- clearly risky --> C[Blocked, with the reason]\n    B -- clearly safe --> E[Tool runs]\n    B -- unsure, slow, or no key --> D[Normal permission flow] --> E\n    E --> T[Long output cut down]\n    T --> F{Gives the model orders?}\n    F -- yes --> G[Treat-as-data note]\n    F -- no --> H[Output as is]\n```\n\nIf Jev is unsure, slow, or down, the call goes through like normal. ohmyjev never adds a prompt. It only takes away the\nones a safe call didn't need. Jev can be wrong, so keep your own deny rules in `settings.json` too.\n\n## Install\n\nGitHub reminders work without a key. For Jev-backed checks, you need a [TypeSafe](https://typesafe.ai) key, or an OpenRouter key (it then calls `~typesafe/jev-latest`).\nohmyjev looks for the key in the Claude Code settings screen, then `TYPESAFE_API_KEY`, then the key `npx ohmyjev key`\nstored, then `OPENROUTER_API_KEY`.\n\n### Claude Code\n\nNeeds 2.1.287 or later.\n\n```\n/plugin install ohmyjev --marketplace Novacon/ohmyjev\n```\n\nAnswer `y` and pick a scope. Hooks start right away. From a shell instead:\n\n```bash\nclaude plugin marketplace add Novacon/ohmyjev && claude plugin install ohmyjev@ohmyjev\n```\n\n### Codex\n\n```bash\ncodex plugin marketplace add Novacon/ohmyjev && codex plugin add ohmyjev@ohmyjev\n```\n\nThen run `/hooks` once to trust ohmyjev. It needs Node. Codex hooks can't add tools or change the model, so there's no\nrouter, `/omj`, `ask_jev`, or `browse` there. Settings go in `~/.codex/ohmyjev.json`:\n\n```json\n{ \"requested\": 0.9, \"policies\": \"never touch the prod cluster\" }\n```\n\n### omp\n\n```bash\nomp plugin install ohmyjev\nomp plugin config set ohmyjev routing model     # settings\n```\n\nRestart the session after installing. The router uses omp's `@smol`, `@default`, and `@slow` roles.\n\n### pi\n\n```bash\npi install npm:ohmyjev\n```\n\nSettings go under `ohmyjev` in `~/.pi/agent/settings.json`, or `.pi/settings.json` for one project:\n\n```json\n{ \"ohmyjev\": { \"routing\": \"model\", \"lockdown\": true } }\n```\n\nRunning Claude Code inside pi through pi-claude-bridge? pi runs every tool, so pi's copy of ohmyjev checks them and the\nClaude Code copy stands down for the session: it sees pi's `OHMYJEV_PI`, registers no tools, and gates nothing. The\n`/omj` you type in pi is the one that counts.\n\n### By host\n\n| | Claude Code | Codex | omp | pi |\n|---|---|---|---|---|\n| Gates, say yes, injection screen | yes | yes | yes | yes |\n| Done-check, stuck check, trim | yes | yes | yes | yes |\n| Fast compaction | yes | no | no | yes |\n| Router | yes | no | yes | yes |\n| Skill picker, subagent checks, writing rules, read narrowing | yes | no | no | no |\n| `/omj`, `ask_jev`, `find_code`, `browse` | yes | no | yes | yes |\n\n## Using it\n\n### Before a GitHub change\n\nIn normal mode, recognized GitHub writes, workflow runs and git pushes return an agent-visible reminder once per\ndistinct call in the session. It asks the agent to check the repository, branch, target and intended effect. The call\nhas not run yet. If it is already authorized and correct, the agent repeats it to proceed. Read operations such as\n`gh pr view` and `gh run list` pass through. Set `githubReminders` to `false` to turn this off.\n\nThis is a convenience checkpoint. It recognizes common CLI commands and GitHub tools; it does not parse every shell\nprogram or alias. Lockdown mode uses the security gates instead.\n\n\n### When something gets blocked in lockdown\n\nThe agent gets the reason and a way out:\n\n```\nohmyjev blocked this: irreversible (0.95): nothing would restore what this removes or overwrites.\nDo not try to work around it with another command, another tool, a different path, or an encoding that does\nthe same thing. Tell the user what was blocked and why, and ask whether to run it anyway. If they say yes, run\nexactly this again: their reply then lets it through.\n```\n\nAnswer \"yes\" and that exact command runs. \"No\", or a yes followed by a different command, stays blocked. A write\noutside the repo names the folder and asks you to add it to `allowPaths`.\n\n### `find_code` and `ask_jev`\n\n`find_code` searches by meaning. On this repo, \"the code that stops the agent from writing outside the project\" found\nthe write gate's path check, though the code never says that. \"stripe billing webhook\" found nothing, which is right.\n\n`ask_jev` answers a question about files without the model reading them:\n\n```json\n{ \"question\": \"Does this build SQL by string concatenation?\", \"type\": \"noul\", \"folder\": \"src/db\" }\n```\n\nWith a `folder`, it asks every source file and returns only the yes ones, with the line. Files outside the repo are\nnever sent.\n\n### `browse`\n\nTurn it on with `/omj config browse on`. Give it a URL, one goal, and the words it may type:\n\n```json\n{\n  \"url\": \"https://www.google.com/travel/flights?hl=en\",\n  \"goal\": \"Find one-way flights from Zurich to London on November 20, 2026. Stop when flights show.\",\n  \"values\": [\"Zurich\", \"London\", \"Nov 20, 2026\"]\n}\n```\n\nJev picks each click and puts each value in the right field. It runs\n[browser-use/jev-ultrafast](https://github.com/browser-use/jev-ultrafast) through [uv](https://docs.astral.sh/uv), in\nits own headless browser that's signed in to nothing. Set `CHROME_PATH` to pick the browser.\n\n### `/omj`\n\n```\njev ✓23 ⛔1 ↑opus/high\ncalls 23 · errors 0 · cost $0.000966 · p50 310ms\ndenies: Bash 1\n  Bash: irreversible (0.95): nothing would restore what this removes or overwrites\nkey: env TYPESAFE_API_KEY · typesafe · jev-1.13.0\n```\n\n`/omj config` lists the settings, and `/omj config <name> <value>` changes one for the session. A `*` marks a value that differs from the default. `/omj stats` opens a dashboard of every session\nat `~/.ohmyjev/dashboard.html`. `/omj off` turns everything off for the session.\n\n### Your own rules\n\nIn lockdown, put rules in `policies`, separated by `;`, and each enabled gate checks calls against them:\n\n```\nnever touch the prod cluster; no deploys on Friday; don't edit migrations that already ran\n```\n\n### Status line\n\n```\njev ✓23 ⛔1 ↑opus/high 🗜2     calls, blocks, this turn's route, compactions\njev ⚠ down                    Jev failed in the last 5 minutes, so calls go through\njev ⚠ no key                  no key found\njev off                       turned off for this session\n```\n\nTo put it in your own statusline script, copy `jev_segment()` from\n[`extras/statusline_segment.py`](extras/statusline_segment.py). Turn the built-in one off with `statusLine`.\n\n## Settings\n\n`/omj config` lists the settings, and `/omj config <name> <value>` changes one for the session. To keep a change, use\n`/plugin configure ohmyjev@ohmyjev` then `/reload-plugins` in Claude Code, `omp plugin config set` in omp, or each\nhost's settings file. Each setting turns a whole feature on or off; thresholds, models and timeouts are fixed.\n\n| Setting | Default | What it does |\n|---|---|---|\n| `enabled` | on | Everything. `/omj on` and `off` for one session. |\n| `apiKey` | empty | Your TypeSafe key. Empty uses `$TYPESAFE_API_KEY`, then `$OPENROUTER_API_KEY`. |\n| `lockdown` | off | Blocks irreversible commands, writes outside the repo or holding credentials, data leaving through WebFetch or MCP, and a \"done\" that a failed or missing check contradicts. |\n| `shadow` | off | Runs lockdown's checks but blocks nothing; `/omj` lists what it would have blocked. Wins over `lockdown`. |\n| `allowPaths` | `~/.claude;$TMPDIR;/tmp` | In lockdown, places outside the repo it can write to. |\n| `policies` | empty | Your own rules for lockdown, separated by `;`. |\n| `injectionScreen` | on | Flags tool output, and files read from outside the repo, that give the model orders. |\n| `githubReminders` | on | Reminds the agent once before a push or a `gh` change. |\n| `nudges` | on | One-time notes: a reply that breaks your `CLAUDE.md` writing rules, a vague subagent brief, an agent stuck on one approach. |\n| `trimContext` | on | Cuts long shell output, and loads only the skill a request needs. |\n| `autoCompact` | on | Compacts fast when the task changes, keeping what still matters. |\n| `routing` | `effort` | `off`, `effort` (effort and the subagent model per request), or `model` (the main model too, which drops the prompt cache). Two rails hold whatever Jev says: a request with a risk word (prod, delete, migration, security, payment, deploy…) never goes to the cheapest tier or below medium effort, and past 50% context the main model never moves to a cheaper one. |\n| `jevTools` | on | The `ask_jev` and `find_code` tools. |\n| `browse` | off | The `browse` tool. Needs uv and Chrome. |\n| `statusLine` | on | The status under the prompt, and a dim line per decision. |\n\n## Privacy\n\nGitHub reminders run locally and make no Jev calls. With lockdown off, commands and edits are never sent to Jev.\nOther enabled output and quality checks keep their own settings.\n\nEach check sends Jev only what it needs, cut to size, with secrets masked first. With no key, nothing goes.\n\n| Check | What it sends |\n|---|---|\n| Bash gate | The command (16,000 characters), working directory, description, and your latest message. Plain reads send nothing. |\n| Write gate | The path and new content (16,000). In lockdown, writes outside the repo are blocked before anything is sent. |\n| Exfil gate | The tool name and input (4,000). |\n| Injection screen | The tool output (6,000). |\n| Done-check | The request, five earlier ones, this turn's tool calls with the end of each output, and the last reply. |\n| Trim, stuck check | Your latest message, plus the long output or the last six failed calls. |\n| Fast compaction | Recent messages in groups of 10, each cut to 1,200 characters. |\n| Skill picker | Each prompt with every skill's name and one-line description. |\n| Writing rules | Each final reply (6,000). The rules are pulled from your instruction files once, by Haiku inside Claude Code. |\n| Router | The request (1,500). |\n| `ask_jev`, `find_code` | The question and repo files. Never files outside the repo. |\n| `browse` | The goal, then each page's controls and visible text. |\n\nLogs stay in `~/.ohmyjev`, readable only by you. They hold verdicts, probabilities, latency, and cost, never your\ncommands' output. In shadow, an entry for a call lockdown would have blocked also holds that call (600 characters), so\n`/omj` can show it; it never leaves your machine.\n\n## Update or remove\n\n`npx ohmyjev install` updates every agent that is behind; `npx ohmyjev install --uninstall` removes it from all of\nthem. One at a time:\n\n```bash\nclaude plugin update ohmyjev@ohmyjev       # then restart; or: claude plugin uninstall ohmyjev@ohmyjev\ncodex plugin marketplace upgrade ohmyjev   # then trust the changed hooks in /hooks; or: codex plugin remove ohmyjev@ohmyjev\nomp plugin upgrade ohmyjev                 # or: omp plugin uninstall ohmyjev\npi update npm:ohmyjev                      # or: pi remove npm:ohmyjev\n```\n\n## Troubleshooting\n\n**`jev ⚠ no key`.** Set `TYPESAFE_API_KEY` in the shell that starts your agent, or enter it with `/plugin configure\nohmyjev@ohmyjev`.\n\n**GitHub reminder.** The call has not run. The agent can check the target and existing authorization, then repeat the\nsame call to proceed. This reminder alone does not require asking you. Set `githubReminders` off to disable it.\n\n**`jev ⚠ down`.** Jev failed or took over 1.5 s in the last 5 minutes. Calls go through until it's back.\n\n**Blocked by mistake in lockdown.** Say yes and it runs. `/omj` shows why. `/omj config lockdown off` or `/omj off` for\nthe session. Local MCP tools sometimes trip the exfiltration check.\n\n**Nothing happens.** The first transcript line should start with `[ohmyjev]`. If not, run `claude --debug` to see which\nhook failed.\n\n## Develop\n\n```bash\ngit clone https://github.com/Novacon/ohmyjev && cd ohmyjev && bun install\nclaude --plugin-dir \"$PWD\"                  # or: omp -e ./adapters/omp.ts, pi -e ./adapters/pi.ts\nbun run test && bun run typecheck && claude plugin validate .\nbun tests/live.ts                           # 28 real commands against the live Jev\nbun tests/live-screen.ts                    # 11 outputs against the injection screen\n```\n\nThe decisions live in `hooks/policy.ts`, plain functions tested with tables. `hooks/ohmyjev.ts` wires them to Claude\nCode, and `adapters/` to Codex, omp, and pi.\n\n## Credits\n\nQuestion rubrics from [disler/ten-levels-of-jev](https://github.com/disler/ten-levels-of-jev). `browse` runs\n[browser-use/jev-ultrafast](https://github.com/browser-use/jev-ultrafast). `find_code`, folder sweeps, and read\nnarrowing are ported from [BorisLeMeec/jev](https://github.com/BorisLeMeec/jev). Fast compaction follows\n[0x7067/claude-jev](https://github.com/0x7067/claude-jev), subagent checks\n[austpryb/jev-hooks](https://github.com/austpryb/jev-hooks), the writing-rule check\n[vgeshel/prose-check](https://github.com/vgeshel/prose-check), and masking\n[tsetse012/jev-hook-guard](https://github.com/tsetse012/jev-hook-guard). All MIT.\n","readmeFilename":"README.md"}