ohmyjev 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ If `/omj` ends with `key: env TYPESAFE_API_KEY · typesafe · jev-1.13.0`, you'r
|
|
|
59
59
|
| Feature | What it does |
|
|
60
60
|
|---|---|
|
|
61
61
|
| **Bash gate** | Denies a command when Jev rates it irreversible at 0.6 or more, or destructive at 0.7 or more. |
|
|
62
|
-
| **Write gate** | Denies writes outside the repo and `allowPaths`, and writes that contain a real credential. The repo
|
|
62
|
+
| **Write gate** | Denies writes outside the repo and `allowPaths`, and writes that contain a real credential. The repo means every worktree of the one the session started in, and every worktree of a repo the agent has moved into. The path check is plain code, not Jev, and it follows symlinks the way the OS does. |
|
|
63
63
|
| **Exfil gate** | Denies a WebFetch or MCP call when Jev rates it 0.7 or more for sending your local data, files or credentials out. |
|
|
64
64
|
| **Policies** | Every gate also checks the call against your own rules in the `policies` setting. |
|
|
65
65
|
| **Injection screen** | When output from Bash, WebFetch, an MCP tool, or a Read outside the repo has instructions aimed at the model, it adds a note telling the model to treat that output as data. |
|
|
@@ -67,7 +67,7 @@ If `/omj` ends with `key: env TYPESAFE_API_KEY · typesafe · jev-1.13.0`, you'r
|
|
|
67
67
|
| **Router** | Asks Jev once per request for a tier, an effort level and a risk score. Then it raises or lowers effort and picks the model for general-purpose subagents. With no key it falls back to Claude Code's built-in classifier, which reports no confidence, so then it only ever routes up. |
|
|
68
68
|
| **Auto-compact** | When the task changes after a finished step and the context is at least 40% full, it compacts the conversation. The summary keeps the new request in full. |
|
|
69
69
|
| **`ask_jev`** | A tool the model can use to ask Jev about repo files or text without loading them into its own context. |
|
|
70
|
-
| **`/omj`** |
|
|
70
|
+
| **`/omj`** | This session's Jev calls, errors, cost, median latency and denies, and where the key comes from. It never prints the key. `/omj stats` opens a dashboard of every session in your browser. `/omj off` and `/omj on` switch ohmyjev for the session. `/ohmyjev` is the same command. |
|
|
71
71
|
|
|
72
72
|
### How a tool call goes through it
|
|
73
73
|
|
|
@@ -121,7 +121,7 @@ You've got three options, in the order ohmyjev looks for them:
|
|
|
121
121
|
1. **The settings screen.** During the install, ohmyjev shows a screen with its options, including the TypeSafe
|
|
122
122
|
key. Claude Code keeps it in secure storage, not in a settings file.
|
|
123
123
|
2. **`TYPESAFE_API_KEY`** in your environment, for example in `~/.zshrc`.
|
|
124
|
-
3. **`OPENROUTER_API_KEY`** in your environment. ohmyjev then calls Jev through OpenRouter as `~typesafe/
|
|
124
|
+
3. **`OPENROUTER_API_KEY`** in your environment. ohmyjev then calls Jev through OpenRouter as `~typesafe/jev-latest`.
|
|
125
125
|
|
|
126
126
|
### 4. Check it works
|
|
127
127
|
|
|
@@ -201,9 +201,13 @@ This block is final. Do not try to work around it with another command, another
|
|
|
201
201
|
or an encoding that does the same thing. Stop and tell the user what was blocked and why.
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
+
A write outside the repo gets a different message. It names the path and tells the model to ask you to add that
|
|
205
|
+
directory to `allowPaths`, because that block is a setting, not a hazard.
|
|
206
|
+
|
|
204
207
|
### `/omj`
|
|
205
208
|
|
|
206
|
-
Run it any time
|
|
209
|
+
Run it any time for this session's numbers. `/ohmyjev` is the same command, and `/omj settings` lists every setting's
|
|
210
|
+
value. An example:
|
|
207
211
|
|
|
208
212
|
```
|
|
209
213
|
jev ✓23 ⛔1 ↑opus/high
|
|
@@ -224,7 +228,7 @@ never touch the prod cluster; no deploys on Friday; don't edit migrations that a
|
|
|
224
228
|
|
|
225
229
|
### `ask_jev`
|
|
226
230
|
|
|
227
|
-
The model can call this tool on its own when it
|
|
231
|
+
The model can call this tool on its own when it needs a judgment about files without reading them. For example:
|
|
228
232
|
|
|
229
233
|
```json
|
|
230
234
|
{
|
|
@@ -249,21 +253,21 @@ said, then what the router did with it:
|
|
|
249
253
|
[ohmyjev] main loop kept opus/medium, wanted opus/low (confidence 0.38)
|
|
250
254
|
```
|
|
251
255
|
|
|
256
|
+
The last line is the router declining to act: it wanted to spend less, but 0.38 is under the 0.6 it takes to move
|
|
257
|
+
down. In a `claude -p` or SDK run the same lines arrive as `ui_log` messages and in the debug log. Turn them off with
|
|
258
|
+
`logDecisions`.
|
|
259
|
+
|
|
252
260
|
### `/omj stats`
|
|
253
261
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
file
|
|
257
|
-
back to system fonts offline
|
|
262
|
+
Builds one page from every session's log at `~/.ohmyjev/dashboard.html` and opens it in your browser. It has the
|
|
263
|
+
totals, a 30-day chart of calls and denies, a table per tool and per session, and the latest denies with their reasons.
|
|
264
|
+
It is a plain file built from the logs, so nothing on it leaves the machine. The page loads its fonts from ohmyjev.xyz
|
|
265
|
+
and falls back to system fonts offline.
|
|
258
266
|
|
|
259
267
|
### `/omj off`
|
|
260
268
|
|
|
261
|
-
Turns every gate, screen, the done-check and the router off for this session
|
|
262
|
-
`/omj on` brings them back. To start
|
|
263
|
-
|
|
264
|
-
The last line is the router declining to act: it wanted to spend less, but 0.38 is under the 0.6 it takes to move
|
|
265
|
-
down. In a `claude -p` or SDK run the same lines arrive as `ui_log` messages and in the debug log. Turn them off with
|
|
266
|
-
`logDecisions`.
|
|
269
|
+
Turns every gate, the screen, the done-check and the router off for this session. The status shows `jev off`.
|
|
270
|
+
`/omj on` brings them back. To start every session off, turn off the `enabled` setting.
|
|
267
271
|
|
|
268
272
|
### Status line
|
|
269
273
|
|
|
@@ -273,6 +277,7 @@ ohmyjev pins its status under the prompt, so there's nothing to set up:
|
|
|
273
277
|
jev ✓23 ⛔1 ↑opus/high 🗜2 Jev calls, denies, this turn's route, auto-compactions
|
|
274
278
|
jev ⚠ down Jev failed or timed out in the last 5 minutes, so the gates let calls through
|
|
275
279
|
jev ⚠ no key no key configured
|
|
280
|
+
jev off turned off with /omj off, or the enabled setting
|
|
276
281
|
```
|
|
277
282
|
|
|
278
283
|
If you'd rather have it in your own statusline script, copy `jev_segment()` from
|
|
@@ -325,12 +330,12 @@ a fixed size:
|
|
|
325
330
|
| What asks | What it sends |
|
|
326
331
|
|---|---|
|
|
327
332
|
| Bash gate | The command (up to 16000 characters), the working directory and the tool call's description |
|
|
328
|
-
| Write gate | The file path and the new content (up to 16000 characters).
|
|
333
|
+
| Write gate | The file path and the new content (up to 16000 characters). Code denies writes outside the repo and `allowPaths` before it sends anything |
|
|
329
334
|
| Exfil gate | The tool's name and its input (up to 4000 characters) |
|
|
330
335
|
| Injection screen | The tool's output (up to 6000 characters), from Bash, WebFetch, MCP tools and Reads outside the repo |
|
|
331
336
|
| Done-check | The current request (600), up to five earlier requests (200 each), up to 20 of this turn's tool calls with their input (200 each) and outcome, and Claude's last message (1500) |
|
|
332
337
|
| Router | The request (up to 1500 characters) |
|
|
333
|
-
| `ask_jev` | The model's question, any text it passes (up to 20000 characters) and the repo files it names (8000 each, 80000 in total).
|
|
338
|
+
| `ask_jev` | The model's question, any text it passes (up to 20000 characters) and the repo files it names (8000 each, 80000 in total). It never sends files outside the repo |
|
|
334
339
|
|
|
335
340
|
When you've set `policies`, every gate sends those too. Turning a feature off stops its calls.
|
|
336
341
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ohmyjev",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|