Chat, Ask Mode, and @-Symbols
- Open Chat and switch between Ask and Edit modes
- Use all seven @-symbols to add the right context to any prompt
- Know when Chat is the right tool vs Agent Mode
Opening Chat
Press Cmd+L to open the Chat panel on the right side of the editor. Chat is a persistent conversation space — it remembers what you've said in the current session. Press Cmd+L again to toggle it closed.
Chat runs in two modes:
- Ask mode — The default. Ask questions about your codebase, get explanations, debug ideas. Cursor answers without changing any files. Use this for understanding unfamiliar code, exploring options before committing to an approach, or asking why something is failing.
- Edit mode — Cursor proposes file changes in response to your request. Changes appear as diffs you can accept or reject, same as Cmd+K.
You can also add the current selection to Chat with Cmd+Shift+L — this pastes the highlighted code into the chat box so you can ask about it directly.
The @-Symbol System
The @-symbol is how you add context to any Chat prompt. Type @ and Cursor shows a menu of available context types. Adding the right context is the difference between a generic answer and a precise one.
@file
Add a specific file to your prompt. Type @file, start typing the filename, and select it from the autocomplete list. The file's full contents are included in the context sent to the model.
@folder
Add an entire directory. Useful when you want Cursor to understand the structure of a module or feature area, not just one file.
@codebase
The most powerful @-symbol. Instead of you specifying which files to include, @codebase triggers a semantic search across your entire indexed project and automatically pulls in the most relevant code. Use this when you don't know which file contains what you're looking for, or when the answer involves code spread across multiple locations.
@docs
Add external library documentation. You supply a URL, Cursor fetches and indexes the docs, and they become available as context in your prompts. This is especially valuable for libraries that have changed since the model's training cutoff. Instead of Cursor guessing at the API from memory, it reads the actual current documentation.
@web
Trigger a live web search and pull the results into context. Use this for current error messages (paste the error and ask @web to find solutions), recent changelog entries, Stack Overflow answers, and anything else that might not be in your local codebase or the model's training data.
@git
Reference your git history. @git lets you add a specific commit, a diff between branches, or a PR to your prompt. Practical uses: "what changed in this commit and could it have caused this bug?", "summarise the changes between main and this branch", or "explain the intent of these last 5 commits".
Adding Images
You can paste images directly into the Chat input — screenshots, design mockups, error dialogs, diagrams. The model can read and reason about them. Useful patterns: paste a Figma screenshot and ask Cursor to implement the layout, or paste a browser error screenshot and ask for the fix.
When to Use Chat vs Agent
Chat is for questions, explanations, and targeted single-file changes. Agent is for tasks that span multiple files or require running terminal commands. A useful heuristic: if you can point at exactly which file and what to change, Chat handles it. If you'd have to explain changes across three files, that's an Agent task.
- @codebase is the most powerful @-symbol — semantic search means you don't need to know which file to look in
- @docs gives Cursor accurate knowledge of third-party libraries instead of relying on potentially outdated training data
- @git makes in-editor code review possible — ask what changed and why without leaving Cursor