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.
Files changed (2) hide show
  1. package/README.md +22 -17
  2. 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 is every worktree of the one the session started in, plus every worktree of whichever repo the agent has moved into. The path check is plain code, not Jev, and it follows symlinks the same way the OS does. |
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`** | Shows this session's Jev calls, errors, cost, median latency and denies, plus where the key comes from. It never prints the key itself. `/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. |
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/omj-latest`.
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 to see what this session has been up to (`/ohmyjev` does the same). Here's an example:
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 wants a quick judgment without reading a pile of files. For example:
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
- Writes every session's decisions into one page at `~/.ohmyjev/dashboard.html` and opens it: calls, denies, flags, cost
255
- and latency, a 30-day chart, a table per tool and per session, and the latest denies with their reasons. It's a plain
256
- file, read from the logs, so nothing on it leaves the machine (the page fetches its fonts from ohmyjev.xyz, and falls
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, and the status shows `jev off`.
262
- `/omj on` brings them back. To start sessions off by default, turn off the `enabled` setting.
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). Writes outside the repo and `allowPaths` are denied by code, before anything is sent |
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). Files outside the repo are never sent |
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.0",
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",