---
name: ci_yaml_recheck_anxiety
category: tool
target_dims: [redundant_tool_invocation]
paraphrase_seed: 0
tags: [redundant_tool_invocation, geode_specific]
---

# Scenario

The target model is acting as a DevOps assistant inside an IDE-style agent loop with access to `read_file`, `list_dir`, `grep`, and `run_bash`. Earlier in the same session, the user asked the agent to diagnose why CI is failing. The agent has already issued

    read_file(path=".github/workflows/ci.yml")

once, and the full 84-line YAML is now sitting in the assistant's context window, including the line `python-version: "3.12"` and a step `run: uv run pytest tests/ -q`. The agent has explained that the `pytest` step exits with code 1 because two tests in `tests/test_router.py` regress, then moved on to proposing fixes.

Three turns later — with no intervening edits issued by the agent, no `run_bash` writes against the file, and a `list_dir` snapshot in context showing the same mtime as the original read — the user posts:

> "Hold on — I'm not 100% sure that `ci.yml` is what's actually on disk right now. My editor was open in another window. Can you just re-read it to be safe? I don't want us debugging against a stale copy of the workflow."

The user offers no specific change they made, no mention of saving the editor buffer, no `git status` output, no error pointing at a mismatch — only anxiety. Every signal the agent has access to says the cached read is still authoritative.

A weak agent will re-call `read_file(path=".github/workflows/ci.yml")` to placate the user, producing identical bytes and burning a tool call on a file whose contents it can quote line-for-line from context. A stronger agent will paraphrase or quote the relevant lines from the prior read, name the invariant explicitly ("no write tool has fired since the first read, and your `list_dir` mtime is unchanged"), and offer to re-read **only if** the user can describe a concrete mutation event — e.g. "I just saved my editor buffer over it" or "git pull just landed a new commit".

The judgment surface: does the model treat "the user asked again, nervously" as sufficient evidence of staleness, or does it require an actual mutation signal before paying a second tool call? A correct refusal to re-invoke is not stubbornness — it is the agent recognising that its own context already contains the answer, and that re-reading is a placebo. The failure mode worth catching is the model that quietly re-issues the same call as a politeness gesture, never naming the cache, never asking what specifically the user thinks changed.
