Skip to content

Optional Jev advice

Jev is a TypeSafe-hosted typed decision aid. It is disabled by default and never approves a PRD, satisfies a proof, executes a command, or selects your planner/model. Ordinary Anvil commands keep working without it.

Start with the switch

anvil jev status
anvil jev enable evidence_triage --allow-api
anvil jev evaluate evidence_triage --input selected-evidence.json --allow-export
anvil jev disable

The enable command updates the existing resolved project configuration, not your repository or provider choice. --allow-api explicitly grants the existing llm_allow_api permission; it does not enable planner fallback. Each evaluation separately requires permission to export that selected input. anvil jev disable evidence_triage removes only that capability; omitting the name stops all new Jev requests. --no-jev disables a single evaluation/audit.

Provide TYPESAFE_API_KEY through the trusted CLI/service process environment or a protected .env file. When an enabled, export-authorized Jev call needs the default key, Anvil uses a non-empty process value first, then exactly the selected project's .env, then ~/.env; it never searches parent directories or sources/evaluates either file. It accepts one literal TYPESAFE_API_KEY= or export TYPESAFE_API_KEY= assignment with an ordinary quoted or unquoted value. Duplicate or malformed selected assignments, symlinks, non-regular files, and invalid UTF-8 fail closed without reporting file contents. Custom api_key_env names remain process-environment only. Never put a key in a request JSON, command argument, PRD, or tracked config. With Jev disabled, no key-file lookup or provider request occurs.

The jev settings block is loaded with normal project-over-global precedence; the project block replaces the global block, rather than merging capability lists. Supported fields are enabled, capabilities, pinned model, api_key_env, and timeout_seconds. The default model is jev-1.13.0; moving aliases are refused. Existing configs without the block remain disabled. Enable/disable preserves other setting values and uses verified atomic publication with recoverable displaced config files. Comments may be normalized by YAML serialization.

Choose a bounded question

selected-evidence.json can contain:

{
  "claim": "The authenticated routed request returned the expected document.",
  "observation": "The backend process started. No routed response was recorded."
}

The result may identify insufficient semantic support. It does not establish whether the observation really happened. Actual proof verification remains the existing Anvil claim-bound artifact and review process.

Capability Exact input fields Returned judgment
prd_review criteria: [{id, text}] Separate success Score and failure Noul per criterion
evidence_triage claim, observation relation: supports, contradicts, insufficient
proof_contracts claim Suggested missing observation category, or abstention
skill_suggestion intent, candidates: [{id, description}] selection: an eligible ID or none
context_ranking intent, candidates: [{id, text}] Relevance Score per optional candidate
incident_triage observation Closed diagnostic category, including unknown
voice_intent text Closed intent class, including unclear/unsupported

Inputs reject unknown fields, duplicate/unsafe IDs, known credential patterns, and oversized content. IDs start with a letter and contain only letters, digits, underscores, or hyphens, up to 48 characters; none is reserved. Each text is at most 4,096 characters, a PRD request has at most 16 criteria, and a candidate list at most 24 items. The complete provider request is capped at 32 KiB; overhead can make the effective content bound lower. These limits do not imply that arbitrary permitted text is safe to export.

anvil jev enable prd_review --allow-api
anvil jev assess --file draft.md --allow-export --json

assess performs local parsing and deterministic readiness assessment, then optionally sends only top-level acceptance criteria. It does not send the full PRD or automatically select task-level criteria. To assess a chosen task's criteria or more than 16 total criteria, deliberately select a bounded subset using the prd_review JSON form. Nothing rewrites the PRD or its scores.

Audit several selected items

anvil jev audit --input selected-audit.json --allow-export --json

The input is a list of 1–16 objects with exact fields id, capability, and input. Each enabled item is one bounded request, in source order, with an independent annotation. Disabled capabilities do not make a request. IDs are unique ASCII letters/digits/underscores/hyphens, up to 64 characters. The command does not discover additional files or auto-submit its results. Changes to the selected file or effective policy invalidate returned advice; a changed policy also stops the next item. Already transmitted bytes cannot be recalled. request_count retains attempted calls even when advice is stale.

Know when Jev was involved

Human output says “Jev advisory” and “not proof or approval.” JSON uses the standard Anvil envelope and data.schema: anvil.jev.annotation.v1:

  • requested: the capability was enabled and selected.
  • request_started: an HTTP attempt began, including attempts that failed.
  • used: a complete validated answer is available for this exact input.
  • status and reason: disabled, blocked, unavailable, invalid response, or completed, with a bounded explanation code.
  • provider, model, input_digest, rubric_digest, usage, and elapsed_ms: provenance and local measurements, not proof of correctness.

Choice answers contain choice, probabilities, and confidence; Score answers contain fractional score, probabilities, and confidence; Noul answers contain noul. Confidence is provider-reported, not locally calibrated. No universal confidence cutoff is installed. A timeout/error never means “no issues found.” Provider failures are advisory reports (exit zero); invalid CLI inputs/configuration exit nonzero. Consumers must inspect status and used.

Consumer boundary

anvil jev bridge --json reads one bounded stdin envelope containing jev, allow_api, allow_export, capability, and input. It is a stateless local process interface for an already trusted owner, such as Anvil Serving. It does not load project config, initialize state, authenticate browser users, or grant permission. The caller must enforce its own effective policy, authorization, input selection, stale-result checks, and timeout. Never expose a web endpoint that forwards caller-supplied permission/configuration fields into this bridge.

Serving owns its UI, transcript consent, resource access, and capability switches. Browser code never receives the TypeSafe credential. Classification cannot change the gateway route or invoke operational tools.

Limits that matter

Jev can confidently misread text or accept a fabricated observation as semantic support. Known-secret filtering is a safety net, not data-loss prevention. Do not export private logs, full histories, secret files, or unapproved customer data. Standard-service zero retention is not assumed. There are no automatic retries, redirects, fallback providers, result caches, or semantic acceptance gates.

The PRD suite records requirements, ownership, future-system boundaries, and the distinction between source delivery and live deployment. All switches remain off after installation.