Repository navigation
Operator settings are ceilings a tool argument cannot widen - #840
Merged
Merged
Conversation
verify_citations fetched cited URLs when a call passed allow_fetch: true on a server whose operator had not set IRIS_CITATION_ALLOW_FETCH=1; its domain_allowlist was merged into IRIS_CITATION_DOMAINS rather than narrowing it; and max_cost_usd / max_cost_usd_total replaced the operator's cap with any larger number. An agent's arguments can be steered by text it read, so each is now a ceiling (src/tools/operator-ceilings.ts): an argument narrows the operator's setting for one call and never widens it. When an argument asks for more, the operator's setting applies and the call goes on. The response carries an IRIS_ARGUMENT_NARROWED warning; the stored evaluation keeps the fact in provenance.narrowed, and the composer derives a sentence to the operator from it on every read, so the operator sees it even when a steered agent does not pass the warning on. verify_citations' per-call cap becomes an operator setting, IRIS_CITATION_MAX_COST_USD_TOTAL (default 1 USD, as before). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Iris gate — 1 of 2 tripped
|
| Trace | Verdict | Basis | Rules, classes or missing inputs | Evidence |
|---|---|---|---|---|
3a6d59f29d178e7c0e1db3d940b824d2 |
failed | detector_veto + risk_over_loss |
no_pii, pii_leak, credential_leak | no_pii: AWS Access Key (output 45–65) |
| Verdict basis | Traces |
|---|---|
detector_veto |
2 |
clean |
1 |
Unjudged questions: task_completed (3), tool_use_correct (3) — a trace that did not carry what a rule needs.
tests/fixtures/ci-gate/traces.ndjson · 3 evaluated · dataset release-gate: 2 in the gate · exit 1 · what the bases mean
Iris gate — 1 stored, nothing tripped
|
| Verdict basis | Traces |
|---|---|
clean |
1 |
Unjudged questions: task_completed (1), tool_use_correct (1) — a trace that did not carry what a rule needs.
tests/fixtures/ci-gate/clean.ndjson · 1 evaluated · exit 0 · what the bases mean
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
Three tool arguments could widen limits the operator set, and an agent's arguments can be steered by text it read, including text stored in Iris:
verify_citationsallow_fetch: trueIRIS_CITATION_ALLOW_FETCHunsetIRIS_CITATION_ALLOW_FETCH=1verify_citationsdomain_allowlistIRIS_CITATION_DOMAINSevaluate_with_llm_judgemax_cost_usdIRIS_LLM_JUDGE_MAX_COST_USD_PER_EVALwith any larger numberverify_citationsmax_cost_usd_totalIRIS_CITATION_MAX_COST_USD_TOTAL, a new setting (default 1 USD, as before)When an argument asks for more, the operator's setting applies and the call goes on. The response carries an
IRIS_ARGUMENT_NARROWEDwarning naming the argument and the setting that applied. The stored evaluation keeps the same fact inprovenance.narrowed, and the composer derives a sentence to the operator from it on every read, so the operator sees it even when the agent does not pass the warning on.Breaking
A caller that relied on
allow_fetch: trueto fetch now gets no fetch and the warning; the operator setsIRIS_CITATION_ALLOW_FETCH=1. Entry in CHANGELOG.md under Security.Tests
tests/unit/tools/operator-ceilings.test.ts: each ceiling, case by case, including a host that only ends with an operator entry, and an empty intersection (an empty list means "any domain" to the resolver, so it never stands for "none").tests/unit/tools/operator-ceilings-tools.test.ts: through the real tools over an in-memory MCP transport. Fetching off withallow_fetch: truefetches nothing; an added domain is never fetched; both cost arguments are held to the operator's cap before any spend; the stored row read back carries the operator sentence withconfigKeynaming the setting; an argument within the settings warns nobody.npm run preflightpassed on this commit.🤖 Generated with Claude Code