Prune Prompt Pollution
Agent-facing documents steer by what they activate. A prohibition names the forbidden behavior and makes it more available, not less; an absence declaration spends tokens on what is not there; a stale meta-narrative teaches the agent to ignore the document itself; a strawman warning names the temptation and primes it. This skill rewrites those four patterns without weakening the constraints the document carries. It is guidance, not a script.
Scope
The skill reads prose whose job is to steer the agent's current behavior; records and human-facing text stay with their own standards.
- In scope, automatic — rules files (
AGENTS.md / CLAUDE.md), skill bodies and descriptions, prompts and visible strings, and current-state design/plan/process documents.
- In scope, on request — task and session files, which mix live guidance with process record; prune them only when asked.
- Out of scope — code, commit messages, decision records, postmortems, and player- or user-facing copy. These record history or rationale, or are read by people rather than by the model.
The keep list below is the safety valve: a load-bearing negative is restated as its consequence, never deleted.
The four patterns
- Negation priming — "don't think of an elephant", "never use X", "avoid Y". The negation is a weak modifier the strongly-activated concept overruns. Restate the positive target: "write one-line comments", "use the official seam". A prohibition stays only as a hard guardrail you cannot phrase positively; even then, pair it with the positive target so attention lands on what to do.
- Absence declarations — "there is no X", "this file does not contain Y". If the document's job is to state what is present, delete the absence line; if the absence is load-bearing (the agent must not assume X exists), state the consequence: "when X is absent, the lookup answers 503".
- Stale meta-narrative — "this doc used to say", "the old version covered", "previously we recommended". The reader needs the current rule, not its history. State the current rule; the history belongs in git log or a decision record.
- Strawman warnings — "some people think X, but we don't", "you might be tempted to Y, but don't". The warning names the temptation and primes it. State the correct pattern directly; the temptation is not the reader's problem.
Keep these
- Hard guardrails with no positive phrasing — "never store literal secrets in credentials" cannot be restated positively without losing the constraint; keep it and pair it with the positive target ("store only
apiKeyEnv references").
- Counterfactual regression pins — "without X, Y happens" states the invariant that keeps the behavior safe; keep it.
- Load-bearing absences — "this environment has no database" is a constraint the agent must honor; keep it or restate it as its consequence, never delete it.
- Suppression justifications — empty-catch explanations and ignore-reasons are required prose; fix a false reason, never delete it.
- Measured bounds — "(measured: 512 nests ≈ 0.15s)" calibrates a constant; the word "measured" is load-bearing.
Workflow
- Read the document as the agent will: what does each sentence activate?
- Classify every suspect passage: negation priming, absence declaration, stale meta-narrative, or strawman warning.
- Restate the surviving constraint as a positive target or a consequence, and delete the pollution around it.
- Verify the edit preserves every obligation, invariant, precondition, and postcondition the original carried.
Examples
| Pollution |
Restated |
"Don't use var" |
"Use const for bindings that never reassign; use let when they do." |
| "This file has no tests" |
"Coverage lives in test/; add one runnable check per non-trivial branch." |
| "The old README recommended X" |
"Use X." |
| "You might want to cache this, but don't" |
"The lookup is O(1); no cache." |
1---2name: prune-prompt-pollution3description: Use when writing or reviewing agent instructions and current-state docs — rules files (AGENTS.md/CLAUDE.md), skill bodies and descriptions, prompts, and design/plan/process docs — or on request to prune a task or session file. Restates negation priming, absence declarations, stale meta-narrative, and strawman warnings as positive targets or consequences.4---56# Prune Prompt Pollution78Agent-facing documents steer by what they activate. A prohibition names the forbidden behavior and makes it more available, not less; an absence declaration spends tokens on what is not there; a stale meta-narrative teaches the agent to ignore the document itself; a strawman warning names the temptation and primes it. This skill rewrites those four patterns without weakening the constraints the document carries. It is guidance, not a script.910## Scope1112The skill reads prose whose job is to steer the agent's current behavior; records and human-facing text stay with their own standards.1314- **In scope, automatic** — rules files (`AGENTS.md` / `CLAUDE.md`), skill bodies and descriptions, prompts and visible strings, and current-state design/plan/process documents.15- **In scope, on request** — task and session files, which mix live guidance with process record; prune them only when asked.16- **Out of scope** — code, commit messages, decision records, postmortems, and player- or user-facing copy. These record history or rationale, or are read by people rather than by the model.1718The keep list below is the safety valve: a load-bearing negative is restated as its consequence, never deleted.1920## The four patterns21221. **Negation priming** — "don't think of an elephant", "never use X", "avoid Y". The negation is a weak modifier the strongly-activated concept overruns. Restate the positive target: "write one-line comments", "use the official seam". A prohibition stays only as a hard guardrail you cannot phrase positively; even then, pair it with the positive target so attention lands on what to do.232. **Absence declarations** — "there is no X", "this file does not contain Y". If the document's job is to state what is present, delete the absence line; if the absence is load-bearing (the agent must not assume X exists), state the consequence: "when X is absent, the lookup answers 503".243. **Stale meta-narrative** — "this doc used to say", "the old version covered", "previously we recommended". The reader needs the current rule, not its history. State the current rule; the history belongs in git log or a decision record.254. **Strawman warnings** — "some people think X, but we don't", "you might be tempted to Y, but don't". The warning names the temptation and primes it. State the correct pattern directly; the temptation is not the reader's problem.2627## Keep these2829- **Hard guardrails with no positive phrasing** — "never store literal secrets in credentials" cannot be restated positively without losing the constraint; keep it and pair it with the positive target ("store only `apiKeyEnv` references").30- **Counterfactual regression pins** — "without X, Y happens" states the invariant that keeps the behavior safe; keep it.31- **Load-bearing absences** — "this environment has no database" is a constraint the agent must honor; keep it or restate it as its consequence, never delete it.32- **Suppression justifications** — empty-catch explanations and ignore-reasons are required prose; fix a false reason, never delete it.33- **Measured bounds** — "(measured: 512 nests ≈ 0.15s)" calibrates a constant; the word "measured" is load-bearing.3435## Workflow36371. Read the document as the agent will: what does each sentence activate?382. Classify every suspect passage: negation priming, absence declaration, stale meta-narrative, or strawman warning.393. Restate the surviving constraint as a positive target or a consequence, and delete the pollution around it.404. Verify the edit preserves every obligation, invariant, precondition, and postcondition the original carried.4142## Examples4344| Pollution | Restated |45|---|---|46| "Don't use `var`" | "Use `const` for bindings that never reassign; use `let` when they do." |47| "This file has no tests" | "Coverage lives in `test/`; add one runnable check per non-trivial branch." |48| "The old README recommended X" | "Use X." |49| "You might want to cache this, but don't" | "The lookup is O(1); no cache." |