Skip to content

Course · Cursor · Context · @-tag & self-gathering

Pointing with @: the attach menu

In the Agent chat (Cursor’s chat pane), typing @ opens a menu of things you can attach to the prompt - material pulled into the context window for the agent to look at while it works. That’s one half of a two-character grammar: @ attaches context, / invokes an action. (Skills - packaged procedures, invocable by typing / in Agent chat - are the clearest /-as-action case; skills docs.) This page owns the inventory: every @-mention target, current as of September 2026; the extending chapter and the daily-edit-loop lesson cover the / side.

The menu has churned, and older tutorials will steer you wrong. Cursor 2.0 removed several items - @Web, @Definitions, @Link, @Recent Changes, @Linter Errors - on the logic that the agent self-gathers that material now (2.0 changelog); the by-name symbol attach @Code went the same way around 2.0 (forum discussion); and @Docs, which let you index a library’s documentation and attach pages from it, was sunset in Cursor 3.14.2 (August 2026). Cursor’s stated reasoning is that the agent locates and reads documentation well enough on its own; the suggested replacements are pasting a link into your prompt, keeping a local copy of the docs in your workspace, or encoding the guidance as a rule (a standing instruction) or skill (sunset thread). What’s left is the current menu (mentions docs):

  • @Files & Folders - attach a specific file, or a directory (the docs’ own examples are @auth.ts or @src/components/; after selecting a folder you can type / to navigate deeper). A file puts that file in front of the agent - the most precise tool you have, for the moment you know exactly which file matters. A folder points the agent at a subtree - your “this feature lives somewhere in apps/worker/” move on budgetcli, the course’s illustrative TypeScript personal-finance API (this chapter pictures it as a monorepo; apps/worker/ and the other paths here illustrate that layout and are not files in a shipped repo). Files and folders share one menu entry; there is no separate top-level @File vs. @Folder.
  • @Terminals - include terminal output as context: the stack trace sitting in your panel from the failed run, without copy-pasting it into the prompt.
  • @Chats - reference context from a previous conversation, so findings from an earlier investigation can inform a new one without re-deriving them.
  • @Commit (Diff of Working State) / @Branch (Diff with Main) - attach git diffs: your uncommitted changes, or your full branch’s diff against main. This is “look at what changed” rather than “look at these files” - the right attach when the question is about a change itself, like reviewing or bisecting your own work.
  • @Browser - attach context from Cursor’s built-in browser: the docs page or error screen you were just reading.
  • @<rule-name> - attach a manual rule on demand. Rules are standing instructions; of the four types the docs define (Always Apply, Apply Intelligently, Apply to Specific Files, Apply Manually), an Apply Manually rule sits dormant until you @-mention it by name in chat - the docs’ example is @my-rule. This is the one target documented on the rules page rather than the mentions page, and it’s the overlap with the rules system the rules chapter covers. (source)

A worked example on budgetcli. You’ve decided the date-parsing bug lives in how the worker normalizes an incoming transaction’s posting date, and you know which documentation the fix turns on (illustrative exchange, not a captured run):

> the worker stores some transaction dates as the wrong year. fix the
normalizer. @apps/worker/src/normalize.ts
reference: https://date-fns.org/docs/parse - we feed it full ISO
timestamps and suspect the format string
• Reading apps/worker/src/normalize.ts
• Reading the linked date-fns docs: parse, parseISO
normalize.ts calls parse() with the format string 'yyyy' but feeds
it a full ISO timestamp. parse() can't consume that input and returns
an Invalid Date, and the normalizer's error path stamps anything it
couldn't parse with new Date() - so bad rows land on the current
year. Switching to parseISO() for ISO inputs and reserving parse()
for the known non-ISO feeds fixes it. Here's the diff…

Two hand-pinned inputs - the exact file, the exact documentation - and the agent never had to guess where the bug lived or how date-fns behaves. The pasted link is the post-@Docs way to steer documentation: what was sunset was the separate indexed-docs menu, not the ability to point at docs at all. When you already know which file and which facts matter, telling the agent is faster and more reliable than making it search.

That whole inventory - files, folders, terminals, chats, diffs, the browser, manual rules - assumes you know what to attach. Cursor 2.0’s bigger change is that increasingly you don’t have to. Next: self-gathering and hand-pinning.