tonydzi

Context Contamination Probe — Development skill for Claude Code

Development community

Your agent CLI is loading instruction files you did not put in the prompt.

How to install Context Contamination Probe

This entry records only its repository, not the path inside it, so there is no exact command to give. Open tonydzi/context-contamination-probe and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Context Contamination Probe does

Your agent CLI is loading instruction files you did not put in the prompt. Ask each runtime what else is in its context and diff the answers. Bytes on disk are an upper bound; this measures the running session. Four rails, canary mode, stdlib-only, MIT.

Alternatives in Development

  • Agentsys — This automates everything else · 14 plugins · 43 agents · 30 skills · for Claude Code, OpenCode, Codex 655 ★
  • Af Ship — Check $ARGUMENTS for flags before doing anything else 187 ★
  • Hetzner VPS Setup Guide — This file is a Claude Code setup prompt 159 ★

README

Context contamination probe

**Your agent CLI is loading files you did not put in the prompt. Ask it, and diff the answers across runtimes.**

One stdlib-only Python file. [context_probe.py](context_probe.py) has no dependencies, needs no API key, and puts no LLM in the test grid.

The symptom

You compare two agent runtimes, or two models behind two runtimes, and one of them answers with knowledge of your project, your conventions, or you. Nothing in your prompt said any of that.

Agent CLIs load instruction files implicitly. Each vendor does it differently, and the differences do not cancel out, as our own 2026 measurement below shows:

runtime what it picks up on its own off switch
Claude Code CLAUDE.md, MEMORY.md, the bundled skill list yes, env vars
OpenAI Codex CLI AGENTS.md, walking up from the working directory, plus $CODEX_HOME/AGENTS.md partly: isolate CODEX_HOME, work outside $HOME
xAI Grok CLI its global config directory no flag for it
Google Gemini CLI its own scaffolding only n/a

On the machine this was built on, `~/AGENTS.md` is **145,418 bytes**. In our own 2026 measurement, every Codex run started from anywhere under the home directory inherited all of it. The other three runtimes inherited none of it, which is the asymmetry [context_probe.py](context_probe.py) measures. Any A/B between them was measuring the layers, not the models — the failure mode that produced [persona-portability-benchmark](https://github.com/tonydzi/persona-portability-benchmark).

Why bytes on disk are not the answer

The usual instinct is to measure the files: sum the sizes, set a budget, watch the number, and [context_probe.py](context_probe.py) deliberately does none of that. That gives you an **upper bound**, not a fact. It cannot tell you which layers a given runtime actually admitted into the window for a given working directory, after hierarchical lookups, imports, path-scoped rules and