Skip to content

tools: invoke_skill still blocked by utility gate — #3150 only exempted adversarial gate #3163

@bug-ops

Description

@bug-ops

Description

PR #3150 added `invoke_skill` to `AdversarialPolicyConfig::default_exempt_tools()` and `vigil::default_exempt_tools()`, but did not add it to `UtilityScoringConfig::exempt_tools`. In live sessions, when the utility scorer is active, `invoke_skill` is still blocked by the utility gate with `Retrieve` or `Respond` actions.

The utility scorer's `exempt_tools` defaults to `Vec::new()` (see `zeph-tools/src/config.rs:241`). `invoke_skill` (and `load_skill`) are not in this list, so they receive normal utility scoring and are frequently gated.

Reproduction Steps

  1. `echo "use the /help skill to list available commands" | RUST_LOG=warn cargo run --features full -- --config .local/config/testing.toml`
  2. Observe agent output

Expected Behavior

`invoke_skill` is exempt from all policy gates (adversarial, vigil, and utility). The agent calls the skill directly without being blocked.

Actual Behavior

Zeph: [tool output: invoke_skill]
[skipped] Tool call to invoke_skill skipped — utility policy recommends retrieving additional context first.

Zeph: [tool output: invoke_skill]
[skipped] Tool call to invoke_skill skipped — utility policy recommends a direct response without further tool use.

The agent ultimately cannot execute the skill and falls back to a generic text response.

Root Cause

`apply_utility_config()` in `agent_setup.rs` reads `UtilityScoringConfig::exempt_tools` which defaults to `Vec::new()`. Neither `invoke_skill` nor `load_skill` are added there.

Fix: add both `invoke_skill` and `load_skill` to `UtilityScoringConfig::default()`'s `exempt_tools` field (parallel to the existing `AdversarialPolicyConfig::default_exempt_tools()` change in #3150).

Environment

  • Version: v0.19.1 (de2a5cf)
  • Config: .local/config/testing.toml
  • Features: full

Logs / Evidence

# First attempt — utility gate returns Retrieve
[tool output: invoke_skill]
[skipped] Tool call to invoke_skill skipped — utility policy recommends retrieving additional context first.

# Second attempt (after memory_search retrieval) — utility gate returns Respond
[tool output: invoke_skill]
[skipped] Tool call to invoke_skill skipped — utility policy recommends a direct response without further tool use.

Metadata

Metadata

Assignees

Labels

P2High value, medium complexitybugSomething isn't workingskillszeph-skills crate

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions