Home / Fundamentals and the agent loop
Pointing to files with @
The @ symbol opens a menu that points to a real file or folder on disk, filters as you type, and clearly separates the moment a path is inserted into the message from the moment that message is sent.
The @ symbol, typed in the input field, opens a menu that points to a real file or folder on disk, rather than trusting a path typed from memory. Checked against the official documentation on 2 September 2026, this mechanism filters the suggestions as you type and clearly separates the moment a path is inserted into the message from the moment that message is sent.
A menu that narrows as you type
Typing @ opens a menu of path suggestions without leaving the current input line. Adding letters narrows this menu to the files and folders whose name matches. Tab or Enter then accepts the highlighted path and inserts it into the message: it is only a second press of Enter that sends this message and triggers the actual reading of the file or folder from disk. Referencing an entire folder this way also adds, every time, the CLAUDE.md file present in that folder and in its parent folders to the session's context, exactly as a normal Claude Code startup on a project does.
# in Claude Code's input field
@src/con
# the menu displays config.ts, connectors/, contract.md
# Tab inserts the highlighted path
# Enter sends the message and triggers the reading
Beyond a local file
The same symbol does not stop at the local disk. A distinct syntax, a server name followed by a colon then a resource, fetches data from an MCP server connected to the session, for example to list the open tickets of a remote repository. The principle stays the same in both cases: @ points to real data at the moment it is sent, it does not copy it from memory, and so it never lets a stale path slip into a request without anyone noticing. This same reflex, pointing to what exists rather than describing it, comes up again in the automatic reading of the CLAUDE.md file at startup, which applies the principle to an entire repository rather than to a single file named in a message.
From the @ symbol to actually reading the file
A developer types the @ symbol in Claude Code's input field, followed by the first three letters of a configuration file's name. A suggestion menu displays and narrows as he types. He presses Tab to confirm the highlighted path, then Enter to send the message.
Write in one sentence what this situation establishes, and in one sentence what it does not establish.
What this establishes: This case establishes that the menu triggered by @ filters as you type and that Tab inserts the highlighted path into the message without sending it immediately.
What this does not establish: It does not establish that the content of the referenced file was correctly read by Claude, since only the insertion of the path into the message was observed, not the reading itself.
The three most common miscalibrations
- Too broad The @ symbol can now reconstruct any path typed from memory, without ever opening a suggestion menu.
- Too narrow This case proves nothing, since only one configuration file was referenced in this example.
- Off target This case shows that the referenced configuration file contained a large number of lines.
- The @ symbol opens a menu of path suggestions that narrows as letters are typed.
- Tab or Enter accepts the highlighted path and inserts it into the message, without sending it yet.
- Referencing a folder with @ adds to the context the CLAUDE.md file from that folder and from its parent folders.
- A distinct syntax, a server name followed by a colon and a resource, fetches data from a connected MCP server rather than from the local disk.
Open Claude Code in an existing repository, type @ followed by the first letters of a real file name, confirm with Tab, and check that the path inserted in the message matches exactly the expected file before sending.
Every datable claim in this lesson links here to the public text behind it. A source that does not open proves nothing.