Codex has several ways to get external or visual context, and they are not interchangeable. Web search brings current public information, image input adds a screenshot or diagram, browser and computer use give navigation and interface control. Each has its own purpose and, more importantly, its own trust boundary. Confusing them means either underestimating the risk or expecting from one mechanism what a completely different one gives. First it is worth understanding what each of them actually opens.
Web search is sensibly understood through the mode, not just through the fact that "the agent went online". By default the local web search uses cached mode, and the --search flag switches to live for a specific run. The difference is practical: cached relies on an index, live goes for fresh data. But common to both is that the results are untrusted: a web page may contain instructions, and its content is treated as data, not a command, even when it looks authoritative.
A key misconception around web search is worth dispelling at once. Enabling web search is not equal to giving network access to tests or the package manager. These are different planes: the agent may search the web, but that does not mean the commands it spawns got the right to go to the network. The sandbox over the network stays a separate control. Confusing these two things means deciding that "since search works, npm install will reach the network too", which is wrong.
Image input embeds visual context directly into the model's context. The codex --image command adds a file to the request - an error screenshot, a diagram, a visual reference - and this is handy for tasks where text does not convey the essence: a mismatch between UI and code, a strange layout, an unreadable chart. But it matters to remember: the file becomes part of the model's context, so nothing extra should get into it - sensitive data in the screenshot or something you would not want to send.
It helps to see these ways side by side as commands once. Below are live web search for one run and passing an image into the initial prompt. You return to this form when deciding what external context is needed: fresh public data - --search, a visual reference - --image. The choice of the way is a choice of both the type of context and the trust boundary tied to it, not just a convenient flag enabled without looking.
Browser and computer use extend the surface to web pages and the GUI - and at the same time the risk surface. They let the agent navigate, fill forms, control approved apps via screenshots and actions. This is powerful, but a web page and someone's interface are untrusted input, and GUI actions have real consequences. Rights to a site and an app are granted explicitly and narrowly, and the work can always be stopped: the wider the surface, the stricter the boundary around it must be.
It helps to gather the ways into a table by purpose and key boundary once. Below is such a map: web search, image input, browser, computer use. You return to it when choosing a mechanism for a task and assessing what it opens. The common principle for all is that external and visual content is untrusted, and extending capabilities does not transfer boundaries automatically: each mechanism opens its own, and they must be added up consciously rather than assuming one permission enabled everything.
The typical failures around external context are predictable. Deciding that enabled web search gave network access to tests and the package manager. Sending into image input a screenshot with sensitive data without thinking it will enter the context. Taking a web page's content for a command instead of data. And opening browser or computer use in a mixed-trust task where a password manager or a production console is nearby. Tell the planes of access apart, keep external content untrusted and grant rights to a site and the GUI narrowly.
| Way | Purpose | Key boundary |
|---|---|---|
| Web search | Current public information | Cached/live; results untrusted |
| Image input | Screenshot, diagram, reference | The file enters the model's context |
| Browser | Navigation and forms | A web page is untrusted input |
| Computer use | Control of an approved GUI | Real actions; rights narrow, can be stopped |
# Live web search for one run (default - cached)
codex --search
# An image in the initial prompt
codex --image ./error.png "Find the cause of the UI-code mismatch"
# web search != network access for tests or the package manager (different planes)