Problem
PXPipe can render static Anthropic system/configuration context into image blocks attached to the first user message because Anthropic system blocks cannot contain images.
The rendered image banner currently tells Claude to follow those user-role images as operating instructions. In real Claude Code usage this can be interpreted as apparent prompt injection / reasoning-extraction framing and cause a false refusal, even though the content originated from the legitimate request.
Expected behavior
PXPipe should preserve truthful provenance when relocating trusted configuration across modality/role boundaries:
- rendered image framing should be descriptive, not role-elevating;
- the actual system field should state that PXPipe produced those images from the request's configuration;
- Claude Code's preserved identity must remain first;
- tool schemas, request content, cache semantics, and unrelated providers must remain unchanged.
Observed validation
After applying the fix locally:
- focused Anthropic provenance/safety/cache regressions pass;
- production dependency audit passes;
- TypeScript typecheck passes;
- full test suite passes;
- build and command-entrypoint smoke checks pass;
- a freshly rebuilt/restarted PXPipe daemon works correctly with Claude without the previous false refusal.
Problem
PXPipe can render static Anthropic system/configuration context into image blocks attached to the first user message because Anthropic system blocks cannot contain images.
The rendered image banner currently tells Claude to follow those user-role images as operating instructions. In real Claude Code usage this can be interpreted as apparent prompt injection / reasoning-extraction framing and cause a false refusal, even though the content originated from the legitimate request.
Expected behavior
PXPipe should preserve truthful provenance when relocating trusted configuration across modality/role boundaries:
Observed validation
After applying the fix locally: