Przejdź do głównej zawartości

Zarządzanie kontekstem w Cursorze

Zarządzanie kontekstem w Cursorze to wybór tego, co agent widzi, zanim napisze kod: plików, folderów, zaznaczeń kodu, zindeksowanej dokumentacji, wcześniejszych czatów i reguł, dołączanych wzmiankami @ albo znajdowanych przez samego agenta. Jeden wzorcowy plik zwykle wygrywa z długim opisem, a nadmiar załączników pogarsza wynik, zamiast go poprawiać.

Prosisz agenta o paginację w GET /api/users. Agent pisze od zera nowy helper do paginacji, pomija ten z src/utils/pagination.ts i używa offset/limit, choć projekt kilka miesięcy temu przeszedł na paginację kursorową. Model działa poprawnie. Po prostu nigdy nie zobaczył helpera i nikt mu nie powiedział, który wzorzec obowiązuje.

Ta strona jest dla programisty, który od kilku tygodni pracuje z Cursorem i chce, żeby agent trzymał się istniejących wzorców projektu, zamiast wymyślać nowe. W ścieżce szybkiego startu wypada po konfiguracji MCP w Cursorze, a przed pierwszą funkcją.

  • Tabelę rodzajów kontekstu, które przyjmuje agent Cursora, z informacją, kiedy każdy się opłaca.
  • Cztery prompty do skopiowania: wzorzec do naśladowania, granice zmiany, aktualna dokumentacja biblioteki i czyste przekazanie pracy między czatami.
  • Stałą kolejność dodawania kontekstu, dzięki której dołączasz tylko to, czego brak widać w wyniku.
  • Prompt „pokwitowania kontekstu” i trzy sprawdzenia w terminalu, które pokazują, czy agent użył właściwego kodu i nie wyszedł poza granice, bez czytania każdej linii diffu.
  • Tabelę trybów awarii z procedurą naprawczą dla każdego objawu.

Wpisz @ w polu agenta, żeby otworzyć menu kontekstu, i zawęź listę, pisząc dalej, żeby znaleźć element do dołączenia. Etykiety w menu zmieniały się między wydaniami Cursora, więc ufaj temu, co widzisz na ekranie, a nie zrzutom ekranu. Rodzaje kontekstu poniżej to te, które przenosi protokół agenta Cursora, sprawdzone w @cursor/sdk 1.0.32 w dniu 2026-09-26.

Rodzaj kontekstuCo dostaje agentKiedy po niego sięgnąć
PlikWskazany plikJeden plik zawiera dokładnie ten wzorzec, który trzeba skopiować, albo to on ma się zmienić
FolderKatalog, w którym agent pracujeAgent potrzebuje układu i nazewnictwa obszaru, a nie treści każdego pliku
Zaznaczenie koduWybrana funkcja, klasa lub blokLiczy się jedna funkcja, a plik jest długi
DokumentacjaZindeksowane źródło dokumentacjiZadanie zależy od biblioteki albo wewnętrznego API, które model zna najwyżej ze starych danych treningowych
Wcześniejszy czatPoprzednia rozmowaWracasz do pracy, której decyzje zapadły w tamtym czacie
Wyjście terminalaTerminal albo zaznaczony fragmentDowodem jest nieudany przebieg testów albo stack trace
Git i pull requestyCommity, diffy i pull requestyZadanie brzmi „dokończ, przejrzyj albo wyjaśnij tę zmianę”
RegułyWybrana regułaKonwencja ma obowiązywać w tym zapytaniu, choć jej reguła nie ładuje się automatycznie
ObrazyWklejony zrzut ekranu lub makietaBłąd UI albo projekt łatwiej pokazać niż opisać

Reguły dodają kontekst także bez wzmianki: reguła ustawiona na „zawsze” ładuje się przy każdym zapytaniu. Utrzymuj takie reguły krótkie, a resztę przenieś do reguł przypisanych do plików, jak opisują reguły projektu w Cursorze. Każdy załącznik kosztuje tokeny w każdej turze czatu; rachunek omawia zarządzanie tokenami w Cursorze.

Opis konwencji zostawia pole do interpretacji. Plik, który już się ich trzyma, nie zostawia. Porównaj dwa prompty do tego samego zadania:

Weak: Create an orders endpoint. We use Express with auth middleware,
zod for validation and our own error format.
Strong: Create POST /api/orders following @src/routes/users.ts exactly:
same middleware order, same zod validation, same AppError handling,
same response shape.

Mocny prompt daje agentowi coś do skopiowania i coś, z czym można porównać wynik. Konwencje przekrojowe psują się tak samo: poproś o obsługę błędów bez kontekstu, a agent owinie handler w try/catch i zwróci { error: "Something went wrong" }, choć w kodzie jest już klasa AppError, centralne middleware obsługi błędów i format odpowiedzi z kodami błędów. Dołącz middleware i klasę, a agent będzie rzucał AppError jak każda inna trasa.

Wzorzec wybieraj świadomie: najnowszy plik zgodny z obecną konwencją, a nie najstarszy plik w katalogu. Jeśli dwa pliki sobie przeczą, agent może pójść za dowolnym z nich.

Po wklejeniu promptu sprawdź, czy każde odwołanie @ pojawiło się jako dołączony element. Jeśli ścieżka została zwykłym tekstem, usuń ją, wpisz @ jeszcze raz i wybierz plik z menu.

Dołącz folder, gdy pytanie brzmi „gdzie to umieścić i jak to nazwać”, a nie „skopiuj tę funkcję”. Na przykład: Look at @src/components/ and add a NotificationBanner component that follows the same file layout, naming and story file as the existing components. Folder jest tańszy niż dołączenie każdego pliku z osobna, a agent sam otworzy te pliki, których potrzebuje.

Dołącz samą funkcję jako zaznaczenie kodu, gdy reszta długiego pliku to szum: Refactor calculateDiscount (attached) to support percentage and fixed-amount discounts. Keep the signature. Dołączenie całego pliku też zadziała, ale kosztuje więcej tokenów i daje agentowi więcej miejsca na błędne odczytanie.

Kiedy dołączać kontekst, a kiedy pozwolić agentowi szukać?

Dział zatytułowany „Kiedy dołączać kontekst, a kiedy pozwolić agentowi szukać?”

Agent Cursora sam przeszukuje kod, czyta pliki i uruchamia polecenia. Dołączanie kontekstu usuwa zgadywanie, ale nie jest wymagane przy każdym zapytaniu.

SytuacjaDołącz samPozwól agentowi szukać
Wiesz, który plik zawiera wzorzecTak, jeden plik—
Wiesz, który plik się zmieniTak—
Nie wiesz, gdzie jest kod—Tak, i poproś o raport z tego, co znalazł
Zadanie dotyka każdego wywołania funkcjiDołącz funkcjęNiech znajdzie wywołania
Decyzja projektowa zapadła we wcześniejszym czacieDołącz ten czat albo notatkę przekazania—
Zadanie jest szerokie i eksploracyjne—Tak, najpierw w Plan Mode

W większości prawdziwych zadań najlepiej działa podejście mieszane: dołącz plik do zmiany i regułę, która go dotyczy, a resztę niech agent znajdzie sam. Na przykład: @src/services/billing/subscription.ts Add a three-retry strategy for failed renewal payments. Search the codebase for how we already retry external calls and reuse that helper; tell me which one you picked.

Dodawaj kontekst w stałej kolejności i tylko wtedy, gdy wynik pokazuje brak

Dział zatytułowany „Dodawaj kontekst w stałej kolejności i tylko wtedy, gdy wynik pokazuje brak”

Dziesięć plików dołączonych „na wszelki wypadek” sprawia, że agent traktuje nieistotny kod z taką samą wagą jak ten jeden plik, który się liczy. Zacznij od minimum i niech każda błędna odpowiedź pokaże, czego brakowało.

  1. Samo zadanie. Opisz zadanie i warunek akceptacji („nowy test przechodzi, npm run typecheck jest czysty”). Pozwól agentowi szukać.

  2. Dodaj wzorcowy plik, jeśli wynik używa złego wzorca: jeden plik, dołączony przez @.

  3. Dodaj obowiązującą regułę, jeśli agent wciąż pomija konwencję, którą reguła już opisuje, na przykład regułę obsługi błędów.

  4. Dodaj folder, jeśli agent umieszcza pliki w złym miejscu albo źle je nazywa.

  5. Dodaj dokumentację, jeśli agent wywołuje API, którego nie ma w twojej wersji biblioteki.

  6. Zacznij nowy czat, jeśli trzecia poprawka z rzędu nie przynosi efektu. Historia zawiera już błędne próby i konkurują one z twoimi poprawkami.

Gdy któryś krok naprawi wynik na stałe, zapisz ten kontekst w regule albo we wzorcowym pliku, żeby następna osoba nie przechodziła całej drabiny od nowa.

Kontekst pozytywny mówi agentowi, co skopiować. Kontekst granic mówi, czego nie ruszać. Podaj oba i wymień pliki ze ścieżkami, żeby móc potem sprawdzić granice.

Wykluczenia w rodzaju „bez cache, bez logowania” są równie ważne jak lista plików: niejasne zadanie zachęca agenta do dodawania abstrakcji, które potem musisz przejrzeć i usunąć. Ostatnia linia też ma znaczenie. Bez niej agent, który trafi na granicę, zwykle znajduje pomysłowy sposób, żeby ją obejść, a to zmiana, którą najmniej chcesz odkryć w code review.

Modele uczą się bibliotek z danych treningowych, które nie nadążają za wersją, której używasz. W Cursorze tę lukę zamykają dwa sposoby.

  • Zindeksowana dokumentacja. Kontekst dokumentacji w Cursorze dołącza źródło, które Cursor zindeksował, w tym strony dodane przez ciebie po adresie URL. Zindeksowanymi źródłami zarządzasz w pozycji Docs w ustawieniach Cursora; jej położenie zmieniało się między wydaniami, więc wyszukaj w ustawieniach „Docs”. Używaj tego dla wewnętrznej dokumentacji API i bibliotek, z którymi pracujesz codziennie.
  • Serwer MCP Context7. Context7 pobiera na żądanie dokumentację wskazanej biblioteki w konkretnej wersji (npm @upstash/context7-mcp 4.1.1, sprawdzone 2026-09-26). Dodaj zdalny serwer do globalnego ~/.cursor/mcp.json; klucz API jest opcjonalny i należy do pliku globalnego, nigdy do repozytorium. Context7 dla agentów kodujących omawia klucze, przypinanie bibliotek i tryb skilli.
{
"mcpServers": {
"context7": { "url": "https://mcp.context7.com/mcp" }
}
}

Jeśli masz klucz, dodaj go jako nagłówek w tym samym wpisie:

