Releases: jmcentire/signet-eval
Release list
v3.12.2
Antigravity permissions-adapter repair.
- Consumes Antigravity's native nested
toolCallpayload and emits native top-level allow/deny decisions. - Normalizes command, file, multi-edit, and MCP calls into Signet's existing canonical policy model.
- Makes native MCP wrapper identity authoritative, rejects spoofed identity fields, and fails closed on malformed wrappers.
- Ships an Antigravity hook configuration plus README and project-site setup documentation.
- Aligns Cargo, Kindex, MCP Registry, and Claude plugin metadata on v3.12.2.
- Passes 231 tests, formatting, lint, crate packaging, and crates.io publish dry-run verification.
v3.12.1
Durable safety-default release.
- Ships the GitHub remote-owner identity guard and embeds its check for atomic first-use installation.
- Restores hard denial of ephemeral Task* state in favor of Kindex tasks.
- Requires same-session Kindex engagement before direct edits; missing distinct host session identity fails closed.
- Reconciles current compiled built-ins over stale machine policy snapshots while preserving distinct host rules and user overrides.
- Passes 218 tests, shellcheck, release build, and crate package verification.
v3.12.0
signet-eval v3.11.1
Fixed
- Scoped preflight state to real client chat/session identifiers before falling back to SIGNET_SESSION.
- Hook evaluation now extracts session identifiers from client payloads for preflight, pause, and disable checks.
- Session-scoped preflights no longer deactivate global preflights or preflights from other sessions.
Verification
- cargo test: 156 unit, 9 CLI integration, 38 hook integration passed.
- cargo publish --dry-run passed.
- Published signet-eval 3.11.1 to crates.io.
signet-eval v3.11.0
signet-eval v3.11.0
Adds advisory INJECT rules for probabilistic behavior nudges near tool-call time, without changing deterministic authorization semantics.
Added
INJECTdecision variant evaluated in a separate post-auth pass.- Recency-weighted trigger modes:
constant,step,linear, andexponential. - Payload sources: inline
text,text_fileunder~/.signet/injections/, and HMAC-signed allowlistedfrom_commandoutput. - Template substitutions:
{tool_name},{cwd},{date},{matched_param.X}. signet-eval injectionsandsignet-eval inject-test <rule>.examples/inject_examples.yaml.
Fixed
block_rmno longer false-positives on words/paths containingrmas a substring, such asdrone_swarmorfirmware.matches(parameters, ...)now evaluates against serialized parameters, matchingcontains(parameters, ...)semantics.
Verification
cargo fmt --checkcargo test(199 tests)cargo package --allow-dirtycargo publish --dry-run --allow-dirtymcp-publisher validate server.json
v3.10.1 — fix dropped user rules; ship Task* deny default
Fixed
load_merged_policyno longer drops user rules fromrules.yamlwhen the systempolicy.yamlis missing or malformed. Previously this branch returneddefault_policy()and silently discarded every user rule, so on hosts without a per-host system policy bothsignet_testand real hook enforcement were no-op for user-installed rules. Missing/malformed system policy now falls back to the hardcoded baseline (self-protection + system defaults) and still merges user rules on top.- Three regression tests added covering missing system policy, missing system policy with self-protection preserved, and malformed system policy with user rules preserved.
Added
- New locked default rule
prefer_persistent_task_store: denies Anthropic's session-localTask*tool family (TaskCreate/TaskUpdate/TaskList/TaskGet/TaskOutput/TaskStop) and routes the agent to a persistent task store such as kindex'smcp__kindex__task_*. Ships locked so it cannot be silently overridden by an unlocking user rule.
v3.10.0
Added
- Codex hook adapter support via
--adapter codexand--adapter codex-permission. - Codex
PreToolUsedeny-only enforcement mapping andPermissionRequestallow/deny/defer mapping. - Codex hooks example at
hooks/codex-hooks.json. - Integration tests for Codex hook response shapes.
Changed
- Documentation and crate metadata now describe agent-agnostic support for Claude Code and Codex.
Verification
cargo testcargo package --allow-dirty
v3.9.0 — Session-scoped preflights, vault protection, broad-rule advisory
What's New
Vault passphrase protection (locked rule)
AI agents can no longer run signet-eval setup or signet-eval unlock. This prevents an agent from setting a vault passphrase and locking the human out — which happened in practice.
Overly broad preflight constraint advisory
Submitting a preflight constraint with tool_pattern: ".*" and no conditions is now rejected with an explanation. An agent previously locked itself out by filing a universal constraint that matched every tool call including its own MCP tools. Use force: true to bypass if genuinely needed.
Session-scoped preflights (SIGNET_SESSION)
When the SIGNET_SESSION env var is set, preflights are scoped to that session. Each Claude Code instance sees only its own preflights plus global (session_id=NULL) ones. Deactivation, lock checks, and overrides are all session-aware. Backward compatible — unset SIGNET_SESSION means identical behavior to v3.8.0.
Files changed
src/policy.rs— new locked ruleprotect_vault_passphrase(8th self-protection rule)src/vault.rs—session_idfield on Preflight, DB migration, session-filtered queriessrc/mcp_server.rs— broad-constraint advisory, session_id capture + displaysrc/main.rs— CLI preflight status shows session scope
Tests
138 tests passing (107 unit + 7 integration CLI + 24 integration hook)
v3.8.0
What's New
Added
validate --fixCLI flag — auto-fixes clampable issues (gate.within, ensure.timeout clamping) and removes broken unlocked rules; writes updated policy and re-signs if vault existsvalidate --fix --dry-run— previews what --fix would change without writing to diskstatusnow shows complete enforcement state: global disable, disabled sessions, global pause with expiry, per-rule/per-session pauses with timestampsstatusshows enforcement overrides even without a vault (file-based state is independent)
Fixed
enable(no flags) now clears both global disable AND all session disables in one invocation; previously required running twice if both existedstatusno longer returns exit code 1 when vault is not set up — enforcement info is still useful without a vault
v3.7.2 — Indefinite pause
What's new
Indefinite pause — pause 0 means "until I say resume", but only with --session:
signet-eval pause 0 --session signet --rule require_plan_before_code
# paused forever until:
signet-eval resume --rule require_plan_before_code --session signetpause 0 without --session is rejected to prevent forgotten global pauses.