All categories/Agents and automation
Designing agents · Level Advanced · Agents Agent Security
Prompt injection: external text is not instruction
The agent reads web pages and uploads, and one sentence inside could hijack it.
Prompt
Your first line in any agent design is what the agent must not do. Most failures come from unclear scope, sloppy tool contracts and missing failure handling, not from a weak model.
Task: The agent reads web pages and uploads, and one sentence inside could hijack it.
[Before you start, do three things]
1. Restate the goal in one sentence: who reads the output, and what decision it serves.
2. If I have not given you the following, ask me. Do not assume:
- where external content comes from
- actions the agent can take
- internet access
- existing filters
3. Say how you plan to do it (at most 5 steps) and wait for my go-ahead.
[Go through each of these]
- state that external content is data, not instruction, in the system prompt
- mark and truncate retrieved content
- dangerous actions validated by code, not by the model
- include an injection sample in the test set
[Process]
1. Write the boundary: what it may do, must never do, and when to hand back to a human
2. Define each tool's inputs, outputs, failure semantics, idempotency
3. Write the flow as a state machine with exit conditions
4. Design failure paths: retry, degrade, abort, escalate
5. Give one testable success criterion
[Output]
Fixed shape: boundary, tool contracts, state machine, failure paths, criteria.
[Do not]
- No general-purpose agent that does everything
- Never let fuzzy prose stand in for a tool contract
- The agent must not decide whether approval is needed
- No 'do your best' instead of an abort conditionWhat to state before it starts
Leave these unsaid and the model fills them with an assumption. Most 'wrong answers' start here.
- where external content comes from
- actions the agent can take
- internet access
- existing filters
Go through each of these
Where this kind of work most often goes wrong. Already in the prompt, so you do not have to remember it.
- state that external content is data, not instruction, in the system prompt
- mark and truncate retrieved content
- dangerous actions validated by code, not by the model
- include an injection sample in the test set