Jev Guard
Risk-score every coding-agent tool call and stop dangerous actions or prompt-injected instructions.
Per-dimension scores and reasoning
Least privilege scores 2: assessment is limited to calls crossing host hooks or the ACP proxy and read-only tools are skipped, but installation modifies several user-level agent configurations and the product reads sessions, transcripts, and instruction files. User confirmation scores 2: deny/ask/allow policy, ACP permission requests, and host adaptations are covered by code tests, but hosts such as Codex and Gemini cannot provide native ask behavior and fall back to warnings. Data-flow transparency scores 3: the README identifies transmitted fields, both endpoints, local session/cache paths, credential precedence, and uncovered paths. Sensitive-data handling scores 2: the key file is mode 0600 and is not meant to reach the agent, but arbitrary sensitive tool results may be sent to third parties; requested zero retention is not proof of server-side enforcement. Dependency security scores 2: zero direct runtime dependencies and a Node floor reduce supply-chain exposure, but the optional peer dependency is unpinned and core decisions depend on a remote model/API. External effects score 2: dangerous actions can be blocked or confirmed and installation has idempotency tests; however, failure is open by default and an explicit user request can promote a medium-risk ask to allow. Rollback scores 1: reversibility informs risk classification, but no uninstall command, configuration backup, or recovery procedure is documented. Source attribution scores 2: repository, author, license, Jev, and pricing sources are identified, but publisher identity is unverified and maintenance ownership is represented only by an account.
Self-consistency scores 3: documented thresholds, host differences, context rules, injection classification, and installation behavior align closely with the supplied tests. Dependency availability scores 2: API requests have three attempts, an overall timeout, two backends, and configurable fail-closed behavior; nevertheless, default fail-open removes protection during outages and the service remains externally dependent. Failure messages score 3: deny, ask, injection, instruction-file findings, HTTP failures, and timeouts have explicit messages or exit semantics with corresponding static tests; this does not imply the tests were executed in this review.
Audience and scenarios score 3: eight agent/protocol families, CI checks, skill scanning, GUI hosts, and varied risk cases receive specific coverage. Capability boundaries score 3: the product explicitly says it is a guardrail rather than a sandbox, sees only routed paths, can be wrong, and should coexist with other controls. Trigger precision scores 2: tiered thresholds, user-request and untrusted-source context, discussion exemptions, and extensive tests are present, but results under 200 characters, local edit/search results, and configured skip lists create blind spots, while probabilistic thresholds retain false-positive and false-negative risk. Environment fit scores 3: host-specific response dialects, absolute Node paths, GUI credential loading, ACP operation, and extensive environment tuning are concretely addressed and statically tested.
Information architecture scores 3: installation, decisions, tuning, CLI, development, security, and source layout are clearly organized. Install notes score 3: every host receives commands, behavior differences, credential guidance, and a generic CLI path. Naming stability scores 2: commands and environment variables are systematic, but the project is at version 0.3.1 and package description coverage lags the broader README host list, suggesting continued interface evolution. Examples and FAQ score 3: dangerous-call examples, ACP configuration, CI uses, threshold tables, and calibration cases cover common questions despite no standalone FAQ. Known limitations score 3: fail-open behavior, hook bypasses, ACP visibility, short-result skipping, and non-sandbox status are explicit. License scores 3: MIT package metadata and the full license agree. Versioning and changelog score 1: a package version exists, but no changelog, release history, or upgrade compatibility guidance is supplied. Maintenance responsibility scores 2: author, issue tracker, and private security-reporting route are given, but there is no named maintenance team, response target, or support policy, and publisher identity remains unknown.
Output usability scores 3: decisions are translated into host-consumable deny, ask, warning, flag, exception, and exit-code forms with reasons and probability details. Marginal value scores 3: one cross-host policy combines pre-action risk assessment, result injection detection, session context, and instruction-file scanning, providing a clear addition to native controls. Cost-benefit scores 2: pricing, latency, and caching are quantified and zero direct dependencies simplify deployment; deductions reflect the small 21-call timing sample, reliance on external performance and price claims, network latency, privacy exposure, and the protection gap created by default fail-open behavior.
Claim traceability scores 2: core policy maps to named source modules, variables, thresholds, and tests, while external pricing and privacy assertions identify sources; however, the core implementation files, host manifests, and raw calibration records are not included in the supplied evidence. Cross-source corroboration scores 2: README, SECURITY, package metadata, LICENSE, and broad tests mutually support thresholds, installation, key permissions, and host dialects, but live API performance, the 662-skill scan, and end-to-end outcomes remain repository-authored claims without independent support here. Fact-inference separation scores 2: the documentation often labels claimed, measured, tested, and limited behavior, but promotional statements such as calling the design an exact equivalent or imperceptibly fast are mixed with evidence, and static test code is presented alongside assertions of actual passing and live measurement.
- The default is fail-open: if Jev is unreachable or times out, the call may proceed with only a warning. High-risk environments should assess the availability impact of JEV_GUARD_FAIL_CLOSED=1.
- Tool names, arguments, working directories, and tool results are sent to TypeSafe or Vercel endpoints; sensitive repositories may therefore disclose source, logs, credentials, or personal data to a third party.
- Coverage depends on host hook semantics. Built-in network access, unrouted tool paths, results shorter than 200 characters, some local-tool results, and explicit skip lists can evade assessment.
- Some hosts cannot genuinely pause for confirmation and provide only a warning. Enforcement behavior should be validated separately for every deployed host.
- No uninstall or configuration-restoration procedure is supplied; back up user-level agent configurations before installation.
- This review did not execute code, tests, or network checks. Live API behavior, external privacy commitments, pricing, latency, and end-to-end compatibility require independent verification.
What does this agent do, and when should you use it?
Jev Guard is a security hook that asks Jev for structured judgments before and after coding-agent tool executions. Its implementation combines the policy in src/guard.js, session context from src/context.js and src/session.js, instruction-file scanning in src/skills.js, and host-specific adapters. It classifies actions as allow, ask, or deny, while marking prompt injections and canaries in tool results as untrusted content. It supports Claude Code, Codex, Copilot CLI, Gemini CLI, Cursor, pi, OpenCode, and proxied ACP clients, although approval behavior differs by host. Deployment is through an npm package, native hooks, plugins, or an ACP proxy, and its trust boundary includes sending tool calls or results to the TypeSafe API or Vercel AI Gateway.
Before execution, src/hook.js, src/opencode.js, extensions/jev-guard.ts, or src/acp.js receives a host event and passes the tool name, arguments, working directory, and session context to src/guard.js. The guard asks Jev typed risk, approval, user_requested, and from_untrusted questions: it denies when from_untrusted reaches 0.7 or risk reaches 2.5, and normally asks when risk reaches 1.5 or approval reaches 0.75. A sufficiently clear user request can turn ask into allow, but cannot override deny. After execution, directed and kind judgments detect AI-directed injection or canary text; matched content is recorded as untrusted session context and the agent is warned not to follow it. src/skills.js separately scans skills, plugins, rules, CLAUDE.md, and AGENTS.md for exfiltration, covert execution, instruction overrides, canaries, and unrelated side effects, caching answers by content hash. The CLI exposes hook, acp, check, scan, scan-skills, install, and key commands for integration, individual assessments, content scanning, and configuration.
- A team using Claude Code, Codex, and other coding agents that wants one risk policy and session memory across hosts.
- A developer allowing an agent to run shell, Git, deployment, or database commands who wants destructive actions denied and sensitive operations approved first.
- A user whose agent reads web pages, command output, or MCP results and needs planted AI instructions and canaries identified as untrusted.
- A maintainer evaluating third-party skills, plugins, and rule files for exfiltration, covert execution, or instruction overrides before adoption.
- A security engineer using jev-guard check or jev-guard scan in CI to calibrate thresholds against organization-specific examples.
- A team using an ACP client such as Zed or JetBrains that wants a permission-checking proxy between the editor and its agent.
What are this agent's strengths and limitations?
- One core covers eight coding-agent or protocol paths with thin adapters and shared session-aware policy.
- Decisions consider both the user's recent requests and untrusted material the agent has read, distinguishing user authorization from planted instructions.
- Protection spans pre-execution decisions, post-result prompt-injection detection, and instruction-file scanning rather than shell commands alone.
- Thresholds, typed questions, and decision ordering are documented, with check, scan, and scan-skills commands for testing and calibration.
- The npm package has zero runtime dependencies, and the README estimates a typical assessment at about $0.00004.
- Core judgments depend on Jev through the external TypeSafe API or Vercel AI Gateway, requiring network access and credentials while sending tool calls or results outside the local machine.
- It is a guardrail rather than a sandbox; misconfigured hooks, tool paths that bypass the adapter, and model errors remain possible.
- Codex and Gemini hooks cannot currently produce a native ask prompt, so some risky actions become warnings rather than equivalent approval gates.
- The default is fail-open, meaning an unavailable Jev service permits execution after a warning unless JEV_GUARD_FAIL_CLOSED is set.
- Results under 200 characters and results from local edit or search tools are skipped, while the ACP proxy sees only operations crossing the protocol.
- Live end-to-end verification is reported for Claude Code and OpenCode; Codex, Copilot CLI, Gemini CLI, and Cursor are tested primarily against their documented payload formats.
How do you install or deploy this agent?
Use Node.js 20.3 or newer and obtain a TypeSafe console key, a vck_… Vercel AI Gateway key, or a valid VERCEL_OIDC_TOKEN. A generic installation is:
npm i -g jev-guard
jev-guard key "your-key"
jev-guard install claudeThe final argument may be codex, copilot, gemini, cursor, pi, or opencode instead. Native paths include /plugin marketplace add leepokai/jev-guard followed by /plugin install jev-guard@jev-guard in Claude Code; codex plugin marketplace add leepokai/jev-guard, installation from the plugin browser, and /hooks to grant trust in Codex; gemini extensions install https://github.com/leepokai/jev-guard for Gemini CLI; pi install npm:jev-guard for pi; and "plugin": ["jev-guard"] in opencode.json for OpenCode 0.2.1 or newer. jev-guard key stores the credential in ~/.jev-guard/config.json with mode 0600 by default.
How do you use this agent?
Start with a single assessment:
jev-guard check Bash '{"command":"rm -rf ~/"}'Exit codes 0, 1, and 2 mean allow, ask, and deny. Run jev-guard scan path/to/file to inspect content, or jev-guard scan-skills to sweep installed skills, plugins, rules, and project instruction files. Hosts invoke jev-guard hook [--agent codex|copilot] as a JSON stdin/stdout hook; an ACP deployment starts with jev-guard acp -- <agent command...>. Tune policy with variables such as JEV_GUARD_DENY_SCORE, JEV_GUARD_ASK_SCORE, JEV_GUARD_ASK_P, JEV_GUARD_INJECT_P, JEV_GUARD_UNTRUSTED_P, and JEV_GUARD_USER_P. API failures warn and allow by default; set JEV_GUARD_FAIL_CLOSED to deny instead.
How does this agent compare with similar options?
Claude Code auto mode uses a separate classifier model to review actions. Jev Guard implements a comparable allow, ask, and deny flow through typed Jev questions such as risk, user_requested, and from_untrusted. Its distinguishing scope is the same policy across Codex, Copilot CLI, Gemini CLI, Cursor, pi, OpenCode, and ACP, while also serving as a second opinion inside Claude Code. The tradeoff is dependence on the external Jev service and weaker ask behavior on hosts whose hook APIs cannot request approval.