"context7": {
"url": "https://mcp.context7.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}

Zastąp YOUR_API_KEY swoim kluczem Context7; plik leży w katalogu domowym, więc klucz nie trafia do repozytorium.

Odetnij agentowi dostęp do plików przez .cursorignore

Dział zatytułowany „Odetnij agentowi dostęp do plików przez .cursorignore”

Kod generowany, snapshoty, biblioteki vendorowane i duże fixture’y ściągają wyszukiwanie agenta w stronę plików, których nikt nie powinien kopiować. .cursorignore używa składni .gitignore w katalogu głównym repozytorium, a kod agenta Cursora wczytuje zarówno .gitignore, jak i .cursorignore (sprawdzone w @cursor/sdk 1.0.32, 2026-09-26), ale do trzymania plików z dala od agenta służy tylko .cursorignore. Gdy agent przeszukuje ścieżkę zablokowaną w ten sposób, narzędzie zwraca Path '…' is filtered out by .cursorignore (sprawdzone w @cursor/sdk 1.0.32). Zbuduj ten plik na podstawie rzeczywistej liczby plików w repozytorium, jak pokazuje strojenie Cursora pod duże bazy kodu.

Każda wiadomość i każdy wynik narzędzia zostają w czacie, więc długi czat niesie stare próby, ślepe zaułki i nieaktualne plany. Gdy czat zapełni okno kontekstu modelu, Cursor go kompaktuje: zastępuje historię streszczeniem, o którego treści decyduje sam. Zacznij nowy czat, gdy kończysz zadanie, przechodzisz do innego obszaru kodu albo widzisz, że agent powtarza błąd, który już poprawiłeś.

Użyteczną część możesz przenieść na dwa sposoby. Odwołanie do wcześniejszego czatu dołącza tamtą rozmowę w całości. Krótka notatka przekazania, którą piszesz sam albo zlecasz agentowi, zawiera tylko to, co wybierzesz, a przejrzysz ją w 30 sekund. Wybieraj notatkę dla wszystkiego, co musi przetrwać: decyzji, ograniczeń i następnego kroku.

Potem otwórz nowy czat i wyślij: Read @docs/handoff/notifications.md and continue with the step under Open. Usuń notatkę, gdy nowy czat przejmie pracę, chyba że zespół chce mieć takie notatki w review; nie dodawaj jej folderu do .cursorignore, bo następny czat musi ją przeczytać. Zarządzanie tokenami w Cursorze pokazuje, jak logować każdą kompakcję hookiem preCompact, żeby widzieć, które czaty trwają za długo.

Jak udowodnić, że agent użył właściwego kontekstu?

Dział zatytułowany „Jak udowodnić, że agent użył właściwego kontekstu?”

Właściwy kontekst widać w wyniku: nowy kod importuje istniejący helper, zmienia tylko pliki w granicach i przechodzi bramki jakości projektu. Wszystkie trzy rzeczy sprawdzisz bez czytania diffu linia po linii.

1. Poproś o pokwitowanie kontekstu przed kodem. Pokwitowanie zamienia niewidoczny wybór w listę, którą porównasz z oczekiwaniami.

Jeśli pokwitowanie wymienia nowy helper tam, gdzie wiesz, że istnieje już gotowy, dołącz istniejący i zapytaj ponownie. Kosztuje to jedną wiadomość; znalezienie tego w review kosztuje przepisanie.

2. Sprawdź ponowne użycie i zakres w terminalu. Gdy agent skończy, a przed commitem, uruchom sprawdzenia w tym stylu dla przykładu z paginacją. W tym zadaniu granice obejmowały src/routes/users.ts i tests/routes/users.test.ts:

Okno terminala
# Every file the agent created or changed, including new files
git status --porcelain -uall
# Files outside the fence you set in the prompt: expect no output
{ git diff --name-only HEAD; git ls-files --others --exclude-standard; } \
| grep -Ev '^(src/routes/users\.ts|tests/routes/users\.test\.ts)$'
# The route reuses the existing helper: expect one import line
rg -n "utils/pagination" src/routes/users.ts
# No second pagination helper appeared anywhere else: expect no output
rg -n "export (default )?(async )?(function|const) \w*[Pp]aginat" src --glob '!src/utils/pagination.ts'

3. Uruchom bramki, którym projekt już ufa. Testy, sprawdzanie typów i linter dowodzą zachowania; powyższe sprawdzenia dowodzą, że agent budował na właściwym kodzie. Gdy przechodzi jedno i drugie, programista, który prowadził czat, zatwierdza zmianę i wkleja pokwitowanie kontekstu do opisu pull requesta, żeby recenzent sprawdził jedną listę, zamiast odtwarzać ją od zera. Pierwsza funkcja łączy to w pełną pętlę z testami pisanymi najpierw.

Co psuje się w zarządzaniu kontekstem Cursora i jak to naprawić

Dział zatytułowany „Co psuje się w zarządzaniu kontekstem Cursora i jak to naprawić”
ObjawPrawdopodobna przyczynaNaprawa
Agent pisze nowy helper obok istniejącegoNigdy nie zobaczył istniejącegoDołącz plik helpera, poproś o pokwitowanie kontekstu i usuń duplikat, posługując się sprawdzeniem ponownego użycia
Agent stosuje przestarzały wzorzecTwój wzorcowy plik albo starszy plik, który znalazł, używa starego wzorcaDołącz najnowszy plik zgodny z obecną konwencją i wskaż stary jako „nie kopiuj”
Pliki lądują w złym kataloguAgent nie zna układu projektuDołącz docelowy folder, a jeśli zdarzy się to dwa razy, dodaj regułę przypisaną do plików
Kod wywołuje API, którego nie ma w twojej wersjiAgent oparł się na danych treningowychDodaj zindeksowaną dokumentację albo użyj Context7 i poproś o podanie strony dokumentacji dla każdego API
Kontekst dokumentacji zwraca nieaktualne stronyZindeksowane źródło jest przestarzałeUsuń źródło w pozycji Docs w ustawieniach Cursora i dodaj adres URL jeszcze raz
Wynik dodaje cache, logowanie albo warstwy, o które nikt nie prosiłZadanie nie określało zakresuDodaj jawne wykluczenia do granic i poproś o najmniejszą zmianę, która przechodzi test
Agent ignoruje dołączony plikPlik jest długi, a istotny fragment ginie w środkuDołącz jedną funkcję jako zaznaczenie kodu i podaj jej nazwę w prompcie
Wyszukiwanie zwraca Path '…' is filtered out by .cursorignoreŚcieżka pasuje do wzorca w .cursorignoreUsuń wzorzec, jeśli agent potrzebuje pliku, albo dołącz nieignorowaną kopię istotnego fragmentu
Reguła i wzorcowy plik sobie przecząDwa źródła prawdyPopraw to, które jest błędne; do tego czasu napisz w prompcie, które wygrywa
Poprawki przestają działać w długim czacieHistoria pełna starych prób albo kompakcja zgubiła twoją instrukcjęNapisz notatkę przekazania i kontynuuj w nowym czacie
Dziesięć dołączonych plików, gorszy wynikAgent przykłada wagę do nieistotnego koduOgranicz się do dwóch lub trzech plików, które się liczą, i pozwól agentowi znaleźć resztę

Używasz też Claude Code albo Codeksa? Te same zasady działają tam z inną mechaniką: zobacz system pamięci Claude Code i wzorce kontekstu w Codeksie.